/[svn]/jsampler/trunk/src/org/jsampler/DefaultMidiDeviceModel.java
ViewVC logotype

Annotation of /jsampler/trunk/src/org/jsampler/DefaultMidiDeviceModel.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2288 - (hide annotations) (download)
Wed Nov 23 21:19:44 2011 UTC (12 years, 5 months ago) by iliev
File size: 5623 byte(s)
* Added option to select a sampler engine in Add/Edit Instrument dialog
* Moved all Swing dependent code outside the JSampler core

1 iliev 787 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 2288 * Copyright (C) 2005-2011 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 787 *
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;
24    
25     import java.util.Vector;
26    
27 iliev 2288 import net.sf.juife.PDUtils;
28 iliev 787
29     import org.jsampler.event.MidiDeviceEvent;
30     import org.jsampler.event.MidiDeviceListener;
31    
32 iliev 1143 import org.jsampler.task.Midi;
33    
34 iliev 787 import org.linuxsampler.lscp.MidiInputDevice;
35     import org.linuxsampler.lscp.Parameter;
36    
37    
38     /**
39 iliev 911 * The Default implementation of the <code>MidiDeviceModel</code> interface.
40 iliev 787 * @author Grigor Iliev
41     */
42     public class DefaultMidiDeviceModel implements MidiDeviceModel {
43     private MidiInputDevice midiDevice;
44    
45     private final Vector<MidiDeviceListener> listeners = new Vector<MidiDeviceListener>();
46    
47     /**
48     * Creates a new instance of <code>DefaultMidiDeviceModel</code> using the
49     * specified non-null MIDI device.
50     * @param midiDevice A <code>MidiInputDevice</code> instance providing the current
51     * settings of the MIDI device which will be represented by this model.
52     * @throws IllegalArgumentException If <code>midiDevice</code> is <code>null</code>.
53     */
54     public
55     DefaultMidiDeviceModel(MidiInputDevice midiDevice) {
56     if(midiDevice == null)
57     throw new IllegalArgumentException("midiDevice must be non null");
58    
59     this.midiDevice = midiDevice;
60     }
61    
62     /**
63     * Registers the specified listener to be notified when
64     * the settings of the MIDI device are changed.
65     * @param l The <code>MidiDeviceListener</code> to register.
66     */
67 iliev 2288 @Override
68 iliev 787 public void
69     addMidiDeviceListener(MidiDeviceListener l) { listeners.add(l); }
70    
71     /**
72     * Removes the specified listener.
73     * @param l The <code>MidiDeviceListener</code> to remove.
74     */
75 iliev 2288 @Override
76 iliev 787 public void
77     removeMidiDeviceListener(MidiDeviceListener l) { listeners.remove(l); }
78    
79     /**
80     * Gets the numerical ID of this MIDI device.
81     * @return The numerical ID of this MIDI device or
82     * -1 if the device number is not set.
83     */
84 iliev 2288 @Override
85 iliev 787 public int
86 iliev 1143 getDeviceId() { return midiDevice.getDeviceId(); }
87 iliev 787
88     /**
89     * Gets the current settings of the MIDI device represented by this model.
90     * @return <code>MidiInputDevice</code> instance providing
91     * the current settings of the MIDI device represented by this model.
92     */
93 iliev 2288 @Override
94 iliev 787 public MidiInputDevice
95     getDeviceInfo() { return midiDevice; }
96    
97     /**
98     * Updates the settings of the MIDI device represented by this model.
99     * @param device The new MIDI device settings.
100     */
101 iliev 2288 @Override
102 iliev 787 public void
103     setDeviceInfo(MidiInputDevice device) {
104     midiDevice = device;
105     fireSettingsChanged();
106     }
107    
108     /**
109     * Sets whether the MIDI device is enabled or disabled.
110     * @param active If <code>true</code> the MIDI device is enabled,
111     * else the device is disabled.
112     */
113 iliev 2288 @Override
114 iliev 787 public void
115     setActive(boolean active) {
116     if(active == getDeviceInfo().isActive()) return;
117    
118     midiDevice.setActive(active);
119     fireSettingsChanged();
120     }
121    
122     /**
123     * Determines whether the MIDI device is active.
124     * @return <code>true</code> if the device is enabled and <code>false</code> otherwise.
125     */
126 iliev 2288 @Override
127 iliev 787 public boolean
128     isActive() { return midiDevice.isActive(); }
129    
130     /**
131 iliev 1143 * Schedules a new task for enabling/disabling the MIDI device.
132     * @param active If <code>true</code> the MIDI device is enabled,
133     * else the device is disabled.
134     */
135 iliev 2288 @Override
136 iliev 1143 public void
137     setBackendActive(boolean active) {
138     CC.getTaskQueue().add(new Midi.EnableDevice(getDeviceId(), active));
139     }
140    
141     /**
142 iliev 1357 * Schedules a new task for altering
143     * a specific setting of the MIDI input device.
144     * @param prm The parameter to be set.
145     */
146 iliev 2288 @Override
147 iliev 1357 public void
148     setBackendDeviceParameter(Parameter prm) {
149     CC.getTaskQueue().add(new Midi.SetDeviceParameter(getDeviceId(), prm));
150     }
151    
152     /**
153 iliev 1143 * Schedules a new task for changing the port number of the MIDI device.
154     * @param ports The new number of ports.
155     */
156 iliev 2288 @Override
157 iliev 1143 public void
158     setBackendPortCount(int ports) {
159     CC.getTaskQueue().add(new Midi.SetPortCount(getDeviceId(), ports));
160     }
161    
162     /**
163     * Schedules a new task for altering a specific
164     * setting of the specified MIDI input port.
165     * @param port The port number.
166     * @param prm The parameter to be set.
167     */
168 iliev 2288 @Override
169 iliev 1143 public void
170     setBackendPortParameter(int port, Parameter prm) {
171     CC.getTaskQueue().add(new Midi.SetPortParameter(getDeviceId(), port, prm));
172     }
173    
174     /**
175 iliev 787 * Notifies listeners that the settings of the MIDI device are changed.
176     */
177     private void
178     fireSettingsChanged() {
179 iliev 2288 PDUtils.runOnUiThread(new Runnable() {
180 iliev 1567 public void
181     run() {
182     MidiDeviceModel model = DefaultMidiDeviceModel.this;
183     fireSettingsChanged(new MidiDeviceEvent(model, model));
184     }
185     });
186 iliev 787 }
187    
188     /**
189     * Notifies listeners that the settings of the MIDI device are changed.
190     * This method should be invoked from the event-dispatching thread.
191     */
192     private void
193     fireSettingsChanged(final MidiDeviceEvent e) {
194 iliev 1567 CC.getSamplerModel().setModified(true);
195     for(MidiDeviceListener l : listeners) l.settingsChanged(e);
196 iliev 787 }
197     }

  ViewVC Help
Powered by ViewVC