From 35f6c0a60b7da8b5e7489ec2076a428876402f07 Mon Sep 17 00:00:00 2001
From: Raphael Girardot <raphael.girardot@synchrotron-soleil.fr>
Date: Mon, 2 Nov 2015 15:51:20 +0000
Subject: [PATCH] - better listeners management. Big change --> version set to
 1.1.0-SNAPSHOT - added the possibility to change IView's icon and title
 (JAVAAPI-262)

---
 dockingvl/pom.xml                             |  2 +-
 .../fr/soleil/docking/vl/view/VlDockView.java | 49 ++++++++++++-------
 2 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/dockingvl/pom.xml b/dockingvl/pom.xml
index 9e204d5..6680a90 100644
--- a/dockingvl/pom.xml
+++ b/dockingvl/pom.xml
@@ -9,7 +9,7 @@
   </parent>
   <groupId>fr.soleil.lib</groupId>
   <artifactId>DockingVl</artifactId>
-  <version>1.0.8-SNAPSHOT</version>
+  <version>1.1.0-SNAPSHOT</version>
   <name>Docking VL</name>
   <description>VL Docking implementation of DockingCore</description>
   <developers>
diff --git a/dockingvl/src/main/java/fr/soleil/docking/vl/view/VlDockView.java b/dockingvl/src/main/java/fr/soleil/docking/vl/view/VlDockView.java
index 27c892f..ca1d81a 100644
--- a/dockingvl/src/main/java/fr/soleil/docking/vl/view/VlDockView.java
+++ b/dockingvl/src/main/java/fr/soleil/docking/vl/view/VlDockView.java
@@ -25,11 +25,14 @@ import com.vldocking.swing.docking.event.DockingActionCloseEvent;
 import com.vldocking.swing.docking.event.DockingActionEvent;
 import com.vldocking.swing.docking.event.DockingActionListener;
 
+import fr.soleil.docking.event.DockingEvent;
+import fr.soleil.docking.listener.IViewListener;
+import fr.soleil.docking.listener.ViewListenerDelegate;
 import fr.soleil.docking.view.IView;
-import fr.soleil.docking.view.IViewListener;
 import fr.soleil.docking.vl.SoleilDockingDesktop;
 
 public class VlDockView implements IView, Dockable, DockingActionListener, FocusListener {
+
     protected Object id;
     protected boolean enabled;
     protected String title;
@@ -37,7 +40,7 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
     protected Icon icon;
     protected DockKey key;
     protected SoleilDockingDesktop dockingDesktop;
-    protected List<IViewListener> viewListeners;
+    protected final ViewListenerDelegate delegate;
 
     public VlDockView(String title, Icon icon, Component component, Object id) {
         this.title = title;
@@ -51,7 +54,7 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
             this.key = new DockKey(title, title, title, icon);
         }
 
-        this.viewListeners = new ArrayList<IViewListener>();
+        delegate = new ViewListenerDelegate();
         this.component.addFocusListener(this);
     }
 
@@ -107,7 +110,7 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
     @Override
     public void select() {
         setVisible(true);
-        // TODO marche pas !!!!!!
+        // TODO Doesn't work !!!!!!
         focus(component);
         focusGained(new FocusEvent(component, FocusEvent.FOCUS_GAINED));
     }
@@ -139,11 +142,21 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
         return title;
     }
 
+    @Override
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
     @Override
     public Icon getIcon() {
         return icon;
     }
 
+    @Override
+    public void setIcon(Icon icon) {
+        this.icon = icon;
+    }
+
     @Override
     public Color getViewBackground() {
         return component.getBackground();
@@ -168,11 +181,10 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
         component.setForeground(fg);
     }
 
-    /*
+    /**
      * Sets the background of all {@link Component}s in a given {@link List}
      * 
      * @param components The {@link List}
-     * 
      * @param bg The background to set
      */
     protected void setComponentsBackground(List<?> components, Color bg) {
@@ -216,12 +228,16 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
     @Override
     public void setClosable(boolean closable) {
         key.setCloseEnabled(closable);
-
     }
 
     @Override
     public void addViewListener(final IViewListener listener) {
-        viewListeners.add(listener);
+        delegate.addViewListener(listener);
+    }
+
+    @Override
+    public void removeViewListener(IViewListener listener) {
+        delegate.removeViewListener(listener);
     }
 
     @Override
@@ -235,26 +251,23 @@ public class VlDockView implements IView, Dockable, DockingActionListener, Focus
     }
 
     @Override
-    public void dockingActionPerformed(DockingActionEvent event) {
-        if (event.getActionType() == DockingActionEvent.ACTION_CLOSE) {
-            Dockable closedDockable = ((DockingActionCloseEvent) event).getDockable();
+    public void dockingActionPerformed(DockingActionEvent e) {
+        if (e.getActionType() == DockingActionEvent.ACTION_CLOSE) {
+            Dockable closedDockable = ((DockingActionCloseEvent) e).getDockable();
             if (getDockKey().getKey().equals(closedDockable.getDockKey().getKey())) {
-                for (IViewListener listener : viewListeners) {
-                    listener.viewClosed();
-                }
+                delegate.warnListeners(new DockingEvent(this, DockingEvent.VIEW_CLOSED));
             }
         }
     }
 
     @Override
     public void focusGained(FocusEvent e) {
-        for (IViewListener listener : viewListeners) {
-            listener.focusGained();
-        }
+        delegate.warnListeners(new DockingEvent(this, DockingEvent.FOCUS_GAINED));
     }
 
     @Override
     public void focusLost(FocusEvent e) {
-        // Not managed.
+        delegate.warnListeners(new DockingEvent(this, DockingEvent.FOCUS_LOST));
     }
+
 }
-- 
GitLab