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.