Author: paperwing
Date: 2012-01-06 13:50:31 -0800 (Fri, 06 Jan 2012)
New Revision: 27943

Added:
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/CytoscapeDataProcessor.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/MainCytoscapeDataProcessor.java
Modified:
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/BirdsEyeGraphicsHandler.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/GraphicsHandler.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/MainGraphicsHandler.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsSelectionData.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/SelectionInputHandler.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderEdgesProcedure.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderNodesProcedure.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/NetworkToolkit.java
Log:
added integration with CyTable, so selected nodes/edges can be displayed in the 
data table gui. Added CytoscapeDataProcessor interface for cases such as the 
CyTable where data needs to be transferred to Cytoscape from the renderer in 
order to update information from the table.

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/BirdsEyeGraphicsHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/BirdsEyeGraphicsHandler.java
  2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/BirdsEyeGraphicsHandler.java
  2012-01-06 21:50:31 UTC (rev 27943)
@@ -7,6 +7,8 @@
 import org.cytoscape.paperwing.internal.coordinator.CoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.MainCoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
+import org.cytoscape.paperwing.internal.cytoscape.CytoscapeDataProcessor;
+import org.cytoscape.paperwing.internal.cytoscape.MainCytoscapeDataProcessor;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.input.BirdsEyeInputProcessor;
 import org.cytoscape.paperwing.internal.input.InputProcessor;
@@ -104,7 +106,19 @@
        public CoordinatorProcessor getCoordinatorProcessor() {
                return new BirdsEyeCoordinatorProcessor();
        }
