31 |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseEvent; |
32 |
|
|
33 |
import javax.swing.AbstractAction; |
import javax.swing.AbstractAction; |
34 |
|
import javax.swing.Action; |
35 |
import javax.swing.BorderFactory; |
import javax.swing.BorderFactory; |
36 |
import javax.swing.JComponent; |
import javax.swing.JComponent; |
37 |
import javax.swing.JMenuItem; |
import javax.swing.JMenuItem; |
39 |
import javax.swing.JTree; |
import javax.swing.JTree; |
40 |
import javax.swing.KeyStroke; |
import javax.swing.KeyStroke; |
41 |
|
|
42 |
|
import javax.swing.event.ChangeEvent; |
43 |
|
import javax.swing.event.ChangeListener; |
44 |
|
import javax.swing.event.TreeSelectionEvent; |
45 |
|
import javax.swing.event.TreeSelectionListener; |
46 |
|
|
47 |
import javax.swing.tree.DefaultTreeCellRenderer; |
import javax.swing.tree.DefaultTreeCellRenderer; |
48 |
import javax.swing.tree.TreeSelectionModel; |
import javax.swing.tree.TreeSelectionModel; |
49 |
|
|
50 |
|
import net.sf.juife.DefaultNavigationHistoryModel; |
51 |
|
|
52 |
|
import org.jsampler.CC; |
53 |
|
import org.jsampler.HF; |
54 |
|
|
55 |
import org.jsampler.view.DbDirectoryTreeNode; |
import org.jsampler.view.DbDirectoryTreeNode; |
56 |
import org.jsampler.view.InstrumentsDbTreeModel; |
import org.jsampler.view.InstrumentsDbTreeModel; |
57 |
|
|
62 |
* @author Grigor Iliev |
* @author Grigor Iliev |
63 |
*/ |
*/ |
64 |
public class JSInstrumentsDbTree extends org.jsampler.view.AbstractInstrumentsDbTree { |
public class JSInstrumentsDbTree extends org.jsampler.view.AbstractInstrumentsDbTree { |
65 |
|
public final AbstractAction actionGoUp = new GoUp(); |
66 |
|
public final AbstractAction actionGoBack = new GoBack(); |
67 |
|
public final AbstractAction actionGoForward = new GoForward(); |
68 |
|
|
69 |
|
private final NavigationHistoryModel navigationHistoryModel = new NavigationHistoryModel(); |
70 |
|
|
71 |
|
|
72 |
/** |
/** |
73 |
* Creates a new instance of <code>JSInstrumentsDbTree</code>. |
* Creates a new instance of <code>JSInstrumentsDbTree</code>. |
93 |
ContextMenu contextMenu = new ContextMenu(); |
ContextMenu contextMenu = new ContextMenu(); |
94 |
//addMouseListener(contextMenu); |
//addMouseListener(contextMenu); |
95 |
installKeyboardListeners(); |
installKeyboardListeners(); |
96 |
|
|
97 |
|
CC.addInstrumentsDbChangeListener(new ChangeListener() { |
98 |
|
public void |
99 |
|
stateChanged(ChangeEvent e) { |
100 |
|
setModel(CC.getInstrumentsDbTreeModel()); |
101 |
|
|
102 |
|
CC.scheduleInTaskQueue(new Runnable() { |
103 |
|
public void |
104 |
|
run() { |
105 |
|
setSelectedDirectory("/"); |
106 |
|
navigationHistoryModel.clearHistory(); |
107 |
|
} |
108 |
|
}); |
109 |
|
} |
110 |
|
}); |
111 |
|
|
112 |
|
addTreeSelectionListener((GoUp)actionGoUp); |
113 |
|
addTreeSelectionListener(navigationHistoryModel); |
114 |
} |
} |
115 |
|
|
116 |
private void |
private void |
139 |
); |
); |
140 |
} |
} |
141 |
|
|
142 |
|
public NavigationHistoryModel |
143 |
|
getNavigationHistoryModel() { return navigationHistoryModel; } |
144 |
|
|
145 |
|
private class NavigationHistoryModel |
146 |
|
extends DefaultNavigationHistoryModel<DbDirectoryTreeNode> |
147 |
|
implements TreeSelectionListener, ActionListener { |
148 |
|
|
149 |
|
private boolean lock = false; |
150 |
|
|
151 |
|
NavigationHistoryModel() { |
152 |
|
addActionListener(this); |
153 |
|
} |
154 |
|
|
155 |
|
public DbDirectoryTreeNode |
156 |
|
goBack() { |
157 |
|
lock = true; |
158 |
|
DbDirectoryTreeNode node = selectDirectory(super.goBack()); |
159 |
|
lock = false; |
160 |
|
return node; |
161 |
|
} |
162 |
|
|
163 |
|
public DbDirectoryTreeNode |
164 |
|
goForward() { |
165 |
|
lock = true; |
166 |
|
DbDirectoryTreeNode node = selectDirectory(super.goForward()); |
167 |
|
lock = false; |
168 |
|
return node; |
169 |
|
} |
170 |
|
|
171 |
|
private DbDirectoryTreeNode |
172 |
|
selectDirectory(DbDirectoryTreeNode node) { |
173 |
|
if(node == null) return null; |
174 |
|
|
175 |
|
String path = node.getInfo().getDirectoryPath(); |
176 |
|
if(CC.getInstrumentsDbTreeModel().getNodeByPath(path) != null) { |
177 |
|
setSelectedDirectory(path); |
178 |
|
return node; |
179 |
|
} |
180 |
|
|
181 |
|
removePage(); |
182 |
|
fireActionPerformed(); |
183 |
|
String s = i18n.getMessage("JSInstrumentsDbTree.unknownDirectory!", path); |
184 |
|
HF.showErrorMessage(s, JSInstrumentsDbTree.this); |
185 |
|
return node; |
186 |
|
} |
187 |
|
|
188 |
|
public void |
189 |
|
addPage(DbDirectoryTreeNode node) { |
190 |
|
if(lock) return; |
191 |
|
if(node == null) return; |
192 |
|
super.addPage(node); |
193 |
|
} |
194 |
|
|
195 |
|
public void |
196 |
|
valueChanged(TreeSelectionEvent e) { |
197 |
|
addPage(getSelectedDirectoryNode()); |
198 |
|
} |
199 |
|
|
200 |
|
public void |
201 |
|
actionPerformed(ActionEvent e) { |
202 |
|
actionGoBack.setEnabled(hasBack()); |
203 |
|
actionGoForward.setEnabled(hasForward()); |
204 |
|
} |
205 |
|
} |
206 |
|
|
207 |
|
private class GoUp extends AbstractAction implements TreeSelectionListener { |
208 |
|
GoUp() { |
209 |
|
super(i18n.getMenuLabel("instrumentsdb.go.up")); |
210 |
|
|
211 |
|
String s = i18n.getMenuLabel("instrumentsdb.go.up.tt"); |
212 |
|
putValue(SHORT_DESCRIPTION, s); |
213 |
|
putValue(Action.SMALL_ICON, CC.getViewConfig().getBasicIconSet().getUp16Icon()); |
214 |
|
setEnabled(false); |
215 |
|
} |
216 |
|
|
217 |
|
public void |
218 |
|
actionPerformed(ActionEvent e) { |
219 |
|
DbDirectoryTreeNode node = getSelectedDirectoryNode(); |
220 |
|
if(node == null) return; |
221 |
|
setSelectedDirectoryNode(node.getParent()); |
222 |
|
} |
223 |
|
|
224 |
|
public void |
225 |
|
valueChanged(TreeSelectionEvent e) { |
226 |
|
DbDirectoryTreeNode n = getSelectedDirectoryNode(); |
227 |
|
if(n == null) { |
228 |
|
setEnabled(false); |
229 |
|
return; |
230 |
|
} |
231 |
|
|
232 |
|
setEnabled(n.getParent() != null); |
233 |
|
} |
234 |
|
} |
235 |
|
|
236 |
|
private class GoBack extends AbstractAction { |
237 |
|
GoBack() { |
238 |
|
super(i18n.getMenuLabel("instrumentsdb.go.back")); |
239 |
|
|
240 |
|
String s = i18n.getMenuLabel("instrumentsdb.go.back.tt"); |
241 |
|
putValue(SHORT_DESCRIPTION, s); |
242 |
|
putValue(Action.SMALL_ICON, CC.getViewConfig().getBasicIconSet().getBack16Icon()); |
243 |
|
setEnabled(false); |
244 |
|
} |
245 |
|
|
246 |
|
public void |
247 |
|
actionPerformed(ActionEvent e) { |
248 |
|
navigationHistoryModel.goBack(); |
249 |
|
} |
250 |
|
} |
251 |
|
|
252 |
|
private class GoForward extends AbstractAction { |
253 |
|
GoForward() { |
254 |
|
super(i18n.getMenuLabel("instrumentsdb.go.forward")); |
255 |
|
|
256 |
|
String s = i18n.getMenuLabel("instrumentsdb.go.forward.tt"); |
257 |
|
putValue(SHORT_DESCRIPTION, s); |
258 |
|
putValue(Action.SMALL_ICON, CC.getViewConfig().getBasicIconSet().getForward16Icon()); |
259 |
|
setEnabled(false); |
260 |
|
} |
261 |
|
|
262 |
|
public void |
263 |
|
actionPerformed(ActionEvent e) { |
264 |
|
navigationHistoryModel.goForward(); |
265 |
|
} |
266 |
|
} |
267 |
|
|
268 |
private class CellRenderer extends DefaultTreeCellRenderer { |
private class CellRenderer extends DefaultTreeCellRenderer { |
269 |
CellRenderer() { |
CellRenderer() { |
270 |
setOpaque(false); |
setOpaque(false); |