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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1540 - (hide annotations) (download)
Mon Dec 3 23:22:02 2007 UTC (16 years, 6 months ago) by iliev
File size: 8194 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 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.Dimension;
26     import java.awt.GridBagConstraints;
27     import java.awt.GridBagLayout;
28     import java.awt.Insets;
29    
30     import java.awt.event.ActionEvent;
31     import java.awt.event.ActionListener;
32    
33     import javax.swing.JButton;
34 iliev 1308 import javax.swing.JComboBox;
35 iliev 1286 import javax.swing.JFileChooser;
36     import javax.swing.JLabel;
37     import javax.swing.JPanel;
38     import javax.swing.JTextField;
39    
40     import javax.swing.event.DocumentEvent;
41     import javax.swing.event.DocumentListener;
42    
43     import net.sf.juife.OkCancelDialog;
44    
45 iliev 1540 import net.sf.juife.event.TaskEvent;
46     import net.sf.juife.event.TaskListener;
47    
48 iliev 1286 import org.jsampler.CC;
49 iliev 1540 import org.jsampler.OrchestraInstrument;
50 iliev 1304 import org.jsampler.JSPrefs;
51 iliev 1286
52 iliev 1540 import org.jsampler.task.Global;
53    
54     import org.linuxsampler.lscp.Instrument;
55    
56 iliev 1286 import static org.jsampler.view.std.StdI18n.i18n;
57 iliev 1352 import static org.linuxsampler.lscp.Parser.*;
58 iliev 1286
59    
60     /**
61     *
62     * @author Grigor Iliev
63     */
64     public class JSAddOrEditInstrumentDlg extends OkCancelDialog {
65     private final JLabel lName = new JLabel(i18n.getLabel("JSAddOrEditInstrumentDlg.lName"));
66     private final JLabel lDesc = new JLabel(i18n.getLabel("JSAddOrEditInstrumentDlg.lDesc"));
67     private final JLabel lPath = new JLabel(i18n.getLabel("JSAddOrEditInstrumentDlg.lPath"));
68     private final JLabel lIndex = new JLabel(i18n.getLabel("JSAddOrEditInstrumentDlg.lIndex"));
69    
70     private final JButton btnBrowse =
71     new JButton(i18n.getButtonLabel("browse"));
72    
73     private final JTextField tfName = new JTextField();
74     private final JTextField tfDesc = new JTextField();
75 iliev 1308 private final JComboBox cbPath = new JComboBox();
76 iliev 1540 private final JComboBox cbIndex = new JComboBox();
77 iliev 1286
78 iliev 1540 private OrchestraInstrument instrument;
79 iliev 1286
80    
81     /**
82     * Creates a new instance of <code>JSAddOrEditInstrumentDlg</code>.
83     */
84 iliev 1540 public JSAddOrEditInstrumentDlg() { this(new OrchestraInstrument()); }
85 iliev 1286
86     /**
87     * Creates a new instance of <code>JSAddOrEditInstrumentDlg</code>.
88     *
89     * @param instr The instrument to modify.
90     */
91 iliev 1540 public JSAddOrEditInstrumentDlg(OrchestraInstrument instr) {
92 iliev 1286 super(CC.getMainFrame(), i18n.getLabel("JSAddOrEditInstrumentDlg.title"));
93    
94     instrument = instr;
95    
96 iliev 1308 cbPath.setEditable(true);
97     String[] files = preferences().getStringListProperty("recentInstrumentFiles");
98     for(String s : files) cbPath.addItem(s);
99     cbPath.setSelectedItem(null);
100    
101     cbPath.setPreferredSize (
102     new Dimension(200, cbPath.getPreferredSize().height)
103     );
104    
105 iliev 1286 JPanel p = new JPanel();
106    
107     GridBagLayout gridbag = new GridBagLayout();
108     GridBagConstraints c = new GridBagConstraints();
109    
110     p.setLayout(gridbag);
111    
112     c.fill = GridBagConstraints.NONE;
113    
114     c.gridx = 0;
115     c.gridy = 0;
116     c.anchor = GridBagConstraints.EAST;
117     c.insets = new Insets(3, 3, 3, 3);
118     gridbag.setConstraints(lName, c);
119     p.add(lName);
120    
121     c.gridx = 0;
122     c.gridy = 1;
123     gridbag.setConstraints(lDesc, c);
124     p.add(lDesc);
125    
126     c.gridx = 0;
127     c.gridy = 2;
128     gridbag.setConstraints(lPath, c);
129     p.add(lPath);
130    
131     c.gridx = 2;
132     c.gridy = 2;
133     gridbag.setConstraints(btnBrowse, c);
134     p.add(btnBrowse);
135    
136     c.gridx = 0;
137     c.gridy = 3;
138     gridbag.setConstraints(lIndex, c);
139     p.add(lIndex);
140    
141     c.fill = GridBagConstraints.HORIZONTAL;
142     c.gridx = 1;
143     c.gridy = 0;
144     c.weightx = 1.0;
145     c.gridwidth = 2;
146     c.anchor = GridBagConstraints.WEST;
147     gridbag.setConstraints(tfName, c);
148     p.add(tfName);
149    
150     c.gridx = 1;
151     c.gridy = 1;
152     gridbag.setConstraints(tfDesc, c);
153     p.add(tfDesc);
154    
155     c.gridx = 1;
156     c.gridy = 2;
157     c.gridwidth = 1;
158 iliev 1308 gridbag.setConstraints(cbPath, c);
159     p.add(cbPath);
160 iliev 1286
161 iliev 1540 for(int i = 0; i < 101; i++) cbIndex.addItem(i);
162    
163 iliev 1286 c.gridx = 1;
164     c.gridy = 3;
165     c.gridwidth = 2;
166 iliev 1540 gridbag.setConstraints(cbIndex, c);
167     p.add(cbIndex);
168 iliev 1286
169     setMainPane(p);
170    
171     int w = getPreferredSize().width;
172     Dimension d = new Dimension(w > 500 ? w : 500, getPreferredSize().height);
173     setPreferredSize(d);
174     pack();
175    
176     setLocationRelativeTo(getOwner());
177    
178     tfName.getDocument().addDocumentListener(getHandler());
179     btnBrowse.addActionListener(getHandler());
180 iliev 1308 cbPath.addActionListener(new ActionListener() {
181     public void
182 iliev 1540 actionPerformed(ActionEvent e) {
183     updateState();
184     updateFileInstruments();
185     }
186 iliev 1308 });
187 iliev 1286
188     updateInfo();
189     updateState();
190     }
191    
192 iliev 1304 protected JSPrefs
193     preferences() { return CC.getViewConfig().preferences(); }
194    
195 iliev 1286 private void
196     updateInfo() {
197     tfName.setText(getInstrument().getName());
198     tfDesc.setText(getInstrument().getDescription());
199 iliev 1540 cbPath.setSelectedItem(getInstrument().getFilePath());
200     cbIndex.setSelectedIndex(getInstrument().getInstrumentIndex());
201 iliev 1286 }
202    
203     private void
204     updateState() {
205     boolean b = true;
206     if(tfName.getText().length() == 0) b = false;
207 iliev 1308 Object o = cbPath.getSelectedItem();
208     if(o == null || o.toString().length() == 0) b = false;
209 iliev 1540 o = cbIndex.getSelectedItem();
210     if(o == null || o.toString().length() == 0) b = false;
211 iliev 1286
212     btnOk.setEnabled(b);
213     }
214    
215 iliev 1540 private boolean init = true;
216    
217     private void
218     updateFileInstruments() {
219     Object o = cbPath.getSelectedItem();
220     if(o == null) return;
221     String s = o.toString();
222     final Global.GetFileInstruments t = new Global.GetFileInstruments(s);
223    
224     t.addTaskListener(new TaskListener() {
225     public void
226     taskPerformed(TaskEvent e) {
227     Instrument[] instrs = t.getResult();
228     if(instrs == null) {
229     cbIndex.removeAllItems();
230     for(int i = 0; i < 101; i++) cbIndex.addItem(i);
231     return;
232     } else {
233    
234     cbIndex.removeAllItems();
235     for(int i = 0; i < instrs.length; i++) {
236     cbIndex.addItem(i + " - " + instrs[i].getName());
237     }
238     }
239    
240     if(init) {
241     int i = getInstrument().getInstrumentIndex();
242     cbIndex.setSelectedIndex(i);
243     init = false;
244     }
245     }
246     });
247    
248     CC.getTaskQueue().add(t);
249     }
250    
251 iliev 1286 protected void
252     onOk() {
253     if(!btnOk.isEnabled()) return;
254    
255     instrument.setName(tfName.getText());
256     instrument.setDescription(tfDesc.getText());
257 iliev 1540 instrument.setFilePath(cbPath.getSelectedItem().toString());
258     int idx = cbIndex.getSelectedIndex();
259 iliev 1286 instrument.setInstrumentIndex(idx);
260    
261 iliev 1540 StdUtils.updateRecentElements("recentInstrumentFiles", instrument.getFilePath());
262 iliev 1308
263 iliev 1286 setVisible(false);
264     setCancelled(false);
265     }
266    
267     protected void
268     onCancel() {
269     setVisible(false);
270     }
271    
272     /**
273     * Gets the created/modified orchestra.
274     * @return The created/modified orchestra.
275     */
276 iliev 1540 public OrchestraInstrument
277 iliev 1286 getInstrument() { return instrument; }
278    
279    
280     private final Handler eventHandler = new Handler();
281    
282     private Handler
283     getHandler() { return eventHandler; }
284    
285     private class Handler implements DocumentListener, ActionListener {
286     // DocumentListener
287     public void
288     insertUpdate(DocumentEvent e) { updateState(); }
289    
290     public void
291     removeUpdate(DocumentEvent e) { updateState(); }
292    
293     public void
294     changedUpdate(DocumentEvent e) { updateState(); }
295    
296     // ActionListener
297     public void
298     actionPerformed(ActionEvent e) {
299 iliev 1304 String path = preferences().getStringProperty("lastInstrumentLocation");
300     JFileChooser fc = new JFileChooser(path);
301 iliev 1286 int result = fc.showOpenDialog(JSAddOrEditInstrumentDlg.this);
302     if(result != JFileChooser.APPROVE_OPTION) return;
303 iliev 1352
304 iliev 1480 path = fc.getSelectedFile().getAbsolutePath();
305     if(java.io.File.separatorChar == '\\') {
306 iliev 1483 path = path.replace('\\', '/');
307 iliev 1480 }
308     path = toEscapedString(path);
309     cbPath.setSelectedItem(path);
310 iliev 1304 path = fc.getCurrentDirectory().getAbsolutePath();
311     preferences().setStringProperty("lastInstrumentLocation", path);
312 iliev 1286 }
313     }
314     }

  ViewVC Help
Powered by ViewVC