Kaynağa Gözat

Delete von HolonElements in following scenarios: Single HolonObj Selection with Single HolonEle Selection, Single HolonObj Selection with Multi HolonEle Selection, Multi HolonObj Selection with Single HolonEle Selection and Multi HolonObj Selection with Multi HolonEle Selection

Edgardo Palza 8 yıl önce
ebeveyn
işleme
5b9a015021
1 değiştirilmiş dosya ile 64 ekleme ve 32 silme
  1. 64 32
      src/ui/view/GUI.java

+ 64 - 32
src/ui/view/GUI.java

@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 
 import javax.swing.AbstractAction;
 import javax.swing.ActionMap;
@@ -70,6 +71,7 @@ import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.HolonTransformer;
+import sun.nio.ch.SelChImpl;
 import ui.controller.Control;
 import ui.model.Model;;
 
@@ -103,6 +105,7 @@ public class GUI<E> implements CategoryListener {
 	private final JLabel elementGraph = new JLabel("None ");
 	private final ArrayList<HolonElement> selectedElements = new ArrayList<HolonElement>();
 	private String holonEleNamesDisplayed = "None ";
+	HashMap<Integer, ArrayList<HolonElement>> eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
 
 	private final JTree tree = new JTree();
 	private final JEditorPane dtrpnHereWillBe = new JEditorPane();
@@ -462,18 +465,20 @@ public class GUI<E> implements CategoryListener {
 		 */
 		btnAddHolEL.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent arg0) {
-				CpsObject tempCpsObject = getActualCps();
-				if (tempCpsObject != null && tempCpsObject.getClass() == HolonObject.class
-						&& tempCpsObject.getID() != 0) {
-					addElementPopUp = new AddElementPopUp();
-					addElementPopUp.setActualCps(getActualCps());
-					addElementPopUp.setVisible(true);
-					HolonElement ele = addElementPopUp.getElement();
-					controller.addElementCanvasObject(tempCpsObject.getID(), ele.getEleName(), ele.getAmount(),
-							ele.getEnergy());
-					refreshTableHolonElement();
-					refreshTableProperties();
-					controller.calculateStateForTimeStep(model.getCurIteration());
+				if (model.getSelectedCpsObjects().size() == 1) {
+					CpsObject tempCpsObject = getActualCps();
+					if (tempCpsObject != null && tempCpsObject.getClass() == HolonObject.class
+							&& tempCpsObject.getID() != 0) {
+						addElementPopUp = new AddElementPopUp();
+						addElementPopUp.setActualCps(getActualCps());
+						addElementPopUp.setVisible(true);
+						HolonElement ele = addElementPopUp.getElement();
+						controller.addElementCanvasObject(tempCpsObject.getID(), ele.getEleName(), ele.getAmount(),
+								ele.getEnergy());
+						refreshTableHolonElement();
+						refreshTableProperties();
+						controller.calculateStateForTimeStep(model.getCurIteration());
+					}
 				}
 			}
 		});
@@ -482,15 +487,25 @@ public class GUI<E> implements CategoryListener {
 		 */
 		btnDelHolEL.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent arg0) {
-				if (getActualCps().getClass() == HolonObject.class) {
-					HolonObject obj = (HolonObject) getActualCps();
-					tempElement = getActualHolonElement(obj, yValueElements);
-					if (tempElement != null && obj.getClass() == HolonObject.class && obj.getID() != 0) {
-						controller.deleteElementCanvas(obj.getID(), tempElement.getEleName());
-						refreshTableHolonElement();
-						refreshTableProperties();
-						controller.calculateStateForTimeStep(model.getCurIteration());
+				if (model.getSelectedCpsObjects().size() == 1) {
+					if (getActualCps().getClass() == HolonObject.class) {
+						HolonObject obj = (HolonObject) getActualCps();
+						for (HolonElement e : selectedElements) {
+							controller.deleteElementCanvas(obj.getID(), e.getEleName());
+							refreshTableHolonElement();
+							refreshTableProperties();
+							controller.calculateStateForTimeStep(model.getCurIteration());
+							// Names displayed in graph are not updated
+						}
+					}
+				} else if (model.getSelectedCpsObjects().size() > 1) {
+					for (Integer i : eleToDelete.keySet()) {
+						for (HolonElement e : eleToDelete.get(i)) {
+							controller.deleteElementCanvas(i, e.getEleName());
+						}
 					}
+					refreshTableHolonElement();
+					refreshTableProperties();
 				}
 			}
 		});
