package ui.view; import java.awt.EventQueue; import java.io.File; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.JTree; import javax.swing.BoxLayout; import javax.swing.JSplitPane; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.tree.DefaultTreeModel; import com.sun.glass.events.MouseEvent; import ui.controller.Control; import ui.model.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.JEditorPane; import javax.swing.JFileChooser; import javax.swing.table.DefaultTableModel; import java.awt.Color; import java.awt.Component; import java.awt.Window.Type; import javax.swing.JInternalFrame; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.JButton; import javax.swing.JList; import javax.swing.ListSelectionModel; import javax.swing.TransferHandler; import javax.swing.AbstractListModel; import java.awt.Choice; import javax.swing.JComboBox; import javax.swing.DefaultComboBoxModel; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.Icon; import javax.swing.ImageIcon; import Interfaces.CategoryListener; import javafx.util.Pair; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.ActionEvent; public class GUI implements CategoryListener { private JFrame frmCyberPhysical; private final JMenuBar menuBar = new JMenuBar(); private final JMenu mnNewMenu = new JMenu("File"); private final JMenu mnNewMenu_1 = new JMenu("Edit"); private final JMenu mnNewMenu_2 = new JMenu("Options"); private final JMenu mnNewMenu_3 = new JMenu("View"); private final JMenu mnHelp = new JMenu("Help"); private final JMenuItem mntmOpen = new JMenuItem("Open"); private final JMenuItem mntmNew = new JMenuItem("New"); private final JMenuItem mntmSave = new JMenuItem("Save"); private final JSplitPane splitPane = new JSplitPane(); private final JSplitPane splitPane_1 = new JSplitPane(); private final JScrollPane scrollPane_1 = new JScrollPane(); private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); private final JScrollPane scrollPane_2 = new JScrollPane(); private final MyCanvas canvas = new MyCanvas(); private final JTree tree = new JTree(); private final JEditorPane dtrpnHereWillBe = new JEditorPane(); private final JSplitPane splitPane_2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT); private JTable table; private JTable table_2 = new JTable(); private final Model model; private final Control controller; private final JPanel panel = new JPanel(); private final JComboBox comboBox = new JComboBox(); // Buttons private final JButton btnAdd = new JButton("Add"); private final JButton btnDel = new JButton("Del"); private final JToolBar toolBar = new JToolBar(); /** * Create the application. */ public GUI(Control control) { this.controller = control; this.model = control.getModel(); control.initListener(this); initialize(); } /** * Initialize the contents of the frame. */ @SuppressWarnings("serial") private void initialize() { frmCyberPhysical = new JFrame(); frmCyberPhysical.setTitle("Cyber Physical Systems Model"); frmCyberPhysical.setBounds(100, 100, 891, 467); frmCyberPhysical.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frmCyberPhysical.setJMenuBar(menuBar); menuBar.add(mnNewMenu); mnNewMenu.add(mntmNew); mnNewMenu.add(mntmOpen); mnNewMenu.add(mntmSave); menuBar.add(mnNewMenu_1); menuBar.add(mnNewMenu_2); menuBar.add(mnNewMenu_3); menuBar.add(mnHelp); // 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); canvas.setBackground(Color.WHITE); tabbedPane.addTab("Modeling", null, canvas, null); tabbedPane.addTab("Simulation", null, scrollPane_2, null); dtrpnHereWillBe.setText("Here will be the Simulation"); scrollPane_2.setViewportView(dtrpnHereWillBe); splitPane_1.setLeftComponent(tabbedPane); JScrollPane scrollPane = new JScrollPane(); splitPane_1.setRightComponent(splitPane_2); splitPane_2.setLeftComponent(scrollPane); table = new JTable(data, columnNames); scrollPane.setViewportView(table); table.setFillsViewportHeight(true); table.setModel(new DefaultTableModel(data, columnNames)); table.setCellSelectionEnabled(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" })); table_2.getColumnModel().getColumn(0).setPreferredWidth(103); table_2.getColumnModel().getColumn(1).setPreferredWidth(107); table_2.getColumnModel().getColumn(2).setPreferredWidth(125); frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0)); splitPane_2.setDividerLocation(200); splitPane.setLeftComponent(scrollPane_1); tree.setEditable(true); Icon icon = new ImageIcon(new ImageIcon(this.getClass().getResource("/Images/Dummy_House.png")).getImage().getScaledInstance(30, 30, java.awt.Image.SCALE_SMOOTH)); //DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer(); DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer(); renderer.setLeafIcon(icon); //renderer.setClosedIcon(icon); //renderer.setOpenIcon(icon); tree.setRowHeight(icon.getIconHeight()); tree.setCellRenderer(renderer); //add a MouseListener to initiate the Drag on the appropriate //MouseEvent /*tree.addMouseMotionListener(new MouseAdapter(){ public void mouseDragged(MouseEvent e) { System.out.println("Drag"); Image img = null; try { URL url = new URL("https://cdn4.iconfinder.com/data/icons/buildings-filled-1/60/house-home-building-construction-32.png"); img = ImageIO.read(url); } catch (IOException e1) { System.out.println("Failed to load the Image!"); } JTree treep = (JTree)e.getSource(); TransferHandler handle = treep.getTransferHandler(); handle.setDragImage(img); handle.exportAsDrag(treep, e, TransferHandler.MOVE); } });*/ tree.addMouseListener(new MouseAdapter(){ public void mouseReleased(MouseEvent e){ Pair xy = new Pair((int)canvas.getMousePosition().getX(),(int)canvas.getMousePosition().getY()); canvas.choords.add(xy); canvas.repaint(); } }); 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 != ""){ controller.addNewCategory(catName); } break; default : addObjectAction(selectedOption, selectedNode); break; } } }); toolBar.add(btnAdd); // Del Button btnDel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Object nodeInfo = tree.getLastSelectedPathComponent(); DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) nodeInfo; String nodeName = selectedNode.getUserObject().toString(); int depthOfNode = selectedNode.getLevel(); switch(depthOfNode){ case 1: controller.deleteCategory(nodeName); break; case 2: DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent(); controller.deleteObjectInCat(nodeName,parent.getUserObject().toString()); break; } } }); toolBar.add(btnDel); frmCyberPhysical.getContentPane().add(splitPane); mntmOpen.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { menuFileExitActionPerformed(evt); } private void menuFileExitActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser fileChooser = new JFileChooser(); JFrame test = new JFrame(); if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); System.out.println("File Path is: " + file.toString()); } } }); } /* * 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()); switch(objType){ case "Object": controller.addNewObject( cat , objname); break; case "Switch" : controller.addNewSwitch(cat, objname); case "Transformer" : controller.addNewTransformer(cat, objname); } } 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 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 categories) { DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); updateCategories(categories); model.reload(); } /** * * @return */ public JFrame getFrmCyberPhysical() { return frmCyberPhysical; } }