|
@@ -1,38 +1,76 @@
|
|
package ui.view;
|
|
package ui.view;
|
|
|
|
|
|
-import java.awt.EventQueue;
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
-
|
|
|
|
|
|
+import java.text.AttributedCharacterIterator;
|
|
|
|
+import java.util.ArrayList;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JFrame;
|
|
|
|
+import javax.swing.JLabel;
|
|
import javax.swing.JMenuBar;
|
|
import javax.swing.JMenuBar;
|
|
import javax.swing.JMenu;
|
|
import javax.swing.JMenu;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JMenuItem;
|
|
-import javax.swing.UIManager;
|
|
|
|
-import javax.swing.UnsupportedLookAndFeelException;
|
|
|
|
|
|
+import javax.swing.JOptionPane;
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
-
|
|
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.JSplitPane;
|
|
import javax.swing.JSplitPane;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTabbedPane;
|
|
import javax.swing.JTabbedPane;
|
|
import javax.swing.JTable;
|
|
import javax.swing.JTable;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
import javax.swing.tree.DefaultTreeModel;
|
|
-
|
|
|
|
|
|
+import javax.swing.tree.TreeCellRenderer;
|
|
|
|
+import ui.controller.Control;
|
|
|
|
+import ui.model.*;
|
|
|
|
|
|
import javax.swing.tree.DefaultMutableTreeNode;
|
|
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.Window.Type;
|
|
|
|
-import javax.swing.JInternalFrame;
|
|
|
|
|
|
+import java.awt.Cursor;
|
|
|
|
+import java.awt.Dimension;
|
|
|
|
+import java.awt.Font;
|
|
|
|
+import java.awt.FontMetrics;
|
|
|
|
+import java.awt.Graphics;
|
|
|
|
+import java.awt.Image;
|
|
|
|
+import java.awt.Point;
|
|
|
|
+import java.awt.Rectangle;
|
|
|
|
+import java.awt.Shape;
|
|
|
|
+import java.awt.Toolkit;
|
|
import java.awt.BorderLayout;
|
|
import java.awt.BorderLayout;
|
|
|
|
+
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPanel;
|
|
|
|
+import javax.swing.JToolBar;
|
|
|
|
+import javax.swing.JButton;
|
|
|
|
+import javax.swing.JComboBox;
|
|
|
|
+import javax.swing.DefaultComboBoxModel;
|
|
|
|
+import javax.swing.ImageIcon;
|
|
|
|
|
|
-public class GUI {
|
|
|
|
|
|
+import classes.Category;
|
|
|
|
+import classes.CpsObject;
|
|
|
|
+import classes.HolonElement;
|
|
|
|
+import classes.HolonObject;
|
|
|
|
+import classes.HolonSwitch;
|
|
|
|
+import classes.HolonTransformer;
|
|
|
|
+import Interfaces.CategoryListener;
|
|
|
|
+
|
|
|
|
+import java.awt.event.ActionListener;
|
|
|
|
+import java.awt.event.MouseAdapter;
|
|
|
|
+import java.awt.event.MouseEvent;
|
|
|
|
+import java.awt.image.ImageObserver;
|
|
|
|
+import java.beans.PropertyChangeEvent;
|
|
|
|
+import java.beans.PropertyChangeListener;
|
|
|
|
+import java.awt.event.ActionEvent;
|
|
|
|
+import javax.swing.JSlider;
|
|
|
|
+import javax.swing.event.ChangeListener;
|
|
|
|
+import javax.swing.event.ChangeEvent;
|
|
|
|
+import javax.swing.SwingConstants;
|
|
|
|
+
|
|
|
|
+public class GUI implements CategoryListener {
|
|
|
|
|
|
private JFrame frmCyberPhysical;
|
|
private JFrame frmCyberPhysical;
|
|
|
|
+
|
|
private final JMenuBar menuBar = new JMenuBar();
|
|
private final JMenuBar menuBar = new JMenuBar();
|
|
private final JMenu mnNewMenu = new JMenu("File");
|
|
private final JMenu mnNewMenu = new JMenu("File");
|
|
private final JMenu mnNewMenu_1 = new JMenu("Edit");
|
|
private final JMenu mnNewMenu_1 = new JMenu("Edit");
|
|
@@ -40,183 +78,477 @@ public class GUI {
|
|
private final JMenu mnNewMenu_3 = new JMenu("View");
|
|
private final JMenu mnNewMenu_3 = new JMenu("View");
|
|
private final JMenu mnHelp = new JMenu("Help");
|
|
private final JMenu mnHelp = new JMenu("Help");
|
|
private final JMenuItem mntmOpen = new JMenuItem("Open");
|
|
private final JMenuItem mntmOpen = new JMenuItem("Open");
|
|
- private JMenuItem mntmNew = new JMenuItem("New");
|
|
|
|
|
|
+ private final JMenuItem mntmNew = new JMenuItem("New");
|
|
private final JMenuItem mntmSave = new JMenuItem("Save");
|
|
private final JMenuItem mntmSave = new JMenuItem("Save");
|
|
|
|
+ private final JMenuItem aboutUs = new JMenuItem("About Us");
|
|
private final JSplitPane splitPane = new JSplitPane();
|
|
private final JSplitPane splitPane = new JSplitPane();
|
|
private final JSplitPane splitPane_1 = new JSplitPane();
|
|
private final JSplitPane splitPane_1 = new JSplitPane();
|
|
private final JScrollPane scrollPane_1 = new JScrollPane();
|
|
private final JScrollPane scrollPane_1 = new JScrollPane();
|
|
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
|
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
|
private final JScrollPane scrollPane_2 = new JScrollPane();
|
|
private final JScrollPane scrollPane_2 = new JScrollPane();
|
|
- private final MyCanvas canvas = new MyCanvas();
|
|
|
|
|
|
+
|
|
private final JTree tree = new JTree();
|
|
private final JTree tree = new JTree();
|
|
private final JEditorPane dtrpnHereWillBe = new JEditorPane();
|
|
private final JEditorPane dtrpnHereWillBe = new JEditorPane();
|
|
private final JSplitPane splitPane_2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
|
|
private final JSplitPane splitPane_2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
|
|
- private JTable table;
|
|
|
|
- private final JTable table_2 = new JTable();
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Launch the application.
|
|
|
|
- */
|
|
|
|
- public static void main(String[] args) {
|
|
|
|
-
|
|
|
|
- //*Design
|
|
|
|
- try {
|
|
|
|
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
|
|
|
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
|
|
|
|
- | UnsupportedLookAndFeelException e1) {
|
|
|
|
- // TODO Auto-generated catch block
|
|
|
|
- e1.printStackTrace();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- EventQueue.invokeLater(new Runnable() {
|
|
|
|
- public void run() {
|
|
|
|
- try {
|
|
|
|
- GUI window = new GUI();
|
|
|
|
- window.frmCyberPhysical.setVisible(true);
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ private JTable table = new JTable();
|
|
|
|
+ private DefaultTableModel tableModel = new DefaultTableModel();
|
|
|
|
+ private final Model model;
|
|
|
|
+ private final Control controller;
|
|
|
|
+ private AddObjectPopUp addObjectPopUP;
|
|
|
|
+ private AboutUsPopUp aboutUsPopUp;
|
|
|
|
+
|
|
|
|
+ private final JPanel panel = new JPanel();
|
|
|
|
+ private final JComboBox comboBox = new JComboBox();
|
|
|
|
+
|
|
|
|
+ // Buttons
|
|
|
|
+ private final JButton btnAdd = new JButton("+");
|
|
|
|
+ private final JButton btnDel = new JButton("-");
|
|
|
|
+
|
|
|
|
+ private final JToolBar toolBar = new JToolBar();
|
|
|
|
+
|
|
|
|
+ // variables
|
|
|
|
+ private boolean dragging = false;
|
|
|
|
+ private String actualObjectClicked;
|
|
|
|
+ private Image img = null;
|
|
|
|
+ private CpsObject tempCps = null;
|
|
|
|
+
|
|
|
|
+ private MyCanvas canvas;
|
|
|
|
+ private final JSplitPane splitPane_3 = new JSplitPane();
|
|
|
|
+ private final JSlider slider = new JSlider();
|
|
|
|
+ private final JLabel lblImageSize = new JLabel("Image Size");
|
|
|
|
|
|
/**
|
|
/**
|
|
* Create the application.
|
|
* Create the application.
|
|
*/
|
|
*/
|
|
- public GUI() {
|
|
|
|
|
|
+ public GUI(Control control) {
|
|
|
|
+ this.controller = control;
|
|
|
|
+ this.model = control.getModel();
|
|
|
|
+ this.canvas = new MyCanvas(model, control);
|
|
|
|
+ control.initListener(this);
|
|
initialize();
|
|
initialize();
|
|
|
|
+ updateCategories(model.getCategories());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* Initialize the contents of the frame.
|
|
* Initialize the contents of the frame.
|
|
*/
|
|
*/
|
|
- @SuppressWarnings("serial")
|
|
|
|
|
|
+ @SuppressWarnings({ "serial", "unchecked" })
|
|
private void initialize() {
|
|
private void initialize() {
|
|
frmCyberPhysical = new JFrame();
|
|
frmCyberPhysical = new JFrame();
|
|
frmCyberPhysical.setTitle("Cyber Physical Systems Model");
|
|
frmCyberPhysical.setTitle("Cyber Physical Systems Model");
|
|
- frmCyberPhysical.setBounds(100, 100, 891, 467);
|
|
|
|
|
|
+ frmCyberPhysical.setBounds(100, 100, 1000, 800);
|
|
frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
-
|
|
|
|
|
|
+
|
|
frmCyberPhysical.setJMenuBar(menuBar);
|
|
frmCyberPhysical.setJMenuBar(menuBar);
|
|
-
|
|
|
|
|
|
+
|
|
menuBar.add(mnNewMenu);
|
|
menuBar.add(mnNewMenu);
|
|
-
|
|
|
|
|
|
+
|
|
mnNewMenu.add(mntmNew);
|
|
mnNewMenu.add(mntmNew);
|
|
-
|
|
|
|
|
|
+
|
|
mnNewMenu.add(mntmOpen);
|
|
mnNewMenu.add(mntmOpen);
|
|
-
|
|
|
|
|
|
+
|
|
mnNewMenu.add(mntmSave);
|
|
mnNewMenu.add(mntmSave);
|
|
-
|
|
|
|
|
|
+
|
|
menuBar.add(mnNewMenu_1);
|
|
menuBar.add(mnNewMenu_1);
|
|
-
|
|
|
|
|
|
+
|
|
menuBar.add(mnNewMenu_2);
|
|
menuBar.add(mnNewMenu_2);
|
|
-
|
|
|
|
|
|
+
|
|
menuBar.add(mnNewMenu_3);
|
|
menuBar.add(mnNewMenu_3);
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ mnNewMenu_3.add(splitPane_3);
|
|
|
|
+
|
|
|
|
+ slider.setMinimum(15);
|
|
|
|
+ slider.setMaximum(115);
|
|
|
|
+ slider.addChangeListener(new ChangeListener() {
|
|
|
|
+ @Override
|
|
|
|
+ public void stateChanged(ChangeEvent e) {
|
|
|
|
+ controller.setScale(slider.getValue());
|
|
|
|
+ tree.setRowHeight(model.getScale());
|
|
|
|
+ canvas.objectSelectionHighlighting();
|
|
|
|
+ canvas.repaint();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ splitPane_3.setRightComponent(slider);
|
|
|
|
+
|
|
|
|
+ splitPane_3.setLeftComponent(lblImageSize);
|
|
|
|
+
|
|
menuBar.add(mnHelp);
|
|
menuBar.add(mnHelp);
|
|
- frmCyberPhysical.getContentPane().setLayout(new BoxLayout(frmCyberPhysical.getContentPane(), BoxLayout.X_AXIS));
|
|
|
|
-
|
|
|
|
- frmCyberPhysical.getContentPane().add(splitPane);
|
|
|
|
-
|
|
|
|
- //Table
|
|
|
|
- String[] columnNames = {"Consumer",
|
|
|
|
- "Units",
|
|
|
|
- "Number"};
|
|
|
|
-
|
|
|
|
- Object[][] data = {
|
|
|
|
- {"TV", "20", "1"},
|
|
|
|
- {"PC", "30", "2"},
|
|
|
|
- {"Fridge", "40","1"}
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- splitPane.setRightComponent(splitPane_1);
|
|
|
|
- splitPane.setDividerLocation(200);
|
|
|
|
- splitPane_1.setDividerLocation(500);
|
|
|
|
|
|
+
|
|
|
|
+ mnHelp.add(aboutUs);
|
|
|
|
+
|
|
canvas.setBackground(Color.WHITE);
|
|
canvas.setBackground(Color.WHITE);
|
|
-
|
|
|
|
- tabbedPane.addTab("Modeling", null, canvas, null);
|
|
|
|
- tabbedPane.addTab("Simulation", null, scrollPane_2, null);
|
|
|
|
|
|
+ canvas.setPreferredSize(new Dimension(10000, 10000));
|
|
|
|
+ JScrollPane canvasSP = new JScrollPane(canvas);
|
|
|
|
+
|
|
|
|
+ tabbedPane.addTab("Modeling", new ImageIcon(new ImageIcon(this.getClass().getResource("/Images/home.png"))
|
|
|
|
+ .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)), canvasSP, "Model a CPS");
|
|
|
|
+
|
|
|
|
+ tabbedPane.addTab("Simulation",
|
|
|
|
+ new ImageIcon(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage()
|
|
|
|
+ .getScaledInstance(30, 30, Image.SCALE_SMOOTH)),
|
|
|
|
+ scrollPane_2, "Simulate the CPS");
|
|
dtrpnHereWillBe.setText("Here will be the Simulation");
|
|
dtrpnHereWillBe.setText("Here will be the Simulation");
|
|
-
|
|
|
|
|
|
+
|
|
scrollPane_2.setViewportView(dtrpnHereWillBe);
|
|
scrollPane_2.setViewportView(dtrpnHereWillBe);
|
|
-
|
|
|
|
- splitPane_1.setLeftComponent(tabbedPane);
|
|
|
|
-
|
|
|
|
|
|
+
|
|
JScrollPane scrollPane = new JScrollPane();
|
|
JScrollPane scrollPane = new JScrollPane();
|
|
- splitPane_1.setRightComponent(splitPane_2);
|
|
|
|
- splitPane_2.setLeftComponent(scrollPane);
|
|
|
|
- table = new JTable(data, columnNames);
|
|
|
|
|
|
+ // Table Set up
|
|
|
|
+ Object[] columnNames = { "Device", "Type", "Energy", "Quantity" };
|
|
|
|
+ tableModel.setColumnIdentifiers(columnNames);
|
|
|
|
+ table.setModel(tableModel);
|
|
scrollPane.setViewportView(table);
|
|
scrollPane.setViewportView(table);
|
|
-
|
|
|
|
table.setFillsViewportHeight(true);
|
|
table.setFillsViewportHeight(true);
|
|
- table.setModel(new DefaultTableModel(
|
|
|
|
- data,
|
|
|
|
- columnNames
|
|
|
|
- ));
|
|
|
|
table.setCellSelectionEnabled(true);
|
|
table.setCellSelectionEnabled(true);
|
|
table.setColumnSelectionAllowed(true);
|
|
table.setColumnSelectionAllowed(true);
|
|
- JScrollPane scrollPane_3 = new JScrollPane();
|
|
|
|
- splitPane_2.setRightComponent(scrollPane_3);
|
|
|
|
- scrollPane_3.setViewportView(table_2);
|
|
|
|
-
|
|
|
|
- table_2.setFillsViewportHeight(true);
|
|
|
|
- table_2.setModel(new DefaultTableModel(
|
|
|
|
- new Object[][] {
|
|
|
|
- {"Solar", "23", "10"},
|
|
|
|
- {"Generator", "24", "1"},
|
|
|
|
- {"Something Else", "25", "3"},
|
|
|
|
- },
|
|
|
|
- new String[] {
|
|
|
|
- "Producer", "Units", "Number"
|
|
|
|
|
|
+
|
|
|
|
+ frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0));
|
|
|
|
+
|
|
|
|
+ TreeCellRenderer customRenderer = new TreeCellRenderer() {
|
|
|
|
+ @Override
|
|
|
|
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
|
|
|
|
+ boolean leaf, int row, boolean hasFocus) {
|
|
|
|
+ JLabel label = new JLabel();
|
|
|
|
+ Image imgR = null;
|
|
|
|
+ if (leaf) {
|
|
|
|
+ for (Category cat : model.getCategories()) {
|
|
|
|
+ for (CpsObject cps : cat.getObjects()) {
|
|
|
|
+ if (value.toString().compareTo(cps.getCompareName()) == 0) {
|
|
|
|
+ imgR = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage()
|
|
|
|
+ .getScaledInstance(controller.getScale(), controller.getScale(),
|
|
|
|
+ java.awt.Image.SCALE_SMOOTH);
|
|
|
|
+ if (imgR != null) {
|
|
|
|
+ label.setIcon(new ImageIcon(imgR));
|
|
|
|
+ }
|
|
|
|
+ label.setText(cps.getName());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tree.setRowHeight(controller.getScale());
|
|
|
|
+ if (hasFocus) {
|
|
|
|
+ label.setForeground(new Color(0, 0, 255));
|
|
|
|
+ label.setOpaque(true);
|
|
|
|
+ }
|
|
|
|
+ if (label.getText().length() == 0) {
|
|
|
|
+ label.setText(value.toString());
|
|
|
|
+ if (value.toString().compareTo("Categories") != 0) {
|
|
|
|
+ label.setIcon(new ImageIcon(this.getClass().getResource("/Images/folder.png")));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return label;
|
|
|
|
+
|
|
}
|
|
}
|
|
- ));
|
|
|
|
- table_2.getColumnModel().getColumn(0).setPreferredWidth(103);
|
|
|
|
- table_2.getColumnModel().getColumn(1).setPreferredWidth(107);
|
|
|
|
- table_2.getColumnModel().getColumn(2).setPreferredWidth(125);
|
|
|
|
- splitPane_2.setDividerLocation(200);
|
|
|
|
-
|
|
|
|
- splitPane.setLeftComponent(scrollPane_1);
|
|
|
|
- tree.setEditable(true);
|
|
|
|
- tree.setModel(new DefaultTreeModel(
|
|
|
|
- new DefaultMutableTreeNode("Components") {
|
|
|
|
- {
|
|
|
|
- DefaultMutableTreeNode node_1;
|
|
|
|
- node_1 = new DefaultMutableTreeNode("PowerPlant");
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Standart P.P"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Power PowerPlant"));
|
|
|
|
- add(node_1);
|
|
|
|
- node_1 = new DefaultMutableTreeNode("Houses");
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Hospital"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Standart House"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Castle"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Arena"));
|
|
|
|
- add(node_1);
|
|
|
|
- node_1 = new DefaultMutableTreeNode("Cars");
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Small Car"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Medium Car"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Big Car"));
|
|
|
|
- node_1.add(new DefaultMutableTreeNode("Invisible Car"));
|
|
|
|
- add(node_1);
|
|
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ tree.setCellRenderer(customRenderer);
|
|
|
|
+
|
|
|
|
+ tree.addMouseListener(new MouseAdapter() {
|
|
|
|
+ public void mouseReleased(MouseEvent e) {
|
|
|
|
+ try {
|
|
|
|
+ if (dragging) {
|
|
|
|
+ int x = (int) canvas.getMousePosition().getX();
|
|
|
|
+ int y = (int) canvas.getMousePosition().getY();
|
|
|
|
+ CpsObject h = null;
|
|
|
|
+ if (tempCps.getClass() == HolonObject.class) {
|
|
|
|
+ h = new HolonObject(tempCps);
|
|
|
|
+ }
|
|
|
|
+ if (tempCps.getClass() == HolonSwitch.class) {
|
|
|
|
+ h = new HolonSwitch(tempCps);
|
|
|
|
+ }
|
|
|
|
+ if (tempCps.getClass() == HolonTransformer.class) {
|
|
|
|
+ h = new HolonTransformer(tempCps);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ h.setPosition(x, y);
|
|
|
|
+ controller.addObjectCanvas(h);
|
|
|
|
+ for (int i = 0; i < model.getObjectsOnCanvas().size(); i++) {
|
|
|
|
+ CpsObject temp = model.getObjectsOnCanvas().get(i);
|
|
|
|
+ String output = "Element: " + temp.getObjName() + " with ID: " + temp.getID();
|
|
|
|
+
|
|
|
|
+ if (temp.getClass() == HolonObject.class) {
|
|
|
|
+ output = output + " and Elements: " + ((HolonObject) temp).toStringElements();
|
|
|
|
+ }
|
|
|
|
+ System.out.println(output);
|
|
|
|
+ }
|
|
|
|
+ canvas.repaint();
|
|
|
|
+ dragging = false;
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e2) {
|
|
}
|
|
}
|
|
|
|
+ frmCyberPhysical.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
|
|
}
|
|
}
|
|
- ));
|
|
|
|
-
|
|
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ tree.addMouseListener(new MouseAdapter() {
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
+ try {
|
|
|
|
+ actualObjectClicked = tree.getPathForLocation(e.getX(), e.getY()).getLastPathComponent().toString();
|
|
|
|
+ for (Category cat : model.getCategories()) {
|
|
|
|
+ for (CpsObject cps : cat.getObjects()) {
|
|
|
|
+ if (actualObjectClicked.compareTo(cps.getCompareName()) == 0) {
|
|
|
|
+ img = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage()
|
|
|
|
+ .getScaledInstance(controller.getScale(), controller.getScale(),
|
|
|
|
+ java.awt.Image.SCALE_SMOOTH);
|
|
|
|
+ tempCps = cps;
|
|
|
|
+ dragging = true;
|
|
|
|
+ Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0),
|
|
|
|
+ "Image");
|
|
|
|
+ frmCyberPhysical.setCursor(cursor);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e2) {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
scrollPane_1.setViewportView(tree);
|
|
scrollPane_1.setViewportView(tree);
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ scrollPane_1.setColumnHeaderView(panel);
|
|
|
|
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
|
|
|
+ toolBar.setFloatable(false);
|
|
|
|
+
|
|
|
|
+ panel.add(toolBar);
|
|
|
|
+ toolBar.add(comboBox);
|
|
|
|
+ comboBox.setModel(new DefaultComboBoxModel(new String[] { "Category", "Object", "Transformer", "Switch" }));
|
|
|
|
+ // Add Button
|
|
|
|
+ btnAdd.addActionListener(new ActionListener() {
|
|
|
|
+ public void actionPerformed(ActionEvent arg0) {
|
|
|
|
+
|
|
|
|
+ Object nodeInfo = tree.getLastSelectedPathComponent();
|
|
|
|
+ String selectedOption = comboBox.getSelectedItem().toString();
|
|
|
|
+ DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo;
|
|
|
|
+
|
|
|
|
+ switch (selectedOption) {
|
|
|
|
+
|
|
|
|
+ case "Category":
|
|
|
|
+ String catName = JOptionPane.showInputDialog("Please enter a Name for Category ");
|
|
|
|
+ if (catName.length() != 0) {
|
|
|
|
+ controller.addCategory(catName);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case "Object":
|
|
|
|
+ if (selectedNode == null) {
|
|
|
|
+ JOptionPane.showMessageDialog(new JFrame(),
|
|
|
|
+ "Please select a Category first before adding " + selectedOption + ".");
|
|
|
|
+ }
|
|
|
|
+ if (selectedNode.getLevel() == 1) {
|
|
|
|
+ addObjectPopUP = new AddObjectPopUp();
|
|
|
|
+ addObjectPopUP.setVisible(true);
|
|
|
|
+ addObjectPopUP.setController(controller);
|
|
|
|
+ addObjectPopUP.setCategory(selectedNode.toString());
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ addObjectAction(selectedOption, selectedNode);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ aboutUs.addMouseListener(new MouseAdapter() {
|
|
|
|
+ @Override
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
+ aboutUsPopUp = new AboutUsPopUp();
|
|
|
|
+ aboutUsPopUp.setVisible(true);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ canvas.addMouseListener(new MouseAdapter() {
|
|
|
|
+ @Override
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
+ if (tableModel.getRowCount() > 0) {
|
|
|
|
+ for (int i = tableModel.getRowCount() - 1; i > -1; i--) {
|
|
|
|
+ tableModel.removeRow(i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (canvas.dataSelected != null) {
|
|
|
|
+ for (HolonElement he : canvas.dataSelected) {
|
|
|
|
+ Object[] temp = { he.getEleName(), he.getSign(), he.getEnergy(), he.getAmount() };
|
|
|
|
+ tableModel.addRow(temp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ table.addPropertyChangeListener(new PropertyChangeListener() {
|
|
|
|
+ @Override
|
|
|
|
+ public void propertyChange(PropertyChangeEvent evt) {
|
|
|
|
+ try {
|
|
|
|
+
|
|
|
|
+ tempCps = controller.searchByID(model.getSelectedObjectID());
|
|
|
|
+ if (tempCps != null) {
|
|
|
|
+ System.out.println("change: " + tempCps.toString());
|
|
|
|
+ for (int r = 0; r < tableModel.getRowCount(); r++) {
|
|
|
|
+ ArrayList<Object> temp = new ArrayList<>();
|
|
|
|
+ for (int c = 0; c < tableModel.getColumnCount(); c++) {
|
|
|
|
+ temp.add(table.getValueAt(r, c));
|
|
|
|
+ }
|
|
|
|
+ float ch;
|
|
|
|
+ if(temp.get(1).toString().compareTo("-")==0) {ch = -1;} else {ch = 1;}
|
|
|
|
+ float fa = Float.parseFloat(temp.get(2).toString());
|
|
|
|
+ int i = Integer.parseInt(temp.get(3).toString());
|
|
|
|
+ ((HolonObject) tempCps).getElements().get(r).setEleName((String) temp.get(0));
|
|
|
|
+ ((HolonObject) tempCps).getElements().get(r).setSign(ch);
|
|
|
|
+ ((HolonObject) tempCps).getElements().get(r).setEnergy(fa);
|
|
|
|
+ ((HolonObject) tempCps).getElements().get(r).setAmount(i);
|
|
|
|
+ System.out.println(table.getRowCount() + " " + temp.get(0) + " " + ch + " "
|
|
|
|
+ + fa + " " + i);
|
|
|
|
+ }
|
|
|
|
+ if (tableModel.getRowCount() > 0) {
|
|
|
|
+ for (int i = tableModel.getRowCount() - 1; i > -1; i--) {
|
|
|
|
+ tableModel.removeRow(i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (HolonElement he : canvas.dataSelected) {
|
|
|
|
+ Object[] temp = { he.getEleName(), he.getSign(), he.getEnergy(), he.getAmount() };
|
|
|
|
+ tableModel.addRow(temp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ toolBar.add(btnAdd);
|
|
|
|
+
|
|
|
|
+ // Del Button
|
|
|
|
+ btnDel.addActionListener(new ActionListener() {
|
|
|
|
+ public void actionPerformed(ActionEvent arg0) {
|
|
|
|
+
|
|
|
|
+ Object nodeInfo = tree.getLastSelectedPathComponent();
|
|
|
|
+ if (nodeInfo != null) {
|
|
|
|
+ DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo;
|
|
|
|
+ String nodeName = selectedNode.getUserObject().toString();
|
|
|
|
+ int depthOfNode = selectedNode.getLevel();
|
|
|
|
+
|
|
|
|
+ switch (depthOfNode) {
|
|
|
|
+ case 1:
|
|
|
|
+ int dialogResult = JOptionPane.showConfirmDialog(null,
|
|
|
|
+ "Do you realy want to delete the Category " + nodeName + "?", "Warning",
|
|
|
|
+ JOptionPane.YES_NO_OPTION);
|
|
|
|
+ if (dialogResult == JOptionPane.YES_OPTION) {
|
|
|
|
+ controller.deleteCategory(nodeName);
|
|
|
|
+ break;
|
|
|
|
+ } else {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case 2:
|
|
|
|
+ DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();
|
|
|
|
+ controller.delObjectCategory(nodeName, parent.getUserObject().toString());
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ default:
|
|
|
|
+ JOptionPane.showMessageDialog(new JFrame(),
|
|
|
|
+ "Please select a Category or an Object in order to delete something.");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ JOptionPane.showMessageDialog(new JFrame(),
|
|
|
|
+ "Please select a Category or an Object in order to delete something.");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ toolBar.add(btnDel);
|
|
|
|
+ frmCyberPhysical.getContentPane().add(splitPane);
|
|
|
|
+
|
|
mntmOpen.addActionListener(new java.awt.event.ActionListener() {
|
|
mntmOpen.addActionListener(new java.awt.event.ActionListener() {
|
|
- @Override
|
|
|
|
- public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
|
|
- menuFileExitActionPerformed(evt);
|
|
|
|
- }
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
|
|
+ menuFileExitActionPerformed(evt);
|
|
|
|
+ }
|
|
|
|
+
|
|
private void menuFileExitActionPerformed(java.awt.event.ActionEvent evt) {
|
|
private void menuFileExitActionPerformed(java.awt.event.ActionEvent evt) {
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
JFrame test = new JFrame();
|
|
JFrame test = new JFrame();
|
|
if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) {
|
|
if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) {
|
|
- File file = fileChooser.getSelectedFile();
|
|
|
|
- System.out.println("File Path is: "+file.toString());
|
|
|
|
|
|
+ File file = fileChooser.getSelectedFile();
|
|
|
|
+ System.out.println("File Path is: " + file.toString());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ splitPane.setRightComponent(splitPane_1);
|
|
|
|
+ splitPane.setDividerLocation(200);
|
|
|
|
+ splitPane_1.setDividerLocation(500);
|
|
|
|
+ splitPane.setLeftComponent(scrollPane_1);
|
|
|
|
+ splitPane_1.setLeftComponent(tabbedPane);
|
|
|
|
+ splitPane_1.setRightComponent(scrollPane);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * adds a specific object type to selected Category also handles input
|
|
|
|
+ * windows and illegal inputs
|
|
|
|
+ */
|
|
|
|
+ public void addObjectAction(String objType, DefaultMutableTreeNode selectedNode) {
|
|
|
|
+ if (selectedNode == null) {
|
|
|
|
+ JOptionPane.showMessageDialog(new JFrame(),
|
|
|
|
+ "Please select a Category first before adding " + objType + ".");
|
|
|
|
+ }
|
|
|
|
+ // if selected node is a directory for Categories
|
|
|
|
+ else {
|
|
|
|
+ if (selectedNode.getLevel() == 1) {
|
|
|
|
+ String objname = JOptionPane.showInputDialog("Please enter a Name for the " + objType);
|
|
|
|
+ Category cat = controller.searchCategory(selectedNode.getUserObject().toString());
|
|
|
|
+
|
|
|
|
+ if (objname.length() != 0) {
|
|
|
|
+ switch (objType) {
|
|
|
|
+
|
|
|
|
+ case "Switch":
|
|
|
|
+ controller.addSwitch(cat, objname, objType);
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case "Transformer":
|
|
|
|
+ controller.addTransformer(cat, objname, objType);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ JOptionPane.showMessageDialog(new JFrame(),
|
|
|
|
+ "Objects can not be added to Objects. Please select a Category.");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * reloads the Categories from Model
|
|
|
|
+ */
|
|
|
|
+ public void updateCategories(final ArrayList<Category> categories) {
|
|
|
|
+ tree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("Categories") {
|
|
|
|
+ {
|
|
|
|
+ DefaultMutableTreeNode node_1;
|
|
|
|
+ for (Category c : categories) {
|
|
|
|
+ node_1 = new DefaultMutableTreeNode(c.getName());
|
|
|
|
+
|
|
|
|
+ // kann eventuell umgeändert werden
|
|
|
|
+ for (CpsObject obj : c.getObjects()) {
|
|
|
|
+ node_1.add(new DefaultMutableTreeNode(obj.getObjName()));
|
|
|
|
+ }
|
|
|
|
+ add(node_1);
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
- });
|
|
|
|
-
|
|
|
|
|
|
+ }));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+ public void onChange(ArrayList<Category> categories) {
|
|
|
|
+ DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
|
|
|
|
+ updateCategories(categories);
|
|
|
|
+ model.reload();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ *
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public JFrame getFrmCyberPhysical() {
|
|
|
|
+ return frmCyberPhysical;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|