diff --git a/src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java b/src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java index 93261edb0..d739a03dd 100644 --- a/src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java +++ b/src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java @@ -58,6 +58,7 @@ import org.apache.tools.ant.gui.acs.ElementTreeSelectionModel; import org.apache.tools.ant.gui.acs.ElementTreeModel; import org.apache.tools.ant.gui.acs.ACSProjectElement; import javax.swing.*; +import javax.swing.tree.*; import javax.swing.event.TreeSelectionListener; import javax.swing.event.TreeSelectionEvent; import java.awt.GridLayout; @@ -65,6 +66,7 @@ import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.EventObject; +import java.beans.PropertyChangeEvent; /** * Module for navigating build file elemenets. @@ -132,27 +134,37 @@ public class ElementNavigator extends AntModule { * it should be cancelled. */ public boolean eventPosted(EventObject event) { - ACSProjectElement project = null; - if(event instanceof ProjectSelectedEvent) { - ProjectSelectedEvent e = (ProjectSelectedEvent) event; - project = e.getSelectedProject(); - } - - if(project == null) { - // The project has been closed. - // XXX this needs to be tested against - // different version of Swing... - _tree.setModel(null); - _tree.setSelectionModel(null); - // Send an empty selection event to notify others that - // nothing is selected. - ElementSelectionEvent.createEvent(getContext(), null); + if(event instanceof PropertyChangeEvent) { + // The project node has changed. +// XXX This won't work until ACSTreeNodeElement.getParent() is fixed +// ElementTreeModel model = (ElementTreeModel)_tree.getModel(); +// model.nodeChanged((TreeNode)model.getRoot()); + } else { - _tree.setModel(new ElementTreeModel(project)); - _selections = new ElementTreeSelectionModel(); - _selections.addTreeSelectionListener(new SelectionForwarder()); - _tree.setSelectionModel(_selections); + ACSProjectElement project = null; + if(event instanceof ProjectSelectedEvent) { + ProjectSelectedEvent e = (ProjectSelectedEvent) event; + project = e.getSelectedProject(); + } + + if(project == null) { + // The project has been closed. + // XXX this needs to be tested against + // different version of Swing... + _tree.setModel(null); + _tree.setSelectionModel(null); + // Send an empty selection event to notify others that + // nothing is selected. + ElementSelectionEvent.createEvent(getContext(), null); + } + else { + _tree.setModel(new ElementTreeModel(project)); + _selections = new ElementTreeSelectionModel(); + _selections.addTreeSelectionListener( + new SelectionForwarder()); + _tree.setSelectionModel(_selections); + } } return true; } @@ -177,7 +189,8 @@ public class ElementNavigator extends AntModule { */ public boolean accept(EventObject event) { return event instanceof ProjectSelectedEvent || - event instanceof ProjectClosedEvent; + event instanceof ProjectClosedEvent || + event instanceof PropertyChangeEvent; } } diff --git a/src/antidote/org/apache/tools/ant/gui/modules/edit/PropertyEditor.java b/src/antidote/org/apache/tools/ant/gui/modules/edit/PropertyEditor.java index 5bba64fd7..cb9d27d9e 100644 --- a/src/antidote/org/apache/tools/ant/gui/modules/edit/PropertyEditor.java +++ b/src/antidote/org/apache/tools/ant/gui/modules/edit/PropertyEditor.java @@ -80,6 +80,8 @@ public class PropertyEditor extends AntModule { private JPanel _container = null; /** Scroll area containing contents. */ private JScrollPane _scroller = null; + /** Property change forwarder. */ + private PropertyChangeForwarder _forwarder = new PropertyChangeForwarder(); /** * Default ctor. @@ -108,6 +110,7 @@ public class PropertyEditor extends AntModule { */ private void updateDisplay(ACSElement[] items) { if(_customizer != null) { + _customizer.removePropertyChangeListener(_forwarder); _container.remove((Component)_customizer); _customizer = null; } @@ -123,6 +126,7 @@ public class PropertyEditor extends AntModule { getCustomizerClass().newInstance(); _customizer.setObject(item); _container.add(BorderLayout.CENTER, (Component) _customizer); + _customizer.addPropertyChangeListener(_forwarder); } catch(Exception ex) { // XXX log me. @@ -176,4 +180,12 @@ public class PropertyEditor extends AntModule { return event instanceof ElementSelectionEvent; } } + + /** Class for forwarding property change events to the event bus. */ + private class PropertyChangeForwarder implements PropertyChangeListener { + public void propertyChange(PropertyChangeEvent e) { + getContext().getEventBus().postEvent(e); + } + } + }