/[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 1488 - (show annotations) (download)
Sun Nov 18 22:12:07 2007 UTC (16 years, 4 months ago) by iliev
File size: 7761 byte(s)
* bugfix: if there is a cell editing in progress in the parameter table,
  it is now finalized before creating new audio/MIDI device

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 Pane mainPane = new Pane();
74
75 /**
76 * Creates a new instance of JSNewMidiDeviceDlg
77 */
78 public JSNewMidiDeviceDlg(Frame owner) {
79 super(owner, i18n.getLabel("JSNewMidiDeviceDlg.title"));
80
81 initNewMidiDeviceDlg();
82 }
83
84 /**
85 * Creates a new instance of JSNewMidiDeviceDlg
86 */
87 public JSNewMidiDeviceDlg(Dialog owner) {
88 super(owner, i18n.getLabel("JSNewMidiDeviceDlg.title"));
89
90 initNewMidiDeviceDlg();
91 }
92
93 private void
94 initNewMidiDeviceDlg() {
95 mainPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
96 mainPane.setPreferredSize (
97 JuifeUtils.getUnionSize(mainPane.getMinimumSize(), new Dimension(250, 230))
98 );
99 add(mainPane);
100 pack();
101
102 setLocation(JuifeUtils.centerLocation(this, getOwner()));
103
104 mainPane.btnCancel.addActionListener(new ActionListener() {
105 public void
106 actionPerformed(ActionEvent e) { onCancel(); }
107 });
108
109 mainPane.btnCreate.addActionListener(new ActionListener() {
110 public void
111 actionPerformed(ActionEvent e) { onOk(); }
112 });
113
114 addWindowListener(new WindowAdapter() {
115 public void
116 windowActivated(WindowEvent e) { mainPane.btnCreate.requestFocusInWindow(); }
117 });
118 }
119
120 protected void
121 onOk() {
122 MidiInputDriver driver = mainPane.getSelectedDriver();
123 if(driver == null) {
124 JOptionPane.showMessageDialog (
125 this, i18n.getMessage("JSNewMidiDeviceDlg.selectDriver!"),
126 "",
127 JOptionPane.INFORMATION_MESSAGE
128 );
129
130 return;
131 }
132
133 mainPane.btnCreate.setEnabled(false);
134
135 final Midi.CreateDevice cmd =
136 new Midi.CreateDevice(driver.getName(), mainPane.getParameters());
137
138 cmd.addTaskListener(new TaskListener() {
139 public void
140 taskPerformed(TaskEvent e) {
141 mainPane.btnCreate.setEnabled(true);
142 setVisible(false);
143 }
144 });
145
146 CC.getTaskQueue().add(cmd);
147 }
148
149 protected void
150 onCancel() { setVisible(false); }
151
152 private static JSPrefs
153 preferences() { return CC.getViewConfig().preferences(); }
154
155 public static class Pane extends JPanel {
156 private final JLabel lDriver = new JLabel(i18n.getLabel("JSNewMidiDeviceDlg.lDriver"));
157 public final JComboBox cbDrivers = new JComboBox();
158 private final ParameterTable parameterTable = new ParameterTable();
159
160 public final JButton btnCreate =
161 new JButton(i18n.getButtonLabel("JSNewMidiDeviceDlg.btnCreate"));
162 public final JButton btnCancel = new JButton(i18n.getButtonLabel("cancel"));
163
164
165 public
166 Pane() {
167 setLayout(new BorderLayout());
168 JPanel mainPane = new JPanel();
169 mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
170
171 JPanel p = new JPanel();
172 p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
173 p.add(lDriver);
174
175 parameterTable.getModel().setEditFixedParameters(true);
176
177 parameterTable.getModel().addParameterListener(new ParameterListener() {
178 public void
179 parameterChanged(ParameterEvent e) {
180 updateParameters();
181 }
182 });
183
184 cbDrivers.addActionListener(new ActionListener() {
185 public void
186 actionPerformed(ActionEvent e) {
187 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
188 if(d == null) return;
189
190 cbDrivers.setToolTipText(d.getDescription());
191 parameterTable.getModel().setParameters(d.getParameters());
192 updateParameters();
193 }
194 });
195
196 MidiInputDriver[] drivers = CC.getSamplerModel().getMidiInputDrivers();
197 if(drivers != null) {
198 for(MidiInputDriver d : drivers) cbDrivers.addItem(d);
199
200 String s = preferences().getStringProperty(DEFAULT_MIDI_DRIVER);
201 for(MidiInputDriver d : drivers) {
202 if(d.getName().equals(s)) {
203 cbDrivers.setSelectedItem(d);
204 break;
205 }
206 }
207 }
208
209 cbDrivers.setMaximumSize(cbDrivers.getPreferredSize());
210 p.add(Box.createRigidArea(new Dimension(5, 0)));
211 p.add(cbDrivers);
212
213 p.setAlignmentX(LEFT_ALIGNMENT);
214 mainPane.add(p);
215
216 mainPane.add(Box.createRigidArea(new Dimension(0, 12)));
217
218 //parameterTable.setModel(new ParameterTableModel(CC.getSamplerModel().));
219 JScrollPane sp = new JScrollPane(parameterTable);
220 sp.setAlignmentX(LEFT_ALIGNMENT);
221 mainPane.add(sp);
222
223 add(mainPane);
224
225 JPanel btnPane = new JPanel();
226 btnPane.setLayout(new BoxLayout(btnPane, BoxLayout.X_AXIS));
227 btnPane.add(Box.createGlue());
228 btnPane.add(btnCreate);
229 btnPane.add(Box.createRigidArea(new Dimension(5, 0)));
230 btnPane.add(btnCancel);
231
232 btnPane.setBorder(BorderFactory.createEmptyBorder(17, 0, 0, 0));
233 add(btnPane, BorderLayout.SOUTH);
234 }
235
236 public MidiInputDriver
237 getSelectedDriver() {
238 return (MidiInputDriver)cbDrivers.getSelectedItem();
239 }
240
241 /**
242 * Stops any cell editing in progress and returns the parameters
243 */
244 public Parameter[]
245 getParameters() {
246 if(parameterTable.getCellEditor() != null) {
247 parameterTable.getCellEditor().stopCellEditing();
248 }
249 return parameterTable.getModel().getParameters();
250 }
251
252 private void
253 updateParameters() {
254 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
255 if(d == null) return;
256
257 final Parameter[] parameters = parameterTable.getModel().getParameters();
258
259 final Midi.GetDriverParametersInfo task =
260 new Midi.GetDriverParametersInfo(d.getName(), parameters);
261
262 task.addTaskListener(new TaskListener() {
263 public void
264 taskPerformed(TaskEvent e) {
265 if(task.doneWithErrors()) return;
266 for(Parameter p : parameters) {
267 for(Parameter p2 : task.getResult()) {
268 if(p2.getName().equals(p.getName())) {
269 p2.setValue(p.getValue());
270 if(p2.getValue() == null) {
271 p2.setValue(p2.getDefault());
272 }
273 break;
274 }
275 }
276 }
277
278 parameterTable.getModel().setParameters(task.getResult());
279 }
280 });
281
282 CC.getTaskQueue().add(task);
283 }
284 }
285 }

  ViewVC Help
Powered by ViewVC