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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1343 - (hide annotations) (download)
Tue Sep 11 15:38:28 2007 UTC (16 years, 7 months ago) by iliev
File size: 8977 byte(s)
* JS Classic: Added new button to sampler channels
  for starting an instrument editor
* The last used instrument selection method is now
  saved for the next session
* Fantasia: Removed the lock border from non-editable
  text fields in properties panes and LS Console

1 iliev 1313 /*
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 iliev 1334 import java.awt.Dimension;
27 iliev 1313 import java.awt.GridBagConstraints;
28     import java.awt.GridBagLayout;
29     import java.awt.Insets;
30    
31     import java.awt.event.ActionEvent;
32     import java.awt.event.ActionListener;
33    
34     import javax.swing.BorderFactory;
35 iliev 1334 import javax.swing.Box;
36     import javax.swing.BoxLayout;
37 iliev 1313 import javax.swing.JComboBox;
38     import javax.swing.JDialog;
39     import javax.swing.JLabel;
40 iliev 1334 import javax.swing.JSlider;
41 iliev 1313 import javax.swing.JPanel;
42    
43 iliev 1334 import javax.swing.event.ChangeEvent;
44     import javax.swing.event.ChangeListener;
45    
46 iliev 1313 import net.sf.juife.InformationDialog;
47 iliev 1334 import net.sf.juife.JuifeUtils;
48 iliev 1313
49     import org.linuxsampler.lscp.SamplerEngine;
50    
51     import org.jsampler.CC;
52     import org.jsampler.JSPrefs;
53    
54     import static org.jsampler.view.std.StdI18n.i18n;
55     import static org.jsampler.view.std.StdPrefs.*;
56    
57    
58     /**
59     *
60     * @author Grigor Iliev
61     */
62     public class JSChannelsDefaultSettingsPane extends JPanel {
63     private final JLabel lDefaultEngine =
64     new JLabel(i18n.getLabel("JSChannelsDefaultSettingsPane.lDefaultEngine"));
65    
66     private final JLabel lMidiInput =
67     new JLabel(i18n.getLabel("JSChannelsDefaultSettingsPane.lMidiInput"));
68    
69     private final JLabel lAudioOutput =
70     new JLabel(i18n.getLabel("JSChannelsDefaultSettingsPane.lAudioOutput"));
71    
72 iliev 1334 private final JLabel lChannelVolume =
73     new JLabel(i18n.getLabel("JSChannelsDefaultSettingsPane.lChannelVolume"));
74    
75     private final JLabel lMidiMap =
76     new JLabel(i18n.getLabel("JSChannelsDefaultSettingsPane.lMidiMap"));
77    
78 iliev 1313 private final JComboBox cbDefaultEngine = new JComboBox();
79     private final JComboBox cbMidiInput = new JComboBox();
80     private final JComboBox cbAudioOutput = new JComboBox();
81 iliev 1334 private final JSlider slChannelVolume = new JSlider(0, 100);
82     private final JComboBox cbMidiMap = new JComboBox();
83 iliev 1313
84 iliev 1334 private final JLabel lVolume = new JLabel();
85    
86 iliev 1313 private final static String strFirstDevice =
87     i18n.getLabel("JSChannelsDefaultSettingsPane.strFirstDevice");
88    
89     private final static String strFirstDeviceNextChannel =
90     i18n.getLabel("JSChannelsDefaultSettingsPane.strFirstDeviceNextChannel");
91    
92 iliev 1334 private class NoMap {
93     public String
94     toString() { return "[None]"; }
95     }
96    
97     private NoMap noMap = new NoMap();
98    
99     private class DefaultMap {
100     public String
101     toString() { return "[Default]"; }
102     }
103    
104     private DefaultMap defaultMap = new DefaultMap();
105    
106 iliev 1313 /** Creates a new instance of <code>JSChannelsDefaultSettingsPane</code> */
107     public
108     JSChannelsDefaultSettingsPane() {
109     GridBagLayout gridbag = new GridBagLayout();
110     GridBagConstraints c = new GridBagConstraints();
111    
112     setLayout(gridbag);
113    
114     c.fill = GridBagConstraints.NONE;
115    
116     c.gridx = 0;
117     c.gridy = 0;
118     c.anchor = GridBagConstraints.EAST;
119     c.insets = new Insets(3, 3, 3, 3);
120     gridbag.setConstraints(lDefaultEngine, c);
121     add(lDefaultEngine);
122    
123     c.gridx = 0;
124     c.gridy = 1;
125     gridbag.setConstraints(lMidiInput, c);
126     add(lMidiInput);
127    
128     c.gridx = 0;
129     c.gridy = 2;
130     gridbag.setConstraints(lAudioOutput, c);
131     add(lAudioOutput);
132 iliev 1334
133     c.gridx = 0;
134     c.gridy = 3;
135     gridbag.setConstraints(lMidiMap, c);
136 iliev 1343 add(lMidiMap);
137 iliev 1334
138     c.gridx = 0;
139     c.gridy = 4;
140     gridbag.setConstraints(lChannelVolume, c);
141     add(lChannelVolume);
142 iliev 1313
143     c.fill = GridBagConstraints.HORIZONTAL;
144     c.gridx = 1;
145     c.gridy = 0;
146     c.weightx = 1.0;
147     c.anchor = GridBagConstraints.WEST;
148     gridbag.setConstraints(cbDefaultEngine, c);
149     add(cbDefaultEngine);
150    
151     c.gridx = 1;
152     c.gridy = 1;
153     gridbag.setConstraints(cbMidiInput, c);
154     add(cbMidiInput);
155    
156     c.gridx = 1;
157     c.gridy = 2;
158     gridbag.setConstraints(cbAudioOutput, c);
159     add(cbAudioOutput);
160    
161 iliev 1334 c.gridx = 1;
162     c.gridy = 3;
163     gridbag.setConstraints(cbMidiMap, c);
164     add(cbMidiMap);
165    
166     JPanel volumePane = new JPanel();
167     volumePane.setOpaque(false);
168     volumePane.setLayout(new BoxLayout(volumePane, BoxLayout.X_AXIS));
169    
170     Dimension d = slChannelVolume.getPreferredSize();
171     slChannelVolume.setMaximumSize(new Dimension(d.width > 300 ? d.width : 300, d.height));
172     slChannelVolume.setOpaque(false);
173     volumePane.add(slChannelVolume);
174    
175     volumePane.add(Box.createRigidArea(new Dimension(6, 0)));
176    
177     lVolume.setHorizontalAlignment(lVolume.RIGHT);
178    
179     // We use this to set the size of the lVolume that will be used in setVolume()
180     // to prevent the frequent resizing of lVolume
181     lVolume.setText("100%");
182    
183     volumePane.add(lVolume);
184    
185     slChannelVolume.addChangeListener(new ChangeListener() {
186     public void
187     stateChanged(ChangeEvent e) { updateVolume(); }
188     });
189    
190     int v = preferences().getIntProperty(DEFAULT_CHANNEL_VOLUME);
191     slChannelVolume.setValue(v);
192    
193     c.gridx = 1;
194     c.gridy = 4;
195     gridbag.setConstraints(volumePane, c);
196     add(volumePane);
197    
198 iliev 1313 for(SamplerEngine e : CC.getSamplerModel().getEngines()) {
199     cbDefaultEngine.addItem(e);
200     }
201    
202     String defaultEngine = preferences().getStringProperty(DEFAULT_ENGINE);
203     for(SamplerEngine e : CC.getSamplerModel().getEngines()) {
204     if(e.getName().equals(defaultEngine)) cbDefaultEngine.setSelectedItem(e);
205     }
206    
207     cbDefaultEngine.addActionListener(new ActionListener() {
208     public void
209     actionPerformed(ActionEvent e) { changeDefaultEngine(); }
210     });
211    
212     cbMidiInput.addItem(strFirstDevice);
213     cbMidiInput.addItem(strFirstDeviceNextChannel);
214    
215     String s = preferences().getStringProperty(DEFAULT_MIDI_INPUT);
216    
217     if(s.equals("firstDevice")) {
218     cbMidiInput.setSelectedItem(strFirstDevice);
219     } else if(s.equals("firstDeviceNextChannel")) {
220     cbMidiInput.setSelectedItem(strFirstDeviceNextChannel);
221     }
222    
223     cbMidiInput.addActionListener(new ActionListener() {
224     public void
225     actionPerformed(ActionEvent e) { changeDefaultMidiInput(); }
226     });
227    
228     cbAudioOutput.addItem(strFirstDevice);
229    
230     cbAudioOutput.addActionListener(new ActionListener() {
231     public void
232     actionPerformed(ActionEvent e) { changeDefaultAudioOutput(); }
233     });
234 iliev 1334
235     cbMidiMap.addItem(noMap);
236     cbMidiMap.addItem(defaultMap);
237    
238     String midiMap = preferences().getStringProperty(DEFAULT_MIDI_INSTRUMENT_MAP);
239     if(midiMap.equals("midiInstrumentMap.none")) {
240     cbMidiMap.setSelectedItem(noMap);
241     } else if(midiMap.equals("midiInstrumentMap.default")) {
242     cbMidiMap.setSelectedItem(defaultMap);
243     }
244    
245     cbMidiMap.addActionListener(new ActionListener() {
246     public void
247     actionPerformed(ActionEvent e) { changeDefaultMidiMap(); }
248     });
249 iliev 1313 }
250    
251     public JDialog
252     createDialog(Dialog owner) {
253     String s = i18n.getLabel("JSChannelsDefaultSettingsPane.title");
254     InformationDialog dlg = new InformationDialog(owner, s, this);
255     return dlg;
256     }
257    
258     private void
259     changeDefaultEngine() {
260     Object o = cbDefaultEngine.getSelectedItem();
261     if(o == null) return;
262     String s = ((SamplerEngine) o).getName();
263     preferences().setStringProperty(DEFAULT_ENGINE, s);
264     }
265    
266     private void
267     changeDefaultMidiInput() {
268     Object o = cbMidiInput.getSelectedItem();
269     if(o == null) return;
270    
271     if(o == strFirstDevice) {
272     preferences().setStringProperty(DEFAULT_MIDI_INPUT, "firstDevice");
273     } else if(o == strFirstDeviceNextChannel) {
274     preferences().setStringProperty(DEFAULT_MIDI_INPUT, "firstDeviceNextChannel");
275     }
276     }
277    
278     private void
279     changeDefaultAudioOutput() {
280     Object o = cbAudioOutput.getSelectedItem();
281     if(o == null) return;
282    
283     if(o == strFirstDevice) {
284     preferences().setStringProperty(DEFAULT_AUDIO_OUTPUT, "firstDevice");
285     }
286     }
287    
288 iliev 1334 private void
289     changeDefaultMidiMap() {
290     Object o = cbMidiMap.getSelectedItem();
291     if(o == null) return;
292     String s = DEFAULT_MIDI_INSTRUMENT_MAP;
293     if(o == noMap) {
294     preferences().setStringProperty(s, "midiInstrumentMap.none");
295     } else if(o == defaultMap) {
296     preferences().setStringProperty(s, "midiInstrumentMap.default");
297     }
298     }
299    
300     private void
301     updateVolume() {
302     int volume = slChannelVolume.getValue();
303     Dimension d = lVolume.getPreferredSize();
304     lVolume.setText(String.valueOf(volume) + '%');
305     d = JuifeUtils.getUnionSize(d, lVolume.getPreferredSize());
306     lVolume.setMinimumSize(d);
307     lVolume.setPreferredSize(d);
308     lVolume.setMaximumSize(d);
309    
310     if(slChannelVolume.getValueIsAdjusting()) return;
311     preferences().setIntProperty(DEFAULT_CHANNEL_VOLUME, slChannelVolume.getValue());
312     }
313    
314 iliev 1313 private static JSPrefs
315     preferences() { return CC.getViewConfig().preferences(); }
316     }

  ViewVC Help
Powered by ViewVC