Kevin Trometer 8 éve
szülő
commit
a80d847773

+ 7 - 7
src/classes/CpsObject.java

@@ -16,7 +16,7 @@ public abstract class CpsObject implements ComparableObject {
 	/* Path of the image for the Obj. */
 	String image;
 	/* Array of neighbors */
-	ArrayList<Pair<CpsObject, CpsEdge>> connections;
+	ArrayList<CpsEdge> connections;
 	/* Position with a X and Y value */
 	Position position;
 	/* Energy input and output of each object in the grid */
@@ -29,7 +29,7 @@ public abstract class CpsObject implements ComparableObject {
 	public CpsObject(String objName) {
 		setObjName(objName);
 		setName(objName);
-		setConnections(new ArrayList<Pair<CpsObject, CpsEdge>>());
+		setConnections(new ArrayList<CpsEdge>());
 		setPosition(new Position());
 		setImage("/Images/Dummy_House.png");
 	}
@@ -37,7 +37,7 @@ public abstract class CpsObject implements ComparableObject {
 	public CpsObject(CpsObject obj) {
 		setObjName(obj.getObjName());
 		setName(obj.getObjName());
-		setConnections(new ArrayList<Pair<CpsObject, CpsEdge>>());
+		setConnections(new ArrayList<CpsEdge>());
 		setPosition(new Position());
 		setID(idCounter.nextId());
 		setEnergyIn(obj.getEnergyIn());
@@ -88,7 +88,7 @@ public abstract class CpsObject implements ComparableObject {
 	/**
 	 * @return the connections
 	 */
-	public ArrayList<Pair<CpsObject, CpsEdge>> getConnections() {
+	public ArrayList<CpsEdge> getConnections() {
 		return connections;
 	}
 
@@ -96,16 +96,16 @@ public abstract class CpsObject implements ComparableObject {
 	 * @param arrayList
 	 *            the connections to set
 	 */
-	public void setConnections(ArrayList<Pair<CpsObject, CpsEdge>> arrayList) {
+	public void setConnections(ArrayList<CpsEdge> arrayList) {
 		this.connections = arrayList;
 	}
 
 	/* Neighbors array */
-	public ArrayList<Pair<CpsObject, CpsEdge>> getConnectedTo() {
+	public ArrayList<CpsEdge> getConnectedTo() {
 		return connections;
 	}
 
-	public void AddConnection(Pair<CpsObject, CpsEdge> toConnect) {
+	public void AddConnection(CpsEdge toConnect) {
 		connections.add(toConnect);
 	}
 

+ 22 - 5
src/ui/controller/CanvasController.java

@@ -47,16 +47,33 @@ public class CanvasController {
 	 * @param CpsObject
 	 */
 	public void deleteObjectOnCanvas(CpsObject obj) {
-		Pair<CpsObject, CpsEdge> tempPair = null;
+		CpsEdge e = null;
 		for (CpsObject cps : MODEL.getObjectsOnCanvas()) {
-			for (Pair<CpsObject, CpsEdge> p : cps.getConnections()) {
-				if (p.getKey() == obj) {
-					tempPair = p;
+			for (CpsEdge p : cps.getConnections()) {
+				if (p.getA() == obj || p.getB() == obj) {
+					e = p;
 				}
 			}
-			cps.getConnectedTo().remove(tempPair);
+			cps.getConnectedTo().remove(e);
+			MODEL.getEdgesOnCanvas().remove(e);
 		}
 		MODEL.getObjectsOnCanvas().remove(obj);
 	}
+	
+	/**
+	 * @param objectsOnCanvas
+	 *            the objectsOnCanvas to set
+	 */
+	public void addEdgeOnCanvas(CpsEdge edge) {
+		MODEL.getEdgesOnCanvas().add(edge);
+	}
+	
+	/**
+	 * @param edgesOnCanvas
+	 *            the edge to remove
+	 */
+	public void removeEdgesOnCanvas(CpsEdge edge) {
+		MODEL.getEdgesOnCanvas().remove(edge);
+	}
 
 }

+ 10 - 0
src/ui/controller/Control.java

@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.LinkedList;
 
 import classes.Category;
+import classes.CpsEdge;
 import classes.CpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
@@ -69,6 +70,15 @@ public class Control {
 	}
 
 	/* Operations for Canvas */
+
+	public void AddEdgeOnCanvas(CpsEdge edge) {
+		canvasController.addEdgeOnCanvas(edge);
+	}
+
+	public void removeEdgesOnCanvas(CpsEdge edge) {
+		canvasController.removeEdgesOnCanvas(edge);
+	}
+
 	public void addObjectCanvas(CpsObject object) {
 		canvasController.addObjectIntoCanvas(object);
 	}

+ 38 - 0
src/ui/model/Model.java

@@ -8,6 +8,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 import classes.Category;
+import classes.CpsEdge;
 import classes.CpsObject;
 import ui.controller.*;
 
@@ -32,6 +33,11 @@ public class Model {
 	 * list.
 	 */
 	private ArrayList<CpsObject> objectsOnCanvas;
+	/*
+	 * Array of all CpsObjects in our canvas. It is set by default as an empty
+	 * list.
+	 */
+	private ArrayList<CpsEdge> edgesOnCanvas;
 
 	/*
 	 * Array for all Listeners
@@ -48,6 +54,7 @@ public class Model {
 	public Model() {
 		setCategories(new ArrayList<Category>());
 		setObjectsOnCanvas(new ArrayList<CpsObject>());
+		setEdgesOnCanvas(new ArrayList<CpsEdge>());
 		setCategoryListeners(new LinkedList<CategoryListener>());
 		setObjectListeners(new LinkedList<ObjectListener>());
 	}
@@ -99,7 +106,38 @@ public class Model {
 	public void setObjectsOnCanvas(ArrayList<CpsObject> objectsOnCanvas) {
 		this.objectsOnCanvas = objectsOnCanvas;
 	}
+	
+	/**
+	 * @return the objectsOnCanvas
+	 */
+	public ArrayList<CpsEdge> getEdgesOnCanvas() {
+		return edgesOnCanvas;
+	}
 
+	/**
+	 * @param objectsOnCanvas
+	 *            the objectsOnCanvas to set
+	 */
+	public void addEdgeOnCanvas(CpsEdge edge) {
+		this.edgesOnCanvas.add(edge);
+	}
+	
+	/**
+	 * @param edgesOnCanvas
+	 *            the edge to remove
+	 */
+	public void removeEdgesOnCanvas(CpsEdge edge) {
+		this.edgesOnCanvas.remove(edge);
+	}
+	
+	/**
+	 * @param EdgesOnCanvas
+	 *            the edgesOnCanvas to set
+	 */
+	public void setEdgesOnCanvas(ArrayList<CpsEdge> arrayList) {
+		this.edgesOnCanvas = arrayList;
+	}
+	
 	/**
 	 * @return the objectListeners
 	 */

+ 24 - 9
src/ui/view/GUI.java

@@ -473,18 +473,33 @@ public class GUI implements CategoryListener {
 						Object[] tempEnergy = { "Total Energy", ((HolonObject) canvas.tempCps).getCurrentEnergy() };
 						tableModelProperties.addRow(tempEnergy);
 					}
-					ArrayList<Pair<CpsObject, CpsEdge>> temp_array = canvas.tempCps.getConnectedTo();
+					ArrayList<CpsEdge> temp_array = canvas.tempCps.getConnectedTo();
 					if (!temp_array.isEmpty()) {
 						boolean first = true;
-						for (Pair<CpsObject, CpsEdge> temp : temp_array) {
+						for (CpsEdge temp : temp_array) {
 							if (first) {
 								first = false;
-								Object[] tempConnection = { canvas.tempCps.getName() + " is connected to",
-										temp.getKey().getName() + " with ID: " + temp.getKey().getID() };
-								tableModelProperties.addRow(tempConnection);
+								if (canvas.tempCps.getName().compareTo(temp.getA().getCompareName()) == 0) {
+									Object[] tempConnection = { canvas.tempCps.getName() + " is connected to",
+											temp.getB().getName() + " with ID: " + temp.getB().getID() };
+									tableModelProperties.addRow(tempConnection);
+								} else {
+									Object[] tempConnection = { canvas.tempCps.getName() + " is connected to",
+											temp.getA().getName() + " with ID: " + temp.getA().getID() };
+									tableModelProperties.addRow(tempConnection);
+								}
+
 							} else {
-								Object[] tempConnection = { "", temp.getKey().getName() + " with ID: " + temp.getKey().getID() };
-								tableModelProperties.addRow(tempConnection);
+								if (canvas.tempCps.getName().compareTo(temp.getA().getCompareName()) == 0) {
+									Object[] tempConnection = { "",
+											temp.getB().getName() + " with ID: " + temp.getB().getID() };
+									tableModelProperties.addRow(tempConnection);
+								} else {
+									Object[] tempConnection = { "",
+											temp.getA().getName() + " with ID: " + temp.getA().getID() };
+									tableModelProperties.addRow(tempConnection);
+								}
+
 							}
 						}
 					}
@@ -621,8 +636,8 @@ public class GUI implements CategoryListener {
 		playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Images/node.png")).getImage()
 				.getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
 		playBtn.addActionListener(new ActionListener() {
-			public void actionPerformed(ActionEvent ae) {				
-			    timeSlider.setValue(timeSlider.getValue() + 1);		
+			public void actionPerformed(ActionEvent ae) {
+				timeSlider.setValue(timeSlider.getValue() + 1);
 			}
 		});
 

+ 44 - 47
src/ui/view/MyCanvas.java

@@ -22,6 +22,8 @@ import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JToolTip;
 
+import com.sun.javafx.geom.Line2D;
+
 import classes.CpsEdge;
 import classes.CpsNode;
 import classes.CpsObject;
@@ -102,29 +104,32 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		if (drawEdge)
 			g2.drawLine(tempCps.getPosition().x + controller.getScaleDiv2(),
 					tempCps.getPosition().y + controller.getScaleDiv2(), x, y);
-
-		for (CpsObject cps : model.getObjectsOnCanvas()) {
-			for (Pair<CpsObject, CpsEdge> con : cps.getConnectedTo()) {
-				if (con.getKey().getID() != model.getSelectedObjectID() && cps.getID() != model.getSelectedObjectID())
-					g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
-							cps.getPosition().y + controller.getScaleDiv2(),
-							con.getKey().getPosition().x + controller.getScaleDiv2(),
-							con.getKey().getPosition().y + controller.getScaleDiv2());
-				g2.drawString(con.getValue().getFlow() + "/" + con.getValue().getCapacity(),
-						(cps.getPosition().x + con.getKey().getPosition().x) / 2 + controller.getScaleDiv2(),
-						(cps.getPosition().y + con.getKey().getPosition().y) / 2 + controller.getScaleDiv2());
-			}
+		
+		for (CpsEdge con : model.getEdgesOnCanvas()) {
+			if (con.getA().getID() != model.getSelectedObjectID() && con.getB().getID() != model.getSelectedObjectID())
+				g2.drawLine(con.getA().getPosition().x + controller.getScaleDiv2(),
+						con.getA().getPosition().y + controller.getScaleDiv2(),
+						con.getB().getPosition().x + controller.getScaleDiv2(),
+						con.getB().getPosition().y + controller.getScaleDiv2());
+			g2.drawString(con.getFlow() + "/" + con.getCapacity(),
+					(con.getA().getPosition().x + con.getB().getPosition().x) / 2 + controller.getScaleDiv2(),
+					(con.getA().getPosition().y + con.getB().getPosition().y) / 2 + controller.getScaleDiv2());
 		}
 
 		// Highlighted Edge
 		g2.setColor(Color.GREEN);
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
-			for (Pair<CpsObject, CpsEdge> con : cps.getConnectedTo()) {
-				if (con.getKey().getID() == model.getSelectedObjectID())
+			for (CpsEdge con : cps.getConnectedTo()) {
+				if (con.getA().getID() == model.getSelectedObjectID()) {
+					g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
+							cps.getPosition().y + controller.getScaleDiv2(),
+							con.getA().getPosition().x + controller.getScaleDiv2(),
+							con.getA().getPosition().y + controller.getScaleDiv2());
+				} else if (con.getB().getID() == model.getSelectedObjectID())
 					g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
 							cps.getPosition().y + controller.getScaleDiv2(),
-							con.getKey().getPosition().x + controller.getScaleDiv2(),
-							con.getKey().getPosition().y + controller.getScaleDiv2());
+							con.getB().getPosition().x + controller.getScaleDiv2(),
+							con.getB().getPosition().y + controller.getScaleDiv2());
 			}
 		}
 
@@ -185,6 +190,15 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 				}
 			}
 		}
+		if (tempCps == null){
+			for (CpsEdge p : model.getEdgesOnCanvas()) {
+				Line2D l = new Line2D(p.getA().getPosition().x, p.getA().getPosition().y, p.getB().getPosition().x, p.getB().getPosition().y);
+				//line.intersects(boxX, boxY, width, height
+				if(l.intersects(x, y, 102, 102)){
+					System.out.println("lineclick");
+				}
+			}
+		}
 		// Object Selection Highlighting (selectRect)
 		objectSelectionHighlighting();
 
@@ -299,16 +313,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 	private void drawDeleteEdge() {
 		boolean node = true;
 		boolean newEdge = true;
-		CpsEdge e;
-		CpsNode n = null;
-		Pair<CpsObject, CpsEdge> tempPair = null;
-		Pair<CpsObject, CpsEdge> cpsPair = null;
-
-		for (Pair<CpsObject, CpsEdge> p : tempCps.getConnections()) {
-			if (p.getKey() == tempCps) {
-				cpsPair = p;
-			}
-		}
+		CpsEdge e = null;
 
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
 			cx = cps.getPosition().x;
@@ -316,41 +321,33 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy
 					&& cps != tempCps) {
 				node = false;
-				for (Pair<CpsObject, CpsEdge> p : tempCps.getConnections()) {
-					if (p.getKey() == cps) {
+				for (CpsEdge p : tempCps.getConnections()) {
+					if ((p.getA() == tempCps && p.getB() == cps) || (p.getB() == tempCps && p.getA() == cps)) {
 						newEdge = false;
-						cpsPair = p;
-						for (Pair<CpsObject, CpsEdge> pp : cps.getConnections()) {
-							if (pp.getKey() == tempCps) {
-								tempPair = pp;
-							}
-						}
+						e = p;
 					}
 				}
-				tempCps.getConnections().remove(cpsPair);
-				cps.getConnections().remove(tempPair);
+				controller.removeEdgesOnCanvas(e);
+				tempCps.getConnections().remove(e);
+				cps.getConnections().remove(e);
 				if (newEdge) {
 					e = new CpsEdge(cps, tempCps);
-					tempPair = new Pair<CpsObject, CpsEdge>(tempCps, e);
-					cpsPair = new Pair<CpsObject, CpsEdge>(cps, e);
-
-					cps.AddConnection(tempPair);
-					tempCps.AddConnection(cpsPair);
-
+					cps.AddConnection(e);
+					tempCps.AddConnection(e);
+					controller.AddEdgeOnCanvas(e);
 				}
 			}
 		}
 		if (node) {
-			n = new CpsNode("Node");
+			CpsNode n = new CpsNode("Node");
 			n.setPosition(x - model.getScaleDiv2(), y - model.getScaleDiv2());
 			controller.addObjectCanvas(n);
 
 			e = new CpsEdge(n, tempCps);
-			tempPair = new Pair<CpsObject, CpsEdge>(tempCps, e);
-			cpsPair = new Pair<CpsObject, CpsEdge>(n, e);
 
-			n.AddConnection(tempPair);
-			tempCps.AddConnection(cpsPair);
+			n.AddConnection(e);
+			tempCps.AddConnection(e);
+			controller.AddEdgeOnCanvas(e);
 			System.out.println("node ID: " + n.getID());
 		}
 	}