+       
+       @Override
+       public CytoscapeDataProcessor getCytoscapeDataProcessor() {
+               return new CytoscapeDataProcessor() {
 
+                       @Override
+                       public void processCytoscapeData(GraphicsData 
graphicsData) {
+                               // TODO Auto-generated method stub
+                               
+                       }
+               };
+       }
+
        @Override
        public void initializeGraphicsProcedures(GraphicsData graphicsData) {
                for (ReadOnlyGraphicsProcedure renderProcedure : 
renderProcedures.values()) {

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
 2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
 2012-01-06 21:50:31 UTC (rev 27943)
@@ -19,6 +19,7 @@
 
 import org.cytoscape.paperwing.internal.coordinator.CoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
+import org.cytoscape.paperwing.internal.cytoscape.CytoscapeDataProcessor;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.geometric.Vector3;
 import org.cytoscape.paperwing.internal.input.InputProcessor;
@@ -52,6 +53,7 @@
        private ShapePickingProcessor shapePickingProcessor;
        private ViewingCoordinator coordinator;
        private CoordinatorProcessor coordinatorProcessor;
+       private CytoscapeDataProcessor cytoscapeDataProcessor;
        
        private GraphicsHandler handler;
        
@@ -94,6 +96,8 @@
                
                shapePickingProcessor = handler.getShapePickingProcessor();
                inputProcessor = handler.getInputProcessor();
+               
+               cytoscapeDataProcessor = handler.getCytoscapeDataProcessor();
        }
        
        /** Attach the KeyboardMonitor and MouseMonitors, which are listeners,
@@ -131,6 +135,9 @@
                // Check input
                inputProcessor.processInput(keys, mouse, graphicsData);
                
+               // Process Cytoscape data
+               cytoscapeDataProcessor.processCytoscapeData(graphicsData);
+               
                // Reset the scene for drawing
                handler.resetSceneForDrawing(graphicsData);
                

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/GraphicsHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/GraphicsHandler.java
  2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/GraphicsHandler.java
  2012-01-06 21:50:31 UTC (rev 27943)
@@ -4,6 +4,7 @@
 
 import org.cytoscape.paperwing.internal.coordinator.CoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
+import org.cytoscape.paperwing.internal.cytoscape.CytoscapeDataProcessor;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.input.InputProcessor;
 import org.cytoscape.paperwing.internal.picking.ShapePickingProcessor;
@@ -16,6 +17,7 @@
        public ShapePickingProcessor getShapePickingProcessor();
        public ViewingCoordinator getCoordinator(GraphicsData graphicsData);
        public CoordinatorProcessor getCoordinatorProcessor();
+       public CytoscapeDataProcessor getCytoscapeDataProcessor();
        
        // Call procedures' init methods
        public void initializeGraphicsProcedures(GraphicsData graphicsData);

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/MainGraphicsHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/MainGraphicsHandler.java
      2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/MainGraphicsHandler.java
      2012-01-06 21:50:31 UTC (rev 27943)
@@ -6,6 +6,8 @@
 import org.cytoscape.paperwing.internal.coordinator.CoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.MainCoordinatorProcessor;
 import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
+import org.cytoscape.paperwing.internal.cytoscape.CytoscapeDataProcessor;
+import org.cytoscape.paperwing.internal.cytoscape.MainCytoscapeDataProcessor;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.input.InputProcessor;
 import org.cytoscape.paperwing.internal.input.MainInputProcessor;
@@ -85,12 +87,17 @@
                return new MainCoordinatorProcessor();
        }
 
+
        @Override
+       public CytoscapeDataProcessor getCytoscapeDataProcessor() {
+               return new MainCytoscapeDataProcessor();
+       }
+       
+       @Override
        public void initializeGraphicsProcedures(GraphicsData graphicsData) {
                for (ReadOnlyGraphicsProcedure renderProcedure : 
renderProcedures.values()) {
                        renderProcedure.initialize(graphicsData);
                }
        }
-
        
 }
\ No newline at end of file

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
      2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
      2012-01-06 21:50:31 UTC (rev 27943)
@@ -43,6 +43,8 @@
        public WindBirdsEyeRenderingEngine(Object container, View<CyNetwork> 
viewModel,
                        VisualLexicon visualLexicon) {
                super(container, viewModel, visualLexicon);
+               
+               System.out.println("New WindBirdsEye engine: " + this);
        }
 
        @Override
@@ -57,6 +59,4 @@
                
                animator.start();
        }
-
-       
 }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
  2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
  2012-01-06 21:50:31 UTC (rev 27943)
@@ -41,6 +41,8 @@
        public WindMainRenderingEngine(Object container, View<CyNetwork> 
viewModel,
                        VisualLexicon visualLexicon) {
                super(container, viewModel, visualLexicon);
+       
+               System.out.println("New WindMain engine: " + this);
        }
 
        @Override

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
 2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
 2012-01-06 21:50:31 UTC (rev 27943)
@@ -13,6 +13,7 @@
                        GraphicsData graphicsData) {
                
                coordinator.claimBirdsEye();
+               coordinator.setInitialBoundsMatched(false);
        }
 
        @Override
@@ -56,6 +57,16 @@
                                        coordinator.setMainCameraMoved(false);
                                }
                                
+                               // Check if bound recalculation is suggested 
due to bounds movement
+                               if (coordinator.isSuggestRecalculateBounds()) {
+                                       
+                                       // Obtain data from coordinator
+                                       
coordinatorData.setBoundsTo(coordinator.calculateBounds());
+                                       
+                                       // Unset flag
+                                       
coordinator.setSuggestRecalculateBounds(false);
+                               }
+                               
                                // Zoom to extents, use appropriate angles
                                
updateBirdsEyeCamera(coordinator.getMainCameraCopy(), graphicsData);    
                        }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
     2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
     2012-01-06 21:50:31 UTC (rev 27943)
@@ -47,6 +47,9 @@
                                        // Unset flag
                                        
coordinator.setBirdsEyeBoundsMoved(false);
                                        
+                                       // Suggest bound recalculation due to 
camera movement
+                                       
coordinator.setSuggestRecalculateBounds(true);
+                                       
                                // User moved the main camera
                                } else if 
(coordinator.checkCameraChanged(camera)) {
                                        

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
   2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
   2012-01-06 21:50:31 UTC (rev 27943)
@@ -28,6 +28,7 @@
        private boolean birdsEyeBoundsMoved = false;
        private boolean initialMainCameraInitialized = false;
        private boolean initialBoundsMatched = false;
+       private boolean suggestRecalculateBounds = false;
        
        // Claiming: Means whether a Graphics object has claimed ownership of 
this coordinator by obtaining a reference to it.
        // Linking: Whether or not that Graphics object wishes to retain the 
reference to the coordinator, useful for garbage collection
@@ -169,10 +170,10 @@
        
        // Notify that main will no longer look after this coordinator
        public void unlinkMain() {
-               mainStatus = CoordinatorStatus.CLAIMED_AND_UNLINKED;
+               mainStatus = CoordinatorStatus.UNCLAIMED_AND_UNLINKED;
                
                // Both unlinked; prepare to remove this object
-               if (birdsEyeStatus == CoordinatorStatus.CLAIMED_AND_UNLINKED) {
+               if (birdsEyeStatus == CoordinatorStatus.UNCLAIMED_AND_UNLINKED) 
{
 
                        removeFromList();
                }
@@ -180,10 +181,10 @@
        
        // Notify that bird's eye view will no longer look after this 
coordinator
        public void unlinkBirdsEye() {
-               birdsEyeStatus = CoordinatorStatus.CLAIMED_AND_UNLINKED;
+               birdsEyeStatus = CoordinatorStatus.UNCLAIMED_AND_UNLINKED;
                
                // Both unlinked; prepare to remove this object
-               if (mainStatus == CoordinatorStatus.CLAIMED_AND_UNLINKED) {
+               if (mainStatus == CoordinatorStatus.UNCLAIMED_AND_UNLINKED) {
                        
                        removeFromList();
                }
@@ -261,4 +262,12 @@
        public void setMainCameraCopy(SimpleCamera camera) {
                mainCameraCopy.set(camera);
        }
+
+       public void setSuggestRecalculateBounds(boolean 
suggestRecalculateBounds) {
+               this.suggestRecalculateBounds = suggestRecalculateBounds;
+       }
+
+       public boolean isSuggestRecalculateBounds() {
+               return suggestRecalculateBounds;
+       }
 }

Added: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/CytoscapeDataProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/CytoscapeDataProcessor.java
                         (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/CytoscapeDataProcessor.java
 2012-01-06 21:50:31 UTC (rev 27943)
@@ -0,0 +1,11 @@
+package org.cytoscape.paperwing.internal.cytoscape;
+
+import org.cytoscape.paperwing.internal.data.GraphicsData;
+
+// Responsible for interacting with Cytoscape through Cytoscape API, 
+// such as transferring data to Cytoscape's CyTables
+public interface CytoscapeDataProcessor {
+       
+       public void processCytoscapeData(GraphicsData graphicsData);
+       
+}


Property changes on: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/CytoscapeDataProcessor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/MainCytoscapeDataProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/MainCytoscapeDataProcessor.java
                             (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/MainCytoscapeDataProcessor.java
     2012-01-06 21:50:31 UTC (rev 27943)
@@ -0,0 +1,70 @@
+package org.cytoscape.paperwing.internal.cytoscape;
+
+import java.util.Set;
+
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.paperwing.internal.data.GraphicsData;
+import org.cytoscape.paperwing.internal.data.GraphicsSelectionData;
+import org.cytoscape.paperwing.internal.tools.NetworkToolkit;
+import org.cytoscape.view.model.CyNetworkView;
+
+public class MainCytoscapeDataProcessor implements CytoscapeDataProcessor {
+
+       @Override
+       public void processCytoscapeData(GraphicsData graphicsData) {
+               
+               // Perform on second frame, first frame performs initial drawing
+               // TODO: Check if necessary, the ding renderer doesn't do this
+//             if (graphicsData.getFramesElapsed() == 1) {
+//                     initializeTableSelectionState(graphicsData);
+//             }
+               
+               processDeselectedData(graphicsData);
+       }
+
+       // Performs deselection in Cytoscape data objects, such as CyTable
+       private void processDeselectedData(GraphicsData graphicsData) {
+               
+               CyNetworkView networkView = graphicsData.getNetworkView();
+               GraphicsSelectionData selectionData = 
graphicsData.getSelectionData();
+               
+               Set<Integer> toBeDeselectedNodeIndices = 
selectionData.getToBeDeselectedNodeIndices();
+               Set<Integer> toBeDeselectedEdgeIndices = 
selectionData.getToBeDeselectedEdgeIndices();
+               
+               NetworkToolkit.deselectNodes(toBeDeselectedNodeIndices, 
networkView);
+               NetworkToolkit.deselectEdges(toBeDeselectedEdgeIndices, 
networkView);
+               toBeDeselectedNodeIndices.clear();
+               toBeDeselectedEdgeIndices.clear();
+               
+               // Select nodes
+               for (int index : selectionData.getSelectedNodeIndices()) {
+                       if (!NetworkToolkit.checkNodeSelected(index, 
networkView)) {
+                               NetworkToolkit.setNodeSelected(index, 
networkView, true);
+                       }
+               }
+               
+               // Select edges
+               for (int index : selectionData.getSelectedEdgeIndices()) {
+                       if (!NetworkToolkit.checkEdgeSelected(index, 
networkView)) {
+                               NetworkToolkit.setEdgeSelected(index, 
networkView, true);
+                       }
+               }
+       }
+       
+       // Fills in the missing "selected" boolean values in CyTable
+       private void initializeTableSelectionState(GraphicsData graphicsData) {
+               CyNetworkView networkView = graphicsData.getNetworkView();
+               CyNetwork network = graphicsData.getNetworkView().getModel();
+               
+               for (CyNode node : network.getNodeList()) {
+                       NetworkToolkit.setNodeSelected(node.getIndex(), 
networkView, false);
+               }
+               
+               for (CyEdge edge : network.getEdgeList()) {
+                       NetworkToolkit.setEdgeSelected(edge.getIndex(), 
networkView, false);
+               }
+       }
+       
+}


Property changes on: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/cytoscape/MainCytoscapeDataProcessor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
        2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
        2012-01-06 21:50:31 UTC (rev 27943)
@@ -38,7 +38,7 @@
        private long startTime;
        
        /** Number of frames elapsed */
-       private int framesElapsed = 0;
+       private long framesElapsed = 0;
        
        /** End time used for FPS timing */
        private long endTime;
@@ -150,11 +150,11 @@
                return visualLexicon;
        }
 
