فهرست منبع

Merge branch 'Ohne_Drag_and_Drop' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons into Ohne_Drag_and_Drop

Teh-Hai Julian Zheng 8 سال پیش
والد
کامیت
dd375ff75a
1فایلهای تغییر یافته به همراه33 افزوده شده و 19 حذف شده
  1. 33 19
      src/ui/view/MyCanvas.java

+ 33 - 19
src/ui/view/MyCanvas.java

@@ -53,6 +53,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 	private int sx, sy; // Mark Coords
 
 	ArrayList<HolonElement> dataSelected = new ArrayList<HolonElement>();
+	ArrayList<CpsObject> TempSelected = new ArrayList<CpsObject>();
 
 	private boolean dragging = false; // for dragging
 	private boolean drawEdge = false; // for drawing edges
@@ -182,8 +183,8 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 						((HolonSwitch) cps).setState(false);
 					}
 				}
-				if ((cps == tempCps && model.getSelectedCpsObjects().size() == 0)
-						|| model.getSelectedCpsObjects().contains(cps)) {
+				if ((cps == tempCps && model.getSelectedCpsObjects().size() == 0 && TempSelected.size() == 0)
+						|| model.getSelectedCpsObjects().contains(cps) || TempSelected.contains(cps)) {
 					g2.setColor(Color.BLUE);
 					g2.fillRect(cps.getPosition().x - (controller.getScale() / 20),
 							cps.getPosition().y - (controller.getScale() / 20),
@@ -325,9 +326,19 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			popmenu.show(e.getComponent(), e.getX(), e.getY());
 		}
 
-		doMark = false;
+		if (doMark) {
+			doMark = false;
+			for (CpsObject cps : TempSelected) {
+				if (!model.getSelectedCpsObjects().contains(cps)) {
+					controller.addSelectedObject(cps);
+				}
+			}
+		}
+
 		controller.calculateStateForTimeStep(model.getCurIteration());
+
 		repaint();
+
 	}
 
 	@Override
@@ -335,6 +346,10 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		// If Edge is drawn
 		x = e.getX();
 		y = e.getY();
+		if (!model.getSelectedCpsObjects().contains(tempCps)) {
+			model.getSelectedCpsObjects().clear();
+		}
+
 		if (dragging) {
 			try {
 				if (model.getSelectedCpsObjects().size() > 0) {
@@ -344,8 +359,8 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 							x = e.getX() - controller.getScaleDiv2();
 							y = e.getY() - controller.getScaleDiv2();
 						} else {
-							x = e.getX() + (cps.getPosition().x - e.getX()) ;
-							y = e.getY() + (cps.getPosition().y - e.getY()) ;
+							x = e.getX() + (cps.getPosition().x - e.getX());
+							y = e.getY() + (cps.getPosition().y - e.getY());
 						}
 
 						if (x < controller.getScaleDiv2())
@@ -393,24 +408,23 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		}
 
 		// Mark Objects
+		TempSelected.clear();
 		if (doMark) {
 			for (CpsObject cps : model.getObjectsOnCanvas()) {
-				if (!model.getSelectedCpsObjects().contains(cps)) {
+				int x1 = sx, x2 = x, y1 = sy, y2 = y;
 
-					int x1 = sx, x2 = x, y1 = sy, y2 = y;
+				if (sx >= x) {
+					x1 = x;
+					x2 = sx;
+				}
+				if (sy >= y) {
+					y1 = y;
+					y2 = sy;
+				}
+				if (x1 <= cps.getPosition().x && y1 <= cps.getPosition().y && x2 >= cps.getPosition().x
+						&& y2 >= cps.getPosition().y) {
+					TempSelected.add(cps);
 
-					if (sx >= x) {
-						x1 = x;
-						x2 = sx;
-					}
-					if (sy >= y) {
-						y1 = y;
-						y2 = sy;
-					}
-					if (x1 <= cps.getPosition().x && y1 <= cps.getPosition().y && x2 >= cps.getPosition().x
-							&& y2 >= cps.getPosition().y) {
-						controller.addSelectedObject(cps);
-					}
 				}
 			}
 		}