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

Reply via email to