diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2012-07-12 14:55:03 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2012-07-12 14:55:03 +0200 |
| commit | 5c0e57f4e126e3c6560f8eab695eb2d591a8c335 (patch) | |
| tree | 3aae863338016ecce125f6adbb70d48924bf553e /src | |
| parent | eacd6cecdeeb14f9c96e74fafbacbc7f7c4804b8 (diff) | |
Take getVertex(point) and getEdge(point) from GraphModel
Diffstat (limited to 'src')
4 files changed, 72 insertions, 12 deletions
diff --git a/src/main/java/com/c2kernel/gui/graph/controller/EdgeConstructionController.java b/src/main/java/com/c2kernel/gui/graph/controller/EdgeConstructionController.java index b200991..87742f8 100644 --- a/src/main/java/com/c2kernel/gui/graph/controller/EdgeConstructionController.java +++ b/src/main/java/com/c2kernel/gui/graph/controller/EdgeConstructionController.java @@ -9,11 +9,13 @@ import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.graph.model.Vertex;
import com.c2kernel.gui.graph.view.EditorModeListener;
import com.c2kernel.gui.graph.view.EditorToolBar;
+import com.c2kernel.gui.graph.view.GraphPanel;
public class EdgeConstructionController extends MouseAdapter implements EditorModeListener
{
private GraphModelManager mGraphModelManager = null;
+ private GraphPanel mGraphPanel = null;
private EditorToolBar mEditorToolBar = null;
@@ -165,6 +167,11 @@ public class EdgeConstructionController extends MouseAdapter implements EditorMo {
mGraphModelManager = graphModelManager;
}
+
+ public void setGraphPanel(GraphPanel graphPanel)
+ {
+ mGraphPanel = graphPanel;
+ }
public void setEditorToolBar(EditorToolBar editorToolBar)
@@ -194,11 +201,11 @@ public class EdgeConstructionController extends MouseAdapter implements EditorMo Vertex vertex = null;
Point mousePoint = null;
- if(mGraphModelManager != null)
+ if(mGraphModelManager != null && mGraphPanel != null)
{
// Determine if there is a vertex under the mouse cursor
mousePoint = me.getPoint();
- vertex = mGraphModelManager.getModel().getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
+ vertex = mGraphPanel.getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
// If the mouse has been pressed on a vertex
if(vertex != null)
@@ -215,11 +222,11 @@ public class EdgeConstructionController extends MouseAdapter implements EditorMo Vertex vertex = null;
Point mousePoint = null;
- if(mGraphModelManager != null)
+ if(mGraphModelManager != null && mGraphPanel != null)
{
// Determine if there is a vertex under the mouse cursor
mousePoint = me.getPoint();
- vertex = mGraphModelManager.getModel().getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
+ vertex = mGraphPanel.getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
// If the mouse has been released on a vertex which is not the origin vertex
if((vertex != null) && (vertex != mGraphModelManager.getModel().getNewEdgeOriginVertex()))
diff --git a/src/main/java/com/c2kernel/gui/graph/controller/MultiSelectionDragController.java b/src/main/java/com/c2kernel/gui/graph/controller/MultiSelectionDragController.java index 498f3d9..ed9d6a1 100644 --- a/src/main/java/com/c2kernel/gui/graph/controller/MultiSelectionDragController.java +++ b/src/main/java/com/c2kernel/gui/graph/controller/MultiSelectionDragController.java @@ -424,7 +424,7 @@ implements EditorModeListener, KeyListener if (me.getClickCount() == 2) { // want double click
Point clickedSpot = me.getPoint();
GraphPoint mouseGPoint = new GraphPoint(clickedSpot.x, clickedSpot.y);
- Vertex clicked = mGraphModelManager.getModel().getVertex(mouseGPoint);
+ Vertex clicked = mGraphPanel.getVertex(mouseGPoint);
if (clicked != null)
processEvent(kZoomIn, clicked);
}
@@ -433,8 +433,8 @@ implements EditorModeListener, KeyListener private void mousePressedWithoutCTRL(Point mousePoint)
{
GraphPoint mouseGPoint = new GraphPoint(mousePoint.x, mousePoint.y);
- DirectedEdge edge = mGraphModelManager.getModel().getEdge(mouseGPoint);
- Vertex vertex = mGraphModelManager.getModel().getVertex(mouseGPoint);
+ DirectedEdge edge = mGraphPanel.getEdge(mouseGPoint);
+ Vertex vertex = mGraphPanel.getVertex(mouseGPoint);
GraphPoint vertexCentrePoint = null;
VertexAndDisp vertexAndDisp = null;
Selection selection = null;
@@ -521,7 +521,7 @@ implements EditorModeListener, KeyListener private void mousePressedWithCTRL(Point mousePoint)
{
- Vertex vertex = mGraphModelManager.getModel().getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
+ Vertex vertex = mGraphPanel.getVertex(new GraphPoint(mousePoint.x, mousePoint.y));
if(vertex != null)
{
diff --git a/src/main/java/com/c2kernel/gui/graph/view/EditorPanel.java b/src/main/java/com/c2kernel/gui/graph/view/EditorPanel.java index a27482d..67b7a68 100644 --- a/src/main/java/com/c2kernel/gui/graph/view/EditorPanel.java +++ b/src/main/java/com/c2kernel/gui/graph/view/EditorPanel.java @@ -61,9 +61,10 @@ public class EditorPanel extends JPanel mGraphPanel.addMouseMotionListener(mMultiSelectionDragController);
mGraphPanel.addKeyListener(mMultiSelectionDragController);
mEditorToolBar.addEditorModeListener(mMultiSelectionDragController);
- // The edge construction controller modifies the graph model
+ // The edge construction controller modifies the graph model, queries the graph panel
// and listens to the graph panel and editor tool bar
mEdgeConstructionController.setGraphModelManager(mGraphModelManager);
+ mEdgeConstructionController.setGraphPanel(mGraphPanel);
mGraphPanel.addMouseListener(mEdgeConstructionController);
mGraphPanel.addMouseMotionListener(mEdgeConstructionController);
mEdgeConstructionController.setEditorToolBar(mEditorToolBar);
diff --git a/src/main/java/com/c2kernel/gui/graph/view/GraphPanel.java b/src/main/java/com/c2kernel/gui/graph/view/GraphPanel.java index a234d65..ca309b1 100644 --- a/src/main/java/com/c2kernel/gui/graph/view/GraphPanel.java +++ b/src/main/java/com/c2kernel/gui/graph/view/GraphPanel.java @@ -9,9 +9,6 @@ import java.awt.Paint; import java.awt.Polygon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import com.c2kernel.gui.graph.event.ElasticBandResizedEvent;
-import com.c2kernel.gui.graph.event.ElasticBandSetEvent;
-import com.c2kernel.gui.graph.event.SelectionMovedEvent;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
@@ -27,7 +24,10 @@ import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.ImageLoader;
import com.c2kernel.gui.graph.controller.ElasticBand;
import com.c2kernel.gui.graph.controller.Selection;
+import com.c2kernel.gui.graph.event.ElasticBandResizedEvent;
+import com.c2kernel.gui.graph.event.ElasticBandSetEvent;
import com.c2kernel.gui.graph.event.SelectionChangedEvent;
+import com.c2kernel.gui.graph.event.SelectionMovedEvent;
public class GraphPanel extends JPanel implements Observer
{
// There should always be a Selection object
@@ -316,6 +316,58 @@ public class GraphPanel extends JPanel implements Observer mSelection.mBottomRightY = newTopLeftY + selectionHeight;
mGraphModelManager.notifyObservers(mSelectionMovedEvent);
}
+
+ // If the specified point is within more than one vertex,
+ // then the smallest vertex is returned.
+ public Vertex getVertex(GraphPoint p) {
+ Object[] vertexObjs = mGraphModelManager.getModel().getVertices();
+ Vertex vertex = null;
+ Vector<Vertex> vertexVector = new Vector<Vertex>(10, 10);
+ int numVerticesFound = 0;
+ Vertex smallestVertex = null;
+ int sizeOfSmallestVertex = 0;
+ int sizeOfVertex = 0;
+ int i = 0;
+ for (i = 0; i < vertexObjs.length; i++) {
+ vertex = (Vertex)vertexObjs[i];
+ if (vertex.containsPoint(p)) {
+ vertexVector.add(vertex);
+ }
+ }
+ numVerticesFound = vertexVector.size();
+ if (numVerticesFound == 0) {
+ return null;
+ }
+ else {
+ smallestVertex = vertexVector.elementAt(0);
+ sizeOfSmallestVertex = smallestVertex.getHeight() * smallestVertex.getWidth();
+ // Determine the smallest vertex
+ for (i = 1; i < numVerticesFound; i++) {
+ vertex = vertexVector.elementAt(i);
+ sizeOfVertex = vertex.getHeight() * vertex.getWidth();
+ if (sizeOfVertex < sizeOfSmallestVertex) {
+ smallestVertex = vertex;
+ sizeOfSmallestVertex = sizeOfVertex;
+ }
+ }
+ return smallestVertex;
+ }
+ }
+
+ public DirectedEdge getEdge(GraphPoint p) {
+ Object[] edgeObjs = mGraphModelManager.getModel().getEdges();
+ DirectedEdge edge = null;
+ int i = 0;
+ for (i = 0; i < edgeObjs.length; i++) {
+ edge = (DirectedEdge)edgeObjs[i];
+ if (edge.containsPoint(p)) {
+ return edge;
+ }
+ }
+ return null;
+ }
+
+
public void setSelection(Selection s) {
// If the there is a change
if (selectionChanged(s)) {
|
