/[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 1743 - (show annotations) (download)
Sat May 31 23:04:01 2008 UTC (15 years, 10 months ago) by iliev
File size: 7809 byte(s)
* Renamed the column labels in the Channel Routing dialog: The column
  representing the sampler channel's audio channels is "Audio In" and
  the column representing the audio device's channels is "Audio Out"
* Remember the last used tab in the Preferences dialog
* Fantasia: The sampler channels are now referenced by their position
  in the list, not by their ID
* Fantasia: Implemented options to show the channel number and/or the MIDI
  input port/channel on the sampler channel screen when using Small View
  (choose Edit/Preferences, then click the `Channels' tab)
* Fantasia: Migrated to substance 5

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 parameterTable.setFillsViewportHeight(true);
177
178 parameterTable.getModel().addParameterListener(new ParameterListener() {
179 public void
180 parameterChanged(ParameterEvent e) {
181 updateParameters();
182 }
183 });
184
185 cbDrivers.addActionListener(new ActionListener() {
186 public void
187 actionPerformed(ActionEvent e) {
188 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
189 if(d == null) return;
190
191 cbDrivers.setToolTipText(d.getDescription());
192 parameterTable.getModel().setParameters(d.getParameters());
193 updateParameters();
194 }
195 });
196
197 MidiInputDriver[] drivers = CC.getSamplerModel().getMidiInputDrivers();
198 if(drivers != null) {
199 for(MidiInputDriver d : drivers) cbDrivers.addItem(d);
200
201 String s = preferences().getStringProperty(DEFAULT_MIDI_DRIVER);
202 for(MidiInputDriver d : drivers) {
203 if(d.getName().equals(s)) {
204 cbDrivers.setSelectedItem(d);
205 break;
206 }
207 }
208 }
209
210 cbDrivers.setMaximumSize(cbDrivers.getPreferredSize());
211 p.add(Box.createRigidArea(new Dimension(5, 0)));
212 p.add(cbDrivers);
213
214 p.setAlignmentX(LEFT_ALIGNMENT);
215 mainPane.add(p);
216
217 mainPane.add(Box.createRigidArea(new Dimension(0, 12)));
218
219 //parameterTable.setModel(new ParameterTableModel(CC.getSamplerModel().));
220 JScrollPane sp = new JScrollPane(parameterTable);
221 sp.setAlignmentX(LEFT_ALIGNMENT);
222 mainPane.add(sp);
223
224 add(mainPane);
225
226 JPanel btnPane = new JPanel();
227 btnPane.setLayout(new BoxLayout(btnPane, BoxLayout.X_AXIS));
228 btnPane.add(Box.createGlue());
229 btnPane.add(btnCreate);
230 btnPane.add(Box.createRigidArea(new Dimension(5, 0)));
231 btnPane.add(btnCancel);
232
233 btnPane.setBorder(BorderFactory.createEmptyBorder(17, 0, 0, 0));
234 add(btnPane, BorderLayout.SOUTH);
235 }
236
237 public MidiInputDriver
238 getSelectedDriver() {
239 return (MidiInputDriver)cbDrivers.getSelectedItem();
240 }
241
242 /**
243 * Stops any cell editing in progress and returns the parameters
244 */
245 public Parameter[]
246 getParameters() {
247 if(parameterTable.getCellEditor() != null) {
248 parameterTable.getCellEditor().stopCellEditing();
249 }
250 return parameterTable.getModel().getParameters();
251 }
252
253 private void
254 updateParameters() {
255 MidiInputDriver d = (MidiInputDriver)cbDrivers.getSelectedItem();
256 if(d == null) return;
257
258 final Parameter[] parameters = parameterTable.getModel().getParameters();
259
260 final Midi.GetDriverParametersInfo task =
261 new Midi.GetDriverParametersInfo(d.getName(), parameters);
262
263 task.addTaskListener(new TaskListener() {
264 public void
265 taskPerformed(TaskEvent e) {
266 if(task.doneWithErrors()) return;
267 for(Parameter p : parameters) {
268 for(Parameter p2 : task.getResult()) {
269 if(p2.getName().equals(p.getName())) {
270 p2.setValue(p.getValue());
271 if(p2.getValue() == null) {
272 p2.setValue(p2.getDefault());
273 }
274 break;
275 }
276 }
277 }
278
279 parameterTable.getModel().setParameters(task.getResult());
280 }
281 });
282
283 CC.getTaskQueue().add(task);
284 }
285 }
286 }

  ViewVC Help
Powered by ViewVC