@@ -503,9 +518,9 @@ public class GUI<E> implements CategoryListener {
 				yValueElements = e.getY();
 				HolonElement ele = null;
 				if (model.getSelectedCpsObjects().size() == 1) {
-					ele = getActualHolonElement(obj, yValueElements);
+					ele = getActualHolonElement(obj, yValueElements, 0);
 				} else {
-					ele = getActualHolonElement(null, yValueElements);
+					ele = getActualHolonElement(null, yValueElements, 0);
 				}
 				if (e.isControlDown() && ele != null) {
 					if (!selectedElements.contains(ele)) {
@@ -517,9 +532,11 @@ public class GUI<E> implements CategoryListener {
 						}
 						unitGraph.repaintWithNewElement(selectedElements);
 					}
+					getActualHolonElement(null, yValueElements, 2);
 				} else if (ele != null) {
 					selectedElements.clear();
 					selectedElements.add(ele);
+					getActualHolonElement(null, yValueElements, 1);
 					holonEleNamesDisplayed = ele.getEleName() + " ";
 					unitGraph.repaintWithNewElement(selectedElements);
 				} else {
@@ -569,13 +586,13 @@ public class GUI<E> implements CategoryListener {
 						int selectedValueBX = (int) Math.floor(xBTHIS / (tableHolonElement.getWidth() / 5));
 						if (getHolonObj(yMouse) != null) {
 							if (selectedValueBX == 4) {
-								HolonElement eleBTemp = getActualHolonElement(null, yBMouse);
+								HolonElement eleBTemp = getActualHolonElement(null, yBMouse, 0);
 								String newBStuff = tableModelHolonElementMulti
 										.getValueAt(selectedValueBY, selectedValueBX).toString();
 								Boolean bTemp = Boolean.parseBoolean(newBStuff);
 								eleBTemp.setActive(bTemp);
 							} else {
-								HolonElement eleTemp = getActualHolonElement(null, yMouse);
+								HolonElement eleTemp = getActualHolonElement(null, yMouse, 0);
 								String newStuff = tableModelHolonElementMulti.getValueAt(selectedValueY, selectedValueX)
 										.toString();
 								// Small bug, when it comes to edit the name of
@@ -597,13 +614,13 @@ public class GUI<E> implements CategoryListener {
 						int selectedValueBX = (int) Math.floor(xBTHIS / (tableHolonElement.getWidth() / 4));
 						if (getActualCps() != null && getActualCps().getClass() == HolonObject.class) {
 							if (selectedValueBX == 3) {
-								HolonElement eleBTemp = getActualHolonElement((HolonObject) getActualCps(), yBMouse);
+								HolonElement eleBTemp = getActualHolonElement((HolonObject) getActualCps(), yBMouse, 0);
 								String newBStuff = tableModelHolonElementSingle
 										.getValueAt(selectedValueBY, selectedValueBX).toString();
 								Boolean bTemp = Boolean.parseBoolean(newBStuff);
 								eleBTemp.setActive(bTemp);
 							} else {
-								HolonElement eleTemp = getActualHolonElement((HolonObject) getActualCps(), yMouse);
+								HolonElement eleTemp = getActualHolonElement((HolonObject) getActualCps(), yMouse, 0);
 								String newStuff = tableModelHolonElementSingle
 										.getValueAt(selectedValueY, selectedValueX).toString();
 								// Small bug, when it comes to edit the name of
@@ -618,11 +635,6 @@ public class GUI<E> implements CategoryListener {
 									eleTemp.setAmount(iTemp);
 								}
 							}
-							// for (HolonElement e : ((HolonObject)
-							// getActualCps()).getElements()) {
-							// System.out.println(e.getEleName() + ", " +
-							// e.getEnergy() + ", " + e.getAmount());
-							// }
 							refreshTableProperties();
 							tableModelHolonElementSingle.fireTableDataChanged();
 							controller.calculateStateForTimeStep(model.getCurIteration());
@@ -1363,9 +1375,12 @@ public class GUI<E> implements CategoryListener {
 	 *            selected HolonObject
 	 * @param yValue
 	 *            Y-Coord in the HolonElementsTable
+	 * @param toMultiHash
+	 *            0 means no MultiSelection, 1 means MultiSelection without
+	 *            Control, 2 means MultiSelection with Control
 	 * @return the selected HolonElement
 	 */
-	public HolonElement getActualHolonElement(HolonObject obj, int yValue) {
+	public HolonElement getActualHolonElement(HolonObject obj, int yValue, int toMultiHash) {
 		final int yTemp = (int) Math.floor(yValue / 16);
 		int rowsTotal = tableModelHolonElementSingle.getRowCount();
 		if (obj == null) {
@@ -1379,13 +1394,30 @@ public class GUI<E> implements CategoryListener {
 				int idTemp = Integer.parseInt(temp.split(", ")[1]);
 				obtTemp = (HolonObject) controller.searchByID(idTemp);
 				eleTempName = tableModelHolonElementMulti.getValueAt(yTemp, 1).toString();
+				ArrayList<HolonElement> eleTemp = new ArrayList<HolonElement>();
+				if (eleToDelete.containsKey(idTemp) && toMultiHash == 2) {
+					eleTemp = eleToDelete.get(idTemp);
+					if (!eleTemp.contains(obtTemp.searchElement(eleTempName))) {
+						eleTemp.add(obtTemp.searchElement(eleTempName));
+						eleToDelete.replace(idTemp, eleTemp);
+					}
+				} else if (toMultiHash == 2) {
+					eleTemp.add(obtTemp.searchElement(eleTempName));
+					eleToDelete.put(idTemp, eleTemp);
+				} else if (toMultiHash == 1) {
+					eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
+					eleTemp.add(obtTemp.searchElement(eleTempName));
+					eleToDelete.put(idTemp, eleTemp);
+				}
 			} else {
+				eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
 				obtTemp = obj;
 				eleTempName = tableModelHolonElementSingle.getValueAt(yTemp, 0).toString();
 			}
 			model.setSelectedHolonElement(obtTemp.searchElement(eleTempName));
 			return obtTemp.searchElement(eleTempName);
 		} else {
+			eleToDelete = new HashMap<Integer, ArrayList<HolonElement>>();
 			model.setSelectedHolonElement(null);
 			return null;
 		}