Revision: 5842 http://sourceforge.net/p/jump-pilot/code/5842 Author: michaudm Date: 2018-06-05 22:28:54 +0000 (Tue, 05 Jun 2018) Log Message: ----------- Remove layerListeners from components which add new layerListeners but may also be closed : ViewAttributeFrame, InfoFrame
Modified Paths: -------------- core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributePanel.java 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/InfoModel.java core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerTableModel.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 Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributePanel.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributePanel.java 2018-06-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributePanel.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -148,6 +148,8 @@ } private void removeTablePanel(LayerTableModel layerTableModel) { Assert.isTrue(layerToTablePanelMap.containsKey(layerTableModel.getLayer())); + AttributeTablePanel attributeTablePanel = getTablePanel(layerTableModel.getLayer()); + layerManagerProxy.getLayerManager().removeLayerListener(attributeTablePanel.layerListener); remove(getTablePanel(layerTableModel.getLayer())); layerToTablePanelMap.remove(layerTableModel.getLayer()); revalidate(); Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java 2018-06-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTab.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -46,6 +46,8 @@ import org.openjump.core.ui.plugin.view.ViewOptionsPlugIn; import javax.swing.*; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -64,6 +66,7 @@ private ErrorHandler errorHandler; private TaskFrame taskFrame; private LayerManagerProxy layerManagerProxy; + public LayerListener attributeTabLayerListener; private static final String sNoModifiedWritableLayerSelected = I18N.get("org.openjump.core.ui.plugin.mousemenu.SaveDatasetsPlugIn.No-modified-writable-layer-selected"); //The String values returned by these EnableChecks are not used. //The only thing checked is whether they are null or not. [Jon Aquino] @@ -116,8 +119,9 @@ toolBar.updateEnabledState(); } })); - panel = - new AttributePanel(model, workbenchContext, taskFrame, layerManagerProxy, addScrollPanesToChildren) { + panel = new AttributePanel(model, workbenchContext, + taskFrame, layerManagerProxy, addScrollPanesToChildren) { + public void layerAdded(LayerTableModel layerTableModel) { super.layerAdded(layerTableModel); @@ -166,7 +170,8 @@ tablePanel.getLayerNameRenderer().addMouseListener(mouseListener); } }; - LayerListener layerListener = new LayerListener() { + + attributeTabLayerListener = new LayerListener() { public void featuresChanged(FeatureEvent e) {} public void layerChanged(LayerEvent e) { @@ -174,14 +179,13 @@ //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); + + layerManagerProxy.getLayerManager().addLayerListener(attributeTabLayerListener); + 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-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/AttributeTablePanel.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -458,6 +458,8 @@ private AttributeTableLayerViewPanelListener layerViewPanelListener = null; + public LayerListener layerListener; + public AttributeTablePanel(final LayerTableModel model, boolean addScrollPane, final WorkbenchContext workbenchContext) { this(workbenchContext); @@ -484,7 +486,7 @@ 0, 0), 0, 0)); } updateGrid(model.getLayer()); - LayerListener layerListener = new LayerListener() { + layerListener = new LayerListener() { public void categoryChanged(CategoryEvent e) {} @@ -500,12 +502,10 @@ updateGrid(model.getLayer()); repaint(); } - else 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-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -126,12 +126,7 @@ } });*/ attributeTab = new AttributeTab(model, workbenchContext, taskFrame, this, false); - addInternalFrameListener(new InternalFrameAdapter() { - @Override - public void internalFrameOpened(InternalFrameEvent e) { - attributeTab.getToolBar().updateEnabledState(); - } - }); + workbenchFrame = workbenchContext.getWorkbench().getFrame(); this.setResizable(true); this.setClosable(true); @@ -160,15 +155,6 @@ updateTitle(taskFrame.getTask().getName()); } }); - addInternalFrameListener(new InternalFrameAdapter() { - @Override - public void internalFrameClosed(InternalFrameEvent e) { - //Assume that there are no other views on the model - model.dispose(); - savePositionAndSize(); - } - - }); addComponentListener(new ComponentAdapter() { @Override @@ -199,6 +185,20 @@ public void categoryChanged(CategoryEvent e) {} }; layerManagerProxy.getLayerManager().addLayerListener(layerListener); + + addInternalFrameListener(new InternalFrameAdapter() { + @Override + public void internalFrameOpened(InternalFrameEvent e) { + attributeTab.getToolBar().updateEnabledState(); + } + @Override + public void internalFrameClosed(InternalFrameEvent e) { + //Assume that there are no other views on the model + model.dispose(); + savePositionAndSize(); + getLayerManager().removeLayerListener(attributeTab.attributeTabLayerListener); + } + }); } public JPanel getAttributeTab() { return attributeTab; Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoModel.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoModel.java 2018-06-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoModel.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -36,6 +36,7 @@ import java.util.*; import com.vividsolutions.jump.workbench.model.Layer; +import com.vividsolutions.jump.workbench.model.LayerManager; import com.vividsolutions.jump.workbench.model.Layerable; @@ -90,7 +91,10 @@ public void remove(Layer layer) { if (!layerToTableModelMap.containsKey(layer)) return; LayerTableModel layerTableModel = getTableModel(layer); - + LayerManager layerManager = layer.getLayerManager(); + if (layerManager == null) { + layerManager.removeLayerListener(layerTableModel.layerListener); + } for (Iterator i = listeners.iterator(); i.hasNext();) { InfoModelListener listener = (InfoModelListener) i.next(); listener.layerRemoved(layerTableModel); Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerTableModel.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerTableModel.java 2018-06-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerTableModel.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -109,7 +109,7 @@ collator.setStrength(Collator.PRIMARY); } - private LayerListener layerListener = new LayerListener() { + final LayerListener layerListener = new LayerListener() { public void categoryChanged(CategoryEvent e) {} public void featuresChanged(FeatureEvent e) { if (e.getLayer() != getLayer()) { Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java 2018-06-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/OneLayerAttributeTab.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -7,16 +7,25 @@ import com.vividsolutions.jump.workbench.model.LayerListener; import com.vividsolutions.jump.workbench.model.LayerManagerProxy; +import javax.swing.*; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; + /** * Displays and stays in sync with a single Layer. */ public class OneLayerAttributeTab extends AttributeTab { + + public LayerListener oneAttributeTableLayerListener; + public OneLayerAttributeTab(WorkbenchContext context, TaskFrame taskFrame, final LayerManagerProxy layerManagerProxy) { + super(new InfoModel(), context, taskFrame, layerManagerProxy, true); - LayerListener layerListener = new LayerListener() { - public void featuresChanged(FeatureEvent e) { + + oneAttributeTableLayerListener = new LayerListener() { + public void featuresChanged(FeatureEvent e) { if (getLayerTableModel() == null) { //Get here after attribute viewer window is closed [Jon Aquino] return; @@ -27,16 +36,12 @@ 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); + + context.getLayerManager().addLayerListener(oneAttributeTableLayerListener); } 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-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -1010,7 +1010,7 @@ } public Object yield() { - LayerListener layerListener = new LayerListener() { + final LayerListener layerListener = new LayerListener() { public void layerChanged(LayerEvent e) { if ((e.getType() == LayerEventType.METADATA_CHANGED) || (e.getType() == LayerEventType.REMOVED)) { @@ -1030,6 +1030,12 @@ } }; internalFrame.getLayerManager().addLayerListener(layerListener); + i.addInternalFrameListener(new InternalFrameAdapter() { + @Override + public void internalFrameClosed(InternalFrameEvent e) { + internalFrame.getLayerManager().removeLayerListener(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-05 22:20:50 UTC (rev 5841) +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/ViewAttributesPlugIn.java 2018-06-05 22:28:54 UTC (rev 5842) @@ -27,6 +27,7 @@ package com.vividsolutions.jump.workbench.ui.plugin; import java.awt.BorderLayout; +import java.awt.event.WindowEvent; import javax.swing.*; import javax.swing.event.InternalFrameAdapter; @@ -174,15 +175,10 @@ attributeTab = new OneLayerAttributeTab(context.getWorkbenchContext(), ((TaskFrameProxy) context.getActiveInternalFrame()).getTaskFrame(), this).setLayer(layer); - addInternalFrameListener(new InternalFrameAdapter() { - @Override - public void internalFrameOpened(InternalFrameEvent e) { - attributeTab.getToolBar().updateEnabledState(); - } - }); + getContentPane().add(attributeTab, BorderLayout.CENTER); updateTitle(attributeTab.getLayer()); - LayerListener layerListener = new LayerListener() { + final LayerListener layerListener = new LayerListener() { public void layerChanged(LayerEvent e) { if (attributeTab.getLayer() != null) { updateTitle(attributeTab.getLayer()); @@ -195,7 +191,6 @@ ViewAttributesFrame.this); dispose(); } - context.getLayerManager().removeLayerListener(this); } } @@ -206,6 +201,20 @@ } }; context.getLayerManager().addLayerListener(layerListener); + + addInternalFrameListener(new InternalFrameAdapter() { + @Override + public void internalFrameOpened(InternalFrameEvent e) { + attributeTab.getToolBar().updateEnabledState(); + } + @Override + public void internalFrameClosed(InternalFrameEvent e) { + context.getLayerManager().removeLayerListener(layerListener); + context.getLayerManager().removeLayerListener(attributeTab.attributeTabLayerListener); + context.getLayerManager().removeLayerListener(attributeTab.oneAttributeTableLayerListener); + } + }); + Assert .isTrue( !(this instanceof CloneableInternalFrame), ------------------------------------------------------------------------------ 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