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

Contents of /jsampler/trunk/src/org/jsampler/view/std/JSNewMidiDeviceDlg.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1327 - (show annotations) (download)
Fri Sep 7 12:09:59 2007 UTC (16 years, 7 months ago) by iliev
File size: 7088 byte(s)
* Implemented more proper retrieval of the MIDI/audio driver settings
* Implemented new table cell editor for editing string list
  parameters with possibilities
* Some javadoc documentation fixes

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
26 import java.awt.BorderLayout;
27 import java.awt.Dialog;
28 import java.awt.Dimension;
29 import java.awt.Frame;
30
31 import java.awt.event.ActionEvent;
32 import java.awt.event.ActionListener;
33 import java.awt.event.WindowAdapter;
34 import java.awt.event.WindowEvent;
35
36 import javax.swing.BorderFactory;
37 import javax.swing.Box;
38 import javax.swing.BoxLayout;
39 import javax.swing.JButton;
40 import javax.swing.JComboBox;
41 import javax.swing.JLabel;
42 import javax.swing.JOptionPane;
43 import javax.swing.JPanel;
44 import javax.swing.JScrollPane;
45
46 import net.sf.juife.EnhancedDialog;
47 import net.sf.juife.JuifeUtils;
48
49 import net.sf.juife.event.TaskEvent;
50 import net.sf.juife.event.TaskListener;
51
52 import org.jsampler.CC;
53 import org.jsampler.JSPrefs;
54
55 import org.jsampler.event.ParameterEvent;
56 import org.jsampler.event.ParameterListener;
57
58 import org.jsampler.task.Midi;
59 import org.jsampler.view.ParameterTable;
60
61 import org.linuxsampler.lscp.MidiInputDriver;
62 import org.linuxsampler.lscp.Parameter;
63
64 import static org.jsampler.view.std.StdI18n.i18n;
65 import static org.jsampler.view.std.StdPrefs.*;
66
67
68 /**
69 *
70 * @author Grigor Iliev
71 */
72 public class JSNewMidiDeviceDlg extends EnhancedDialog {
73 private final JLabel lDriver = new JLabel(i18n.getLabel("JSNewMidiDeviceDlg.lDriver"));
74 private final JComboBox cbDrivers = new JComboBox();
75 private final ParameterTable parameterTable = new ParameterTable();
76
77 private final JButton btnCreate =
78 new JButton(i18n.getButtonLabel("JSNewMidiDeviceDlg.btnCreate"));
79 private final JButton btnCancel = new JButton(i18n.getButtonLabel("cancel"));
80
81 /**
82 * Creates a new instance of JSNewMidiDeviceDlg
83 */
84 public JSNewMidiDeviceDlg(Frame owner) {
85 super(owner, i18n.getLabel("JSNewMidiDeviceDlg.title"));
86
87 initNewMidiDeviceDlg();
88 }
89
90 /**
91 * Creates a new instance of JSNewMidiDeviceDlg
92 */
93 public JSNewMidiDeviceDlg(Dialog owner) {
94 super(owner, i18n.getLabel("JSNewMidiDeviceDlg.title"));
95
96 initNewMidiDeviceDlg();
97 }
98
99 private void
100 initNewMidiDeviceDlg() {
101 JPanel mainPane = new JPanel();
102 mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
103
104 JPanel p = new JPanel();
105 p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
106 p.add(lDriver);
107
108 parameterTable.getModel().setEditFixedParameters(true);
109
110 parameterTable.getModel().addParameterListener(new ParameterListener() {
111 public void
112 parameterChanged(ParameterEvent e) {
113 updateParameters();
114 }
115 });
116
117 cbDrivers.addActionListener(new ActionListener() {
118 public void
119 actionPerformed(ActionEvent e) {
120 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
121 if(d == null) return;
122
123 cbDrivers.setToolTipText(d.getDescription());
124 parameterTable.getModel().setParameters(d.getParameters());
125 updateParameters();
126 }
127 });
128
129 MidiInputDriver[] drivers = CC.getSamplerModel().getMidiInputDrivers();
130 if(drivers != null) {
131 for(MidiInputDriver d : drivers) cbDrivers.addItem(d);
132
133 String s = preferences().getStringProperty(DEFAULT_MIDI_DRIVER);
134 for(MidiInputDriver d : drivers) {
135 if(d.getName().equals(s)) {
136 cbDrivers.setSelectedItem(d);
137 break;
138 }
139 }
140 }
141
142 cbDrivers.setMaximumSize(cbDrivers.getPreferredSize());
143 p.add(Box.createRigidArea(new Dimension(5, 0)));
144 p.add(cbDrivers);
145
146 p.setAlignmentX(LEFT_ALIGNMENT);
147 mainPane.add(p);
148
149 mainPane.add(Box.createRigidArea(new Dimension(0, 12)));
150
151 //parameterTable.setModel(new ParameterTableModel(CC.getSamplerModel().));
152 JScrollPane sp = new JScrollPane(parameterTable);
153 sp.setAlignmentX(LEFT_ALIGNMENT);
154 mainPane.add(sp);
155
156 mainPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 17, 12));
157 mainPane.setPreferredSize (
158 JuifeUtils.getUnionSize(mainPane.getMinimumSize(), new Dimension(250, 200))
159 );
160 add(mainPane);
161
162 JPanel btnPane = new JPanel();
163 btnPane.setLayout(new BoxLayout(btnPane, BoxLayout.X_AXIS));
164 btnPane.add(Box.createGlue());
165 btnPane.add(btnCreate);
166 btnPane.add(Box.createRigidArea(new Dimension(5, 0)));
167 btnPane.add(btnCancel);
168
169 btnPane.setBorder(BorderFactory.createEmptyBorder(0, 12, 12, 12));
170 add(btnPane, BorderLayout.SOUTH);
171
172 pack();
173
174 setLocation(JuifeUtils.centerLocation(this, getOwner()));
175
176 btnCancel.addActionListener(new ActionListener() {
177 public void
178 actionPerformed(ActionEvent e) { onCancel(); }
179 });
180
181 btnCreate.addActionListener(new ActionListener() {
182 public void
183 actionPerformed(ActionEvent e) { onOk(); }
184 });
185
186 addWindowListener(new WindowAdapter() {
187 public void
188 windowActivated(WindowEvent e) { btnCreate.requestFocusInWindow(); }
189 });
190 }
191
192 private void
193 updateParameters() {
194 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
195 if(d == null) return;
196
197 final Parameter[] parameters = parameterTable.getModel().getParameters();
198
199 final Midi.GetDriverParametersInfo task =
200 new Midi.GetDriverParametersInfo(d.getName(), parameters);
201
202 task.addTaskListener(new TaskListener() {
203 public void
204 taskPerformed(TaskEvent e) {
205 if(task.doneWithErrors()) return;
206 for(Parameter p : parameters) {
207 for(Parameter p2 : task.getResult()) {
208 if(p2.getName().equals(p.getName())) {
209 p2.setValue(p.getValue());
210 if(p2.getValue() == null) {
211 p2.setValue(p2.getDefault());
212 }
213 break;
214 }
215
216 }
217 }
218
219 parameterTable.getModel().setParameters(task.getResult());
220 }
221 });
222
223 CC.getTaskQueue().add(task);
224 }
225
226 protected void
227 onOk() {
228 Object obj = cbDrivers.getSelectedItem();
229 if(obj == null) {
230 JOptionPane.showMessageDialog (
231 this, i18n.getMessage("JSNewMidiDeviceDlg.selectDriver!"),
232 "",
233 JOptionPane.INFORMATION_MESSAGE
234 );
235
236 return;
237 }
238
239 btnCreate.setEnabled(false);
240
241 MidiInputDriver driver = (MidiInputDriver)obj;
242
243 final Midi.CreateDevice cmd =
244 new Midi.CreateDevice(driver.getName(), driver.getParameters());
245
246 cmd.addTaskListener(new TaskListener() {
247 public void
248 taskPerformed(TaskEvent e) {
249 btnCreate.setEnabled(true);
250 setVisible(false);
251 }
252 });
253
254 CC.getTaskQueue().add(cmd);
255 }
256
257 protected void
258 onCancel() { setVisible(false); }
259
260 private static JSPrefs
261 preferences() { return CC.getViewConfig().preferences(); }
262 }

  ViewVC Help
Powered by ViewVC