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.