Author: Christian Lopes
Date: 2011-03-23 15:22:04 -0700 (Wed, 23 Mar 2011)
New Revision: 24562

Modified:
   core3/swing-application-impl/trunk/pom.xml
   
core3/swing-application-impl/trunk/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
Log:
Added a NetworkViewChangeMicroListener to NetworkViewManager, so the width and 
height of the JInternalFrames can be updated when the respective visual 
properties are set to the network views (now the size of the network views are 
restored when loading a session).
Updated presentation-api dependency to 3.0.0-alpha3-SNAPSHOT.

Modified: core3/swing-application-impl/trunk/pom.xml
===================================================================
--- core3/swing-application-impl/trunk/pom.xml  2011-03-23 22:14:23 UTC (rev 
24561)
+++ core3/swing-application-impl/trunk/pom.xml  2011-03-23 22:22:04 UTC (rev 
24562)
@@ -114,7 +114,7 @@
                <dependency>
                        <groupId>org.cytoscape</groupId>
                        <artifactId>presentation-api</artifactId>
-                       <version>3.0.0-alpha2</version>
+                       <version>3.0.0-alpha3-SNAPSHOT</version>
                </dependency>
         <dependency>
             <groupId>cytoscape-sun</groupId>

Modified: 
core3/swing-application-impl/trunk/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
===================================================================
--- 
core3/swing-application-impl/trunk/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
        2011-03-23 22:14:23 UTC (rev 24561)
+++ 
core3/swing-application-impl/trunk/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
        2011-03-23 22:22:04 UTC (rev 24562)
@@ -36,8 +36,7 @@
  */
 package org.cytoscape.internal.view;
 
-import static 
org.cytoscape.view.presentation.property.TwoDVisualLexicon.NETWORK_TITLE;
-
+import java.awt.Dimension;
 import java.beans.PropertyVetoException;
 import java.util.HashMap;
 import java.util.List;
@@ -50,12 +49,15 @@
 import javax.swing.event.InternalFrameEvent;
 import javax.swing.event.InternalFrameListener;
 
+import org.cytoscape.application.swing.CyHelpBroker;
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.events.RowSetMicroListener;
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.property.session.Cysession;
+import org.cytoscape.property.session.NetworkFrame;
 import org.cytoscape.session.CyApplicationManager;
 import org.cytoscape.session.CySession;
-import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedEvent;
-import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedListener;
 import org.cytoscape.session.events.SessionLoadedEvent;
 import org.cytoscape.session.events.SessionLoadedListener;
 import org.cytoscape.session.events.SetCurrentNetworkEvent;
@@ -64,23 +66,22 @@
 import org.cytoscape.session.events.SetCurrentNetworkViewListener;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewManager;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedEvent;
+import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedListener;
 import org.cytoscape.view.model.events.NetworkViewAddedEvent;
 import org.cytoscape.view.model.events.NetworkViewAddedListener;
+import org.cytoscape.view.model.events.NetworkViewChangeMicroListener;
 import org.cytoscape.view.presentation.RenderingEngine;
 import org.cytoscape.view.presentation.RenderingEngineFactory;
-import org.cytoscape.property.CyProperty;
-import org.cytoscape.property.session.Cysession;
-import org.cytoscape.property.session.NetworkFrame;
-
-import org.cytoscape.application.swing.CyHelpBroker;
-import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.view.presentation.property.TwoDVisualLexicon;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
 /**
  * Actually, this is a presentation manager.
- * 
  */
 public class NetworkViewManager implements InternalFrameListener,
                NetworkViewAddedListener, NetworkViewAboutToBeDestroyedListener,
@@ -113,7 +114,8 @@
        //TODO: for now, use this as default.  But in the future, we should 
provide UI to select presentation.
        private static final String DEFAULT_PRESENTATION = "ding";
 
-       private final Map<CyNetwork,RowSetMicroListener> nameListeners;
+       private final Map<CyNetworkView, NetworkViewChangeMicroListener> 
netViewChangeListeners;
+       private final Map<CyNetwork, RowSetMicroListener> nameListeners;
        
        private final CyEventHelper eventHelper;
        private final CyNetworkViewManager networkViewManager;
@@ -145,10 +147,10 @@
                componentMap = new HashMap<JInternalFrame, Long>();
                currentPresentationContainerID = null;
 
-               nameListeners = new HashMap<CyNetwork,RowSetMicroListener>();
+               netViewChangeListeners = new HashMap<CyNetworkView, 
NetworkViewChangeMicroListener>();
+               nameListeners = new HashMap<CyNetwork, RowSetMicroListener>();
        }
        
