1
2 package hep.wired.heprep.tree;
3
4 import java.awt.*;
5 import java.awt.event.*;
6 import java.util.*;
7 import java.util.List;
8 import javax.swing.*;
9 import javax.swing.event.*;
10 import javax.swing.tree.*;
11
12 import hep.graphics.heprep.HepRep;
13 import hep.graphics.heprep.HepRepType;
14
15 import hep.wired.util.TristateTreeNode;
16
17 import hep.wired.heprep.util.WiredHepRepUtil;
18
19 /***
20 * TreePanelModel.
21 *
22 * @author Mark Donszelmann
23 * @version $Id: TreePanelModel.java 2115 2005-07-25 05:33:47Z duns $
24 */
25 public class TreePanelModel {
26
27 private TypeTristateTreeModel typeTreeModel;
28 private TreeModelListener typeTreeModelListener;
29 private ButtonModel applyModel;
30 private ButtonModel applyImmediatelyModel;
31 private ButtonModel hideModel;
32 private SpinnerNumberModel hideLevelModel;
33
34 private List
35
36 private List listeners;
37
38 public TreePanelModel() {
39
40 applyImmediatelyModel = new JToggleButton.ToggleButtonModel();
41 applyImmediatelyModel.addActionListener(new ActionListener() {
42 public void actionPerformed(ActionEvent event) {
43 fireChangeEvent(false);
44 }
45 });
46 applyImmediatelyModel.setSelected(true);
47
48 applyModel = new DefaultButtonModel();
49 applyModel.addActionListener(new ActionListener() {
50 public void actionPerformed(ActionEvent event) {
51 fireChangeEvent(true);
52 }
53 });
54 applyModel.setEnabled(false);
55
56 hideModel = new JToggleButton.ToggleButtonModel();
57 hideModel.addActionListener(new ActionListener() {
58 public void actionPerformed(ActionEvent event) {
59 updateTypeTreeDepth();
60 fireChangeEvent(false);
61 }
62 });
63 hideModel.setSelected(false);
64
65 hideLevelModel = new SpinnerNumberModel(1, 1, 1, 1);
66 hideLevelModel.addChangeListener(new ChangeListener() {
67 public void stateChanged(ChangeEvent event) {
68 updateTypeTreeDepth();
69 fireChangeEvent(false);
70 }
71 });
72
73 typeTreeModelListener = new TreeModelListener() {
74 public void treeNodesChanged(TreeModelEvent e) {
75 fireChangeEvent(false);
76 }
77
78 public void treeNodesInserted(TreeModelEvent e) {}
79 public void treeNodesRemoved(TreeModelEvent e) {}
80 public void treeStructureChanged(TreeModelEvent e) {}
81 };
82
83 expandedTypeNames = new ArrayList(100);
84
85 listeners = new ArrayList(5);
86 }
87
88 public void addChangeListener(ChangeListener listener) {
89 listeners.add(listener);
90 }
91
92 public void removeChangeListener(ChangeListener listener) {
93 listeners.remove(listener);
94 }
95
96 public void setHepRep(HepRep heprep) {
97
98 if (typeTreeModel != null) {
99 typeTreeModel.removeTreeModelListener(typeTreeModelListener);
100 }
101
102
103 typeTreeModel = WiredHepRepUtil.copyTypeTree(typeTreeModel, heprep);
104
105
106 typeTreeModel.addTreeModelListener(typeTreeModelListener);
107
108
109 int maxDepth = typeTreeModel.getMaximumDepth();
110 hideLevelModel.setMaximum(new Integer(maxDepth));
111 hideLevelModel.setValue(new Integer(maxDepth));
112 }
113
114 private void updateTypeTreeDepth() {
115 if (typeTreeModel == null) return;
116 typeTreeModel.setMaximumDepth(hideModel.isSelected() ? hideLevelModel.getNumber().intValue()
117 : Integer.MAX_VALUE);
118 }
119
120 public void fireChangeEvent(boolean force) {
121 if (applyImmediatelyModel.isSelected() || force) {
122 for (Iterator i=listeners.iterator(); i.hasNext(); ) {
123 ChangeEvent event = new ChangeEvent(this);
124 ((ChangeListener)i.next()).stateChanged(event);
125 }
126 }
127 }
128
129 public TypeTristateTreeModel getTypeTreeModel() {
130 return typeTreeModel;
131 }
132
133 public ButtonModel getApplyModel() {
134 return applyModel;
135 }
136
137 public ButtonModel getApplyImmediatelyModel() {
138 return applyImmediatelyModel;
139 }
140
141 public ButtonModel getHideModel() {
142 return hideModel;
143 }
144
145 public SpinnerNumberModel getHideLevelModel() {
146 return hideLevelModel;
147 }
148
149 public int getMaxDepth() {
150 return hideModel.isSelected() ? hideLevelModel.getNumber().intValue() : Integer.MAX_VALUE;
151 }
152
153 public Set
154 return typeTreeModel.getSelectedSet(HepRepType.class, getMaxDepth());
155 }
156
157 public void setExpandedTypeNames(List
158 this.expandedTypeNames = expandedTypeNames;
159 }
160
161 public List
162 return expandedTypeNames;
163 }
164 }