/[svn]/jsampler/trunk/src/org/jsampler/view/std/JSAddDbInstrumentsFromDirDlg.java
ViewVC logotype

Annotation of /jsampler/trunk/src/org/jsampler/view/std/JSAddDbInstrumentsFromDirDlg.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1781 - (hide annotations) (download)
Mon Sep 29 18:21:21 2008 UTC (15 years, 7 months ago) by iliev
File size: 9866 byte(s)
* Implemented option for adding instruments in separate directories
  in the instruments database
  (patch by Chris Cherrett & Andrew Williams, a bit adjusted)

1 iliev 1286 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4     * Copyright (C) 2005-2007 Grigor Iliev <grigor@grigoriliev.com>
5     *
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.std;
24    
25     import java.awt.Dialog;
26     import java.awt.Dimension;
27     import java.awt.Frame;
28     import java.awt.Insets;
29    
30     import java.awt.event.ActionEvent;
31     import java.awt.event.ActionListener;
32     import java.awt.event.ItemEvent;
33     import java.awt.event.ItemListener;
34    
35     import javax.swing.BorderFactory;
36     import javax.swing.Box;
37     import javax.swing.BoxLayout;
38     import javax.swing.Icon;
39     import javax.swing.JButton;
40     import javax.swing.JCheckBox;
41 iliev 1308 import javax.swing.JComboBox;
42 iliev 1286 import javax.swing.JFileChooser;
43     import javax.swing.JPanel;
44     import javax.swing.SwingUtilities;
45    
46     import javax.swing.event.DocumentEvent;
47     import javax.swing.event.DocumentListener;
48    
49     import net.sf.juife.OkCancelDialog;
50     import net.sf.juife.Task;
51    
52     import net.sf.juife.event.TaskEvent;
53     import net.sf.juife.event.TaskListener;
54    
55     import org.jsampler.CC;
56 iliev 1304 import org.jsampler.JSPrefs;
57 iliev 1286 import org.jsampler.task.InstrumentsDb;
58    
59     import static org.jsampler.view.std.StdI18n.i18n;
60 iliev 1352 import static org.linuxsampler.lscp.Parser.*;
61 iliev 1286
62     /**
63     *
64     * @author Grigor Iliev
65     */
66     public class JSAddDbInstrumentsFromDirDlg extends OkCancelDialog {
67 iliev 1540 private final JComboBox cbSource = StdUtils.createPathComboBox();
68 iliev 1286 private JButton btnBrowse;
69     private final JCheckBox checkScanSubdirs =
70     new JCheckBox(i18n.getLabel("JSAddDbInstrumentsFromDirDlg.checkScanSubdirs"));
71     private final JCheckBox checkFlat =
72     new JCheckBox(i18n.getLabel("JSAddDbInstrumentsFromDirDlg.checkFlat"));
73 iliev 1781 private final JCheckBox checkInstrDirs =
74     new JCheckBox(i18n.getLabel("JSAddDbInstrumentsFromDirDlg.checkInstrDirs"));
75 iliev 1286
76 iliev 1540 private final JComboBox cbDest = StdUtils.createPathComboBox();
77 iliev 1286 private JButton btnBrowseDb;
78    
79     /**
80     * Creates a new instance of <code>AddDbInstrumentsFromFileDlg</code>
81     */
82     public
83     JSAddDbInstrumentsFromDirDlg(Frame owner, String dbDir, Icon iconBrowse) {
84     super(owner, i18n.getLabel("JSAddDbInstrumentsFromDirDlg.title"));
85    
86     initAddDbInstrumentsFromDirDlg(dbDir, iconBrowse);
87     }
88    
89     /**
90     * Creates a new instance of <code>AddDbInstrumentsFromFileDlg</code>
91     */
92     public
93     JSAddDbInstrumentsFromDirDlg(Dialog owner, String dbDir, Icon iconBrowse) {
94     super(owner, i18n.getLabel("JSAddDbInstrumentsFromDirDlg.title"));
95    
96     initAddDbInstrumentsFromDirDlg(dbDir, iconBrowse);
97     }
98    
99     private void
100     initAddDbInstrumentsFromDirDlg(String dbDir, Icon iconBrowse) {
101     btnBrowse = new JButton(iconBrowse);
102     btnBrowseDb = new JButton(iconBrowse);
103    
104     JPanel p = new JPanel();
105     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
106    
107     JPanel p2 = new JPanel();
108     p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
109 iliev 1308 p2.add(cbSource);
110 iliev 1286 p2.add(Box.createRigidArea(new Dimension(6, 0)));
111     btnBrowse.setToolTipText(i18n.getButtonLabel("browse"));
112     btnBrowse.setMargin(new Insets(0, 0, 0, 0));
113     p2.add(btnBrowse);
114     p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
115     p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
116     p2.setAlignmentX(LEFT_ALIGNMENT);
117    
118     p.add(p2);
119    
120     p2 = new JPanel();
121     p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
122     p2.add(checkScanSubdirs);
123     p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
124     p2.setAlignmentX(LEFT_ALIGNMENT);
125     p.add(p2);
126    
127     p2 = new JPanel();
128     p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
129     p2.add(checkFlat);
130     p2.setBorder(BorderFactory.createEmptyBorder(0, 15, 3, 3));
131     p2.setAlignmentX(LEFT_ALIGNMENT);
132    
133     p.add(p2);
134 iliev 1781
135     p2 = new JPanel();
136     p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
137     p2.add(checkInstrDirs);
138     p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
139     p2.setAlignmentX(LEFT_ALIGNMENT);
140     p.add(p2);
141 iliev 1286
142     String s = i18n.getLabel("JSAddDbInstrumentsFromDirDlg.source");
143     p.setBorder(BorderFactory.createTitledBorder(s));
144    
145     JPanel mainPane = new JPanel();
146     mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
147    
148     mainPane.add(p);
149     mainPane.add(Box.createRigidArea(new Dimension(0, 6)));
150    
151     p = new JPanel();
152     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
153    
154     p2 = new JPanel();
155     p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
156 iliev 1308 p2.add(cbDest);
157 iliev 1286 p2.add(Box.createRigidArea(new Dimension(6, 0)));
158     btnBrowseDb.setToolTipText(i18n.getButtonLabel("browse"));
159     btnBrowseDb.setMargin(new Insets(0, 0, 0, 0));
160     p2.add(btnBrowseDb);
161     p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
162     p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
163     p2.setAlignmentX(LEFT_ALIGNMENT);
164    
165     p.add(p2);
166    
167     s = i18n.getLabel("JSAddDbInstrumentsFromDirDlg.dest");
168     p.setBorder(BorderFactory.createTitledBorder(s));
169    
170     mainPane.add(p);
171     Dimension d = mainPane.getPreferredSize();
172     mainPane.setPreferredSize(new Dimension(d.width > 300 ? d.width : 300, d.height));
173    
174     setMainPane(mainPane);
175    
176     setMinimumSize(this.getPreferredSize());
177     setResizable(true);
178    
179     btnOk.setEnabled(false);
180     checkScanSubdirs.doClick(0);
181     checkFlat.doClick(0);
182    
183 iliev 1308 String[] dirs = preferences().getStringListProperty("recentDirectories");
184     for(String dir : dirs) cbSource.addItem(dir);
185     cbSource.setSelectedItem(null);
186 iliev 1286
187 iliev 1308 cbSource.setPreferredSize (
188     new Dimension(200, cbSource.getPreferredSize().height)
189     );
190    
191     cbSource.addActionListener(getHandler());
192    
193     dirs = preferences().getStringListProperty("recentDbDirectories");
194     for(String dir : dirs) cbDest.addItem(dir);
195     cbDest.setSelectedItem(dbDir);
196    
197    
198     cbDest.setPreferredSize (
199     new Dimension(200, cbDest.getPreferredSize().height)
200     );
201    
202     cbDest.addActionListener(getHandler());
203    
204 iliev 1286 btnBrowse.addActionListener(new ActionListener() {
205     public void
206     actionPerformed(ActionEvent e) { onBrowse(); }
207     });
208    
209     checkScanSubdirs.addItemListener(getHandler());
210    
211     btnBrowseDb.addActionListener(new ActionListener() {
212     public void
213 iliev 1308 actionPerformed(ActionEvent e) { onBrowseDb(); }
214 iliev 1286 });
215     }
216    
217 iliev 1357 protected JComboBox
218     createComboBox() { return new JComboBox(); }
219    
220 iliev 1304 protected JSPrefs
221     preferences() { return CC.getViewConfig().preferences(); }
222    
223 iliev 1286 private void
224     onBrowse() {
225 iliev 1304 String path = preferences().getStringProperty("lastInstrumentLocation");
226     JFileChooser fc = new JFileChooser(path);
227 iliev 1286 fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
228     int result = fc.showOpenDialog(this);
229     if(result != JFileChooser.APPROVE_OPTION) return;
230    
231 iliev 1480 path = fc.getSelectedFile().getAbsolutePath();
232     if(java.io.File.separatorChar == '\\') {
233 iliev 1483 path = path.replace('\\', '/');
234 iliev 1480 }
235     path = toEscapedString(path);
236     cbSource.setSelectedItem(path);
237 iliev 1304 path = fc.getCurrentDirectory().getAbsolutePath();
238     preferences().setStringProperty("lastInstrumentLocation", path);
239 iliev 1286 }
240    
241     private void
242 iliev 1308 onBrowseDb() {
243     JSDbDirectoryChooser dlg;
244     dlg = new JSDbDirectoryChooser(JSAddDbInstrumentsFromDirDlg.this);
245     Object o = cbDest.getSelectedItem();
246     if(o != null && o.toString().length() > 0) dlg.setSelectedDirectory(o.toString());
247     dlg.setVisible(true);
248     if(dlg.isCancelled()) return;
249     cbDest.setSelectedItem(dlg.getSelectedDirectory());
250     }
251    
252     private void
253 iliev 1286 updateState() {
254 iliev 1308 Object o = cbSource.getSelectedItem();
255     Object o2 = cbDest.getSelectedItem();
256     boolean b = o != null && o.toString().length() > 0;
257     b = b && o2 != null && o2.toString().length() > 0;
258 iliev 1286 btnOk.setEnabled(b);
259     }
260    
261     protected void
262     onOk() {
263     if(!btnOk.isEnabled()) return;
264    
265     btnOk.setEnabled(false);
266 iliev 1308 String dbDir = cbDest.getSelectedItem().toString();
267     String fsDir = cbSource.getSelectedItem().toString();
268 iliev 1286 boolean recursive = checkScanSubdirs.isSelected();
269     boolean flat = !checkFlat.isSelected();
270 iliev 1781 boolean insDir = checkInstrDirs.isSelected();
271     if(recursive) runTask(new InstrumentsDb.AddInstruments(dbDir, fsDir, flat, insDir));
272     else runTask(new InstrumentsDb.AddInstrumentsNonrecursive(dbDir, fsDir, insDir));
273 iliev 1286
274 iliev 1308 StdUtils.updateRecentElements("recentDirectories", fsDir);
275     StdUtils.updateRecentElements("recentDbDirectories", dbDir);
276 iliev 1286 }
277    
278     protected void
279     onCancel() { setVisible(false); }
280    
281     private void
282     runTask(final Task<Integer> t) {
283     t.addTaskListener(new TaskListener() {
284     public void
285     taskPerformed(TaskEvent e) {
286     updateState();
287     if(t.doneWithErrors()) return;
288     showProgress(t.getResult());
289     }
290     });
291    
292     CC.getTaskQueue().add(t);
293     }
294    
295     private void
296     showProgress(int jobId) {
297     final JSAddDbInstrumentsProgressDlg dlg;
298     dlg = new JSAddDbInstrumentsProgressDlg(this, jobId);
299     SwingUtilities.invokeLater(new Runnable() {
300     public void
301 iliev 1729 run() { dlg.setVisible(true); dlg.updateStatus(); }
302 iliev 1286 });
303     }
304    
305     private final Handler eventHandler = new Handler();
306    
307     private Handler
308     getHandler() { return eventHandler; }
309    
310 iliev 1308 private class Handler implements DocumentListener, ActionListener, ItemListener {
311 iliev 1286 // DocumentListener
312     public void
313     insertUpdate(DocumentEvent e) { updateState(); }
314    
315     public void
316     removeUpdate(DocumentEvent e) { updateState(); }
317    
318     public void
319     changedUpdate(DocumentEvent e) { updateState(); }
320 iliev 1308 ///////
321 iliev 1286
322     public void
323 iliev 1308 actionPerformed(ActionEvent e) { updateState(); }
324    
325     public void
326 iliev 1286 itemStateChanged(ItemEvent e) {
327     checkFlat.setEnabled(checkScanSubdirs.isSelected());
328     }
329     }
330     }

  ViewVC Help
Powered by ViewVC