Lines 13-22
Link Here
|
13 |
|
13 |
|
14 |
package org.netbeans.spi.java.project.support.ui; |
14 |
package org.netbeans.spi.java.project.support.ui; |
15 |
|
15 |
|
|
|
16 |
import java.awt.Component; |
16 |
import java.beans.PropertyChangeEvent; |
17 |
import java.beans.PropertyChangeEvent; |
17 |
import java.beans.PropertyChangeListener; |
18 |
import java.beans.PropertyChangeListener; |
|
|
19 |
import java.util.Enumeration; |
20 |
import java.util.SortedSet; |
21 |
import java.util.TreeSet; |
22 |
import javax.swing.ComboBoxModel; |
23 |
import javax.swing.DefaultComboBoxModel; |
24 |
import javax.swing.DefaultListCellRenderer; |
25 |
import javax.swing.DefaultListModel; |
26 |
import javax.swing.Icon; |
27 |
import javax.swing.ImageIcon; |
28 |
import javax.swing.JList; |
29 |
import javax.swing.ListCellRenderer; |
18 |
import org.netbeans.api.project.SourceGroup; |
30 |
import org.netbeans.api.project.SourceGroup; |
|
|
31 |
import org.netbeans.modules.java.project.PackageDisplayUtils; |
19 |
import org.netbeans.modules.java.project.PackageViewSettings; |
32 |
import org.netbeans.modules.java.project.PackageViewSettings; |
|
|
33 |
import org.openide.filesystems.FileObject; |
34 |
import org.openide.filesystems.FileUtil; |
20 |
import org.openide.nodes.FilterNode; |
35 |
import org.openide.nodes.FilterNode; |
21 |
import org.openide.nodes.Node; |
36 |
import org.openide.nodes.Node; |
22 |
import org.openide.util.WeakListeners; |
37 |
import org.openide.util.WeakListeners; |
Lines 71-76
Link Here
|
71 |
} |
86 |
} |
72 |
|
87 |
|
73 |
/** |
88 |
/** |
|
|
89 |
* Create a list or combo box model suitable for {@link javax.swing.JList} from a source group |
90 |
* showing all Java packages in the source group. |
91 |
* To display it you will also need {@link #listRenderer}. |
92 |
* <p>No particular guarantees are made as to the nature of the model objects themselves, |
93 |
* except that {@link Object#toString} will give the fully-qualified package name |
94 |
* (or <code>""</code> for the default package), regardless of what the renderer |
95 |
* actually displays.</p> |
96 |
* @param group a Java-like source group |
97 |
* @return a model of its packages |
98 |
* @since org.netbeans.modules.java.project/1 1.3 |
99 |
*/ |
100 |
public static ComboBoxModel createListView(SourceGroup group) { |
101 |
DefaultListModel model = new DefaultListModel(); |
102 |
SortedSet/*<PackageItem>*/ items = new TreeSet(); |
103 |
FileObject root = group.getRootFolder(); |
104 |
if (PackageDisplayUtils.isSignificant(root)) { |
105 |
items.add(new PackageItem(group, root)); |
106 |
} |
107 |
Enumeration/*<FileObject>*/ files = root.getChildren(true); |
108 |
while (files.hasMoreElements()) { |
109 |
FileObject f = (FileObject) files.nextElement(); |
110 |
if (f.isFolder() && PackageDisplayUtils.isSignificant(f)) { |
111 |
items.add(new PackageItem(group, f)); |
112 |
} |
113 |
} |
114 |
return new DefaultComboBoxModel(items.toArray(new PackageItem[items.size()])); |
115 |
} |
116 |
|
117 |
/** |
118 |
* Create a renderer suited to rendering models created using {@link #createListView}. |
119 |
* The exact nature of the display is not specified. |
120 |
* Instances of String can also be rendered. |
121 |
* @return a suitable package renderer |
122 |
* @since org.netbeans.modules.java.project/1 1.3 |
123 |
*/ |
124 |
public static ListCellRenderer listRenderer() { |
125 |
return new PackageListCellRenderer(); |
126 |
} |
127 |
|
128 |
/** |
74 |
* FilterNode which listens on the PackageViewSettings and changes the view to |
129 |
* FilterNode which listens on the PackageViewSettings and changes the view to |
75 |
* the package view or tree view |
130 |
* the package view or tree view |
76 |
* |
131 |
* |
Lines 106-109
Link Here
|
106 |
} |
161 |
} |
107 |
} |
162 |
} |
108 |
} |
163 |
} |
|
|
164 |
|
165 |
/** |
166 |
* Model item representing one package. |
167 |
*/ |
168 |
private static final class PackageItem implements Comparable { |
169 |
|
170 |
private final FileObject pkg; |
171 |
private final String pkgname; |
172 |
|
173 |
public PackageItem(SourceGroup group, FileObject pkg) { |
174 |
this.pkg = pkg; |
175 |
String path = FileUtil.getRelativePath(group.getRootFolder(), pkg); |
176 |
assert path != null : "No " + pkg + " in " + group; |
177 |
pkgname = path.replace('/', '.'); |
178 |
} |
179 |
|
180 |
public String toString() { |
181 |
return pkgname; |
182 |
} |
183 |
|
184 |
public String getLabel() { |
185 |
return PackageDisplayUtils.getDisplayLabel(pkg, pkgname); |
186 |
} |
187 |
|
188 |
public Icon getIcon() { |
189 |
return new ImageIcon(PackageDisplayUtils.getIcon(pkg, pkgname)); |
190 |
} |
191 |
|
192 |
public int compareTo(Object obj) { |
193 |
return pkgname.compareTo(((PackageItem) obj).pkgname); |
194 |
} |
195 |
|
196 |
} |
197 |
|
198 |
/** |
199 |
* The renderer which just displays {@link PackageItem#getLabel} and {@link PackageItem#getIcon}. |
200 |
*/ |
201 |
private static final class PackageListCellRenderer extends DefaultListCellRenderer { |
202 |
|
203 |
public PackageListCellRenderer() {} |
204 |
|
205 |
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
206 |
if (value instanceof PackageItem) { |
207 |
PackageItem pkgitem = (PackageItem) value; |
208 |
super.getListCellRendererComponent(list, pkgitem.getLabel(), index, isSelected, cellHasFocus); |
209 |
setIcon(pkgitem.getIcon()); |
210 |
} else { |
211 |
// #49954: render a specially inserted package somehow. |
212 |
String pkgitem = (String) value; |
213 |
super.getListCellRendererComponent(list, pkgitem, index, isSelected, cellHasFocus); |
214 |
} |
215 |
return this; |
216 |
} |
217 |
|
218 |
} |
219 |
|
220 |
|
109 |
} |
221 |
} |