/[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 1286 - (show annotations) (download)
Fri Aug 10 20:24:23 2007 UTC (16 years, 8 months ago) by iliev
File size: 8467 byte(s)
- Updated to version 0.6a. The Fantasia distribution is now
  capable of controlling all features available in LinuxSampler

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.JFileChooser;
40 import javax.swing.JPanel;
41 import javax.swing.JRadioButton;
42 import javax.swing.JSpinner;
43 import javax.swing.JTextField;
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.task.InstrumentsDb;
58
59 import static org.jsampler.view.std.StdI18n.i18n;
60
61 /**
62 *
63 * @author Grigor Iliev
64 */
65 public class JSAddDbInstrumentsFromFileDlg extends OkCancelDialog {
66 private final JRadioButton rbAllInstruments =
67 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbAllInstruments"));
68 private final JRadioButton rbIndex =
69 new JRadioButton(i18n.getLabel("JSAddDbInstrumentsFromFileDlg.rbIndex"));
70
71 private final JTextField tfSource = new JTextField();
72 private final JSpinner spinnerIndex = new JSpinner(new SpinnerNumberModel(0, 0, 500, 1));
73 private JButton btnBrowse;
74 private final JTextField tfDest = new JTextField();
75 private JButton btnBrowseDb;
76
77 /**
78 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
79 */
80 public
81 JSAddDbInstrumentsFromFileDlg(Frame owner, String dbDir, Icon iconBrowse) {
82 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
83
84 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
85 }
86
87 /**
88 * Creates a new instance of <code>JSAddDbInstrumentsFromFileDlg</code>
89 */
90 public
91 JSAddDbInstrumentsFromFileDlg(Dialog owner, String dbDir, Icon iconBrowse) {
92 super(owner, i18n.getLabel("JSAddDbInstrumentsFromFileDlg.title"));
93
94 initAddDbInstrumentsFromFileDlg(dbDir, iconBrowse);
95 }
96
97 private void
98 initAddDbInstrumentsFromFileDlg(String dbDir, Icon iconBrowse) {
99 btnBrowse = new JButton(iconBrowse);
100 btnBrowseDb = new JButton(iconBrowse);
101
102 JPanel p = new JPanel();
103 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
104
105 JPanel p2 = new JPanel();
106 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
107 p2.add(tfSource);
108 p2.add(Box.createRigidArea(new Dimension(6, 0)));
109 String s = i18n.getButtonLabel("browse");
110 btnBrowse.setMargin(new Insets(0, 0, 0, 0));
111 btnBrowse.setToolTipText(s);
112 p2.add(btnBrowse);
113 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
114 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
115 p2.setAlignmentX(LEFT_ALIGNMENT);
116
117 p.add(p2);
118
119 p2 = new JPanel();
120 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
121 p2.add(rbAllInstruments);
122 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 3));
123 p2.setAlignmentX(LEFT_ALIGNMENT);
124 p.add(p2);
125
126 p2 = new JPanel();
127 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
128 p2.add(rbIndex);
129 p2.add(Box.createRigidArea(new Dimension(6, 0)));
130 p2.add(spinnerIndex);
131 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
132 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
133 p2.setAlignmentX(LEFT_ALIGNMENT);
134
135 p.add(p2);
136
137 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.source");
138 p.setBorder(BorderFactory.createTitledBorder(s));
139
140 JPanel mainPane = new JPanel();
141 mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
142
143 mainPane.add(p);
144 mainPane.add(Box.createRigidArea(new Dimension(0, 6)));
145
146 p = new JPanel();
147 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
148
149 p2 = new JPanel();
150 p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
151 p2.add(tfDest);
152 p2.add(Box.createRigidArea(new Dimension(6, 0)));
153 s = i18n.getButtonLabel("browse");
154 btnBrowseDb.setMargin(new Insets(0, 0, 0, 0));
155 btnBrowseDb.setToolTipText(s);
156 p2.add(btnBrowseDb);
157 p2.setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 3));
158 p2.setMaximumSize(new Dimension(Short.MAX_VALUE, p2.getPreferredSize().height));
159 p2.setAlignmentX(LEFT_ALIGNMENT);
160
161 p.add(p2);
162
163 s = i18n.getLabel("JSAddDbInstrumentsFromFileDlg.dest");
164 p.setBorder(BorderFactory.createTitledBorder(s));
165
166 mainPane.add(p);
167 Dimension d = mainPane.getPreferredSize();
168 mainPane.setPreferredSize(new Dimension(d.width > 300 ? d.width : 300, d.height));
169
170 setMainPane(mainPane);
171
172 setMinimumSize(this.getPreferredSize());
173 setResizable(true);
174
175 if(dbDir != null) tfDest.setText(dbDir);
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 tfSource.getDocument().addDocumentListener(getHandler());
186 tfDest.getDocument().addDocumentListener(getHandler());
187
188 btnBrowse.addActionListener(new ActionListener() {
189 public void
190 actionPerformed(ActionEvent e) { onBrowse(); }
191 });
192
193 rbAllInstruments.addActionListener(new ActionListener() {
194 public void
195 actionPerformed(ActionEvent e) {
196 spinnerIndex.setEnabled(rbIndex.isSelected());
197 }
198 });
199
200 rbIndex.addActionListener(new ActionListener() {
201 public void
202 actionPerformed(ActionEvent e) {
203 spinnerIndex.setEnabled(rbIndex.isSelected());
204 }
205 });
206
207 btnBrowseDb.addActionListener(new ActionListener() {
208 public void
209 actionPerformed(ActionEvent e) {
210 JSDbDirectoryChooser dlg;
211 dlg = new JSDbDirectoryChooser(JSAddDbInstrumentsFromFileDlg.this);
212 String s = tfDest.getText();
213 if(s.length() > 0) dlg.setSelectedDirectory(s);
214 dlg.setVisible(true);
215 if(dlg.isCancelled()) return;
216 tfDest.setText(dlg.getSelectedDirectory());
217 }
218 });
219 }
220
221 private void
222 onBrowse() {
223 JFileChooser fc = new JFileChooser();
224 fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
225 int result = fc.showOpenDialog(this);
226 if(result != JFileChooser.APPROVE_OPTION) return;
227
228 tfSource.setText(fc.getSelectedFile().getPath());
229 }
230
231 private void
232 updateState() {
233 boolean b = tfSource.getText().length() != 0 && tfDest.getText().length() != 0;
234 btnOk.setEnabled(b);
235 }
236
237 protected void
238 onOk() {
239 if(!btnOk.isEnabled()) return;
240
241 btnOk.setEnabled(false);
242 String dbDir = tfDest.getText();
243 String filePath = tfSource.getText();
244 int idx = -1;
245 if(rbIndex.isSelected()) idx = Integer.parseInt(spinnerIndex.getValue().toString());
246
247 final Task<Integer> t = new InstrumentsDb.AddInstrumentsFromFile(dbDir, filePath, idx);
248 t.addTaskListener(new TaskListener() {
249 public void
250 taskPerformed(TaskEvent e) {
251 updateState();
252 if(t.doneWithErrors()) return;
253 showProgress(t.getResult());
254 }
255 });
256
257 CC.getTaskQueue().add(t);
258 }
259
260 private void
261 showProgress(int jobId) {
262 final JSAddDbInstrumentsProgressDlg dlg;
263 dlg = new JSAddDbInstrumentsProgressDlg(this, jobId);
264 SwingUtilities.invokeLater(new Runnable() {
265 public void
266 run() { dlg.setVisible(true); }
267 });
268 }
269
270 protected void
271 onCancel() { setVisible(false); }
272
273 private final Handler eventHandler = new Handler();
274
275 private Handler
276 getHandler() { return eventHandler; }
277
278 private class Handler implements DocumentListener {
279 // DocumentListener
280 public void
281 insertUpdate(DocumentEvent e) { updateState(); }
282
283 public void
284 removeUpdate(DocumentEvent e) { updateState(); }
285
286 public void
287 changedUpdate(DocumentEvent e) { updateState(); }
288 }
289 }

  ViewVC Help
Powered by ViewVC