瀏覽代碼

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

# Conflicts:
#	.classpath
dominik.rieder 7 年之前
父節點
當前提交
a42f5d6e86

+ 4 - 0
.classpath

@@ -3,8 +3,12 @@
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="res"/>
 	<classpathentry excluding="src/|res/" kind="src" path=""/>
+	<classpathentry kind="lib" path="jars/json-simple-1.1.1.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+<<<<<<< HEAD
 	<classpathentry kind="lib" path="jars/json-simple-1.1.1.jar"/>
+=======
+>>>>>>> 94ac30ff10997d71d29da84704769fc19280ef6a
 	<classpathentry kind="output" path="bin"/>
 </classpath>

二進制
.gradle/2.2.1/taskArtifacts/cache.properties.lock


二進制
.gradle/2.2.1/taskArtifacts/fileHashes.bin


二進制
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin


二進制
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin


+ 2 - 9
build.gradle

@@ -36,15 +36,8 @@ sourceSets {
     }
 }
 
-repositories {
-   flatDir {
-       dirs 'jars'
-   }
-}
-
-
-dependencies {
-   compile name: 'json-simple-1.1.1'
+ dependencies {   
+       compile fileTree(dir: 'jars', include: ['*.jar'])
 }
 /*
 // In this section you declare where to find the dependencies of your project

+ 1 - 0
src/classes/CpsEdge.java

@@ -11,6 +11,7 @@ public class CpsEdge {
 	public CpsEdge(CpsObject A, CpsObject B){
 		setA(A);
 		setB(B);
+		this.flow = 50;
 		this.A.AddConnection(this);
 		this.B.AddConnection(this);
 		this.maxCapacity = 100;

+ 40 - 11
src/ui/view/AddObjectPopUp.java

@@ -35,6 +35,7 @@ import javax.swing.SwingConstants;
 import javax.swing.border.EmptyBorder;
 import javax.swing.filechooser.FileNameExtensionFilter;
 
+import classes.CpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
 import ui.controller.Control;
@@ -55,13 +56,14 @@ public class AddObjectPopUp extends JDialog {
 	private String filePath = " ";
 	private String givenCategory;
 	private JLabel lblImagePreview;
+	private CpsObject toEdit;
 
 	/**
 	 * Launch the application.
 	 */
 	public static void main(String[] args) {
 		try {
-			AddObjectPopUp dialog = new AddObjectPopUp();
+			AddObjectPopUp dialog = new AddObjectPopUp(false, null, null);
 			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 			dialog.setVisible(true);
 		} catch (Exception e) {
@@ -72,7 +74,8 @@ public class AddObjectPopUp extends JDialog {
 	/**
 	 * Create the dialog.
 	 */
-	public AddObjectPopUp() {
+	public AddObjectPopUp(boolean edit, CpsObject obj, String cat) {
+		toEdit = obj;
 		this.setIconImage(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
 				.getScaledInstance(30, 30, Image.SCALE_SMOOTH));
 		setBounds(100, 100, 450, 342);
@@ -108,6 +111,9 @@ public class AddObjectPopUp extends JDialog {
 					objectName.setBackground(Color.WHITE);
 				}
 			});
+			if (edit) {
+				objectName.setText(obj.getName());
+			}
 			objectName.setBounds(98, 18, 172, 20);
 			contentPanel.add(objectName);
 			objectName.setColumns(10);
@@ -143,6 +149,15 @@ public class AddObjectPopUp extends JDialog {
 					sourcePath.setBackground(Color.WHITE);
 				}
 			});
+			if (edit) {
+				sourcePath.setText(obj.getImage());
+				if (sourcePath.getText().startsWith("/Images/")) {
+					sourcePath
+							.setText(System.getProperty("user.home") + "/praktikum-holons/res/" + sourcePath.getText());
+				}
+				filePath = sourcePath.getText();
+				selectedFile = new File(sourcePath.getText());
+			}
 			sourcePath.setBounds(148, 77, 271, 20);
 			contentPanel.add(sourcePath);
 			sourcePath.setColumns(10);
@@ -178,6 +193,11 @@ public class AddObjectPopUp extends JDialog {
 				scrollPane.setViewportView(list);
 			}
 		}
+		if (edit) {
+			for (HolonElement e : ((HolonObject) obj).getElements()) {
+				addElement(e);
+			}
+		}
 		{
 			JButton btnNewButton = new JButton("Delete Element");
 			btnNewButton.addActionListener(new ActionListener() {
@@ -197,7 +217,6 @@ public class AddObjectPopUp extends JDialog {
 			lblImagePreview.setBounds(295, 3, 50, 50);
 			contentPanel.add(lblImagePreview);
 		}
-
 		{
 			JPanel buttonPane = new JPanel();
 			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
@@ -214,16 +233,23 @@ public class AddObjectPopUp extends JDialog {
 								// HolonObject(objectName.getText());
 								// theObject.setElements(hElements);
 								// theObject.setImage(imagePath);
-								controller.addObject(controller.searchCategory(givenCategory), objectName.getText(),
-										hElements, imagePath);
+								if (edit) {
+									controller.delObjectCategory(givenCategory, toEdit.getName());
+									controller.addObject(controller.searchCategory(givenCategory), objectName.getText(),
+											hElements, imagePath);
+								} else {
+									controller.addObject(controller.searchCategory(givenCategory), objectName.getText(),
+											hElements, imagePath);
+								}
 								// controller.addObjectCategory(controller.searchCategory(givenCategory),
 								// theObject);
 								//
 								// System.out.println(theObject.getImage());
 								System.out.println(givenCategory);
 								dispose();
-							} else
+							} else {
 								sourcePath.setBackground(new Color(255, 50, 50));
+							}
 						} else {
 							objectName.setBackground(new Color(255, 50, 50));
 							if (!sourcePath.getText().equals(filePath))
@@ -279,11 +305,10 @@ public class AddObjectPopUp extends JDialog {
 		try {
 			File source = new File(filePath);
 			File dest = new File(System.getProperty("user.home") + "/HolonGUI/Images/");
-		
-			 dest.mkdirs();
-			 dest = new File(dest, selectedFile.getName());
-			 imagePath = "" + dest;
-			
+			dest.mkdirs();
+			dest = new File(dest, selectedFile.getName());
+			imagePath = "" + dest;
+
 			inStream = new FileInputStream(source);
 			outStream = new FileOutputStream(dest);
 			byte[] buffer = new byte[1024];
@@ -303,6 +328,10 @@ public class AddObjectPopUp extends JDialog {
 		}
 	}
 
+	public void editInformation(HolonObject obj) {
+		objectName.setText(obj.getName());
+	}
+
 	public static String getJarContainingFolder(Class aclass) throws Exception {
 		CodeSource codeSource = aclass.getProtectionDomain().getCodeSource();
 

+ 28 - 10
src/ui/view/GUI.java

@@ -86,13 +86,14 @@ public class GUI<E> implements CategoryListener {
 	private final JScrollPane scrollPane_2 = new JScrollPane();
 	private JPopupMenu popmenuEdit = new JPopupMenu();
 	private JMenuItem editItem = new JMenuItem("Edit Object");
+	private String catOfObjToBeEdited;
 
 	private final JLabel maxGraph = new JLabel("100%");
 	private final JLabel medGraph = new JLabel("50%");
 	private final JLabel minGraph = new JLabel("0%");
 	private final JLabel elementGraph = new JLabel("None ");
 	private final ArrayList<HolonElement> selectedElements = new ArrayList<HolonElement>();
-	private String holonEleNamesDisplayed = "";
+	private String holonEleNamesDisplayed = "None ";
 
 	private final JTree tree = new JTree();
 	private final JEditorPane dtrpnHereWillBe = new JEditorPane();
@@ -388,13 +389,13 @@ public class GUI<E> implements CategoryListener {
 						} else {
 							holonEleNamesDisplayed = ele.getEleName() + " ";
 						}
-
+						unitGraph.repaintWithNewElement(selectedElements);
 					}
 				} else if (ele != null) {
 					selectedElements.clear();
 					selectedElements.add(ele);
 					holonEleNamesDisplayed = ele.getEleName() + " ";
-					unitGraph.repaintWithNewElement(ele);
+					unitGraph.repaintWithNewElement(selectedElements);
 				} else {
 					elementGraph.setText("None ");
 					unitGraph.empty();
@@ -617,9 +618,17 @@ public class GUI<E> implements CategoryListener {
 						// }
 					}
 					if (SwingUtilities.isRightMouseButton(e)) {
-						editItem.setEnabled(true);
-						System.out.println("HERE");
-						popmenuEdit.show(e.getComponent(), e.getX(), e.getY());
+						for (Category cat : model.getCategories()) {
+							for (CpsObject cps : cat.getObjects()) {
+								if (actualObjectClicked.compareTo(cps.getObjName()) == 0
+										&& !(cps instanceof HolonSwitch)) {
+									editItem.setEnabled(true);
+									popmenuEdit.show(e.getComponent(), e.getX(), e.getY());
+									catOfObjToBeEdited = selectedNode.getParent().toString();
+									tempCps = cps;
+								}
+							}
+						}
 					} else {
 						for (Category cat : model.getCategories()) {
 							for (CpsObject cps : cat.getObjects()) {
@@ -647,7 +656,16 @@ public class GUI<E> implements CategoryListener {
 				}
 			}
 		});
-
+		editItem.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				// Remove the selected Object object
+				addObjectPopUP = new AddObjectPopUp(true, tempCps, catOfObjToBeEdited);
+				addObjectPopUP.setCategory(catOfObjToBeEdited);
+				addObjectPopUP.setController(controller);
+				addObjectPopUP.setVisible(true);
+			}
+		});
 		scrollPane_1.setViewportView(tree);
 
 		scrollPane_1.setColumnHeaderView(panel);
@@ -680,7 +698,7 @@ public class GUI<E> implements CategoryListener {
 								"Please select a Category first before adding " + selectedOption + ".");
 					}
 					if (selectedNode.getLevel() == 1) {
-						addObjectPopUP = new AddObjectPopUp();
+						addObjectPopUP = new AddObjectPopUp(false, null, null);
 						addObjectPopUP.setVisible(true);
 						addObjectPopUP.setController(controller);
 						addObjectPopUP.setCategory(selectedNode.toString());
@@ -747,7 +765,7 @@ public class GUI<E> implements CategoryListener {
 						tableModelProperties.addRow(tempRatioPerc);
 					} else if (temp instanceof HolonSwitch) {
 						deleteRows();
-						Object[] tempActive = { "Active", ((HolonSwitch) temp).getActiveAt()[model.getCurIteration()]};
+						Object[] tempActive = { "Active", ((HolonSwitch) temp).getActiveAt()[model.getCurIteration()] };
 						tableModelProperties.addRow(tempActive);
 						unitGraph.repaintWithNewSwitch((HolonSwitch) temp);
 						elementGraph.setText(temp.getName());
@@ -931,7 +949,7 @@ public class GUI<E> implements CategoryListener {
 		splitPane.setLeftComponent(scrollPane_1);
 		splitPane_1.setLeftComponent(tabbedPane);
 		splitPane_1.setRightComponent(split_HolonEl_Pro);
-		split_HolonEl_Pro.setDividerLocation(600);
+		split_HolonEl_Pro.setDividerLocation(400);
 		split_HolonEl_Pro.setTopComponent(split_Graph_HolonEl);
 		split_HolonEl_Pro.setBottomComponent(scrollProperties);
 		split_Graph_HolonEl.setDividerLocation(150);

+ 15 - 3
src/ui/view/MyCanvas.java

@@ -102,7 +102,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		}
 
 		// drawEdges
-		g2.setColor(Color.BLACK);
+		//g2.setColor(Color.BLACK);
 		if (drawEdge) {
 			g2.setStroke(new BasicStroke(2));
 			g2.drawLine(tempCps.getPosition().x + controller.getScaleDiv2(),
@@ -112,8 +112,14 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		for (CpsEdge con : model.getEdgesOnCanvas()) {
 			if (con.getA().getID() != model.getSelectedObjectID() && con.getB().getID() != model.getSelectedObjectID()
 					&& con != edgeHighlight) {
-				g2.setStroke(new BasicStroke(Math.min((con.getFlow() / con.getCapacity() * 4), 4)));
-				g2.drawLine(con.getA().getPosition().x + controller.getScaleDiv2(),
+				if(con.getFlow()<=con.getCapacity()){
+						g2.setColor(Color.BLACK);
+						g2.setStroke(new BasicStroke(Math.min((con.getFlow() / con.getCapacity() * 4), 4)));
+				}else{
+					g2.setColor(Color.RED);
+					g2.setStroke(new BasicStroke(2));
+				}
+						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());
@@ -127,6 +133,11 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		if (model.getSelectedObjectID() > 0) {
 			g2.setColor(Color.BLUE);
 			for (CpsEdge con : model.getEdgesOnCanvas()) {
+				if(con.getFlow()<=con.getCapacity()){
+					g2.setStroke(new BasicStroke(Math.min((con.getFlow() / con.getCapacity() * 4), 4)));	
+				}else{
+					g2.setStroke(new BasicStroke(2));
+				}
 				if (con.getA().getID() == model.getSelectedObjectID()
 						|| con.getB().getID() == model.getSelectedObjectID() && con != edgeHighlight) {
 					g2.drawLine(con.getA().getPosition().x + controller.getScaleDiv2(),
@@ -140,6 +151,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			}
 		} else if (edgeHighlight != null) {
 			g2.setColor(Color.BLUE);
+			g2.setStroke(new BasicStroke(2));
 			g2.drawLine(edgeHighlight.getA().getPosition().x + controller.getScaleDiv2(),
 					edgeHighlight.getA().getPosition().y + controller.getScaleDiv2(),
 					edgeHighlight.getB().getPosition().x + controller.getScaleDiv2(),

+ 50 - 35
src/ui/view/UnitGraph.java

@@ -13,11 +13,14 @@ import java.awt.event.MouseMotionListener;
 import java.awt.geom.CubicCurve2D;
 import java.awt.geom.GeneralPath;
 import java.awt.geom.Line2D;
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.awt.Point;
 
 import javax.swing.JPanel;
 
+import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
+
 import classes.HolonElement;
 import ui.controller.Control;
 import ui.model.Model;
@@ -48,7 +51,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	private boolean isElement = false;
 	private boolean isSwitch = false;
 
-	private HolonElement tempElement;
+	private ArrayList<HolonElement> tempElements = new ArrayList<>();
 	private HolonSwitch tempSwitch;
 	private Model model;
 	private Control controller;
@@ -101,9 +104,6 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 
 		if (isElement) {
 			if (arrayOfFloats != null) {
-				// array fillen
-				fillArrayofValue();
-
 				// Draw the Lines
 				g2.setStroke(new BasicStroke(2));
 				g2.setColor(Color.BLACK);
@@ -338,7 +338,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 		tempP = null;
 		if (pointList != null) {
 			for (Point p : pointList) {
-				if (x >= p.getX() - dist && x <= p.getX() + dist) {
+				if (x >= p.getX() - dist * 2 && x <= p.getX() + dist * 2) {
 					if (e.getButton() == MouseEvent.BUTTON3) {
 						tempP = p;
 						deletePoint = true;
@@ -352,21 +352,21 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			if (!pointDrag && e.getButton() != MouseEvent.BUTTON3 && x != 0 && x != width) {
 				for (int i = 0; i < pointList.size() && !added; i++) {
 					if (x < pointList.get(i).getX() - dist) {
-						// Punkt hinzufügen, je nachdem ob es oberhalb oder
-						// unterhalb der hälfte ist
-						if (y < height / 2 && (pointList.get(i - 1).getY() == height - 1
-								&& pointList.get(i).getY() == height - 1)) {
-							pointList.add(i, new Point((int) (x + dist), (int) height - 1));
-							pointList.add(i, new Point((int) (x + dist), 0));
-							pointList.add(i, new Point((int) (x - dist), 0));
-							pointList.add(i, new Point((int) (x - dist), (int) height - 1));
+						// double p1, p2 um location der points zu bestimmen
+						double p1 = pointList.get(i - 1).getX();
+						double p2 = pointList.get(i).getX();
+						// Punkte hinzufügen, je nachdem ob true oder false
+						if (pointList.get(i - 1).getY() != 0 && pointList.get(i).getY() != 0) {
+							pointList.add(i, new Point((int) ((x + p2) / 2 + dist), (int) height - 1));
+							pointList.add(i, new Point((int) ((x + p2) / 2 + dist), 0));
+							pointList.add(i, new Point((int) ((x + p1) / 2 - dist), 0));
+							pointList.add(i, new Point((int) ((x + p1) / 2 - dist), (int) height - 1));
 							added = true;
-						} else if (y >= height / 2 && (pointList.get(i - 1).getY() != height - 1
-								&& pointList.get(i).getY() != height - 1)) {
-							pointList.add(i, new Point((int) (x + dist), 0));
-							pointList.add(i, new Point((int) (x + dist), (int) height - 1));
-							pointList.add(i, new Point((int) (x - dist), (int) height - 1));
-							pointList.add(i, new Point((int) (x - dist), 0));
+						} else if (pointList.get(i - 1).getY() == 0 && pointList.get(i).getY() == 0) {
+							pointList.add(i, new Point((int) ((x + p2) / 2 + dist), 0));
+							pointList.add(i, new Point((int) ((x + p2) / 2 + dist), (int) height - 1));
+							pointList.add(i, new Point((int) ((x + p1) / 2 - dist), (int) height - 1));
+							pointList.add(i, new Point((int) ((x + p1) / 2 - dist), 0));
 							added = true;
 						}
 					}
@@ -376,15 +376,20 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			// Delete a Point
 			if (deletePoint && tempP.getX() != 0
 					&& (tempP.getX() != this.getWidth() / scaleX || tempP != pointList.getLast())) {
-				System.out.println("x: " + tempP.getY());
-				// pointList.remove(tempP);
+				int i = pointList.indexOf(tempP);
+				if (tempP.getY() == 0) {
+					pointList.remove(i);
+					pointList.remove(i - 1);
+					pointList.remove(i - 2);
+					pointList.remove(i - 3);
+				}
+				if (tempP.getY() == height - 1) {
+					pointList.remove(i + 2);
+					pointList.remove(i + 1);
+					pointList.remove(i);
+					pointList.remove(i - 1);
+				}
 			}
-			// Delete This for
-			/*
-			 * for (int i = 0; i < pointList.size(); i++) {
-			 * System.out.println(pointList.get(i).getX() + ", " +
-			 * pointList.get(i).getY()); }
-			 */
 
 			repaint();
 		}
@@ -397,6 +402,10 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 			pointDrag = false;
 			tempP = null;
 		}
+		if (isElement) {
+			// array fillen
+			fillArrayofValue();
+		}
 	}
 
 	public void componentResized(ComponentEvent e) {
@@ -437,7 +446,7 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	 */
 	public void empty() {
 		pointList = null;
-		tempElement = null;
+		tempElements = null;
 		tempSwitch = null;
 		arrayOfFloats = null;
 		arrayOfBooleans = null;
@@ -484,13 +493,13 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	 * @param HolonElement
 	 *            ele, which should be visualized
 	 */
-	public void repaintWithNewElement(HolonElement ele) {
-		arrayOfFloats = ele.getEnergyAt();
-		tempElement = ele;
-		pointList = ele.getGraphPoints();
+	public void repaintWithNewElement(ArrayList<HolonElement> selectedElement) {
+		arrayOfFloats = selectedElement.get(selectedElement.size() - 1).getEnergyAt();
+		tempElements = selectedElement;
+		pointList = selectedElement.get(selectedElement.size() - 1).getGraphPoints();
 		isSwitch = false;
 		isElement = true;
-		MAXIMUM = tempElement.getEnergy();
+		MAXIMUM = selectedElement.get(selectedElement.size() - 1).getEnergy();
 		// First time clicked on the Element
 		if (pointList.isEmpty()) {
 			pointList.addFirst(new Point(0, 0));
@@ -568,9 +577,15 @@ class UnitGraph extends JPanel implements MouseListener, MouseMotionListener, Co
 	/**
 	 * Fills the Arrays of each HolonElement
 	 */
+	@SuppressWarnings("unchecked")
 	public void fillArrayofValue() {
-		for (int i = 0; i < arrayOfFloats.length; i++) {
-			arrayOfFloats[i] = convertToValueY(getYValueAt_2((int) (i * width / (model.getIterations() - 1))));
+		for (HolonElement he : tempElements) {
+			MAXIMUM = he.getEnergy();
+			he.setGraphPoints((LinkedList<Point>) pointList.clone());
+			for (int i = 0; i < arrayOfFloats.length; i++) {
+				he.getEnergyAt()[i] = convertToValueY(getYValueAt_2((int) (i * width / (model.getIterations() - 1))));
+			}
+			arrayOfFloats = he.getEnergyAt();
 		}
 	}