update copyrights; use project-level instead of module-level libraries
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / ui / popup / util / BaseListPopupStep.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.ui.popup.util;
17
18 import com.intellij.openapi.ui.popup.ListPopupStep;
19 import com.intellij.openapi.ui.popup.ListSeparator;
20 import com.intellij.openapi.ui.popup.PopupStep;
21 import org.jetbrains.annotations.Nullable;
22 import org.jetbrains.annotations.NotNull;
23
24 import javax.swing.*;
25 import java.util.ArrayList;
26 import java.util.Arrays;
27 import java.util.List;
28
29 public class BaseListPopupStep<T> extends BaseStep<T> implements ListPopupStep<T> {
30
31   private String myTitle;
32   private List<T> myValues;
33   private List<Icon> myIcons;
34
35   private int myDefaultOptionIndex = -1;
36
37   public BaseListPopupStep(String aTitle, T[] aValues) {
38     this(aTitle, aValues, new Icon[]{});
39   }
40   public BaseListPopupStep(String aTitle, List<? extends T> aValues) {
41     this(aTitle, aValues, new ArrayList<Icon>());
42   }
43
44   public BaseListPopupStep(String aTitle, T[] aValues, Icon[] aIcons) {
45     this(aTitle, Arrays.asList(aValues), Arrays.asList(aIcons));
46   }
47
48   public BaseListPopupStep(String aTitle, @NotNull List<? extends T> aValues, Icon aSameIcon) {
49     List<Icon> icons = new ArrayList<Icon>();
50     //noinspection ForLoopReplaceableByForEach
51     for (int i = 0; i < aValues.size(); i++) {
52       icons.add(aSameIcon);
53     }
54     init(aTitle, aValues, icons);
55   }
56
57   public BaseListPopupStep(String aTitle, @NotNull List<? extends T> aValues, List<Icon> aIcons) {
58     init(aTitle, aValues, aIcons);
59   }
60
61   protected BaseListPopupStep() {
62   }
63
64   protected final void init(@Nullable String aTitle, @NotNull List<? extends T> aValues, @Nullable List<Icon> aIcons) {
65     myTitle = aTitle;
66     myValues = new ArrayList<T>(aValues);
67     myIcons = aIcons;
68   }
69
70   @Nullable
71   public final String getTitle() {
72     return myTitle;
73   }
74
75   @NotNull
76   public final List<T> getValues() {
77     return myValues;
78   }
79
80   public PopupStep onChosen(T selectedValue, final boolean finalChoice) {
81     return FINAL_CHOICE;
82   }
83
84   public Icon getIconFor(T aValue) {
85     int index = myValues.indexOf(aValue);
86     if (index != -1 && myIcons != null && index < myIcons.size()) {
87       return myIcons.get(index);
88     }
89     else {
90       return null;
91     }
92   }
93
94   @NotNull
95   public String getTextFor(T value) {
96     return value.toString();
97   }
98
99   @Nullable
100   public ListSeparator getSeparatorAbove(T value) {
101     return null;
102   }
103
104   public boolean isSelectable(T value) {
105     return true;
106   }
107
108   public boolean hasSubstep(T selectedValue) {
109     return false;
110   }
111
112   public void canceled() {
113   }
114
115   public void setDefaultOptionIndex(int aDefaultOptionIndex) {
116     myDefaultOptionIndex = aDefaultOptionIndex;
117   }
118
119   public int getDefaultOptionIndex() {
120     return myDefaultOptionIndex;
121   }
122 }