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.