From 5c0e57f4e126e3c6560f8eab695eb2d591a8c335 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 12 Jul 2012 14:55:03 +0200 Subject: Take getVertex(point) and getEdge(point) from GraphModel --- .../controller/EdgeConstructionController.java | 15 ++++-- .../controller/MultiSelectionDragController.java | 8 +-- .../com/c2kernel/gui/graph/view/EditorPanel.java | 3 +- .../com/c2kernel/gui/graph/view/GraphPanel.java | 58 ++++++++++++++++++++-- 4 files changed, 72 insertions(+), 12 deletions(-) (limited to 'src/main/java/com/c2kernel/gui/graph') 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 vertexVector = new Vector(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)) { -- cgit v1.2.3