Lines 52-58
Link Here
|
52 |
import javax.swing.Icon; |
52 |
import javax.swing.Icon; |
53 |
import javax.swing.event.ChangeEvent; |
53 |
import javax.swing.event.ChangeEvent; |
54 |
import javax.swing.event.ChangeListener; |
54 |
import javax.swing.event.ChangeListener; |
55 |
import javax.swing.event.EventListenerList; |
|
|
56 |
import org.netbeans.api.project.SourceGroup; |
55 |
import org.netbeans.api.project.SourceGroup; |
57 |
import org.netbeans.api.queries.VisibilityQuery; |
56 |
import org.netbeans.api.queries.VisibilityQuery; |
58 |
import org.openide.DialogDisplayer; |
57 |
import org.openide.DialogDisplayer; |
Lines 67-72
Link Here
|
67 |
import org.openide.nodes.Node; |
66 |
import org.openide.nodes.Node; |
68 |
import org.openide.nodes.NodeNotFoundException; |
67 |
import org.openide.nodes.NodeNotFoundException; |
69 |
import org.openide.nodes.NodeOp; |
68 |
import org.openide.nodes.NodeOp; |
|
|
69 |
import org.openide.util.ChangeSupport; |
70 |
import org.openide.util.NbBundle; |
70 |
import org.openide.util.NbBundle; |
71 |
import org.openide.util.Utilities; |
71 |
import org.openide.util.Utilities; |
72 |
import org.openide.util.WeakListeners; |
72 |
import org.openide.util.WeakListeners; |
Lines 89-95
Link Here
|
89 |
} |
89 |
} |
90 |
|
90 |
|
91 |
private TreeRootNode(DataFolder folder, SourceGroup g) { |
91 |
private TreeRootNode(DataFolder folder, SourceGroup g) { |
92 |
this(new FilterNode(folder.getNodeDelegate(), folder.createNodeChildren(new VisibilityQueryDataFilter(g))), g); |
92 |
this(new FilterNode(folder.getNodeDelegate(), folder.createNodeChildren(new GroupDataFilter(g))), g); |
93 |
} |
93 |
} |
94 |
|
94 |
|
95 |
private TreeRootNode (Node originalNode, SourceGroup g) { |
95 |
private TreeRootNode (Node originalNode, SourceGroup g) { |
Lines 205-262
Link Here
|
205 |
} |
205 |
} |
206 |
} |
206 |
} |
207 |
|
207 |
|
208 |
private static final class VisibilityQueryDataFilter implements ChangeListener, PropertyChangeListener, |
208 |
private static final class GroupDataFilter implements ChangeListener, PropertyChangeListener, |
209 |
ChangeableDataFilter, DataFilter.FileBased { |
209 |
ChangeableDataFilter, DataFilter.FileBased { |
210 |
|
210 |
|
211 |
private static final long serialVersionUID = 1L; // in case a DataFolder.ClonedFilterHandle saves me |
211 |
private static final long serialVersionUID = 1L; // in case a DataFolder.ClonedFilterHandle saves me |
212 |
|
212 |
|
213 |
private final EventListenerList ell = new EventListenerList(); |
213 |
private final ChangeSupport cs = new ChangeSupport(this); |
214 |
private final SourceGroup g; |
214 |
private final SourceGroup g; |
215 |
|
215 |
|
216 |
public VisibilityQueryDataFilter(SourceGroup g) { |
216 |
public GroupDataFilter(SourceGroup g) { |
217 |
this.g = g; |
217 |
this.g = g; |
218 |
VisibilityQuery.getDefault().addChangeListener(WeakListeners.change(this, VisibilityQuery.getDefault())); |
218 |
VisibilityQuery.getDefault().addChangeListener(WeakListeners.change(this, VisibilityQuery.getDefault())); |
219 |
g.addPropertyChangeListener(WeakListeners.propertyChange(this, g)); |
219 |
g.addPropertyChangeListener(WeakListeners.propertyChange(this, g)); |
220 |
} |
220 |
} |
221 |
|
221 |
|
222 |
public boolean acceptDataObject(DataObject obj) { |
222 |
public boolean acceptDataObject(DataObject obj) { |
223 |
FileObject fo = obj.getPrimaryFile(); |
223 |
return acceptFileObject(obj.getPrimaryFile()); |
224 |
return g.contains(fo) && VisibilityQuery.getDefault().isVisible(fo); |
|
|
225 |
} |
224 |
} |
226 |
|
225 |
|
227 |
public void stateChanged(ChangeEvent e) { |
226 |
public void stateChanged(ChangeEvent e) { |
228 |
fireChange(); |
227 |
cs.fireChange(); |
229 |
} |
228 |
} |
230 |
|
229 |
|
231 |
public void propertyChange(PropertyChangeEvent e) { |
230 |
public void propertyChange(PropertyChangeEvent e) { |
232 |
if (SourceGroup.PROP_CONTAINERSHIP.equals(e.getPropertyName())) { |
231 |
if (SourceGroup.PROP_CONTAINERSHIP.equals(e.getPropertyName())) { |
233 |
fireChange(); |
232 |
cs.fireChange(); |
234 |
} |
233 |
} |
235 |
} |
234 |
} |
236 |
|
235 |
|
237 |
private void fireChange() { |
|
|
238 |
Object[] listeners = ell.getListenerList(); |
239 |
ChangeEvent event = null; |
240 |
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
241 |
if (listeners[i] == ChangeListener.class) { |
242 |
if (event == null) { |
243 |
event = new ChangeEvent(this); |
244 |
} |
245 |
((ChangeListener) listeners[i+1]).stateChanged(event); |
246 |
} |
247 |
} |
248 |
} |
249 |
|
250 |
public void addChangeListener(ChangeListener listener) { |
236 |
public void addChangeListener(ChangeListener listener) { |
251 |
ell.add(ChangeListener.class, listener); |
237 |
cs.addChangeListener(listener); |
252 |
} |
238 |
} |
253 |
|
239 |
|
254 |
public void removeChangeListener(ChangeListener listener) { |
240 |
public void removeChangeListener(ChangeListener listener) { |
255 |
ell.remove(ChangeListener.class, listener); |
241 |
cs.removeChangeListener(listener); |
256 |
} |
242 |
} |
257 |
|
243 |
|
258 |
public boolean acceptFileObject(FileObject fo) { |
244 |
public boolean acceptFileObject(FileObject fo) { |
259 |
return VisibilityQuery.getDefault().isVisible(fo); |
245 |
return g.contains(fo) && VisibilityQuery.getDefault().isVisible(fo); |
260 |
} |
246 |
} |
261 |
|
247 |
|
262 |
} |
248 |
} |