d497e2dd5ae74be2da231228493cb635ea7fd378
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / MotorWorkbench.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 \r
3 import java.awt.BorderLayout;\r
4 import java.awt.Dimension;\r
5 import java.util.HashMap;\r
6 \r
7 import javax.swing.JButton;\r
8 import javax.swing.JFrame;\r
9 import javax.swing.JPanel;\r
10 import javax.swing.JScrollPane;\r
11 import javax.swing.JSplitPane;\r
12 import javax.swing.JTabbedPane;\r
13 import javax.swing.JToolBar;\r
14 import javax.swing.JTree;\r
15 import javax.swing.UIManager;\r
16 import javax.swing.WindowConstants;\r
17 import javax.swing.event.TreeSelectionEvent;\r
18 import javax.swing.event.TreeSelectionListener;\r
19 import javax.swing.tree.DefaultMutableTreeNode;\r
20 import javax.swing.tree.TreePath;\r
21 import javax.swing.tree.TreeSelectionModel;\r
22 \r
23 import com.billkuker.rocketry.motorsim.Motor;\r
24 import com.billkuker.rocketry.motorsim.visual.workbench.WorkbenchTreeCellRenderer;\r
25 import com.billkuker.rocketry.motorsim.visual.workbench.WorkbenchTreeModel;\r
26 \r
27 public class MotorWorkbench extends JFrame implements TreeSelectionListener {\r
28         private static final long serialVersionUID = 1L;\r
29         private JPanel top;\r
30         private JSplitPane split;\r
31         private JTree tree;\r
32         private JTabbedPane motors;\r
33         private JToolBar bar;\r
34         private WorkbenchTreeModel tm;\r
35 \r
36         private HashMap<Motor, MotorEditor> m2e = new HashMap<Motor, MotorEditor>();\r
37 \r
38         public MotorWorkbench() {\r
39                 setSize(1024, 768);\r
40                 top = new JPanel(new BorderLayout());\r
41                 setContentPane(top);\r
42 \r
43                 bar = new JToolBar();\r
44                 bar.add(new JButton("Burn"));\r
45                 top.add(bar, BorderLayout.PAGE_START);\r
46 \r
47                 motors = new JTabbedPane();\r
48 \r
49                 tree = new JTree(tm = new WorkbenchTreeModel());\r
50                 tree.setCellRenderer(new WorkbenchTreeCellRenderer());\r
51                 tree.getSelectionModel().setSelectionMode(\r
52                                 TreeSelectionModel.SINGLE_TREE_SELECTION);\r
53                 tree.setPreferredSize(new Dimension(200, 100));\r
54 \r
55                 // Listen for when the selection changes.\r
56                 tree.addTreeSelectionListener(this);\r
57 \r
58                 split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(\r
59                                 tree), motors);\r
60                 //split.setDividerLocation(.25);\r
61                 //split.setResizeWeight(.25);\r
62                 top.add(split, BorderLayout.CENTER);\r
63 \r
64                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);\r
65                 setVisible(true);\r
66 \r
67                 Motor mot = MotorEditor.defaultMotor();\r
68                 addMotor(mot);\r
69                 //mot = MotorEditor.defaultMotor();\r
70                 //addMotor(mot);\r
71         }\r
72 \r
73         public void addMotor(Motor m) {\r
74                 tm.addMotor(m);\r
75                 MotorEditor e = new MotorEditor(m);\r
76                 m2e.put(m, e);\r
77                 motors.addTab("Motor", e);\r
78         }\r
79 \r
80         public static void main(String args[]) throws Exception {\r
81                 try {\r
82                         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\r
83                 } catch (Exception e1) {\r
84                         e1.printStackTrace();\r
85                 }\r
86                 new MotorWorkbench().show();\r
87         }\r
88 \r
89         @Override\r
90         public void valueChanged(TreeSelectionEvent e) {\r
91                 Motor m = getMotor(e.getPath());\r
92 \r
93                 motors.setSelectedComponent(m2e.get(m));\r
94                 \r
95                 if ( e.getPath().getLastPathComponent() instanceof DefaultMutableTreeNode ){\r
96                         Object o = ((DefaultMutableTreeNode)e.getPath().getLastPathComponent()).getUserObject();\r
97                         m2e.get(m).focusOnObject(o);\r
98                 }\r
99         }\r
100 \r
101         private Motor getMotor(TreePath p) {\r
102                 if (p.getLastPathComponent() instanceof WorkbenchTreeModel.MotorNode) {\r
103                         return ((WorkbenchTreeModel.MotorNode) p.getLastPathComponent())\r
104                                         .getUserObject();\r
105                 } else if (p.getPath().length > 1)\r
106                         return getMotor(p.getParentPath());\r
107                 return null;\r
108         }\r
109 }\r