/[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 1871 - (show annotations) (download)
Sun Mar 22 18:11:39 2009 UTC (15 years, 1 month ago) by iliev
File size: 9643 byte(s)
* Mac OS integration, work in progress:
* Added option to use native file choosers
  (choose Edit/Preferences, then click the `View' tab)

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

  ViewVC Help
Powered by ViewVC