/[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 1540 - (show annotations) (download)
Mon Dec 3 23:22:02 2007 UTC (16 years, 4 months ago) by iliev
File size: 9878 byte(s)
* Fantasia: by default the volume values are now shown in decibels
* Implemented support for retrieving instrument information
  from instrument files
* Some bugfixes and enhancements

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 import static org.linuxsampler.lscp.Parser.*;
62
63 /**
64 *
65 * @author Grigor Iliev
66 */
67 public class JSAddDbInstrumentsFromFileDlg extends OkCancelDialog {
68 private final JRadioButton rbAllInstruments =
69 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbAllInstruments"));
70 private final JRadioButton rbIndex =
71 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbIndex"));
72
73 private final JComboBox cbSource = StdUtils.createPathComboBox();
74 private final JSpinner spinnerIndex = new JSpinner(new SpinnerNumberModel(0, 0, 500, 1));
75 private JButton btnBrowse;
76 private final JComboBox cbDest = StdUtils.createPathComboBox();
77 private JButton btnBrowseDb;
78
79 /**
80 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
81 */
82 public
83 JSAddDbInstrumentsFromFileDlg(Frame owner, String dbDir, Icon iconBrowse) {
84 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
85
86 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
87 }
88
89 /**
90 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
91 */
92 public
93 JSAddDbInstrumentsFromFileDlg(Dialog owner, String dbDir, Icon iconBrowse) {
94 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
95
96 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
97 }
98
99 private void
100 initAddDbInstrumentsFromFileDlg(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 p2.add(cbSource);
110 p2.add(Box.createRigidArea(new Dimension(6, 0)));
111 String s = i18n.getButtonLabel("browse");
112 btnBrowse.setMargin(new Insets(0, 0, 0, 0));
113 btnBrowse.setToolTipText(s);
114 p2.add(btnBrowse);
115 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
116 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
117 p2.setAlignmentX(LEFT_ALIGNMENT);
118
119 p.add(p2);
120
121 p2 = new JPanel();
122 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
123 p2.add(rbAllInstruments);
124 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
125 p2.setAlignmentX(LEFT_ALIGNMENT);
126 p.add(p2);
127
128 p2 = new JPanel();
129 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
130 p2.add(rbIndex);
131 p2.add(Box.createRigidArea(new Dimension(6, 0)));
132 p2.add(spinnerIndex);
133 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
134 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
135 p2.setAlignmentX(LEFT_ALIGNMENT);
136
137 p.add(p2);
138
139 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.source");
140 p.setBorder(BorderFactory.createTitledBorder(s));
141
142 JPanel mainPane = new JPanel();
143 mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
144
145 mainPane.add(p);
146 mainPane.add(Box.createRigidArea(new Dimension(0, 6)));
147
148 p = new JPanel();
149 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
150
151 p2 = new JPanel();
152 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
153 p2.add(cbDest);
154 p2.add(Box.createRigidArea(new Dimension(6, 0)));
155 s = i18n.getButtonLabel("browse");
156 btnBrowseDb.setMargin(new Insets(0, 0, 0, 0));
157 btnBrowseDb.setToolTipText(s);
158 p2.add(btnBrowseDb);
159 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
160 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
161 p2.setAlignmentX(LEFT_ALIGNMENT);
162
163 p.add(p2);
164
165 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.dest");
166 p.setBorder(BorderFactory.createTitledBorder(s));
167
168 mainPane.add(p);
169 Dimension d = mainPane.getPreferredSize();
170 mainPane.setPreferredSize(new Dimension(d.width > 300 ? d.width : 300, d.height));
171
172 setMainPane(mainPane);
173
174 setMinimumSize(this.getPreferredSize());
175 setResizable(true);
176
177 ButtonGroup group = new ButtonGroup();
178 group.add(rbAllInstruments);
179 group.add(rbIndex);
180 rbAllInstruments.doClick(0);
181
182 btnOk.setEnabled(false);
183 spinnerIndex.setEnabled(false);
184
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 dirs = preferences().getStringListProperty("recentDbDirectories");
196 for(String dir : dirs) cbDest.addItem(dir);
197 cbDest.setSelectedItem(dbDir);
198
199 cbDest.setPreferredSize (
200 new Dimension(200, cbDest.getPreferredSize().height)
201 );
202
203 cbDest.addActionListener(getHandler());
204
205
206 btnBrowse.addActionListener(new ActionListener() {
207 public void
208 actionPerformed(ActionEvent e) { onBrowse(); }
209 });
210
211 rbAllInstruments.addActionListener(new ActionListener() {
212 public void
213 actionPerformed(ActionEvent e) {
214 spinnerIndex.setEnabled(rbIndex.isSelected());
215 }
216 });
217
218 rbIndex.addActionListener(new ActionListener() {
219 public void
220 actionPerformed(ActionEvent e) {
221 spinnerIndex.setEnabled(rbIndex.isSelected());
222 }
223 });
224
225 btnBrowseDb.addActionListener(new ActionListener() {
226 public void
227 actionPerformed(ActionEvent e) { onBrowseDb(); }
228 });
229 }
230
231 protected JSPrefs
232 preferences() { return CC.getViewConfig().preferences(); }
233
234 private void
235 onBrowse() {
236 String path = preferences().getStringProperty("lastInstrumentLocation");
237 JFileChooser fc = new JFileChooser(path);
238 fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
239 int result = fc.showOpenDialog(this);
240 if(result != JFileChooser.APPROVE_OPTION) return;
241
242 path = fc.getSelectedFile().getAbsolutePath();
243 if(java.io.File.separatorChar == '\\') {
244 path = path.replace('\\', '/');
245 }
246 path = toEscapedString(path);
247 cbSource.setSelectedItem(path);
248 path = fc.getCurrentDirectory().getAbsolutePath();
249 preferences().setStringProperty("lastInstrumentLocation", path);
250 }
251
252 private void
253 onBrowseDb() {
254 JSDbDirectoryChooser dlg;
255 dlg = new JSDbDirectoryChooser(JSAddDbInstrumentsFromFileDlg.this);
256 Object o = cbDest.getSelectedItem();
257 if(o != null && o.toString().length() > 0) dlg.setSelectedDirectory(o.toString());
258 dlg.setVisible(true);
259 if(dlg.isCancelled()) return;
260 cbDest.setSelectedItem(dlg.getSelectedDirectory());
261 }
262
263 private void
264 updateState() {
265 Object o = cbSource.getSelectedItem();
266 Object o2 = cbDest.getSelectedItem();
267 boolean b = o != null && o.toString().length() > 0;
268 b = b && o2 != null && o2.toString().length() > 0;
269 btnOk.setEnabled(b);
270 }
271
272 protected void
273 onOk() {
274 if(!btnOk.isEnabled()) return;
275
276 btnOk.setEnabled(false);
277 String dbDir = cbDest.getSelectedItem().toString();
278 String filePath = cbSource.getSelectedItem().toString();
279 int idx = -1;
280 if(rbIndex.isSelected()) idx = Integer.parseInt(spinnerIndex.getValue().toString());
281
282 final Task<Integer> t = new InstrumentsDb.AddInstrumentsFromFile(dbDir, filePath, idx);
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 StdUtils.updateRecentElements("recentInstrumentFiles", filePath);
295 StdUtils.updateRecentElements("recentDbDirectories", dbDir);
296 }
297
298 private void
299 showProgress(int jobId) {
300 final JSAddDbInstrumentsProgressDlg dlg;
301 dlg = new JSAddDbInstrumentsProgressDlg(this, jobId);
302 SwingUtilities.invokeLater(new Runnable() {
303 public void
304 run() { dlg.setVisible(true); }
305 });
306 }
307
308 protected void
309 onCancel() { setVisible(false); }
310
311 private final Handler eventHandler = new Handler();
312
313 private Handler
314 getHandler() { return eventHandler; }
315
316 private class Handler implements DocumentListener, ActionListener {
317 // DocumentListener
318 public void
319 insertUpdate(DocumentEvent e) { updateState(); }
320
321 public void
322 removeUpdate(DocumentEvent e) { updateState(); }
323
324 public void
325 changedUpdate(DocumentEvent e) { updateState(); }
326 ///////
327
328 public void
329 actionPerformed(ActionEvent e) { updateState(); }
330 }
331 }

  ViewVC Help
Powered by ViewVC