-       
        /**
         * Dynamically add rendering engine factories. 
         * 
@@ -171,12 +173,10 @@
                logger.info("New Rendering Engine is Available: " + rendererID);
        }
        
-       
        public void removePresentationFactory(RenderingEngineFactory<CyNetwork> 
factory, Map props) {
                factories.remove(props.get(ID));
        }
        
-       
        /**
         * Desktop for JInternalFrames which contains actual network 
presentations.
         * 
@@ -206,38 +206,18 @@
                return presentationContainerMap.get(view.getModel().getSUID());
        }
 
-       
        /**
-        * DOCUMENT ME!
-        * 
-        * @param network
-        *            DOCUMENT ME!
-        */
-       private void updateNetworkTitle(CyNetwork network) {
-               JInternalFrame frame = 
presentationContainerMap.get(network.getSUID());
-
-               if ( frame != null ) {
-                       frame.setTitle(network.getCyRow().get("name", 
String.class));
-                       frame.repaint();
-               }
-       }
-
-       
-       /**
         * View switched
         */
        public void internalFrameActivated(InternalFrameEvent e) {
-               final Long network_id = componentMap.get(e.getInternalFrame());
+               final Long networkId = componentMap.get(e.getInternalFrame());
+               if (networkId == null) return;
 
-               
-               if (network_id == null)
-                       return;
-
                final RenderingEngine<CyNetwork> currentEngine = 
applicationManager.getCurrentRenderingEngine();
-               applicationManager.setCurrentNetworkView(network_id);
+               applicationManager.setCurrentNetworkView(networkId);
                
-               if(currentEngine.getViewModel().getModel().getSUID() != 
network_id)
-                       
applicationManager.setCurrentRenderingEngine(presentationMap.get(network_id));
+               if (currentEngine == null || 
currentEngine.getViewModel().getModel().getSUID() != networkId)
+                       
applicationManager.setCurrentRenderingEngine(presentationMap.get(networkId));
        }
 
        /**
@@ -316,62 +296,12 @@
                logger.info("Attempting to set current network model: Model ID 
= " + e.getNetwork().getSUID());
                setFocus(e.getNetwork().getSUID());             
        }
-
-       private void setFocus(Long networkModelID) {
-               if(networkModelID == null) {
-                       logger.warn("Set Focus method got a null as target 
ID.");
-                       return;
-               }
-               
-               final CyNetworkView targetViewModel = 
networkViewManager.getNetworkView(networkModelID);
-               if(targetViewModel == null) {
-                       logger.debug("View model does not exist for model ID: " 
+ networkModelID);
-                       return;
-               }
-               
-               // make sure we're not redundant
-               if (currentPresentationContainerID != null && 
currentPresentationContainerID.equals(networkModelID)) {
-                       logger.debug("Same as current focus.  No need to update 
focus: model ID = " + networkModelID);
-                       return;
-               }
-
-               currentPresentationContainerID = networkModelID;
-
-               // Reset focus on frames
-               for (JInternalFrame f : presentationContainerMap.values()) {
-                       try {
-                               f.setSelected(false);
-                       } catch (PropertyVetoException pve) {
-                               logger.error("Couldn't reset focus for internal 
frames.", pve);
-                       }
-               }
-
-               // Set focus
-               if (presentationContainerMap.containsKey(networkModelID)) {
-                       try {
-                               logger.debug("Updating JInternalFrame 
selection");
-                               final JInternalFrame curr = 
presentationContainerMap.get(networkModelID);
-
-                               curr.setIcon(false);
-                               curr.show();
-                               // fires internalFrameActivated
-                               curr.setSelected(true);
-
-                       } catch (Exception ex) {
-                               logger.error("Could not update focus: ", ex);
-                       }
-               } else {
-                       logger.debug("Frame was not found. Need to create new 
frame for presentation.");
-               }
-       }
-
        
        public void handleEvent(NetworkViewAboutToBeDestroyedEvent nvde) {
                logger.info("Network view destroyed: View ID = " + 
nvde.getNetworkView());
                removeView(nvde.getNetworkView());
        }
 
-       
        /**
         * Adding new network view model to this manager.
         * Then, create default presentation.
@@ -381,7 +311,6 @@
                                + nvae.getNetworkView().getSUID());
                render(nvae.getNetworkView());
        }
-
        
        protected void removeView(CyNetworkView view) {
                try {
@@ -391,8 +320,13 @@
                }
 
                presentationContainerMap.remove(view.getModel().getSUID());
+               
+               NetworkViewChangeMicroListener nvcml = 
netViewChangeListeners.remove(view);
+               if (nvcml != null)
+                       eventHelper.removeMicroListener(nvcml, 
NetworkViewChangeMicroListener.class, view);
+                       
                RowSetMicroListener rsml = 
nameListeners.remove(view.getModel());
-               if ( rsml != null )
+               if (rsml != null)
                        eventHelper.removeMicroListener(rsml, 
RowSetMicroListener.class, view.getModel().getCyRow().getTable());
        }
 
@@ -401,29 +335,32 @@
         * 
         */
        protected void render(final CyNetworkView view) {
+               final Long netModelId = view.getModel().getSUID();
                
                // If already registered in this manager, do not render.
-               if 
(presentationContainerMap.containsKey(view.getModel().getSUID()))
+               if (presentationContainerMap.containsKey(netModelId))
                        return;
 
                // Create a new InternalFrame and put the CyNetworkView 
Component into it
-               final JInternalFrame iframe = new JInternalFrame(view
-                               .getVisualProperty(NETWORK_TITLE), true, true, 
true, true);
+               final String title = view.getModel().getCyRow().get("name", 
String.class);
+               final JInternalFrame iframe = new JInternalFrame(title, true, 
true, true, true);
+               
                iframe.addInternalFrameListener(new InternalFrameAdapter() {
                        public void internalFrameClosing(InternalFrameEvent e) {
                                networkViewManager.destroyNetworkView(view);
                        }
                });
+               
                desktopPane.add(iframe);
+               presentationContainerMap.put(netModelId, iframe);
+               componentMap.put(iframe, netModelId);
 
                long start = System.currentTimeMillis();
                logger.debug("Rendering view model: " + view.getSUID());
                final RenderingEngine<CyNetwork> renderingEngine = 
currentRenderingEngineFactory.getInstance(iframe, view);
                logger.debug("Rendering finished in " + 
(System.currentTimeMillis() - start) + " m sec.");
+               presentationMap.put(netModelId, renderingEngine);
                
-               this.presentationMap.put(view.getModel().getSUID(), 
renderingEngine);
-               
-               
                iframe.pack();
 
                // create cascade iframe
@@ -432,59 +369,72 @@
                JInternalFrame refFrame = null;
                JInternalFrame[] allFrames = desktopPane.getAllFrames();
 
-               if (allFrames.length > 1) {
-                       refFrame = allFrames[0];
-               }
+               // frame Location
+               if (allFrames.length > 1) refFrame = allFrames[0];
 
                if (refFrame != null) {
                        x = refFrame.getLocation().x + 20;
                        y = refFrame.getLocation().y + 20;
                }
 
-               if (x > (desktopPane.getWidth() - MINIMUM_WIN_WIDTH)) {
+               if (x > (desktopPane.getWidth() - MINIMUM_WIN_WIDTH))
                        x = desktopPane.getWidth() - MINIMUM_WIN_WIDTH;
-               }
-               if (y > (desktopPane.getHeight() - MINIMUM_WIN_HEIGHT)) {
+               if (y > (desktopPane.getHeight() - MINIMUM_WIN_HEIGHT))
                        y = desktopPane.getHeight() - MINIMUM_WIN_HEIGHT;
-               }
+               if (x < 0) x = 0;
+               if (y < 0) y = 0;
 
-               if (x < 0) {
-                       x = 0;
-               }
-               if (y < 0) {
-                       y = 0;
-               }
-               iframe.setBounds(x, y, 400, 400);
+               iframe.setLocation(x, y);
 
                // maximize the frame if the specified property is set
                try {
                        String max = props.getProperty("maximizeViewOnCreate");
 
-                       if ((max != null) && Boolean.parseBoolean(max))
+                       if ((max != null) && Boolean.parseBoolean(max)) {
                                iframe.setMaximum(true);
+                       } else {
+                               int w = 
view.getVisualProperty(TwoDVisualLexicon.NETWORK_WIDTH).intValue();
+                               int h = 
view.getVisualProperty(TwoDVisualLexicon.NETWORK_HEIGHT).intValue();
+                               updateNetworkSize(netModelId, w, h);
+                       }
                } catch (PropertyVetoException pve) {
                        pve.printStackTrace();
                }
-
+               
+               // Display it and add listeners
                iframe.setVisible(true);
                iframe.addInternalFrameListener(this);
-
-               presentationContainerMap.put(view.getModel().getSUID(), iframe);
-               componentMap.put(iframe, view.getModel().getSUID());
-
-               Long sourceNetwork = view.getModel().getSUID();
-               
applicationManager.setCurrentRenderingEngine(presentationMap.get(sourceNetwork));
-
-               updateNetworkTitle( view.getModel() );  
-
-               RowSetMicroListener rsml = new AbstractNetworkNameListener( 
view.getModel() ) {
+               
+               NetworkViewChangeMicroListener nvcml = new 
NetworkViewChangeMicroListener() {
+                       @Override
+                       public void networkVisualPropertySet(View<CyNetwork> 
target, VisualProperty<?> vp, Object value) {
+                               Long id = target.getModel().getSUID();
+                               
+                               if (vp.equals(TwoDVisualLexicon.NETWORK_WIDTH)) 
{
+                                       int w = ((Double) value).intValue();
+                                       int h = iframe.getSize().height;
+                                       updateNetworkSize(id, w, h);
+                               } else if 
(vp.equals(TwoDVisualLexicon.NETWORK_HEIGHT)) {
+                                       int w = iframe.getSize().width;
+                                       int h = ((Double) value).intValue();
+                                       updateNetworkSize(id, w, h);
+                               }
+                       }
+               };
+               
+               eventHelper.addMicroListener(nvcml, 
NetworkViewChangeMicroListener.class, view);
+               netViewChangeListeners.put(view, nvcml);
+               
+               RowSetMicroListener rsml = new 
AbstractNetworkNameListener(view.getModel()) {
+                       @Override
                        public void updateNetworkName(CyNetwork net, String 
name) {
-                updateNetworkTitle(net);
+                               final String title = net.getCyRow().get("name", 
String.class);
+                updateNetworkTitle(net.getSUID(), title);
                        }
                };
                
-               eventHelper.addMicroListener( rsml, RowSetMicroListener.class, 
view.getModel().getCyRow() );
-               nameListeners.put(view.getModel(), rsml );
+               eventHelper.addMicroListener(rsml, RowSetMicroListener.class, 
view.getModel().getCyRow());
+               nameListeners.put(view.getModel(), rsml);
        }
 
        @Override
@@ -517,4 +467,69 @@
                        }
                }
        }
