1 package com.billkuker.rocketry.motorsim.visual;
\r
3 import java.awt.BorderLayout;
\r
4 import java.awt.Dimension;
\r
5 import java.util.HashMap;
\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
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
27 public class MotorWorkbench extends JFrame implements TreeSelectionListener {
\r
28 private static final long serialVersionUID = 1L;
\r
30 private JSplitPane split;
\r
32 private JTabbedPane motors;
\r
33 private JToolBar bar;
\r
34 private WorkbenchTreeModel tm;
\r
36 private HashMap<Motor, MotorEditor> m2e = new HashMap<Motor, MotorEditor>();
\r
38 public MotorWorkbench() {
\r
40 top = new JPanel(new BorderLayout());
\r
41 setContentPane(top);
\r
43 bar = new JToolBar();
\r
44 bar.add(new JButton("Burn"));
\r
45 top.add(bar, BorderLayout.PAGE_START);
\r
47 motors = new JTabbedPane();
\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
55 // Listen for when the selection changes.
\r
56 tree.addTreeSelectionListener(this);
\r
58 split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(
\r
60 //split.setDividerLocation(.25);
\r
61 //split.setResizeWeight(.25);
\r
62 top.add(split, BorderLayout.CENTER);
\r
64 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
\r
67 Motor mot = MotorEditor.defaultMotor();
\r
69 //mot = MotorEditor.defaultMotor();
\r
73 public void addMotor(Motor m) {
\r
75 MotorEditor e = new MotorEditor(m);
\r
77 motors.addTab("Motor", e);
\r
80 public static void main(String args[]) throws Exception {
\r
82 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
\r
83 } catch (Exception e1) {
\r
84 e1.printStackTrace();
\r
86 new MotorWorkbench().show();
\r
90 public void valueChanged(TreeSelectionEvent e) {
\r
91 Motor m = getMotor(e.getPath());
\r
93 motors.setSelectedComponent(m2e.get(m));
\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
101 private Motor getMotor(TreePath p) {
\r
102 if (p.getLastPathComponent() instanceof WorkbenchTreeModel.MotorNode) {
\r
103 return ((WorkbenchTreeModel.MotorNode) p.getLastPathComponent())
\r
105 } else if (p.getPath().length > 1)
\r
106 return getMotor(p.getParentPath());
\r