Index: openide/loaders/src/org/openide/loaders/FolderChildren.java =================================================================== RCS file: /cvs/openide/loaders/src/org/openide/loaders/FolderChildren.java,v retrieving revision 1.4 diff -u -r1.4 FolderChildren.java --- openide/loaders/src/org/openide/loaders/FolderChildren.java 26 May 2004 13:11:51 -0000 1.4 +++ openide/loaders/src/org/openide/loaders/FolderChildren.java 10 Jun 2004 15:59:32 -0000 @@ -15,6 +15,8 @@ import java.beans.*; import java.util.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import org.openide.ErrorManager; import org.openide.filesystems.FileObject; @@ -29,7 +31,7 @@ * @author Jaroslav Tulach */ final class FolderChildren extends Children.Keys -implements PropertyChangeListener { +implements PropertyChangeListener, ChangeListener { /** the folder */ private DataFolder folder; /** filter of objects */ @@ -95,6 +97,15 @@ return; } } + + public void stateChanged( ChangeEvent e ) { + // Filtering changed need to recompute children + //setKeys( Collections.EMPTY_SET ); + refreshRunnable.refresh = true; + refreshChildren().schedule(0); + postClearTask(); + return; + } /** * refreshRunnable holds references to the data object @@ -198,6 +209,10 @@ protected void addNotify () { // add as a listener for changes on nodes folder.addPropertyChangeListener (listener); + // add listener to the filter + if ( filter instanceof ChangeableDataFilter ) { + ((ChangeableDataFilter)filter).addChangeListener( this ); + } // active = true; // start the refresh task to compute the children @@ -209,6 +224,10 @@ protected void removeNotify () { // removes the listener folder.removePropertyChangeListener (listener); + // remove listener from filter + if ( filter instanceof ChangeableDataFilter ) { + ((ChangeableDataFilter)filter).removeChangeListener( this ); + } // active = false; // we don't call the setKeys directly here because @@ -233,10 +252,13 @@ */ private DataObject[] ch; + private boolean refresh; + /** calls setKeys with the folder children * or with empty collection if active is false */ public void run() { + if (! active) { setKeys (java.util.Collections.EMPTY_SET); return; @@ -247,6 +269,13 @@ keys[i] = new Pair(ch[i].getPrimaryFile()); } setKeys(Arrays.asList(keys)); + + if ( refresh ) { + refresh = false; + for (int i = 0; i < keys.length; i++) { + refreshKey( keys[i] ); + } + } } /** stop holding the references to the data objects. After