+       
+       private void updateNetworkTitle(Long networkModelID, String title) {
+               JInternalFrame frame = 
presentationContainerMap.get(networkModelID);
+
+               if (frame != null) {
+                       frame.setTitle(title);
+                       frame.repaint();
+               }
+       }
+       
+       private void updateNetworkSize(Long networkModelID, int width, int 
height) {
+               JInternalFrame frame = 
presentationContainerMap.get(networkModelID);
+               
+               if (frame != null && width > 0 && height > 0) {
+                       frame.setSize(new Dimension(width, height));
+               }
+       }
+       
+       private void setFocus(Long networkModelID) {
+               if(networkModelID == null) {
+                       logger.warn("Set Focus method got a null as target 
ID.");
+                       return;
+               }
+               
+               final CyNetworkView targetViewModel = 
networkViewManager.getNetworkView(networkModelID);
+               if(targetViewModel == null) {
+                       logger.debug("View model does not exist for model ID: " 
+ networkModelID);
+                       return;
+               }
+               
+               // make sure we're not redundant
+               if (currentPresentationContainerID != null && 
currentPresentationContainerID.equals(networkModelID)) {
+                       logger.debug("Same as current focus.  No need to update 
focus: model ID = " + networkModelID);
+                       return;
+               }
+
+               currentPresentationContainerID = networkModelID;
+
+               // Reset focus on frames
+               for (JInternalFrame f : presentationContainerMap.values()) {
+                       try {
+                               f.setSelected(false);
+                       } catch (PropertyVetoException pve) {
+                               logger.error("Couldn't reset focus for internal 
frames.", pve);
+                       }
+               }
+
+               // Set focus
+               if (presentationContainerMap.containsKey(networkModelID)) {
+                       try {
+                               logger.debug("Updating JInternalFrame 
selection");
+                               final JInternalFrame curr = 
presentationContainerMap.get(networkModelID);
+
+                               curr.setIcon(false);
+                               curr.show();
+                               // fires internalFrameActivated
+                               curr.setSelected(true);
+
+                       } catch (Exception ex) {
+                               logger.error("Could not update focus: ", ex);
+                       }
+               } else {
+                       logger.debug("Frame was not found. Need to create new 
frame for presentation.");
+               }
+       }
 }

-- 
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