|
@@ -1,10 +1,7 @@
|
|
package ui.view;
|
|
package ui.view;
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
-import java.text.AttributedCharacterIterator;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
-
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JMenuBar;
|
|
import javax.swing.JMenuBar;
|
|
@@ -12,7 +9,6 @@ import javax.swing.JMenu;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
-import javax.swing.BorderFactory;
|
|
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.JSplitPane;
|
|
import javax.swing.JSplitPane;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JScrollPane;
|
|
@@ -21,8 +17,6 @@ import javax.swing.JTable;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
import javax.swing.tree.TreeCellRenderer;
|
|
import javax.swing.tree.TreeCellRenderer;
|
|
|
|
|
|
-import com.sun.xml.internal.bind.v2.TODO;
|
|
|
|
-
|
|
|
|
import ui.controller.Control;
|
|
import ui.controller.Control;
|
|
import ui.model.*;
|
|
import ui.model.*;
|
|
|
|
|
|
@@ -30,20 +24,12 @@ import javax.swing.tree.DefaultMutableTreeNode;
|
|
import javax.swing.JEditorPane;
|
|
import javax.swing.JEditorPane;
|
|
import javax.swing.JFileChooser;
|
|
import javax.swing.JFileChooser;
|
|
import javax.swing.table.DefaultTableModel;
|
|
import javax.swing.table.DefaultTableModel;
|
|
-import javax.swing.table.TableModel;
|
|
|
|
-
|
|
|
|
import java.awt.Color;
|
|
import java.awt.Color;
|
|
import java.awt.Component;
|
|
import java.awt.Component;
|
|
import java.awt.Cursor;
|
|
import java.awt.Cursor;
|
|
import java.awt.Dimension;
|
|
import java.awt.Dimension;
|
|
-import java.awt.Font;
|
|
|
|
-import java.awt.FontMetrics;
|
|
|
|
-import java.awt.Graphics;
|
|
|
|
import java.awt.Image;
|
|
import java.awt.Image;
|
|
import java.awt.Point;
|
|
import java.awt.Point;
|
|
-import java.awt.Rectangle;
|
|
|
|
-import java.awt.ScrollPane;
|
|
|
|
-import java.awt.Shape;
|
|
|
|
import java.awt.Toolkit;
|
|
import java.awt.Toolkit;
|
|
import java.awt.BorderLayout;
|
|
import java.awt.BorderLayout;
|
|
|
|
|
|
@@ -61,21 +47,18 @@ import classes.HolonElement;
|
|
import classes.HolonObject;
|
|
import classes.HolonObject;
|
|
import classes.HolonSwitch;
|
|
import classes.HolonSwitch;
|
|
import classes.HolonTransformer;
|
|
import classes.HolonTransformer;
|
|
-import javafx.util.Pair;
|
|
|
|
import Interfaces.CategoryListener;
|
|
import Interfaces.CategoryListener;
|
|
|
|
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.MouseEvent;
|
|
-import java.awt.image.ImageObserver;
|
|
|
|
-import java.awt.peer.MouseInfoPeer;
|
|
|
|
|
|
+import java.awt.event.MouseListener;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionEvent;
|
|
import javax.swing.JSlider;
|
|
import javax.swing.JSlider;
|
|
import javax.swing.event.ChangeListener;
|
|
import javax.swing.event.ChangeListener;
|
|
import javax.swing.event.ChangeEvent;
|
|
import javax.swing.event.ChangeEvent;
|
|
-import javax.swing.SwingConstants;
|
|
|
|
|
|
|
|
public class GUI implements CategoryListener {
|
|
public class GUI implements CategoryListener {
|
|
|
|
|
|
@@ -113,7 +96,8 @@ public class GUI implements CategoryListener {
|
|
|
|
|
|
private JTable tableHolonElement = new JTable();
|
|
private JTable tableHolonElement = new JTable();
|
|
private DefaultTableModel tableModelHolonElement = new DefaultTableModel();
|
|
private DefaultTableModel tableModelHolonElement = new DefaultTableModel();
|
|
- private final JScrollPane scrollElements = new JScrollPane();
|
|
|
|
|
|
+ private final JPanel scrollElements = new JPanel();
|
|
|
|
+ JScrollPane tableHolonElementScrollPane = new JScrollPane();
|
|
|
|
|
|
// In this section are all the properties that correspond to the clicked
|
|
// In this section are all the properties that correspond to the clicked
|
|
// HolonObject, such as connections, name, Type, etc.
|
|
// HolonObject, such as connections, name, Type, etc.
|
|
@@ -156,15 +140,15 @@ public class GUI implements CategoryListener {
|
|
private Image img = null;
|
|
private Image img = null;
|
|
private CpsObject tempCps = null;
|
|
private CpsObject tempCps = null;
|
|
private HolonElement tempElement = null;
|
|
private HolonElement tempElement = null;
|
|
|
|
+ private int yValueElements = 0;
|
|
|
|
|
|
private MyCanvas canvas;
|
|
private MyCanvas canvas;
|
|
private UnitGraph testgraph; // for testing, remove later
|
|
private UnitGraph testgraph; // for testing, remove later
|
|
private final JSplitPane splitPane_3 = new JSplitPane();
|
|
private final JSplitPane splitPane_3 = new JSplitPane();
|
|
private final JSlider sizeSlider = new JSlider();
|
|
private final JSlider sizeSlider = new JSlider();
|
|
private final JLabel lblImageSize = new JLabel("Image Size");
|
|
private final JLabel lblImageSize = new JLabel("Image Size");
|
|
- private final JSlider timeSlider = new JSlider();
|
|
|
|
- private final JPanel timePanel = new JPanel();
|
|
|
|
- private final JButton playBtn = new JButton();
|
|
|
|
|
|
+ // Time Stuff
|
|
|
|
+ private final TimePanel timePanel;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Create the application.
|
|
* Create the application.
|
|
@@ -174,7 +158,10 @@ public class GUI implements CategoryListener {
|
|
this.model = control.getModel();
|
|
this.model = control.getModel();
|
|
this.canvas = new MyCanvas(model, control);
|
|
this.canvas = new MyCanvas(model, control);
|
|
this.testgraph = new UnitGraph(model, control); // for testing, remove
|
|
this.testgraph = new UnitGraph(model, control); // for testing, remove
|
|
- // later
|
|
|
|
|
|
+
|
|
|
|
+ timePanel = new TimePanel(model, controller);
|
|
|
|
+
|
|
|
|
+ // later
|
|
control.initListener(this);
|
|
control.initListener(this);
|
|
initialize();
|
|
initialize();
|
|
updateCategories(model.getCategories());
|
|
updateCategories(model.getCategories());
|
|
@@ -191,8 +178,9 @@ public class GUI implements CategoryListener {
|
|
frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
|
|
|
|
frmCyberPhysical.setJMenuBar(menuBar);
|
|
frmCyberPhysical.setJMenuBar(menuBar);
|
|
-
|
|
|
|
- frmCyberPhysical.setIconImage(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH));
|
|
|
|
|
|
+
|
|
|
|
+ frmCyberPhysical.setIconImage(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
|
|
|
|
+ .getScaledInstance(30, 30, Image.SCALE_SMOOTH));
|
|
|
|
|
|
menuBar.add(mnNewMenu);
|
|
menuBar.add(mnNewMenu);
|
|
|
|
|
|
@@ -279,10 +267,13 @@ public class GUI implements CategoryListener {
|
|
* End of right container setup
|
|
* End of right container setup
|
|
*/
|
|
*/
|
|
scrollProperties.setViewportView(tableProperties);
|
|
scrollProperties.setViewportView(tableProperties);
|
|
- scrollElements.setViewportView(tableHolonElement);
|
|
|
|
|
|
+ tableHolonElementScrollPane.setViewportView(tableHolonElement);
|
|
scrollGraph.setViewportView(testgraph);
|
|
scrollGraph.setViewportView(testgraph);
|
|
-
|
|
|
|
- scrollElements.setRowHeaderView(panel_HolonEl);
|
|
|
|
|
|
+
|
|
|
|
+ scrollElements.setLayout(new BorderLayout(0,0));
|
|
|
|
+ scrollElements.add(panel_HolonEl, BorderLayout.NORTH);
|
|
|
|
+ scrollElements.add(tableHolonElementScrollPane);
|
|
|
|
+
|
|
panel_HolonEl.setLayout(new BoxLayout(panel_HolonEl, BoxLayout.X_AXIS));
|
|
panel_HolonEl.setLayout(new BoxLayout(panel_HolonEl, BoxLayout.X_AXIS));
|
|
toolBarHolonEl.setFloatable(false);
|
|
toolBarHolonEl.setFloatable(false);
|
|
|
|
|
|
@@ -290,30 +281,33 @@ public class GUI implements CategoryListener {
|
|
toolBarHolonEl.add(btnAddHolEL);
|
|
toolBarHolonEl.add(btnAddHolEL);
|
|
btnAddHolEL.addActionListener(new ActionListener() {
|
|
btnAddHolEL.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
- if (tempCps != null && tempCps.getClass() == HolonObject.class) {
|
|
|
|
|
|
+ CpsObject tempCpsObject = getActualCps();
|
|
|
|
+ if (tempCpsObject != null && tempCpsObject.getClass() == HolonObject.class
|
|
|
|
+ && tempCpsObject.getID() != 0) {
|
|
addElementPopUp = new AddElementPopUp();
|
|
addElementPopUp = new AddElementPopUp();
|
|
addElementPopUp.setVisible(true);
|
|
addElementPopUp.setVisible(true);
|
|
- ((HolonObject) tempCps).addElements(addElementPopUp.getElement());
|
|
|
|
|
|
+ controller.addElementCanvasObject(tempCpsObject.getName(),
|
|
|
|
+ addElementPopUp.getElement().getEleName(), addElementPopUp.getElement().getAmount(),
|
|
|
|
+ addElementPopUp.getElement().getEnergy());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
toolBarHolonEl.add(btnDelHolEL);
|
|
toolBarHolonEl.add(btnDelHolEL);
|
|
btnDelHolEL.addActionListener(new ActionListener() {
|
|
btnDelHolEL.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
- if (tempElement != null) {
|
|
|
|
- ((HolonObject) tempCps).getElements().remove(tempElement);
|
|
|
|
|
|
+ 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());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
tableHolonElement.addMouseListener(new MouseAdapter() {
|
|
tableHolonElement.addMouseListener(new MouseAdapter() {
|
|
public void mousePressed(MouseEvent e) {
|
|
public void mousePressed(MouseEvent e) {
|
|
- int rowSelected = (int) Math.floor(e.getY() / 16);
|
|
|
|
- if (tableHolonElement.getSelectedColumn() == 0 && tableHolonElement.getRowCount() >= rowSelected) {
|
|
|
|
- tempElement = ((HolonObject) tempCps).getElements().get(rowSelected);
|
|
|
|
- } else {
|
|
|
|
- tempElement = null;
|
|
|
|
- }
|
|
|
|
|
|
+ yValueElements = e.getY();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0));
|
|
frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0));
|
|
@@ -483,7 +477,6 @@ public class GUI implements CategoryListener {
|
|
canvas.addMouseListener(new MouseAdapter() {
|
|
canvas.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
public void mousePressed(MouseEvent e) {
|
|
-
|
|
|
|
// Update of the Information about the HolonElements - only for
|
|
// Update of the Information about the HolonElements - only for
|
|
// HolonObjects
|
|
// HolonObjects
|
|
if (tableModelHolonElement.getRowCount() > 0) {
|
|
if (tableModelHolonElement.getRowCount() > 0) {
|
|
@@ -548,6 +541,7 @@ public class GUI implements CategoryListener {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
});
|
|
});
|
|
|
|
|
|
tableHolonElement.addPropertyChangeListener(new PropertyChangeListener() {
|
|
tableHolonElement.addPropertyChangeListener(new PropertyChangeListener() {
|
|
@@ -657,6 +651,7 @@ public class GUI implements CategoryListener {
|
|
splitPane.setRightComponent(splitPane_1);
|
|
splitPane.setRightComponent(splitPane_1);
|
|
splitPane.setDividerLocation(200);
|
|
splitPane.setDividerLocation(200);
|
|
splitPane_1.setDividerLocation(500);
|
|
splitPane_1.setDividerLocation(500);
|
|
|
|
+
|
|
splitPane.setLeftComponent(scrollPane_1);
|
|
splitPane.setLeftComponent(scrollPane_1);
|
|
splitPane_1.setLeftComponent(tabbedPane);
|
|
splitPane_1.setLeftComponent(tabbedPane);
|
|
splitPane_1.setRightComponent(split_HolonEl_Pro);
|
|
splitPane_1.setRightComponent(split_HolonEl_Pro);
|
|
@@ -667,27 +662,15 @@ public class GUI implements CategoryListener {
|
|
split_Graph_HolonEl.setTopComponent(scrollGraph);
|
|
split_Graph_HolonEl.setTopComponent(scrollGraph);
|
|
split_Graph_HolonEl.setBottomComponent(scrollElements);
|
|
split_Graph_HolonEl.setBottomComponent(scrollElements);
|
|
|
|
|
|
- timePanel.setLayout(new BorderLayout(0, 0));
|
|
|
|
- timeSlider.setPaintTicks(true);
|
|
|
|
- timeSlider.setPaintLabels(true);
|
|
|
|
- timeSlider.setMinorTickSpacing(1);
|
|
|
|
- timeSlider.setToolTipText("");
|
|
|
|
-
|
|
|
|
- timeSlider.setMinimum(1);
|
|
|
|
- timeSlider.setMaximum(model.getIterations());
|
|
|
|
- timeSlider.setValue(1);
|
|
|
|
-
|
|
|
|
- playBtn.setBorder(BorderFactory.createEmptyBorder());
|
|
|
|
- playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Images/node.png")).getImage()
|
|
|
|
- .getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
|
|
|
|
- playBtn.addActionListener(new ActionListener() {
|
|
|
|
- public void actionPerformed(ActionEvent ae) {
|
|
|
|
- timeSlider.setValue(timeSlider.getValue() + 1);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+ tabbedPane.setBorder(null);
|
|
|
|
+ scrollProperties.setBorder(null);
|
|
|
|
+ scrollGraph.setBorder(null);
|
|
|
|
+ scrollElements.setBorder(null);
|
|
|
|
+ splitPane.setBorder(null);
|
|
|
|
+ splitPane_1.setBorder(null);
|
|
|
|
+ split_HolonEl_Pro.setBorder(null);
|
|
|
|
+ split_Graph_HolonEl.setBorder(null);
|
|
|
|
|
|
- timePanel.add(playBtn, BorderLayout.WEST);
|
|
|
|
- timePanel.add(timeSlider);
|
|
|
|
frmCyberPhysical.getContentPane().add(timePanel, BorderLayout.SOUTH);
|
|
frmCyberPhysical.getContentPane().add(timePanel, BorderLayout.SOUTH);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -763,4 +746,18 @@ public class GUI implements CategoryListener {
|
|
return frmCyberPhysical;
|
|
return frmCyberPhysical;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public CpsObject getActualCps() {
|
|
|
|
+ return canvas.tempCps;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public HolonElement getActualHolonElement(HolonObject obj, int yValue) {
|
|
|
|
+ HolonObject tempCps = obj;
|
|
|
|
+ final int yTemp = (int) Math.floor(yValue / 16);
|
|
|
|
+ int rowsTotal = tableModelHolonElement.getRowCount();
|
|
|
|
+ if (rowsTotal != 0 && rowsTotal > yTemp) {
|
|
|
|
+ return obj.getElements().get(yTemp);
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|