/[svn]/jsampler/trunk/src/org/jsampler/view/classic/InstrumentsDbFrame.java
ViewVC logotype

Annotation of /jsampler/trunk/src/org/jsampler/view/classic/InstrumentsDbFrame.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1729 - (hide annotations) (download)
Tue Apr 29 22:22:40 2008 UTC (16 years ago) by iliev
File size: 27851 byte(s)
* Added support for handling lost files in the Instruments Database
  (In the Instruments Database window choose Actions/Check For Lost Files)
* Fantasia: Added option to show the Instruments Database
  on the Right-Side Pane of the Fantasia's main window
  (choose Edit/Preferences, then click the `View' tab)
* Added new menu item in the Instruments Database window: Edit/Find
* Some minor bugfixes and enhancements

1 iliev 1205 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1729 * Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 1205 *
6     * This file is part of JSampler.
7     *
8     * JSampler is free software; you can redistribute it and/or modify
9     * it under the terms of the GNU General Public License version 2
10     * as published by the Free Software Foundation.
11     *
12     * JSampler is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     * GNU General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with JSampler; if not, write to the Free Software
19     * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20     * MA 02111-1307 USA
21     */
22    
23     package org.jsampler.view.classic;
24    
25     import java.awt.BorderLayout;
26     import java.awt.Dimension;
27    
28     import java.awt.event.ActionEvent;
29     import java.awt.event.ActionListener;
30     import java.awt.event.ItemEvent;
31     import java.awt.event.ItemListener;
32     import java.awt.event.KeyEvent;
33     import java.awt.event.WindowAdapter;
34     import java.awt.event.WindowEvent;
35    
36 iliev 1705 import java.util.List;
37 iliev 1205 import java.util.logging.Level;
38    
39     import javax.swing.AbstractAction;
40     import javax.swing.Action;
41     import javax.swing.BorderFactory;
42     import javax.swing.BoxLayout;
43 iliev 1285 import javax.swing.Icon;
44 iliev 1205 import javax.swing.JCheckBox;
45     import javax.swing.JComponent;
46     import javax.swing.JFrame;
47     import javax.swing.JMenu;
48     import javax.swing.JMenuBar;
49     import javax.swing.JMenuItem;
50     import javax.swing.JPanel;
51     import javax.swing.JScrollPane;
52     import javax.swing.JSplitPane;
53     import javax.swing.JTextField;
54     import javax.swing.JToggleButton;
55     import javax.swing.JToolBar;
56     import javax.swing.KeyStroke;
57 iliev 1705 import javax.swing.RowSorter.SortKey;
58     import javax.swing.SortOrder;
59 iliev 1205
60 iliev 1688 import javax.swing.event.ChangeEvent;
61     import javax.swing.event.ChangeListener;
62 iliev 1205 import javax.swing.event.ListSelectionEvent;
63     import javax.swing.event.ListSelectionListener;
64 iliev 1705 import javax.swing.event.RowSorterEvent;
65     import javax.swing.event.RowSorterListener;
66 iliev 1205 import javax.swing.event.TreeSelectionEvent;
67     import javax.swing.event.TreeSelectionListener;
68    
69     import javax.swing.plaf.ToolBarUI;
70    
71     import net.sf.juife.InformationDialog;
72     import net.sf.juife.NavigationPage;
73     import net.sf.juife.NavigationPane;
74    
75     import net.sf.juife.DefaultNavigationHistoryModel;
76     import net.sf.juife.Task;
77    
78     import net.sf.juife.event.TaskEvent;
79     import net.sf.juife.event.TaskListener;
80    
81     import org.jsampler.CC;
82     import org.jsampler.HF;
83     import org.jsampler.JSI18n;
84    
85     import org.jsampler.task.InstrumentsDb;
86    
87     import org.jsampler.view.DbDirectoryTreeNode;
88     import org.jsampler.view.InstrumentsDbTableModel;
89 iliev 1285 import org.jsampler.view.InstrumentsDbTableView;
90     import org.jsampler.view.std.JSInstrumentsDbTable;
91     import org.jsampler.view.std.JSInstrumentsDbTree;
92 iliev 1729 import org.jsampler.view.std.JSLostFilesDlg;
93 iliev 1205
94     import org.linuxsampler.lscp.DbDirectoryInfo;
95     import org.linuxsampler.lscp.DbInstrumentInfo;
96     import org.linuxsampler.lscp.DbSearchQuery;
97    
98 iliev 1705 import static javax.swing.event.RowSorterEvent.Type.SORT_ORDER_CHANGED;
99 iliev 1205 import static org.jsampler.view.classic.ClassicI18n.i18n;
100 iliev 1285 import static org.jsampler.view.classic.ClassicPrefs.preferences;
101 iliev 1705 import static org.jsampler.view.fantasia.FantasiaPrefs.INSTRUMENTS_DB_FRAME_SORT_ORDER;
102 iliev 1205
103     /**
104     *
105     * @author Grigor Iliev
106     */
107     public class InstrumentsDbFrame extends JFrame {
108 iliev 1729 private final ToolBar toolbar;
109 iliev 1205 private final JMenuBar menuBar = new JMenuBar();
110 iliev 1285 private final JSInstrumentsDbTree instrumentsDbTree;
111 iliev 1205 private final SidePane sidePane;
112     private final JSplitPane splitPane;
113     private final MainPane mainPane;
114    
115     private final GoUp goUp = new GoUp();
116     private final GoBack goBack = new GoBack();
117     private final GoForward goForward = new GoForward();
118    
119     private final NavigationHistoryModel navigationHistoryModel = new NavigationHistoryModel();
120    
121     private JMenu loadInstrumentMenu;
122     private JMenu addToMidiMapMenu;
123     private JMenu addToOrchestraMenu;
124    
125     /**
126     * Creates a new instance of <code>InstrumentsDbFrame</code>
127     */
128     public
129     InstrumentsDbFrame() {
130     setTitle(i18n.getLabel("InstrumentsDbFrame.title"));
131     if(Res.appIcon != null) setIconImage(Res.appIcon.getImage());
132    
133 iliev 1285 instrumentsDbTree = new JSInstrumentsDbTree(CC.getInstrumentsDbTreeModel());
134 iliev 1688 CC.addInstrumentsDbChangeListener(new ChangeListener() {
135     public void
136     stateChanged(ChangeEvent e) {
137     instrumentsDbTree.setModel(CC.getInstrumentsDbTreeModel());
138    
139     CC.scheduleInTaskQueue(new Runnable() {
140     public void
141     run() {
142     instrumentsDbTree.setSelectedDirectory("/");
143     navigationHistoryModel.clearHistory();
144     }
145     });
146     }
147     });
148 iliev 1205
149     sidePane = new SidePane();
150     mainPane = new MainPane();
151    
152     instrumentsDbTree.setSelectedDirectory("/");
153    
154 iliev 1729 toolbar = new ToolBar();
155     getContentPane().add(toolbar, BorderLayout.NORTH);
156 iliev 1205
157     splitPane = new JSplitPane (
158     JSplitPane.HORIZONTAL_SPLIT,
159     true, // continuousLayout
160     sidePane,
161     mainPane
162     );
163    
164     splitPane.setDividerSize(3);
165     splitPane.setDividerLocation(200);
166    
167     addMenu();
168    
169     pack();
170     setSavedSize();
171    
172     getContentPane().add(splitPane);
173     mainPane.getInstrumentsTable().loadColumnWidths();
174    
175     addWindowListener(new WindowAdapter() {
176     public void
177     windowClosing(WindowEvent we) { onWindowClose(); }
178     });
179    
180     instrumentsDbTree.addTreeSelectionListener(goUp);
181     instrumentsDbTree.addTreeSelectionListener(navigationHistoryModel);
182     installKeyboardListeners();
183     }
184    
185     private void
186     addMenu() {
187     JMenu m;
188     JMenuItem mi;
189    
190     setJMenuBar(menuBar);
191    
192     // Actions
193     m = new JMenu(i18n.getMenuLabel("instrumentsdb.actions"));
194     menuBar.add(m);
195    
196     mi = new JMenuItem(mainPane.getInstrumentsTable().createDirectoryAction);
197     mi.setIcon(null);
198     m.add(mi);
199    
200     mi = new JMenuItem(mainPane.getInstrumentsTable().deleteAction);
201     mi.setIcon(null);
202     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
203     m.add(mi);
204    
205     JMenu addInstrumentsMenu =
206     new JMenu(i18n.getMenuLabel("instrumentsdb.actions.addInstruments"));
207     m.add(addInstrumentsMenu);
208    
209     mi = new JMenuItem(mainPane.getInstrumentsTable().addInstrumentsFromFileAction);
210     mi.setIcon(null);
211     addInstrumentsMenu.add(mi);
212    
213     mi = new JMenuItem(mainPane.getInstrumentsTable().addInstrumentsFromDirAction);
214     mi.setIcon(null);
215     addInstrumentsMenu.add(mi);
216    
217     m.addSeparator();
218    
219 iliev 1355 mi = new JMenuItem(i18n.getMenuLabel("instrumentsdb.actions.format"));
220     m.add(mi);
221     mi.addActionListener(new ActionListener() {
222     public void
223     actionPerformed(ActionEvent e) {
224     String s = i18n.getMessage("InstrumentsDbFrame.formatDatabase?");
225     if(!HF.showYesNoDialog(InstrumentsDbFrame.this, s)) return;
226     CC.getTaskQueue().add(new InstrumentsDb.Format());
227     }
228     });
229    
230 iliev 1729 mi = new JMenuItem(i18n.getMenuLabel("instrumentsdb.actions.checkForLostFiles"));
231     m.add(mi);
232     mi.addActionListener(new ActionListener() {
233     public void
234     actionPerformed(ActionEvent e) {
235     new JSLostFilesDlg(InstrumentsDbFrame.this).setVisible(true);
236     }
237     });
238    
239 iliev 1355 m.addSeparator();
240    
241 iliev 1205 loadInstrumentMenu =
242     new JMenu(i18n.getMenuLabel("instrumentsdb.actions.loadInstrument"));
243     m.add(loadInstrumentMenu);
244     mainPane.getInstrumentsTable().registerLoadInstrumentMenus(loadInstrumentMenu);
245    
246     addToMidiMapMenu =
247     new JMenu(i18n.getMenuLabel("instrumentsdb.actions.addToMidiMap"));
248     m.add(addToMidiMapMenu);
249     mainPane.getInstrumentsTable().registerAddToMidiMapMenu(addToMidiMapMenu);
250    
251     addToOrchestraMenu =
252     new JMenu(i18n.getMenuLabel("instrumentsdb.actions.addToOrchestra"));
253     m.add(addToOrchestraMenu);
254     mainPane.getInstrumentsTable().registerAddToOrchestraMenu(addToOrchestraMenu);
255    
256     m.addSeparator();
257    
258     mi = new JMenuItem(mainPane.getInstrumentsTable().reloadAction);
259     mi.setIcon(null);
260     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
261     m.add(mi);
262    
263     m.addSeparator();
264    
265     mi = new JMenuItem(mainPane.getInstrumentsTable().propertiesAction);
266     mi.setIcon(null);
267     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.ALT_MASK));
268     m.add(mi);
269    
270     m = new JMenu(i18n.getMenuLabel("instrumentsdb.edit"));
271     menuBar.add(m);
272    
273     mi = new JMenuItem(mainPane.getInstrumentsTable().cutAction);
274     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK));
275     mi.setIcon(null);
276     m.add(mi);
277    
278     mi = new JMenuItem(mainPane.getInstrumentsTable().copyAction);
279     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK));
280     mi.setIcon(null);
281     m.add(mi);
282    
283     mi = new JMenuItem(mainPane.getInstrumentsTable().pasteAction);
284     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK));
285     mi.setIcon(null);
286     m.add(mi);
287    
288     m.addSeparator();
289    
290 iliev 1729 mi = new JMenuItem(i18n.getMenuLabel("instrumentsdb.edit.find"));
291     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK));
292     m.add(mi);
293     mi.addActionListener(new ActionListener() {
294     public void
295     actionPerformed(ActionEvent e) {
296     if(toolbar.btnFind.isSelected()) return;
297    
298     String path = instrumentsDbTree.getSelectedDirectoryPath();
299     if(path != null) sidePane.searchPage.setSearchPath(path);
300     toolbar.btnFind.doClick(0);
301     }
302     });
303    
304     m.addSeparator();
305    
306 iliev 1205 mi = new JMenuItem(mainPane.getInstrumentsTable().renameAction);
307     mi.setIcon(null);
308     m.add(mi);
309    
310     mi = new JMenuItem(mainPane.getInstrumentsTable().changeDescriptionAction);
311     mi.setIcon(null);
312     m.add(mi);
313    
314     m = new JMenu(i18n.getMenuLabel("instrumentsdb.go"));
315     menuBar.add(m);
316    
317     mi = new JMenuItem(goUp);
318     mi.setIcon(null);
319     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));
320     m.add(mi);
321    
322     mi = new JMenuItem(goBack);
323     mi.setIcon(null);
324     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_MASK));
325     m.add(mi);
326    
327     mi = new JMenuItem(goForward);
328     mi.setIcon(null);
329     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK));
330     m.add(mi);
331     }
332    
333     private void
334     installKeyboardListeners() {
335     getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put (
336     KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0),
337     "goUp"
338     );
339    
340     getRootPane().getActionMap().put ("goUp", new AbstractAction() {
341     public void
342     actionPerformed(ActionEvent e) {
343     if(!goUp.isEnabled()) return;
344     goUp.actionPerformed(null);
345     }
346     });
347     }
348    
349     /** Invoked when this window is about to close. */
350     private void
351     onWindowClose() {
352     boolean b = (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH;
353     ClassicPrefs.setWindowMaximized("InstrumentsDbFrame", b);
354     if(b) return;
355    
356     java.awt.Point p = getLocation();
357     Dimension d = getSize();
358     StringBuffer sb = new StringBuffer();
359     sb.append(p.x).append(',').append(p.y).append(',');
360     sb.append(d.width).append(',').append(d.height);
361     ClassicPrefs.setWindowSizeAndLocation("InstrumentsDbFrame", sb.toString());
362     int i = splitPane.getDividerLocation();
363 iliev 1285 preferences().setIntProperty("InstrumentsDbFrame.dividerLocation", i);
364 iliev 1205
365     mainPane.getInstrumentsTable().saveColumnsVisibleState();
366     mainPane.getInstrumentsTable().saveColumnWidths();
367     }
368    
369     private void
370     setDefaultSize() {
371     Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
372     double width = dimension.getWidth();
373     double height = dimension.getHeight();
374     setBounds(100, 100, (int) width - 200, (int) height - 200);
375     }
376    
377     private void
378     setSavedSize() {
379     String s = ClassicPrefs.getWindowSizeAndLocation("InstrumentsDbFrame");
380     if(s == null) {
381     setDefaultSize();
382     return;
383     }
384    
385     try {
386     int i = s.indexOf(',');
387     int x = Integer.parseInt(s.substring(0, i));
388    
389     s = s.substring(i + 1);
390     i = s.indexOf(',');
391     int y = Integer.parseInt(s.substring(0, i));
392    
393     s = s.substring(i + 1);
394     i = s.indexOf(',');
395     int width = Integer.parseInt(s.substring(0, i));
396    
397     s = s.substring(i + 1);
398     int height = Integer.parseInt(s);
399    
400     setBounds(x, y, width, height);
401    
402 iliev 1285 i = preferences().getIntProperty("InstrumentsDbFrame.dividerLocation");
403 iliev 1205 if(i != 0) splitPane.setDividerLocation(i);
404    
405     } catch(Exception x) {
406     String msg = "Parsing of window size and location string failed";
407     CC.getLogger().log(Level.INFO, msg, x);
408     setDefaultSize();
409     }
410    
411     if(ClassicPrefs.getWindowMaximized("InstrumentsDbFrame"))
412     setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
413     }
414    
415     private void
416     addSidePane() {
417     getContentPane().remove(mainPane);
418     splitPane.setRightComponent(mainPane);
419     getContentPane().add(splitPane);
420 iliev 1285 int i = preferences().getIntProperty("InstrumentsDbFrame.dividerLocation");
421 iliev 1205 if(i != 0) splitPane.setDividerLocation(i);
422     }
423    
424     private void
425     removeSidePane() {
426     int i = splitPane.getDividerLocation();
427 iliev 1285 preferences().setIntProperty("InstrumentsDbFrame.dividerLocation", i);
428 iliev 1205 getContentPane().remove(splitPane);
429     getContentPane().add(mainPane);
430     }
431    
432     private class GoUp extends AbstractAction implements TreeSelectionListener {
433     GoUp() {
434     super(i18n.getMenuLabel("instrumentsdb.go.up"));
435    
436     String s = i18n.getMenuLabel("instrumentsdb.go.up.tt");
437     putValue(SHORT_DESCRIPTION, s);
438     putValue(Action.SMALL_ICON, Res.iconGoUp22);
439     setEnabled(false);
440     }
441    
442     public void
443     actionPerformed(ActionEvent e) {
444     DbDirectoryTreeNode node = instrumentsDbTree.getSelectedDirectoryNode();
445     if(node == null) return;
446     instrumentsDbTree.setSelectedDirectoryNode(node.getParent());
447     }
448    
449     public void
450     valueChanged(TreeSelectionEvent e) {
451     DbDirectoryTreeNode n = instrumentsDbTree.getSelectedDirectoryNode();
452     if(n == null) {
453     setEnabled(false);
454     return;
455     }
456    
457     setEnabled(n.getParent() != null);
458     }
459     }
460    
461     private class GoBack extends AbstractAction {
462     GoBack() {
463     super(i18n.getMenuLabel("instrumentsdb.go.back"));
464    
465     String s = i18n.getMenuLabel("instrumentsdb.go.back.tt");
466     putValue(SHORT_DESCRIPTION, s);
467     putValue(Action.SMALL_ICON, Res.iconGoBack22);
468     setEnabled(false);
469     }
470    
471     public void
472     actionPerformed(ActionEvent e) {
473     navigationHistoryModel.goBack();
474     }
475     }
476    
477     private class GoForward extends AbstractAction {
478     GoForward() {
479     super(i18n.getMenuLabel("instrumentsdb.go.forward"));
480    
481     String s = i18n.getMenuLabel("instrumentsdb.go.forward.tt");
482     putValue(SHORT_DESCRIPTION, s);
483     putValue(Action.SMALL_ICON, Res.iconGoForward22);
484     setEnabled(false);
485     }
486    
487     public void
488     actionPerformed(ActionEvent e) {
489     navigationHistoryModel.goForward();
490     }
491     }
492    
493 iliev 1729 class ToolBar extends JToolBar {
494 iliev 1205 private final ToggleButton btnFolders = new ToggleButton();
495     private final ToggleButton btnFind = new ToggleButton();
496    
497     private final ToolbarButton btnGoUp = new ToolbarButton(goUp);
498     private final ToolbarButton btnGoBack = new ToolbarButton(goBack);
499     private final ToolbarButton btnGoForward = new ToolbarButton(goForward);
500     private final ToolbarButton btnReload =
501     new ToolbarButton(mainPane.getInstrumentsTable().reloadAction);
502    
503     private final ToolbarButton btnPreferences = new ToolbarButton();
504    
505 iliev 1729 public ToolBar() {
506 iliev 1205 super(i18n.getLabel("InstrumentsDbFrame.ToolbarBar.name"));
507     setFloatable(false);
508    
509     btnFolders.setIcon(Res.iconFolderOpen22);
510     btnFolders.doClick(0);
511     btnFind.setIcon(Res.iconFind22);
512     btnPreferences.setIcon(Res.iconPreferences22);
513    
514     add(btnFolders);
515     add(btnFind);
516     addSeparator();
517     add(btnGoBack);
518     add(btnGoForward);
519     add(btnGoUp);
520     add(btnReload);
521     addSeparator();
522     add(btnPreferences);
523    
524    
525     btnFolders.addActionListener(new ActionListener() {
526     public void
527     actionPerformed(ActionEvent e) {
528     if(!btnFolders.isSelected() && !btnFind.isSelected()) {
529     removeSidePane();
530     }
531    
532     if(!btnFolders.isSelected()) return;
533    
534     if(btnFind.isSelected()) btnFind.doClick(0);
535     else addSidePane();
536    
537     sidePane.showFoldersPage();
538     }
539     });
540    
541     btnFind.addActionListener(new ActionListener() {
542     public void
543     actionPerformed(ActionEvent e) {
544     if(!btnFolders.isSelected() && !btnFind.isSelected()) {
545     removeSidePane();
546     }
547    
548     if(!btnFind.isSelected()) return;
549    
550     if(btnFolders.isSelected()) btnFolders.doClick(0);
551     else addSidePane();
552    
553     sidePane.showSearchPage();
554     }
555     });
556    
557     btnPreferences.addActionListener(new ActionListener() {
558     public void
559     actionPerformed(ActionEvent e) {
560     new PreferencesDlg().setVisible(true);
561     }
562     });
563     }
564     }
565    
566     class ToggleButton extends JToggleButton {
567     ToggleButton() {
568     setBorderPainted(false);
569     setContentAreaFilled(false);
570     setFocusPainted(false);
571    
572     addActionListener(new ActionListener() {
573     public void
574     actionPerformed(ActionEvent e) {
575     setBorderPainted(isSelected());
576     }
577     });
578     }
579     }
580    
581     private class NavigationHistoryModel
582     extends DefaultNavigationHistoryModel<DbDirectoryTreeNode>
583     implements TreeSelectionListener, ActionListener {
584    
585     private boolean lock = false;
586    
587     NavigationHistoryModel() {
588     addActionListener(this);
589     }
590    
591     public DbDirectoryTreeNode
592     goBack() {
593     lock = true;
594     DbDirectoryTreeNode node = selectDirectory(super.goBack());
595     lock = false;
596     return node;
597     }
598    
599     public DbDirectoryTreeNode
600     goForward() {
601     lock = true;
602     DbDirectoryTreeNode node = selectDirectory(super.goForward());
603     lock = false;
604     return node;
605     }
606    
607     private DbDirectoryTreeNode
608     selectDirectory(DbDirectoryTreeNode node) {
609     if(node == null) return null;
610    
611     if(node == mainPane.getSearchResultsNode()) {
612     mainPane.showSearchResultsNode();
613     return node;
614     }
615    
616     String path = node.getInfo().getDirectoryPath();
617     if(CC.getInstrumentsDbTreeModel().getNodeByPath(path) != null) {
618     getInstrumentsDbTree().setSelectedDirectory(path);
619     return node;
620     }
621    
622     removePage();
623     fireActionPerformed();
624     String s = i18n.getMessage("InstrumentsDbFrame.unknownDirectory!", path);
625     HF.showErrorMessage(s, InstrumentsDbFrame.this);
626     return node;
627     }
628    
629     public void
630     addPage(DbDirectoryTreeNode node) {
631     if(lock) return;
632     if(node == null) return;
633     super.addPage(node);
634     }
635    
636     public void
637     valueChanged(TreeSelectionEvent e) {
638     addPage(instrumentsDbTree.getSelectedDirectoryNode());
639     }
640    
641     public void
642     actionPerformed(ActionEvent e) {
643     goBack.setEnabled(hasBack());
644     goForward.setEnabled(hasForward());
645     }
646     }
647    
648 iliev 1285 public JSInstrumentsDbTree
649 iliev 1205 getInstrumentsDbTree() { return instrumentsDbTree; }
650    
651     public void
652     setSearchResults(DbDirectoryInfo[] directories) {
653     setSearchResults(directories, null);
654     }
655    
656     public void
657     setSearchResults(DbInstrumentInfo[] instruments) {
658     setSearchResults(null, instruments);
659     }
660    
661     public void
662     setSearchResults(DbDirectoryInfo[] directories, DbInstrumentInfo[] instruments) {
663     DbDirectoryTreeNode node = mainPane.getSearchResultsNode();
664     node.removeAllDirectories();
665     node.removeAllInstruments();
666    
667     if(instruments != null) {
668     for(DbInstrumentInfo i : instruments) i.setShowAbsolutePath(true);
669     node.addInstruments(instruments);
670     }
671    
672     if(directories != null) {
673     DbDirectoryTreeNode[] nodeS = new DbDirectoryTreeNode[directories.length];
674     for(int i = 0; i < directories.length; i++) {
675     DbDirectoryInfo d = directories[i];
676     d.setShowAbsolutePath(true);
677     nodeS[i] = new DbDirectoryTreeNode(d);
678    
679    
680     }
681     node.addDirectories(nodeS);
682     }
683    
684     mainPane.showSearchResultsNode();
685     }
686    
687     class MainPane extends JPanel {
688 iliev 1285 private final JSInstrumentsDbTable instrumentsTable =
689     new JSInstrumentsDbTable(instrumentsDbTree);
690 iliev 1205
691     private final DbDirectoryTreeNode searchResultsNode = new DbDirectoryTreeNode(null);
692    
693     MainPane() {
694     setLayout(new BorderLayout());
695     JScrollPane sp = new JScrollPane(instrumentsTable);
696     add(sp);
697 iliev 1285 instrumentsTable.reloadAction.putValue(Action.SMALL_ICON, Res.iconReload22);
698    
699     instrumentsTable.createDirectoryAction.putValue (
700     Action.SMALL_ICON, Res.iconNew16
701     );
702    
703 iliev 1205 instrumentsTable.getParent().setBackground(instrumentsTable.getBackground());
704 iliev 1705
705     int i = preferences().getIntProperty(INSTRUMENTS_DB_FRAME_SORT_ORDER);
706     boolean descending = i < 0;
707     if(i < 0) i *= -1;
708 iliev 1729 i--;
709 iliev 1705
710 iliev 1729 if(i < 0 || i >= instrumentsTable.getModel().getColumnCount()) {
711     instrumentsTable.getRowSorter().toggleSortOrder(0);
712     CC.getLogger().warning("Unknown table column: " + i);
713     } else {
714     instrumentsTable.getRowSorter().toggleSortOrder(i);
715     if(descending) instrumentsTable.getRowSorter().toggleSortOrder(i);
716     }
717    
718 iliev 1205 searchResultsNode.setDetached(true);
719 iliev 1705
720     RowSorterListener l = new RowSorterListener() {
721     public void
722     sorterChanged(RowSorterEvent e) {
723     if(e.getType() != SORT_ORDER_CHANGED) return;
724     rowSorterChanged();
725     }
726     };
727    
728     instrumentsTable.getRowSorter().addRowSorterListener(l);
729 iliev 1205 }
730    
731 iliev 1705 private void
732     rowSorterChanged() {
733     List<? extends SortKey> list = instrumentsTable.getRowSorter().getSortKeys();
734     if(list.isEmpty()) return;
735     SortKey k = list.get(0);
736     int i = k.getColumn() + 1;
737     if(k.getSortOrder() == SortOrder.UNSORTED) return;
738     if(k.getSortOrder() == SortOrder.DESCENDING) i *= -1;
739     preferences().setIntProperty(INSTRUMENTS_DB_FRAME_SORT_ORDER, i);
740     }
741    
742 iliev 1285 public JSInstrumentsDbTable
743 iliev 1205 getInstrumentsTable() { return instrumentsTable; }
744    
745     public DbDirectoryTreeNode
746     getSearchResultsNode() { return searchResultsNode; }
747    
748     public void
749     showSearchResultsNode() {
750     instrumentsDbTree.clearSelection();
751     instrumentsTable.setParentDirectoryNode(searchResultsNode);
752     navigationHistoryModel.addPage(searchResultsNode);
753     }
754     }
755    
756    
757     class SidePane extends NavigationPane {
758     private final NavigationPage foldersPage = new NavigationPage();
759     private final DbSearchPage searchPage = new DbSearchPage(InstrumentsDbFrame.this);
760    
761     SidePane() {
762     setTitlebarVisiblie(false);
763    
764     foldersPage.setTitle(i18n.getLabel("InstrumentsDbFrame.folders"));
765     foldersPage.setLayout(new BorderLayout());
766     foldersPage.add(new JScrollPane(instrumentsDbTree));
767    
768     NavigationPage[] pages = { foldersPage, searchPage };
769     setPages(pages);
770     showFoldersPage();
771     }
772    
773     /** Shows the folders page in the left pane. */
774     public void
775     showFoldersPage() { getModel().addPage(foldersPage); }
776    
777     /** Shows the search page in the left pane. */
778     public void
779     showSearchPage() { getModel().addPage(searchPage); }
780     }
781    
782     private final EventHandler eventHandler = new EventHandler();
783    
784     private EventHandler
785     getHandler() { return eventHandler; }
786    
787     private class EventHandler implements ListSelectionListener {
788     public void
789     valueChanged(ListSelectionEvent e) {
790    
791     }
792     }
793    
794     class PreferencesDlg extends InformationDialog implements ItemListener {
795     private final JCheckBox checkShowSizeColumn =
796     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.SIZE"));
797    
798     private final JCheckBox checkShowFormatFamilyColumn =
799     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.FORMAT_FAMILY"));
800    
801     private final JCheckBox checkShowFormatVersionColumn =
802     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.FORMAT_VERSION"));
803    
804     private final JCheckBox checkShowIsDrumColumn =
805     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.IS_DRUM"));
806    
807     private final JCheckBox checkShowCreatedColumn =
808     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.CREATED"));
809    
810     private final JCheckBox checkShowModifiedColumn =
811     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.MODIFIED"));
812    
813     private final JCheckBox checkShowProductColumn =
814     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.PRODUCT"));
815    
816     private final JCheckBox checkShowArtistsColumn =
817     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.ARTISTS"));
818    
819     private final JCheckBox checkShowInstrumentFileColumn
820     = new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.INSTRUMENT_FILE"));
821    
822     private final JCheckBox checkShowInstrumentNrColumn =
823     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.INSTRUMENT_NR"));
824    
825     private final JCheckBox checkShowKeywordsColumn =
826     new JCheckBox(JSI18n.i18n.getLabel("InstrumentsDbTableModel.KEYWORDS"));
827    
828     PreferencesDlg() {
829     super(InstrumentsDbFrame.this);
830     InstrumentsDbTableModel m = mainPane.instrumentsTable.getModel();
831    
832     checkShowSizeColumn.setSelected(m.getShowSizeColumn());
833     checkShowFormatFamilyColumn.setSelected(m.getShowFormatFamilyColumn());
834     checkShowFormatVersionColumn.setSelected(m.getShowFormatVersionColumn());
835     checkShowIsDrumColumn.setSelected(m.getShowIsDrumColumn());
836     checkShowCreatedColumn.setSelected(m.getShowCreatedColumn());
837     checkShowModifiedColumn.setSelected(m.getShowModifiedColumn());
838     checkShowProductColumn.setSelected(m.getShowProductColumn());
839     checkShowArtistsColumn.setSelected(m.getShowArtistsColumn());
840     checkShowInstrumentFileColumn.setSelected(m.getShowInstrumentFileColumn());
841     checkShowInstrumentNrColumn.setSelected(m.getShowInstrumentNrColumn());
842     checkShowKeywordsColumn.setSelected(m.getShowKeywordsColumn());
843    
844     checkShowSizeColumn.addItemListener(this);
845     checkShowFormatFamilyColumn.addItemListener(this);
846     checkShowFormatVersionColumn.addItemListener(this);
847     checkShowIsDrumColumn.addItemListener(this);
848     checkShowCreatedColumn.addItemListener(this);
849     checkShowModifiedColumn.addItemListener(this);
850     checkShowProductColumn.addItemListener(this);
851     checkShowArtistsColumn.addItemListener(this);
852     checkShowInstrumentFileColumn.addItemListener(this);
853     checkShowInstrumentNrColumn.addItemListener(this);
854     checkShowKeywordsColumn.addItemListener(this);
855    
856     JPanel p = new JPanel();
857     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
858     p.add(checkShowSizeColumn);
859     p.add(checkShowFormatFamilyColumn);
860     p.add(checkShowFormatVersionColumn);
861     p.add(checkShowIsDrumColumn);
862     p.add(checkShowCreatedColumn);
863     p.add(checkShowModifiedColumn);
864     p.add(checkShowProductColumn);
865     p.add(checkShowArtistsColumn);
866     p.add(checkShowInstrumentFileColumn);
867     p.add(checkShowInstrumentNrColumn);
868     p.add(checkShowKeywordsColumn);
869     String s = i18n.getLabel("InstrumentsDbFrame.columns");
870     p.setBorder(BorderFactory.createTitledBorder(s));
871    
872     setMainPane(p);
873     }
874    
875     public void
876     itemStateChanged(ItemEvent e) {
877     mainPane.getInstrumentsTable().saveColumnWidths();
878    
879     InstrumentsDbTableModel m = mainPane.instrumentsTable.getModel();
880    
881     Object source = e.getItemSelectable();
882     if(source == checkShowSizeColumn) {
883     m.setShowSizeColumn(checkShowSizeColumn.isSelected());
884     } else if(source == checkShowFormatFamilyColumn) {
885     boolean b = checkShowFormatFamilyColumn.isSelected();
886     m.setShowFormatFamilyColumn(b);
887     } else if(source == checkShowFormatVersionColumn) {
888     boolean b = checkShowFormatVersionColumn.isSelected();
889     m.setShowFormatVersionColumn(b);
890     } else if(source == checkShowIsDrumColumn) {
891     m.setShowIsDrumColumn(checkShowIsDrumColumn.isSelected());
892     } else if(source == checkShowCreatedColumn) {
893     m.setShowCreatedColumn(checkShowCreatedColumn.isSelected());
894     } else if(source == checkShowModifiedColumn) {
895     m.setShowModifiedColumn(checkShowModifiedColumn.isSelected());
896     } else if(source == checkShowProductColumn) {
897     m.setShowProductColumn(checkShowProductColumn.isSelected());
898     } else if(source == checkShowArtistsColumn) {
899     m.setShowArtistsColumn(checkShowArtistsColumn.isSelected());
900     } else if(source == checkShowInstrumentFileColumn) {
901     boolean b = checkShowInstrumentFileColumn.isSelected();
902     m.setShowInstrumentFileColumn(b);
903     } else if(source == checkShowInstrumentNrColumn) {
904     boolean b = checkShowInstrumentNrColumn.isSelected();
905     m.setShowInstrumentNrColumn(b);
906     } else if(source == checkShowKeywordsColumn) {
907     m.setShowKeywordsColumn(checkShowKeywordsColumn.isSelected());
908     }
909    
910     mainPane.getInstrumentsTable().loadColumnWidths();
911     mainPane.getInstrumentsTable().getRowSorter().toggleSortOrder(0);
912     }
913     }
914     }

  ViewVC Help
Powered by ViewVC