Author: kono
Date: 2012-05-16 17:00:35 -0700 (Wed, 16 May 2012)
New Revision: 29282

Modified:
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/BirdsEyeViewHandler.java
Log:
fixes #662 Bird's Eye View updater code is optimized and now always updates 
view when Current Rendering Engine is swithced.

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
       2012-05-16 23:33:40 UTC (rev 29281)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
       2012-05-17 00:00:35 UTC (rev 29282)
@@ -201,8 +201,7 @@
                                                                               
cytoscapePropertiesServiceRef,
                                                                               
cyHelpBroker);
                BirdsEyeViewHandler birdsEyeViewHandler = new 
BirdsEyeViewHandler(cyApplicationManagerServiceRef,
-                                                                               
  networkViewManager,
-                                                                               
  dingNavigationPresentationFactoryServiceRef, 
renderingEngineManagerServiceRef);
+                                                                               
  dingNavigationPresentationFactoryServiceRef);
                NetworkPanel networkPanel = new 
NetworkPanel(cyApplicationManagerServiceRef,
                                                             
cyNetworkManagerServiceRef,
                                                             
cyNetworkViewManagerServiceRef,

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/BirdsEyeViewHandler.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/BirdsEyeViewHandler.java
  2012-05-16 23:33:40 UTC (rev 29281)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/BirdsEyeViewHandler.java
  2012-05-17 00:00:35 UTC (rev 29282)
@@ -39,19 +39,12 @@
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
-import java.awt.Container;
 import java.awt.Dimension;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ComponentListener;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.WeakHashMap;
 
-import javax.help.CSH.Manager;
-import javax.swing.JDesktopPane;
-import javax.swing.JInternalFrame;
 import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
 
@@ -65,7 +58,6 @@
 import org.cytoscape.view.model.events.NetworkViewDestroyedListener;
 import org.cytoscape.view.presentation.RenderingEngine;
 import org.cytoscape.view.presentation.RenderingEngineFactory;
-import org.cytoscape.view.presentation.RenderingEngineManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,45 +65,31 @@
  * This class handles the creation of the BirdsEyeView navigation object and
  * handles the events which change view seen.
  */
-public class BirdsEyeViewHandler implements SetCurrentRenderingEngineListener,
-               NetworkViewDestroyedListener {
+public class BirdsEyeViewHandler implements SetCurrentRenderingEngineListener, 
NetworkViewDestroyedListener {
 
        private static final Logger logger = 
LoggerFactory.getLogger(BirdsEyeViewHandler.class);
 
-       private static final Dimension DEF_PANEL_SIZE = new Dimension(280, 280);
+       private static final Dimension DEF_PANEL_SIZE = new Dimension(300, 300);
        private static final Color DEF_BACKGROUND_COLOR = Color.WHITE;
 
        // BEV is just a special implementation of RenderingEngine.
        private final RenderingEngineFactory<CyNetwork> bevFactory;
-
-       private FrameListener frameListener = new FrameListener();
-
-       private final NetworkViewManager networkViewManager;
-       private final RenderingEngineManager renderingEngineManager;
-
-       private Container bevPanel;
-
-       private RenderingEngine<CyNetwork> engine;
+       private final JPanel bevPanel;
+       private final Map<CyNetworkView, RenderingEngine<?>> viewToEngineMap;
        private final CyApplicationManager appManager;
-       
        private final Map<CyNetworkView, JPanel> presentationMap;
 
        /**
         * Updates Bird's Eye View
         * 
         * @param appManager
-        * @param viewmgr
         * @param defaultFactory
-        * @param renderingEngineManager
         */
        public BirdsEyeViewHandler(final CyApplicationManager appManager,
-                       final NetworkViewManager viewmgr,
-                       final RenderingEngineFactory<CyNetwork> defaultFactory, 
final RenderingEngineManager renderingEngineManager) {
+                       final RenderingEngineFactory<CyNetwork> defaultFactory) 
{
 
                this.appManager = appManager;
-               this.networkViewManager = viewmgr;
-               this.renderingEngineManager = renderingEngineManager;
-               
+               this.viewToEngineMap = new WeakHashMap<CyNetworkView, 
RenderingEngine<?>>();
                presentationMap = new WeakHashMap<CyNetworkView, JPanel>();
 
                this.bevPanel = new JPanel();
@@ -120,61 +98,21 @@
                this.bevPanel.setBackground(DEF_BACKGROUND_COLOR);
 
                this.bevFactory = defaultFactory;
-
-               final JDesktopPane desktopPane = viewmgr.getDesktopPane();
-               desktopPane.addComponentListener(new DesktopListener());
        }
 
-       private void setFocus() {
-               final JDesktopPane desktopPane = 
networkViewManager.getDesktopPane();
-               if (desktopPane == null)
-                       return;
-
-               final JInternalFrame frame = desktopPane.getSelectedFrame();
-               if (frame == null)
-                       return;
-
-               boolean hasListener = false;
-               ComponentListener[] listeners = frame.getComponentListeners();
-               for (int i = 0; i < listeners.length; i++)
-                       if (listeners[i] == frameListener)
-                               hasListener = true;
-
-               if (!hasListener)
-                       frame.addComponentListener(frameListener);
-       }
-
        /**
         * Returns a birds eye view component.
         * 
         * @return The component that contains the birds eye view.
         */
-       Component getBirdsEyeView() {
+       final Component getBirdsEyeView() {
                return bevPanel;
        }
 
-       /**
-        * Repaint a JInternalFrame whenever it is moved.
-        */
-       class FrameListener extends ComponentAdapter {
-               public void componentMoved(ComponentEvent e) {
-                       bevPanel.repaint();
-               }
-       }
-
-       /**
-        * Repaint the JDesktopPane whenever its size has changed.
-        */
-       class DesktopListener extends ComponentAdapter {
-               public void componentResized(ComponentEvent e) {
-                       bevPanel.repaint();
-               }
-       }
-
        @Override
        public void handleEvent(final SetCurrentRenderingEngineEvent e) {
                final RenderingEngine<CyNetwork> newEngine = 
e.getRenderingEngine();
-               
+
                SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
@@ -182,37 +120,26 @@
                        }
                });
        }
-       
+
        private final void updateBEV(final RenderingEngine<CyNetwork> 
newEngine) {
                final CyNetworkView newViewModel = (CyNetworkView) 
newEngine.getViewModel();
-               
-               // Remove it from the manager object.
-               if(engine != null)
-                       renderingEngineManager.removeRenderingEngine(engine);
-               
-               engine = newEngine;
 
                JPanel presentationPanel = presentationMap.get(newViewModel);
-               
-               if(presentationPanel == null) {
+
+               if (presentationPanel == null) {
+                       logger.debug("Creating new BEV for network SUID: " + 
newViewModel.getModel().getSUID());
                        presentationPanel = new JPanel();
-                       final RenderingEngine<CyNetwork> bevEngine = 
bevFactory.createRenderingEngine(presentationPanel, newViewModel);
-                       renderingEngineManager.addRenderingEngine(bevEngine);
+                       viewToEngineMap.put(newViewModel, 
bevFactory.createRenderingEngine(presentationPanel, newViewModel));
                        presentationMap.put((CyNetworkView) newViewModel, 
presentationPanel);
                }
-               
-               bevPanel.removeAll();
                final Dimension currentPanelSize = bevPanel.getSize();
                bevPanel.setLayout(new BorderLayout());
                presentationPanel.setSize(currentPanelSize);
                presentationPanel.setPreferredSize(currentPanelSize);
-               
-               // TODO: Update timing is not correct.
+
+               bevPanel.removeAll();
                bevPanel.add(presentationPanel, BorderLayout.CENTER);
-               setFocus();
-               
-               presentationPanel.repaint();            
-               bevPanel.repaint();
+               bevPanel.updateUI();
        }
 
        @Override
@@ -225,20 +152,24 @@
                        }
                });
        }
-       
+
        private final void removeView(final CyNetworkViewManager manager) {
                Set<CyNetworkView> toBeRemoved = new HashSet<CyNetworkView>();
-               for(CyNetworkView view: this.presentationMap.keySet()) {
-                       if(manager.getNetworkViewSet().contains(view) == false)
+               for (CyNetworkView view : this.presentationMap.keySet()) {
+                       if (manager.getNetworkViewSet().contains(view) == false)
                                toBeRemoved.add(view);
                }
-               
-               for(CyNetworkView view: toBeRemoved)
-                       presentationMap.remove(view);
 
+               for (CyNetworkView view : toBeRemoved) {
+                       JPanel panel = presentationMap.remove(view);
+                       RenderingEngine<?> engine = 
viewToEngineMap.remove(view);
+                       panel = null;
+                       engine = null;
+               }
+
                toBeRemoved.clear();
                toBeRemoved = null;
-               
+
                // Cleanup the visualization container
                if (appManager.getCurrentNetworkView() == null) {
                        bevPanel.removeAll();

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to