|
@@ -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;
|
|
|
}
|