|
@@ -118,6 +118,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
|
|
|
private final JScrollPane canvasSP = new JScrollPane();
|
|
|
private final JScrollPane scrollPane1 = new JScrollPane();
|
|
|
+ private final JScrollPane holonSP = new JScrollPane();
|
|
|
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
|
|
private final JPanel panelTapped_SimMenu = new JPanel();
|
|
|
private JPopupMenu popmenuEdit = new JPopupMenu();
|
|
@@ -149,8 +150,6 @@ public class GUI<E> implements CategoryListener {
|
|
|
// In this section are all the Holonelements that correspond to the clicked
|
|
|
// HolonObject with consumption/production, name and amount.
|
|
|
|
|
|
- // Table for HolonElements --> all cells are editable
|
|
|
- private JTable tableHolonElement = new JTable();
|
|
|
// Model for single or multi selection
|
|
|
private final JPanel scrollElements = new JPanel();
|
|
|
private JScrollPane tableHolonElementScrollPane = new JScrollPane();
|
|
@@ -583,7 +582,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
JOptionPane.showMessageDialog(null, myPanel);
|
|
|
controller.setCanvasX(Integer.parseInt(field1.getText()));
|
|
|
controller.setCanvasY(Integer.parseInt(field2.getText()));
|
|
|
- for (int i = 2; i < tabbedPane.getTabCount(); i++) {
|
|
|
+ for (int i = 3; i < tabbedPane.getTabCount(); i++) {
|
|
|
tabbedPane.getComponentAt(i)
|
|
|
.setPreferredSize(new Dimension(model.getCanvasX(), model.getCanvasY()));
|
|
|
tabbedPane.getComponentAt(i).repaint();
|
|
@@ -625,11 +624,11 @@ public class GUI<E> implements CategoryListener {
|
|
|
// single-selection mode (CPS-Object)
|
|
|
model.getMultiTable().setColumnIdentifiers(columnNamesMulti);
|
|
|
model.getSingleTable().setColumnIdentifiers(columnNamesSingle);
|
|
|
- tableHolonElement.setBorder(null);
|
|
|
- tableHolonElement.setFillsViewportHeight(true);
|
|
|
- tableHolonElement.setCellSelectionEnabled(true);
|
|
|
- tableHolonElement.setColumnSelectionAllowed(true);
|
|
|
- tableHolonElementScrollPane.setViewportView(tableHolonElement);
|
|
|
+ model.getTableHolonElement().setBorder(null);
|
|
|
+ model.getTableHolonElement().setFillsViewportHeight(true);
|
|
|
+ model.getTableHolonElement().setCellSelectionEnabled(true);
|
|
|
+ model.getTableHolonElement().setColumnSelectionAllowed(true);
|
|
|
+ tableHolonElementScrollPane.setViewportView(model.getTableHolonElement());
|
|
|
scrollElements.setLayout(new BorderLayout(0, 0));
|
|
|
scrollElements.add(panelHolonEl, BorderLayout.NORTH);
|
|
|
scrollElements.add(tableHolonElementScrollPane);
|
|
@@ -729,11 +728,12 @@ public class GUI<E> implements CategoryListener {
|
|
|
});
|
|
|
/*
|
|
|
* Communication between HolonElement Table and displayed Graph and
|
|
|
- * Properties, as well as selection of differet HolonElements
|
|
|
+ * Properties, as well as selection of different HolonElements
|
|
|
*/
|
|
|
- tableHolonElement.addMouseListener(new MouseAdapter() {
|
|
|
+ model.getTableHolonElement().addMouseListener(new MouseAdapter() {
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
HolonObject obj = (HolonObject) updCon.getActualCps();
|
|
|
+ System.out.println(obj);
|
|
|
yValueElements = e.getY();
|
|
|
HolonElement ele = null;
|
|
|
// Search for current clicked HolonElement
|
|
@@ -788,7 +788,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
/*
|
|
|
* Triggered every time a change is made
|
|
|
*/
|
|
|
- tableHolonElement.addPropertyChangeListener(new PropertyChangeListener() {
|
|
|
+ model.getTableHolonElement().addPropertyChangeListener(new PropertyChangeListener() {
|
|
|
@Override
|
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
|
try {
|
|
@@ -798,8 +798,8 @@ public class GUI<E> implements CategoryListener {
|
|
|
int selectedValueBY = (int) Math.floor(yBMouse / 16);
|
|
|
// for multi-selection mode
|
|
|
if (model.getSelectedCpsObjects().size() > 1) {
|
|
|
- int selectedValueX = (int) Math.floor(xThis / (tableHolonElement.getWidth() / 6));
|
|
|
- int selectedValueBX = (int) Math.floor(xBThis / (tableHolonElement.getWidth() / 6));
|
|
|
+ int selectedValueX = (int) Math.floor(xThis / (model.getTableHolonElement().getWidth() / 6));
|
|
|
+ int selectedValueBX = (int) Math.floor(xBThis / (model.getTableHolonElement().getWidth() / 6));
|
|
|
if (updCon.getHolonObj(yMouse, model.getMultiTable()) != null) {
|
|
|
// For last column (boolean with a checkbox)
|
|
|
if (selectedValueBX == 5) {
|
|
@@ -831,8 +831,8 @@ public class GUI<E> implements CategoryListener {
|
|
|
}
|
|
|
} // For single-selection mode
|
|
|
else if (model.getSelectedCpsObjects().size() == 1) {
|
|
|
- int selectedValueX = (int) Math.floor(xThis / (tableHolonElement.getWidth() / 5));
|
|
|
- int selectedValueBX = (int) Math.floor(xBThis / (tableHolonElement.getWidth() / 5));
|
|
|
+ int selectedValueX = (int) Math.floor(xThis / (model.getTableHolonElement().getWidth() / 5));
|
|
|
+ int selectedValueBX = (int) Math.floor(xBThis / (model.getTableHolonElement().getWidth() / 5));
|
|
|
if (updCon.getActualCps() != null && updCon.getActualCps().getClass() == HolonObject.class) {
|
|
|
// For last column (boolean with a checkbox)
|
|
|
if (selectedValueBX == 4) {
|
|
@@ -1239,122 +1239,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
}
|
|
|
}
|
|
|
// Write new data in the PropertyTable
|
|
|
- if (temp != null) {
|
|
|
- // Name of the CpsObject
|
|
|
- Object[] tempName = { Languages.getLanguage()[72], temp.getName() };
|
|
|
- model.getPropertyTable().addRow(tempName);
|
|
|
- // Id of the CpsObject
|
|
|
- Object[] tempId = { "ID", temp.getID() };
|
|
|
- model.getPropertyTable().addRow(tempId);
|
|
|
- // For HolonObjects the Total Energy (production or
|
|
|
- // consumption) is calculated
|
|
|
- if (temp instanceof HolonObject) {
|
|
|
- updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
|
|
|
- Object[] tempEnergy = { Languages.getLanguage()[73], ((HolonObject) temp).getCurrentEnergy() };
|
|
|
- model.getPropertyTable().addRow(tempEnergy);
|
|
|
- model.getPropertyTable().setCellEditable(0, 1, true);
|
|
|
- model.getPropertyTable().setCellEditable(2, 1, false);
|
|
|
- model.getPropertyTable().setCellEditable(3, 1, false);
|
|
|
- } // For HolonSwitches is showed the actual status (active
|
|
|
- // or inactive)
|
|
|
- else if (temp instanceof HolonSwitch) {
|
|
|
- updCon.deleteRows(model.getSingleTable());
|
|
|
- updCon.deleteRows(model.getMultiTable());
|
|
|
- Object[] tempMode = { Languages.getLanguage()[74], ((HolonSwitch) temp).getManualMode() };
|
|
|
- model.getPropertyTable().addRow(tempMode);
|
|
|
- if (((HolonSwitch) temp).getManualMode()) {
|
|
|
- Object[] tempActive = { Languages.getLanguage()[75],
|
|
|
- ((HolonSwitch) temp).getActiveManual() };
|
|
|
- model.getPropertyTable().addRow(tempActive);
|
|
|
- model.getPropertyTable().setCellEditable(3, 1, true);
|
|
|
- } else {
|
|
|
- Object[] tempActive = { Languages.getLanguage()[75],
|
|
|
- ((HolonSwitch) temp).getActiveAt()[model.getCurIteration()] };
|
|
|
- model.getPropertyTable().addRow(tempActive);
|
|
|
- model.getPropertyTable().setCellEditable(3, 1, false);
|
|
|
- }
|
|
|
- unitGraph.repaintWithNewSwitch((HolonSwitch) temp);
|
|
|
- elementGraph.setText(temp.getName());
|
|
|
- model.getPropertyTable().setCellEditable(0, 1, true);
|
|
|
- model.getPropertyTable().setCellEditable(2, 1, true);
|
|
|
- } else if (temp instanceof CpsUpperNode) {
|
|
|
- updCon.deleteRows(model.getSingleTable());
|
|
|
- updCon.deleteRows(model.getMultiTable());
|
|
|
- Object[] numEle = { "Number of Elements", ((CpsUpperNode) temp).getNodes().size() };
|
|
|
- Object[] numObj = { "Number of HolonObject", ((CpsUpperNode) temp).getNumHolonObj().size() };
|
|
|
- Object[] numSwi = { "Number of HolonSwitch", ((CpsUpperNode) temp).getNumSwitches().size() };
|
|
|
- Object[] numUpp = { "Number of UpperNodes", ((CpsUpperNode) temp).getNumUpperNodes().size() };
|
|
|
- model.getPropertyTable().addRow(numEle);
|
|
|
- model.getPropertyTable().addRow(numObj);
|
|
|
- model.getPropertyTable().addRow(numSwi);
|
|
|
- model.getPropertyTable().addRow(numUpp);
|
|
|
- } else {
|
|
|
- updCon.deleteRows(model.getSingleTable());
|
|
|
- updCon.deleteRows(model.getMultiTable());
|
|
|
- }
|
|
|
- // For Objects the only editable cell is the name
|
|
|
- ArrayList<CpsEdge> tempArray = temp.getConnections();
|
|
|
- // If the clicked object has connections
|
|
|
- if (!tempArray.isEmpty()) {
|
|
|
- boolean first = true;
|
|
|
- for (CpsEdge temp2 : tempArray) {
|
|
|
- if (first) {
|
|
|
- first = false;
|
|
|
- if (temp.getID() != temp2.getA().getID()) {
|
|
|
- Object[] tempConnection = { temp.getName() + Languages.getLanguage()[76],
|
|
|
- temp2.getA().getName() + Languages.getLanguage()[77]
|
|
|
- + temp2.getA().getID() };
|
|
|
- model.getPropertyTable().addRow(tempConnection);
|
|
|
- } else {
|
|
|
- Object[] tempConnection = { temp.getName() + Languages.getLanguage()[76],
|
|
|
- temp2.getB().getName() + Languages.getLanguage()[77]
|
|
|
- + temp2.getB().getID() };
|
|
|
- model.getPropertyTable().addRow(tempConnection);
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (temp.getID() != temp2.getA().getID()) {
|
|
|
- Object[] tempConnection = { "", temp2.getA().getName() + Languages.getLanguage()[77]
|
|
|
- + temp2.getA().getID() };
|
|
|
- model.getPropertyTable().addRow(tempConnection);
|
|
|
- } else {
|
|
|
- Object[] tempConnection = { "", temp2.getB().getName() + Languages.getLanguage()[77]
|
|
|
- + temp2.getB().getID() };
|
|
|
- model.getPropertyTable().addRow(tempConnection);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } // If the clicked Object is an edge
|
|
|
- else if (model.getSelectedEdge() != null) {
|
|
|
- // Name displayed
|
|
|
- Object[] tempName = { Languages.getLanguage()[72],
|
|
|
- Languages.getLanguage()[78] + model.getSelectedEdge().getA().getName()
|
|
|
- + Languages.getLanguage()[79] + model.getSelectedEdge().getB().getName() };
|
|
|
- model.getPropertyTable().addRow(tempName);
|
|
|
- // Current Flow displayed
|
|
|
- Object[] tempFlow = { Languages.getLanguage()[80], model.getSelectedEdge().getFlow() };
|
|
|
- model.getPropertyTable().addRow(tempFlow);
|
|
|
- // Max Capacity displayed
|
|
|
- Object[] tempCapacity = { Languages.getLanguage()[81], model.getSelectedEdge().getCapacity() };
|
|
|
- model.getPropertyTable().addRow(tempCapacity);
|
|
|
- // Status displayed
|
|
|
- Object[] tempStatus = { Languages.getLanguage()[82], model.getSelectedEdge().getState() };
|
|
|
- model.getPropertyTable().addRow(tempStatus);
|
|
|
- // For edges, the only possible editable cell is the max
|
|
|
- // flow
|
|
|
- model.getPropertyTable().setCellEditable(0, 1, false);
|
|
|
- model.getPropertyTable().setCellEditable(2, 1, true);
|
|
|
- model.getPropertyTable().setCellEditable(3, 1, true);
|
|
|
- } else if (updCon.getActualCps() == null) {
|
|
|
- updCon.deleteRows(model.getSingleTable());
|
|
|
- updCon.deleteRows(model.getMultiTable());
|
|
|
- } // Update of the HolonElementTable (Single- or
|
|
|
- // Multi-Selection)
|
|
|
- if (model.getSelectedCpsObjects().size() > 1) {
|
|
|
- tableHolonElement.setModel(model.getMultiTable());
|
|
|
- } else if (model.getSelectedCpsObjects().size() == 1) {
|
|
|
- tableHolonElement.setModel(model.getSingleTable());
|
|
|
- }
|
|
|
+ updCon.paintProperties(temp);
|
|
|
// New Tab with NodeOfNode
|
|
|
if (doubleClick() && temp instanceof CpsUpperNode) {
|
|
|
openNewUpperNodeTab();
|
|
@@ -1366,9 +1251,9 @@ public class GUI<E> implements CategoryListener {
|
|
|
updCon.refreshTableHolonElement(model.getMultiTable(), model.getSingleTable());
|
|
|
updCon.refreshTableProperties(model.getPropertyTable());
|
|
|
if (model.getSelectedCpsObjects().size() > 1) {
|
|
|
- tableHolonElement.setModel(model.getMultiTable());
|
|
|
+ model.getTableHolonElement().setModel(model.getMultiTable());
|
|
|
} else if (model.getSelectedCpsObjects().size() == 1) {
|
|
|
- tableHolonElement.setModel(model.getSingleTable());
|
|
|
+ model.getTableHolonElement().setModel(model.getSingleTable());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1649,6 +1534,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
splitPaneCanvasConsole.setLeftComponent(panelTapped_SimMenu);
|
|
|
tabbedPane.addTab("View", canvasSP);
|
|
|
tabbedPane.addTab("Statistics", statScrollPane);
|
|
|
+ tabbedPane.addTab("Holon", holonSP);
|
|
|
|
|
|
splitPaneCanvasConsole.setRightComponent(console);
|
|
|
splitPane1.setLeftComponent(splitPaneCanvasConsole);
|
|
@@ -1692,19 +1578,33 @@ public class GUI<E> implements CategoryListener {
|
|
|
int dialogResult = JOptionPane.showConfirmDialog(null, "Old autosave file was found, should it be loaded?",
|
|
|
warningText, dialogButton);
|
|
|
if (dialogResult == JOptionPane.YES_OPTION) {
|
|
|
+ if(dest.exists()){
|
|
|
model.setAutoSaveNr(dest.listFiles().length - 1);
|
|
|
mntmRedo.doClick();
|
|
|
- } else {
|
|
|
- controller.deleteDirectory(dest);
|
|
|
- dest.mkdirs();
|
|
|
- try {
|
|
|
- controller.autoSave();
|
|
|
- } catch (IOException e1) {
|
|
|
- // TODO Auto-generated catch block
|
|
|
- e1.printStackTrace();
|
|
|
+ }else{
|
|
|
+ JOptionPane.showMessageDialog(frmCyberPhysical, "Autosave could not be loaded.");
|
|
|
+ setUpAutoSave(dest);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ setUpAutoSave(dest);
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Sets up autosave if no old one is loaded at the beginning
|
|
|
+ *
|
|
|
+ * @param dest
|
|
|
+ * path to save-folder
|
|
|
+ */
|
|
|
+ public void setUpAutoSave(File dest){
|
|
|
+ controller.deleteDirectory(dest);
|
|
|
+ dest.mkdirs();
|
|
|
+ try {
|
|
|
+ controller.autoSave();
|
|
|
+ } catch (IOException e1) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e1.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1915,7 +1815,7 @@ public class GUI<E> implements CategoryListener {
|
|
|
|
|
|
// check if tab already open for clicked NodeOfNode
|
|
|
boolean dupl = false;
|
|
|
- for (int i = 2; i < tabbedPane.getTabCount() && dupl == false; i++) {
|
|
|
+ for (int i = 3; i < tabbedPane.getTabCount() && dupl == false; i++) {
|
|
|
if (((UpperNodeCanvas) ((JScrollPane) tabbedPane.getComponentAt(i)).getViewport().getComponent(0)).upperNode
|
|
|
.getID() == temp.getID()) {
|
|
|
dupl = true;
|
|
@@ -1930,7 +1830,8 @@ public class GUI<E> implements CategoryListener {
|
|
|
unc.addMouseListener(new MouseAdapter() {
|
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
- temp = ((UpperNodeCanvas) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport().getComponent(0)).tempCps;
|
|
|
+ temp = ((UpperNodeCanvas) ((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
|
|
|
+ .getComponent(0)).tempCps;
|
|
|
if (doubleClick() && temp instanceof CpsUpperNode) {
|
|
|
openNewUpperNodeTab();
|
|
|
}
|