Revision: 5830 http://sourceforge.net/p/jump-pilot/code/5830 Author: michaudm Date: 2018-06-03 22:37:16 +0000 (Sun, 03 Jun 2018) Log Message: ----------- also remove layerListeners added with associated to AttributeTablePanel, AttributeTab, OneLayerAttributeTab, ViewAttributesFrame, InfoFrame, WorkbenchFrame, EnsureAllLayersHaveSrid when the Layer is removed
Modified Paths: -------------- core/trunk/ChangeLog core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTablePanel.java core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/ViewAttributesPlugIn.java core/trunk/src/org/openjump/core/ccordsys/srid/EnsureAllLayersHaveSRIDStylePlugIn.java Modified: core/trunk/ChangeLog =================================================================== --- core/trunk/ChangeLog 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/ChangeLog 2018-06-03 22:37:16 UTC (rev 5830) @@ -10,6 +10,9 @@ - sridStyle set geometry srid only once, not once per Layer - layerListener added by AbstractPlugIn UndoableEdit is removed from LayerManager when the layer is removed + * also remove layerListeners added with associated to AttributeTablePanel, + AttributeTab, OneLayerAttributeTab, ViewAttributesFrame, InfoFrame, + WorkbenchFrame, EnsureAllLayersHaveSrid when the Layer is removed 2018-06-02 mmichaud <m.michael.mich...@orange.fr> * upgrade dxf-driver to 0.9.0 (could not export MultiPolygon) Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -101,10 +101,10 @@ } public AttributeTab( - final InfoModel model, - final WorkbenchContext workbenchContext, - final TaskFrame taskFrame, - LayerManagerProxy layerManagerProxy, boolean addScrollPanesToChildren) { + final InfoModel model, + final WorkbenchContext workbenchContext, + final TaskFrame taskFrame, + final LayerManagerProxy layerManagerProxy, boolean addScrollPanesToChildren) { this.layerManagerProxy = layerManagerProxy; this.model = model; this.taskFrame = taskFrame; @@ -166,7 +166,7 @@ tablePanel.getLayerNameRenderer().addMouseListener(mouseListener); } }; - layerManagerProxy.getLayerManager().addLayerListener(new LayerListener() { + LayerListener layerListener = new LayerListener() { public void featuresChanged(FeatureEvent e) {} public void layerChanged(LayerEvent e) { @@ -174,10 +174,14 @@ //Editability may have changed. [Jon Aquino] toolBar.updateEnabledState(); } + if (e.getType() == LayerEventType.REMOVED) { + layerManagerProxy.getLayerManager().removeLayerListener(this); + } } public void categoryChanged(CategoryEvent e) {} - }); + }; + layerManagerProxy.getLayerManager().addLayerListener(layerListener); model.addListener(new InfoModelListener() { public void layerAdded(LayerTableModel layerTableModel) { panel Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTablePanel.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTablePanel.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTablePanel.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -484,27 +484,28 @@ 0, 0), 0, 0)); } updateGrid(model.getLayer()); - model.getLayer().getLayerManager().addLayerListener( - new LayerListener() { + LayerListener layerListener = new LayerListener() { - public void categoryChanged(CategoryEvent e) { - } + public void categoryChanged(CategoryEvent e) {} - public void featuresChanged(FeatureEvent e) { - } + public void featuresChanged(FeatureEvent e) {} - public void layerChanged(LayerEvent e) { - if (e.getLayerable() != model.getLayer()) { return; } - if (e.getType() == LayerEventType.METADATA_CHANGED) { - //If layer becomes editable, apply row striping - // and remove gridlines, - //as recommended in Java Look and Feel Design - // Guidelines: Advanced Topics [Jon Aquino] - updateGrid(model.getLayer()); - repaint(); - } - } - }); + public void layerChanged(LayerEvent e) { + if (e.getLayerable() != model.getLayer()) { return; } + if (e.getType() == LayerEventType.METADATA_CHANGED) { + //If layer becomes editable, apply row striping + // and remove gridlines, + //as recommended in Java Look and Feel Design + // Guidelines: Advanced Topics [Jon Aquino] + updateGrid(model.getLayer()); + repaint(); + } + if (e.getType() == LayerEventType.REMOVED) { + e.getLayerable().getLayerManager().removeLayerListener(this); + } + } + }; + model.getLayer().getLayerManager().addLayerListener(layerListener); try { JList list = new JList(); list.setBackground(new JLabel().getBackground()); Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -108,7 +108,7 @@ WorkbenchContext workbenchContext, LayerManagerProxy layerManagerProxy, final TaskFrame taskFrame) { - blackboard = PersistentBlackboardPlugIn.get(workbenchContext); + blackboard = PersistentBlackboardPlugIn.get(workbenchContext); geometryInfoTab = new GeometryInfoTab(model, workbenchContext); rasterInfoTab = new RasterInfoTab(null, null); wmsInfoTab = new WMSInfoTab(); @@ -161,29 +161,29 @@ } }); addInternalFrameListener(new InternalFrameAdapter() { - @Override + @Override public void internalFrameClosed(InternalFrameEvent e) { //Assume that there are no other views on the model model.dispose(); - savePositionAndSize(); + savePositionAndSize(); } }); - addComponentListener(new ComponentAdapter() { - @Override - public void componentMoved(ComponentEvent e) { - super.componentMoved(e); - savePositionAndSize(); - } - @Override - public void componentResized(ComponentEvent e) { - super.componentResized(e); - savePositionAndSize(); - } - }); - - layerManagerProxy.getLayerManager().addLayerListener(new LayerListener() { + addComponentListener(new ComponentAdapter() { + @Override + public void componentMoved(ComponentEvent e) { + super.componentMoved(e); + savePositionAndSize(); + } + @Override + public void componentResized(ComponentEvent e) { + super.componentResized(e); + savePositionAndSize(); + } + }); + + LayerListener layerListener = new LayerListener() { public void featuresChanged(FeatureEvent e) {} public void layerChanged(LayerEvent e) { @@ -192,11 +192,13 @@ if (getModel().getLayers().contains(e.getLayerable())) { getModel().remove((Layer)e.getLayerable()); } + layerManager.removeLayerListener(this); } } public void categoryChanged(CategoryEvent e) {} - }); + }; + layerManagerProxy.getLayerManager().addLayerListener(layerListener); } public JPanel getAttributeTab() { return attributeTab; Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -13,27 +13,30 @@ */ public class OneLayerAttributeTab extends AttributeTab { public OneLayerAttributeTab(WorkbenchContext context, TaskFrame taskFrame, - LayerManagerProxy layerManagerProxy) { + final LayerManagerProxy layerManagerProxy) { super(new InfoModel(), context, taskFrame, layerManagerProxy, true); - context.getLayerManager().addLayerListener(new LayerListener() { - public void featuresChanged(FeatureEvent e) { - if (getLayerTableModel() == null) { - //Get here after attribute viewer window is closed [Jon Aquino] - return; - } - if ((e.getLayer() == getLayerTableModel().getLayer()) && - (e.getType() == FeatureEventType.ADDED)) { - //DELETED events are already handled in LayerTableModel - getLayerTableModel().addAll(e.getFeatures()); - } - } + LayerListener layerListener = new LayerListener() { + public void featuresChanged(FeatureEvent e) { + if (getLayerTableModel() == null) { + //Get here after attribute viewer window is closed [Jon Aquino] + return; + } + if ((e.getLayer() == getLayerTableModel().getLayer()) && + (e.getType() == FeatureEventType.ADDED)) { + //DELETED events are already handled in LayerTableModel + getLayerTableModel().addAll(e.getFeatures()); + } + } + public void layerChanged(LayerEvent e) { + if (e.getType() == LayerEventType.REMOVED) { + layerManagerProxy.getLayerManager().removeLayerListener(this); + } + } - public void layerChanged(LayerEvent e) { - } - - public void categoryChanged(CategoryEvent e) { - } - }); + public void categoryChanged(CategoryEvent e) { + } + }; + context.getLayerManager().addLayerListener(layerListener); } public OneLayerAttributeTab setLayer(Layer layer) { Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -1010,21 +1010,26 @@ } public Object yield() { - internalFrame.getLayerManager().addLayerListener( - new LayerListener() { - public void layerChanged(LayerEvent e) { - if ((e.getType() == LayerEventType.METADATA_CHANGED) - || (e.getType() == LayerEventType.REMOVED)) { - updateTitle(); - } + LayerListener layerListener = new LayerListener() { + public void layerChanged(LayerEvent e) { + if ((e.getType() == LayerEventType.METADATA_CHANGED) + || (e.getType() == LayerEventType.REMOVED)) { + updateTitle(); + } + if (e.getType() == LayerEventType.REMOVED) { + if (!(internalFrame instanceof TaskFrame)) { + internalFrame.getLayerManager().removeLayerListener(this); } + } + } - public void categoryChanged(CategoryEvent e) { - } + public void categoryChanged(CategoryEvent e) { + } - public void featuresChanged(FeatureEvent e) { - } - }); + public void featuresChanged(FeatureEvent e) { + } + }; + internalFrame.getLayerManager().addLayerListener(layerListener); i.addPropertyChangeListener(JInternalFrame.TITLE_PROPERTY, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/ViewAttributesPlugIn.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/ViewAttributesPlugIn.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/ViewAttributesPlugIn.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -182,7 +182,7 @@ }); getContentPane().add(attributeTab, BorderLayout.CENTER); updateTitle(attributeTab.getLayer()); - context.getLayerManager().addLayerListener(new LayerListener() { + LayerListener layerListener = new LayerListener() { public void layerChanged(LayerEvent e) { if (attributeTab.getLayer() != null) { updateTitle(attributeTab.getLayer()); @@ -191,11 +191,11 @@ if (e.getType() == LayerEventType.REMOVED) { if (e.getLayerable() == attributeTab.getLayer()) { attributeTab.getModel().dispose(); - context.getLayerManager().removeLayerListener(this); context.getWorkbenchFrame().removeInternalFrame( - ViewAttributesFrame.this); + ViewAttributesFrame.this); dispose(); } + context.getLayerManager().removeLayerListener(this); } } @@ -204,7 +204,8 @@ public void featuresChanged(FeatureEvent e) { } - }); + }; + context.getLayerManager().addLayerListener(layerListener); Assert .isTrue( !(this instanceof CloneableInternalFrame), Modified: core/trunk/src/org/openjump/core/ccordsys/srid/EnsureAllLayersHaveSRIDStylePlugIn.java =================================================================== --- core/trunk/src/org/openjump/core/ccordsys/srid/EnsureAllLayersHaveSRIDStylePlugIn.java 2018-06-03 21:35:20 UTC (rev 5829) +++ core/trunk/src/org/openjump/core/ccordsys/srid/EnsureAllLayersHaveSRIDStylePlugIn.java 2018-06-03 22:37:16 UTC (rev 5830) @@ -12,13 +12,7 @@ import com.vividsolutions.jump.coordsys.CoordinateSystem; import com.vividsolutions.jump.feature.Feature; import com.vividsolutions.jump.util.Block; -import com.vividsolutions.jump.workbench.model.CategoryEvent; -import com.vividsolutions.jump.workbench.model.FeatureEvent; -import com.vividsolutions.jump.workbench.model.Layer; -import com.vividsolutions.jump.workbench.model.LayerEvent; -import com.vividsolutions.jump.workbench.model.LayerListener; -import com.vividsolutions.jump.workbench.model.LayerManager; -import com.vividsolutions.jump.workbench.model.LayerManagerProxy; +import com.vividsolutions.jump.workbench.model.*; import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn; import com.vividsolutions.jump.workbench.plugin.PlugInContext; import com.vividsolutions.jump.workbench.ui.WorkbenchFrame; @@ -45,12 +39,12 @@ } initialize(((LayerManagerProxy) internalFrame).getLayerManager()); } - private void initialize(LayerManager layerManager) { + private void initialize(final LayerManager layerManager) { for (Iterator i = layerManager.iterator(); i.hasNext();) { Layer layer = (Layer) i.next(); ensureHasSRIDStyle(layer); } - layerManager.addLayerListener(new LayerListener() { + LayerListener layerListener = new LayerListener() { public void featuresChanged(FeatureEvent e) { } public void layerChanged(LayerEvent e) { @@ -57,10 +51,14 @@ if (e.getLayerable() instanceof Layer) { ensureHasSRIDStyle((Layer) e.getLayerable()); } + if (e.getType() == LayerEventType.REMOVED) { + layerManager.removeLayerListener(this); + } } public void categoryChanged(CategoryEvent e) { } - }); + }; + layerManager.addLayerListener(layerListener); } private void ensureHasSRIDStyle(Layer layer) { if (layer.getStyle(SRIDStyle.class) != null) { ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel