package me.legrange.panstamp.gui; import me.legrange.panstamp.gui.osx.AppleExtension; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JMenu; import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.tree.DefaultTreeSelectionModel; import javax.swing.tree.TreePath; import me.legrange.panstamp.Network; import me.legrange.panstamp.NetworkException; import me.legrange.panstamp.gui.model.Model; import me.legrange.panstamp.gui.view.View; import me.legrange.panstamp.tools.store.DataStoreException; /** * * @author gideon */ public class PanStampToolsGUI extends javax.swing.JFrame { /** * @param args the command line arguments */ public static void main(String args[]) { try { if (AppleExtension.isOSX()) { System.setProperty("apple.awt.graphics.EnableQ2DX", "true"); System.setProperty("apple.laf.useScreenMenuBar", "true"); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { Logger.getLogger(PanStampToolsGUI.class.getName()).log(Level.SEVERE, null, ex); } } else { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("System".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(PanStampToolsGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { try { final PanStampToolsGUI mw = new PanStampToolsGUI(); if (AppleExtension.isOSX()) { AppleExtension.apply(mw); mw.panStampMenu.setVisible(false); } mw.setVisible(true); mw.start(); } catch (DataStoreException ex) { Logger.getLogger(PanStampToolsGUI.class.getName()).log(Level.SEVERE, null, ex); } catch (NetworkException ex) { Logger.getLogger(PanStampToolsGUI.class.getName()).log(Level.SEVERE, null, ex); } catch (NoSuchMethodException ex) { Logger.getLogger(PanStampToolsGUI.class.getName()).log(Level.SEVERE, null, ex); } } }); } /** * Creates new form MainWindow * * @throws me.legrange.panstamp.tools.store.DataStoreException */ public PanStampToolsGUI() throws DataStoreException { model = new Model(); view = new View(this, model); initComponents(); setLocationRelativeTo(null); mainMenu.add(view.getWorldMenu()); mainMenu.add(view.getGatewayMenu()); mainMenu.add(view.getDeviceMenu()); // mainMenu.add(view.getRegisterMenu()); mainMenu.add(view.getEndpointMenu()); } public JTree getNetworkTree() { return networkTree; } /** * start the application */ private void start() throws NetworkException { model.start(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { leftRightSplitPane = new javax.swing.JSplitPane(); topBottomSplitPane = new javax.swing.JSplitPane(); topPanel = new javax.swing.JPanel(); swapMessagesPane = new javax.swing.JScrollPane(); swapMessagesTable = new javax.swing.JTable(); bottomPanel = new javax.swing.JPanel(); eventPanel = new javax.swing.JScrollPane(); eventTable = new javax.swing.JTable(); leftPanel = new javax.swing.JPanel(); swapNetworkPane = new javax.swing.JScrollPane(); networkTree = new javax.swing.JTree(); mainMenu = new javax.swing.JMenuBar(); panStampMenu = new javax.swing.JMenu(); aboutMenuItem = new javax.swing.JMenuItem(); configMenuItem = new javax.swing.JMenuItem(); quitItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setFont(new java.awt.Font("Courier", 0, 10)); // NOI18N setMinimumSize(new java.awt.Dimension(800, 600)); leftRightSplitPane.setBorder(null); leftRightSplitPane.setDividerLocation(290); leftRightSplitPane.setDividerSize(0); topBottomSplitPane.setBorder(null); topBottomSplitPane.setDividerLocation(280); topBottomSplitPane.setDividerSize(0); topBottomSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); topPanel.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createTitledBorder(null, "SWAP Messages", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Lucida Grande", 1, 13)), javax.swing.BorderFactory.createEmptyBorder(2, 4, 2, 4))); // NOI18N topPanel.setLayout(new java.awt.BorderLayout()); swapMessagesTable.setFont(new java.awt.Font("Courier", 0, 12)); // NOI18N swapMessagesTable.setModel(model.getSWAPTableModel()); swapMessagesTable.getColumnModel().getColumn(0).setPreferredWidth(100); swapMessagesTable.getColumnModel().getColumn(0).setMinWidth(100); swapMessagesTable.getColumnModel().getColumn(0).setMaxWidth(100); swapMessagesTable.getColumnModel().getColumn(1).setPreferredWidth(61); swapMessagesTable.getColumnModel().getColumn(1).setMinWidth(61); swapMessagesTable.getColumnModel().getColumn(1).setMaxWidth(61); swapMessagesTable.getColumnModel().getColumn(2).setPreferredWidth(48); swapMessagesTable.getColumnModel().getColumn(2).setMinWidth(48); swapMessagesTable.getColumnModel().getColumn(2).setMaxWidth(48); swapMessagesTable.getColumnModel().getColumn(3).setPreferredWidth(160); swapMessagesTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN); swapMessagesTable.setMinimumSize(new java.awt.Dimension(480, 250)); swapMessagesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); swapMessagesTable.setShowGrid(false); swapMessagesTable.getTableHeader().setReorderingAllowed(false); swapMessagesPane.setViewportView(swapMessagesTable); topPanel.add(swapMessagesPane, java.awt.BorderLayout.CENTER); topBottomSplitPane.setTopComponent(topPanel); bottomPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Network Events")); bottomPanel.setLayout(new java.awt.BorderLayout()); eventTable.setModel(model.getEndpointTableModel()); eventTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN); eventTable.setMinimumSize(new java.awt.Dimension(480, 250)); eventTable.getColumnModel().getColumn(0).setMinWidth(100); eventTable.getColumnModel().getColumn(0).setMaxWidth(100); eventPanel.setViewportView(eventTable); bottomPanel.add(eventPanel, java.awt.BorderLayout.CENTER); topBottomSplitPane.setRightComponent(bottomPanel); leftRightSplitPane.setRightComponent(topBottomSplitPane); leftPanel.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createTitledBorder(null, "SWAP Network", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Lucida Grande", 1, 13)), javax.swing.BorderFactory.createEmptyBorder(2, 4, 2, 4))); // NOI18N leftPanel.setPreferredSize(new java.awt.Dimension(0, 0)); leftPanel.setLayout(new java.awt.BorderLayout()); networkTree.setModel(model.getTreeModel()); networkTree.setCellRenderer(view.getTreeCellRenderer()); networkTree.setSelectionModel(new DefaultTreeSelectionModel()); networkTree.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { networkTreeMouseClicked(evt); } public void mouseClicked(java.awt.event.MouseEvent evt) { networkTreeMouseClicked(evt); } }); swapNetworkPane.setViewportView(networkTree); leftPanel.add(swapNetworkPane, java.awt.BorderLayout.CENTER); leftRightSplitPane.setLeftComponent(leftPanel); panStampMenu.setText("panStamp Tools GUI"); panStampMenu.setAutoscrolls(true); aboutMenuItem.setText("About"); aboutMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { aboutMenuItemActionPerformed(evt); } }); panStampMenu.add(aboutMenuItem); configMenuItem.setText("Preferences"); configMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { configMenuItemActionPerformed(evt); } }); panStampMenu.add(configMenuItem); quitItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK)); quitItem.setText("Quit"); quitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { quitItemActionPerformed(evt); } }); panStampMenu.add(quitItem); mainMenu.add(panStampMenu); setJMenuBar(mainMenu); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(leftRightSplitPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 786, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(leftRightSplitPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 564, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void quitItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quitItemActionPerformed quit(); }//GEN-LAST:event_quitItemActionPerformed private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed showAbout(); }//GEN-LAST:event_aboutMenuItemActionPerformed private void networkTreeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_networkTreeMouseClicked TreePath path = networkTree.getClosestPathForLocation(evt.getX(), evt.getY()); if (!evt.isPopupTrigger()) { JPopupMenu menu = view.getTreePopupMenu(path); networkTree.setComponentPopupMenu(menu); } }//GEN-LAST:event_networkTreeMouseClicked private void configMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configMenuItemActionPerformed showPreferences(); }//GEN-LAST:event_configMenuItemActionPerformed public void quit() { System.exit(0); } public void showAbout() { AboutDialog ad = new AboutDialog(this, true); ad.setVisible(true); } public void showPreferences() { PreferencesDialog pd; try { pd = new PreferencesDialog(this, model); pd.setVisible(true); } catch (DataStoreException ex) { Logger.getLogger(PanStampToolsGUI.class.getName()).log(Level.SEVERE, null, ex); } } private Network gw; private final Model model; private final View view; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem aboutMenuItem; private javax.swing.JPanel bottomPanel; private javax.swing.JMenuItem configMenuItem; private javax.swing.JScrollPane eventPanel; private javax.swing.JTable eventTable; private javax.swing.JPanel leftPanel; private javax.swing.JSplitPane leftRightSplitPane; private javax.swing.JMenuBar mainMenu; private javax.swing.JTree networkTree; private javax.swing.JMenu panStampMenu; private javax.swing.JMenuItem quitItem; private javax.swing.JScrollPane swapMessagesPane; private javax.swing.JTable swapMessagesTable; private javax.swing.JScrollPane swapNetworkPane; private javax.swing.JSplitPane topBottomSplitPane; private javax.swing.JPanel topPanel; // End of variables declaration//GEN-END:variables }