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

Reply via email to