-       public void setFramesElapsed(int framesElapsed) {
+       public void setFramesElapsed(long framesElapsed) {
                this.framesElapsed = framesElapsed;
        }
 
-       public int getFramesElapsed() {
+       public long getFramesElapsed() {
                return framesElapsed;
        }
 

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsSelectionData.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsSelectionData.java
       2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsSelectionData.java
       2012-01-06 21:50:31 UTC (rev 27943)
@@ -13,6 +13,11 @@
        /** The set of indices for edges that are selected */
        private Set<Integer> selectedEdgeIndices;
        
+       private Set<Integer> toBeDeselectedNodeIndices; 
+       
+       private Set<Integer> toBeDeselectedEdgeIndices;         
+       
+       
        /** The top left x position for the selection border */
        private int selectTopLeftX;
        
@@ -51,6 +56,9 @@
        public GraphicsSelectionData() {
                selectedNodeIndices = new LinkedHashSet<Integer>();
                selectedEdgeIndices = new LinkedHashSet<Integer>();
+               
+               toBeDeselectedNodeIndices = new LinkedHashSet<Integer>();
+               toBeDeselectedEdgeIndices = new LinkedHashSet<Integer>();
        }
        
        public Set<Integer> getSelectedNodeIndices() {
@@ -156,4 +164,22 @@
        public boolean isSelectTopLeftFound() {
                return selectTopLeftFound;
        }
+
+       public void setToBeDeselectedNodeIndices(
+                       Set<Integer> toBeDeselectedNodeIndices) {
+               this.toBeDeselectedNodeIndices = toBeDeselectedNodeIndices;
+       }
+
+       public Set<Integer> getToBeDeselectedNodeIndices() {
+               return toBeDeselectedNodeIndices;
+       }
+
+       public void setToBeDeselectedEdgeIndices(
+                       Set<Integer> toBeDeselectedEdgeIndices) {
+               this.toBeDeselectedEdgeIndices = toBeDeselectedEdgeIndices;
+       }
+
+       public Set<Integer> getToBeDeselectedEdgeIndices() {
+               return toBeDeselectedEdgeIndices;
+       }
 }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
 2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
 2012-01-06 21:50:31 UTC (rev 27943)
@@ -5,17 +5,17 @@
 public class MainInputProcessor implements InputProcessor {
        
        private InputHandler cameraInputHandler = new CameraInputHandler();
-       private InputHandler networkChangeInputHandler = new 
NetworkChangeInputHandler();
        private InputHandler dragMovementInputHandler = new 
DragMovementInputHandler();
        private InputHandler selectionInputHandler = new 
SelectionInputHandler();
+       private InputHandler networkChangeInputHandler = new 
NetworkChangeInputHandler();
        
        public void processInput(KeyboardMonitor keys, MouseMonitor mouse,
                        GraphicsData graphicsData) {
 
                cameraInputHandler.processInput(keys, mouse, graphicsData);
-               networkChangeInputHandler.processInput(keys, mouse, 
graphicsData);
                dragMovementInputHandler.processInput(keys, mouse, 
graphicsData);
                selectionInputHandler.processInput(keys, mouse, graphicsData);
+               networkChangeInputHandler.processInput(keys, mouse, 
graphicsData);
                
                keys.update();
                mouse.update();

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/SelectionInputHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/SelectionInputHandler.java
      2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/SelectionInputHandler.java
      2012-01-06 21:50:31 UTC (rev 27943)
@@ -4,11 +4,15 @@
 import java.awt.event.MouseEvent;
 import java.util.Set;
 
+import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyRow;
 import org.cytoscape.model.CyTable;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 import org.cytoscape.paperwing.internal.data.GraphicsSelectionData;
+import org.cytoscape.paperwing.internal.tools.NetworkToolkit;
+import org.cytoscape.view.model.CyNetworkView;
 
 public class SelectionInputHandler implements InputHandler {
 
@@ -21,6 +25,8 @@
                
                GraphicsSelectionData selectionData = 
graphicsData.getSelectionData();
                
+               //TODO: Check whether to have this method here or in 
MainCytoscapeDataProcessor
+//             processClearToBeDeselected(selectionData);
                
                processDeselectOther(keys, mouse, graphicsData);
                processSingleSelection(keys, mouse, graphicsData);
@@ -28,6 +34,12 @@
                processClearHover(keys, mouse, graphicsData);
        }
 
+       // Clear the set of to-be deselected nodes and edges
+       private void processClearToBeDeselected(GraphicsSelectionData 
selectionData) {
+               selectionData.getToBeDeselectedNodeIndices().clear();
+               selectionData.getToBeDeselectedEdgeIndices().clear();
+       }
+
        // Performs single selection, and deselection of previously selected 
objects
        private void processSingleSelection(KeyboardMonitor keys,
                        MouseMonitor mouse, GraphicsData graphicsData) {
@@ -41,6 +53,10 @@
                
                Set<Integer> selectedNodeIndices = 
selectionData.getSelectedNodeIndices();
                Set<Integer> selectedEdgeIndices = 
selectionData.getSelectedEdgeIndices();
+       
+               // These are needed to keep track of to-be removed objects for 
faster Cytoscape data processing
+               Set<Integer> toBeDeselectedNodeIndices = 
selectionData.getToBeDeselectedNodeIndices();
+               Set<Integer> toBeDeselectedEdgeIndices = 
selectionData.getToBeDeselectedEdgeIndices();
                
                if (!selectionData.isDragSelectMode()
                                && 
!keys.getHeld().contains(KeyEvent.VK_CONTROL)) {
@@ -51,6 +67,8 @@
                                        
                                        if 
(selectedNodeIndices.contains(newHoverNodeIndex)) {
                                                
selectedNodeIndices.remove(newHoverNodeIndex);
+                                               
toBeDeselectedNodeIndices.add(newHoverNodeIndex);
+                                               
                                        } else {
                                                
selectedNodeIndices.add(newHoverNodeIndex);
                                        }
@@ -59,6 +77,7 @@
                
                                        if 
(selectedEdgeIndices.contains(newHoverEdgeIndex)) {
                                                
selectedEdgeIndices.remove(newHoverEdgeIndex);
+                                               
toBeDeselectedEdgeIndices.add(newHoverEdgeIndex);
                                        } else {
                                                
selectedEdgeIndices.add(newHoverEdgeIndex);
                                        }
@@ -72,6 +91,9 @@
                
                GraphicsSelectionData selectionData = 
graphicsData.getSelectionData();
                
+               Set<Integer> selectedNodeIndices = 
selectionData.getSelectedNodeIndices();
+               Set<Integer> selectedEdgeIndices = 
selectionData.getSelectedEdgeIndices();
+               
                if (mouse.getPressed().contains(MouseEvent.BUTTON1)) { 
                        if (!selectionData.isDragSelectMode() 
                                        && 
!keys.getHeld().contains(KeyEvent.VK_SHIFT)
@@ -80,8 +102,11 @@
                                        //&& 
graphicsData.getPickingData().getClosestPickedNodeIndex() == NO_INDEX
                                        //&& 
graphicsData.getPickingData().getClosestPickedEdgeIndex() == NO_INDEX) {
                                
-                               selectionData.getSelectedNodeIndices().clear();
-                               selectionData.getSelectedEdgeIndices().clear();
+                               
selectionData.getToBeDeselectedNodeIndices().addAll(selectedNodeIndices);
+                               
selectionData.getToBeDeselectedEdgeIndices().addAll(selectedEdgeIndices);
+                               
+                               selectedNodeIndices.clear();
+                               selectedEdgeIndices.clear();
                        }
                }
                
@@ -140,5 +165,7 @@
                        selectionData.setHoverEdgeIndex(NO_INDEX);
                }
        }
+       
+       
 
 }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderEdgesProcedure.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderEdgesProcedure.java
   2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderEdgesProcedure.java
   2012-01-06 21:50:31 UTC (rev 27943)
@@ -260,7 +260,10 @@
                        // if (generalModifier == DrawStateModifier.ENLARGED) {
                        // modifier = DrawStateModifier.ENLARGED;
                        // } else if (selectedEdgeIndices.contains(edgeIndex)) {
-                       if (selectedEdgeIndices.contains(edgeIndex)) {
+                       
+                       
+//                     if (selectedEdgeIndices.contains(edgeIndex)) {
+                       if 
(edgeView.getVisualProperty(MinimalVisualLexicon.EDGE_SELECTED)) {
                                modifier = DrawStateModifier.SELECTED;
 
                                
edgeView.setVisualProperty(RichVisualLexicon.NODE_SELECTED,

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderNodesProcedure.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderNodesProcedure.java
   2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderNodesProcedure.java
   2012-01-06 21:50:31 UTC (rev 27943)
@@ -10,6 +10,7 @@
 
 import org.cytoscape.model.CyNode;
 import org.cytoscape.paperwing.internal.data.GraphicsData;
+import org.cytoscape.paperwing.internal.tools.NetworkToolkit;
 import org.cytoscape.paperwing.internal.tools.RenderColor;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.View;
@@ -118,8 +119,10 @@
 
                        Color color;
 
-                       if (selectedNodeIndices.contains(index)) {
-
+//                     if (selectedNodeIndices.contains(index)) {
+//                     if (NetworkToolkit.checkNodeSelected(index, 
networkView)) {
+                       if 
(nodeView.getVisualProperty(MinimalVisualLexicon.NODE_SELECTED)) {
+                       
                                gl.glScalef(1.1f, 1.1f, 1.1f);
 
                                color = (Color) nodeView
@@ -128,8 +131,6 @@
 //                             gl.glColor3f(color.getRed() / 255.0f,
 //                                             color.getGreen() / 255.0f, 
color.getBlue() / 255.0f);
 
-                               
nodeView.setVisualProperty(RichVisualLexicon.NODE_SELECTED,
-                                               true);
 
                                RenderColor.setNonAlphaColors(gl, 
DEFAULT_SELECTED_COLOR);
                        } else if (index == hoverNodeIndex) {
@@ -144,11 +145,7 @@
                                gl.glColor3f(color.getRed() / 255.0f,
                                                color.getGreen() / 255.0f, 
color.getBlue() / 255.0f);
 
-                               
nodeView.setVisualProperty(RichVisualLexicon.NODE_SELECTED,
-                                               false);
-
                                RenderColor.setNonAlphaColors(gl, 
DEFAULT_COLOR);
-
                        }
 
                        // Draw it only if the visual property says it is 
visible

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/NetworkToolkit.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/NetworkToolkit.java
     2012-01-06 21:11:58 UTC (rev 27942)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/NetworkToolkit.java
     2012-01-06 21:50:31 UTC (rev 27943)
@@ -2,7 +2,12 @@
 
 import java.util.Set;
 
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
 import org.cytoscape.paperwing.internal.geometric.Vector3;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.View;
@@ -10,6 +15,8 @@
 
 public class NetworkToolkit {
 
+       private static final String SELECTED_COLUMN_NAME = "selected";
+       
        public static Vector3 findCenter(Set<Integer> nodeIndices, 
CyNetworkView networkView, double distanceScale) {
                if (nodeIndices.isEmpty()) {
                        return null;
@@ -22,7 +29,7 @@
                
                for (Integer index : nodeIndices) {
                        nodeView = 
networkView.getNodeView(networkView.getModel().getNode(index));
-                       
+
                        if (nodeView != null) {
                                x += 
nodeView.getVisualProperty(RichVisualLexicon.NODE_X_LOCATION);
                                y += 
nodeView.getVisualProperty(RichVisualLexicon.NODE_Y_LOCATION);
@@ -116,5 +123,92 @@
                        }
                }
        }
+       
+       
+       // Updates data in CyTable as well as View<CyNode>
+       public static void deselectNodes(Set<Integer> nodeIndices, 
CyNetworkView networkView) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultNodeTable();
+               
+               CyNode node;
+               CyRow row;
+               
+               for (int index : nodeIndices) {
+                       node = network.getNode(index);
+                       
+                       if (node != null) {
+                               row = table.getRow(node.getSUID());
+                               
+                               if (row != null) {
+                                       row.set(SELECTED_COLUMN_NAME, false);
+                               }
+                               
+                               
networkView.getNodeView(node).setVisualProperty(RichVisualLexicon.NODE_SELECTED,
 false);
+                       }
+               }
+       }
+       
+       // Sets data in CyTable as well as View<CyNode>
+       public static void setNodeSelected(int index, CyNetworkView 
networkView, boolean selected) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultNodeTable();
+               CyRow row = table.getRow(network.getNode(index).getSUID());
+               
+               row.set(SELECTED_COLUMN_NAME, selected);
+               
+               
networkView.getNodeView(network.getNode(index)).setVisualProperty(
+                               RichVisualLexicon.NODE_SELECTED, selected);
+       }
 
+       public static boolean checkNodeSelected(int index, CyNetworkView 
networkView) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultNodeTable();
+               CyRow row = table.getRow(network.getNode(index).getSUID());
+               
+               return row.get(SELECTED_COLUMN_NAME, Boolean.class);
+       }
+       
+       // Updates data in CyTable as well as View<CyNode>
+       public static void deselectEdges(Set<Integer> edgeIndices, 
CyNetworkView networkView) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultEdgeTable();
+               
+               CyEdge edge;
+               CyRow row;
+               
+               for (int index : edgeIndices) {
+                       edge = network.getEdge(index);
+                       
+                       if (edge != null) {
+                               
+                               row = table.getRow(edge.getSUID());
+                               
+                               if (row != null) {
+                                       row.set(SELECTED_COLUMN_NAME, false);
+                               }
+                               
+                               
networkView.getEdgeView(edge).setVisualProperty(RichVisualLexicon.EDGE_SELECTED,
 false);
+                       }
+               }
+       }
+       
+       // Sets data in CyTable as well as View<CyNode>
+       public static void setEdgeSelected(int index, CyNetworkView 
networkView, boolean selected) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultEdgeTable();
+               CyRow row = table.getRow(network.getEdge(index).getSUID());
+               
+               row.set(SELECTED_COLUMN_NAME, selected);
+               
+               
networkView.getEdgeView(network.getEdge(index)).setVisualProperty(
+                               RichVisualLexicon.EDGE_SELECTED, selected);
+       }
+       
+       public static boolean checkEdgeSelected(int index, CyNetworkView 
networkView) {
+               CyNetwork network = networkView.getModel();
+               CyTable table = network.getDefaultNodeTable();
+               CyRow row = table.getRow(network.getEdge(index).getSUID());
+               
+               return row.get(SELECTED_COLUMN_NAME, Boolean.class);
+       }
 }

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