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

Contents of /jsampler/trunk/src/org/jsampler/view/std/JSAddDbInstrumentsFromFileDlg.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1308 - (show annotations) (download)
Tue Aug 28 17:00:19 2007 UTC (16 years, 7 months ago) by iliev
File size: 9728 byte(s)
* A lists of recently used instrument files, directories,
  database instruments, database directories are now available
  for quick access, where appropriate.

1 /*
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
33 import javax.swing.BorderFactory;
34 import javax.swing.Box;
35 import javax.swing.BoxLayout;
36 import javax.swing.ButtonGroup;
37 import javax.swing.Icon;
38 import javax.swing.JButton;
39 import javax.swing.JComboBox;
40 import javax.swing.JFileChooser;
41 import javax.swing.JPanel;
42 import javax.swing.JRadioButton;
43 import javax.swing.JSpinner;
44 import javax.swing.SpinnerNumberModel;
45 import javax.swing.SwingUtilities;
46
47 import javax.swing.event.DocumentEvent;
48 import javax.swing.event.DocumentListener;
49
50 import net.sf.juife.OkCancelDialog;
51 import net.sf.juife.Task;
52
53 import net.sf.juife.event.TaskEvent;
54 import net.sf.juife.event.TaskListener;
55
56 import org.jsampler.CC;
57 import org.jsampler.JSPrefs;
58 import org.jsampler.task.InstrumentsDb;
59
60 import static org.jsampler.view.std.StdI18n.i18n;
61
62 /**
63 *
64 * @author Grigor Iliev
65 */
66 public class JSAddDbInstrumentsFromFileDlg extends OkCancelDialog {
67 private final JRadioButton rbAllInstruments =
68 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbAllInstruments"));
69 private final JRadioButton rbIndex =
70 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbIndex"));
71
72 private final JComboBox cbSource = new JComboBox();
73 private final JSpinner spinnerIndex = new JSpinner(new SpinnerNumberModel(0, 0, 500, 1));
74 private JButton btnBrowse;
75 private final JComboBox cbDest = new JComboBox();
76 private JButton btnBrowseDb;
77
78 /**
79 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
80 */
81 public
82 JSAddDbInstrumentsFromFileDlg(Frame owner, String dbDir, Icon iconBrowse) {
83 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
84
85 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
86 }
87
88 /**
89 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
90 */
91 public
92 JSAddDbInstrumentsFromFileDlg(Dialog owner, String dbDir, Icon iconBrowse) {
93 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
94
95 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
96 }
97
98 private void
99 initAddDbInstrumentsFromFileDlg(String dbDir, Icon iconBrowse) {
100 btnBrowse = new JButton(iconBrowse);
101 btnBrowseDb = new JButton(iconBrowse);
102
103 JPanel p = new JPanel();
104 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
105
106 JPanel p2 = new JPanel();
107 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
108 p2.add(cbSource);
109 p2.add(Box.createRigidArea(new Dimension(6, 0)));
110 String s = i18n.getButtonLabel("browse");
111 btnBrowse.setMargin(new Insets(0, 0, 0, 0));
112 btnBrowse.setToolTipText(s);
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(rbAllInstruments);
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(rbIndex);
130 p2.add(Box.createRigidArea(new Dimension(6, 0)));
131 p2.add(spinnerIndex);
132 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
133 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
134 p2.setAlignmentX(LEFT_ALIGNMENT);
135
136 p.add(p2);
137
138 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.source");
139 p.setBorder(BorderFactory.createTitledBorder(s));
140
141 JPanel mainPane = new JPanel();
142 mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
143
144 mainPane.add(p);
145 mainPane.add(Box.createRigidArea(new Dimension(0, 6)));
146
147 p = new JPanel();
148 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
149
150 p2 = new JPanel();
151 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
152 p2.add(cbDest);
153 p2.add(Box.createRigidArea(new Dimension(6, 0)));
154 s = i18n.getButtonLabel("browse");
155 btnBrowseDb.setMargin(new Insets(0, 0, 0, 0));
156 btnBrowseDb.setToolTipText(s);
157 p2.add(btnBrowseDb);
158 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
159 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
160 p2.setAlignmentX(LEFT_ALIGNMENT);
161
162 p.add(p2);
163
164 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.dest");
165 p.setBorder(BorderFactory.createTitledBorder(s));
166
167 mainPane.add(p);
168 Dimension d = mainPane.getPreferredSize();
169 mainPane.setPreferredSize(new Dimension(d.width > 300 ? d.width : 300, d.height));
170
171 setMainPane(mainPane);
172
173 setMinimumSize(this.getPreferredSize());
174 setResizable(true);
175
176 ButtonGroup group = new ButtonGroup();
177 group.add(rbAllInstruments);
178 group.add(rbIndex);
179 rbAllInstruments.doClick(0);
180
181 btnOk.setEnabled(false);
182 spinnerIndex.setEnabled(false);
183
184 cbSource.setEditable(true);
185 String[] dirs = preferences().getStringListProperty("recentInstrumentFiles");
186 for(String dir : dirs) cbSource.addItem(dir);
187 cbSource.setSelectedItem(null);
188
189 cbSource.setPreferredSize (
190 new Dimension(200, cbSource.getPreferredSize().height)
191 );
192
193 cbSource.addActionListener(getHandler());
194
195 cbDest.setEditable(true);
196 dirs = preferences().getStringListProperty("recentDbDirectories");
197 for(String dir : dirs) cbDest.addItem(dir);
198 cbDest.setSelectedItem(dbDir);
199
200
201 cbDest.setPreferredSize (
202 new Dimension(200, cbDest.getPreferredSize().height)
203 );
204
205 cbDest.addActionListener(getHandler());
206
207
208 btnBrowse.addActionListener(new ActionListener() {
209 public void
210 actionPerformed(ActionEvent e) { onBrowse(); }
211 });
212
213 rbAllInstruments.addActionListener(new ActionListener() {
214 public void
215 actionPerformed(ActionEvent e) {
216 spinnerIndex.setEnabled(rbIndex.isSelected());
217 }
218 });
219
220 rbIndex.addActionListener(new ActionListener() {
221 public void
222 actionPerformed(ActionEvent e) {
223 spinnerIndex.setEnabled(rbIndex.isSelected());
224 }
225 });
226
227 btnBrowseDb.addActionListener(new ActionListener() {
228 public void
229 actionPerformed(ActionEvent e) { onBrowseDb(); }
230 });
231 }
232
233 protected JSPrefs
234 preferences() { return CC.getViewConfig().preferences(); }
235
236 private void
237 onBrowse() {
238 String path = preferences().getStringProperty("lastInstrumentLocation");
239 JFileChooser fc = new JFileChooser(path);
240 fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
241 int result = fc.showOpenDialog(this);
242 if(result != JFileChooser.APPROVE_OPTION) return;
243
244 cbSource.setSelectedItem(fc.getSelectedFile().getPath());
245 path = fc.getCurrentDirectory().getAbsolutePath();
246 preferences().setStringProperty("lastInstrumentLocation", path);
247 }
248
249 private void
250 onBrowseDb() {
251 JSDbDirectoryChooser dlg;
252 dlg = new JSDbDirectoryChooser(JSAddDbInstrumentsFromFileDlg.this);
253 Object o = cbDest.getSelectedItem();
254 if(o != null && o.toString().length() > 0) dlg.setSelectedDirectory(o.toString());
255 dlg.setVisible(true);
256 if(dlg.isCancelled()) return;
257 cbDest.setSelectedItem(dlg.getSelectedDirectory());
258 }
259
260 private void
261 updateState() {
262 Object o = cbSource.getSelectedItem();
263 Object o2 = cbDest.getSelectedItem();
264 boolean b = o != null && o.toString().length() > 0;
265 b = b && o2 != null && o2.toString().length() > 0;
266 btnOk.setEnabled(b);
267 }
268
269 protected void
270 onOk() {
271 if(!btnOk.isEnabled()) return;
272
273 btnOk.setEnabled(false);
274 String dbDir = cbDest.getSelectedItem().toString();
275 String filePath = cbSource.getSelectedItem().toString();
276 int idx = -1;
277 if(rbIndex.isSelected()) idx = Integer.parseInt(spinnerIndex.getValue().toString());
278
279 final Task<Integer> t = new InstrumentsDb.AddInstrumentsFromFile(dbDir, filePath, idx);
280 t.addTaskListener(new TaskListener() {
281 public void
282 taskPerformed(TaskEvent e) {
283 updateState();
284 if(t.doneWithErrors()) return;
285 showProgress(t.getResult());
286 }
287 });
288
289 CC.getTaskQueue().add(t);
290
291 StdUtils.updateRecentElements("recentInstrumentFiles", filePath);
292 StdUtils.updateRecentElements("recentDbDirectories", dbDir);
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 run() { dlg.setVisible(true); }
302 });
303 }
304
305 protected void
306 onCancel() { setVisible(false); }
307
308 private final Handler eventHandler = new Handler();
309
310 private Handler
311 getHandler() { return eventHandler; }
312
313 private class Handler implements DocumentListener, ActionListener {
314 // DocumentListener
315 public void
316 insertUpdate(DocumentEvent e) { updateState(); }
317
318 public void
319 removeUpdate(DocumentEvent e) { updateState(); }
320
321 public void
322 changedUpdate(DocumentEvent e) { updateState(); }
323 ///////
324
325 public void
326 actionPerformed(ActionEvent e) { updateState(); }
327 }
328 }

  ViewVC Help
Powered by ViewVC