|
@@ -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();
|
|
@@ -307,6 +310,75 @@ public class GUI<E> implements CategoryListener {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ String delDown = "delete";
|
|
|
+ inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0, false), delDown);
|
|
|
+ actionMap.put(delDown, new AbstractAction() {
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
+ for (CpsObject cps : model.getSelectedCpsObjects()) {
|
|
|
+ controller.delCanvasObject(cps);
|
|
|
+ }
|
|
|
+ model.getSelectedCpsObjects().clear();
|
|
|
+ // controller.setSelectedObjectID(0);
|
|
|
+ for (int i = tableModelHolonElementMulti.getRowCount() - 1; i > -1; i--) {
|
|
|
+ tableModelHolonElementMulti.removeRow(i);
|
|
|
+ }
|
|
|
+ for (int i = tableModelHolonElementSingle.getRowCount() - 1; i > -1; i--) {
|
|
|
+ tableModelHolonElementSingle.removeRow(i);
|
|
|
+ }
|
|
|
+ for (int i = tableModelProperties.getRowCount() - 1; i > -1; i--) {
|
|
|
+ tableModelProperties.removeRow(i);
|
|
|
+ }
|
|
|
+ canvas.repaint();
|
|
|
+ unitGraph.empty();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ String cntrlCDown = "controlC";
|
|
|
+ inputMap.put(KeyStroke.getKeyStroke("control C"), cntrlCDown);
|
|
|
+ actionMap.put(cntrlCDown, new AbstractAction() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
+ System.out.println("copy");
|
|
|
+ controller.setClipboardObjects((ArrayList<CpsObject>) model.getSelectedCpsObjects().clone());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ String cntrlVDown = "controlV";
|
|
|
+ inputMap.put(KeyStroke.getKeyStroke("control V"), cntrlVDown);
|
|
|
+ actionMap.put(cntrlVDown, new AbstractAction() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
+ System.out.println("paste");
|
|
|
+ model.getSelectedCpsObjects().clear();
|
|
|
+ CpsObject tCps = null;
|
|
|
+ for (CpsObject cps : model.getClipboradObjects()) {
|
|
|
+ if (cps instanceof HolonObject) {
|
|
|
+ tCps = new HolonObject(cps);
|
|
|
+ ((HolonObject) tCps).setElements(((HolonObject) cps).getElements());
|
|
|
+ } else if (cps instanceof HolonSwitch) {
|
|
|
+ tCps = new HolonSwitch(cps);
|
|
|
+ }
|
|
|
+ tCps.setPosition(cps.getPosition());
|
|
|
+ controller.addObjectCanvas(tCps);
|
|
|
+ controller.addSelectedObject(tCps);
|
|
|
+ }
|
|
|
+ canvas.repaint();
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ String cntrlXDown = "controlX";
|
|
|
+ inputMap.put(KeyStroke.getKeyStroke("control X"), cntrlXDown);
|
|
|
+ actionMap.put(cntrlXDown, new AbstractAction() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
+ System.out.println("cut");
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
frmCyberPhysical.setJMenuBar(menuBar);
|
|
|
|
|
|
frmCyberPhysical.setIconImage(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
|
|
@@ -462,18 +534,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 +556,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 +587,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 +601,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 +655,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 +683,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 +704,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 +1444,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 +1463,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;
|
|
|
}
|