63 |
import javax.swing.JSeparator; |
import javax.swing.JSeparator; |
64 |
import javax.swing.JSlider; |
import javax.swing.JSlider; |
65 |
import javax.swing.JToggleButton; |
import javax.swing.JToggleButton; |
66 |
|
import javax.swing.JToolBar; |
67 |
import javax.swing.TransferHandler; |
import javax.swing.TransferHandler; |
68 |
|
|
69 |
import javax.swing.border.Border; |
import javax.swing.border.Border; |
79 |
import org.jsampler.AudioDeviceModel; |
import org.jsampler.AudioDeviceModel; |
80 |
import org.jsampler.CC; |
import org.jsampler.CC; |
81 |
import org.jsampler.HF; |
import org.jsampler.HF; |
82 |
import org.jsampler.Instrument; |
import org.jsampler.OrchestraInstrument; |
83 |
import org.jsampler.MidiDeviceModel; |
import org.jsampler.MidiDeviceModel; |
84 |
import org.jsampler.MidiInstrumentMap; |
import org.jsampler.MidiInstrumentMap; |
85 |
import org.jsampler.SamplerChannelModel; |
import org.jsampler.SamplerChannelModel; |
87 |
|
|
88 |
import org.jsampler.event.ListEvent; |
import org.jsampler.event.ListEvent; |
89 |
import org.jsampler.event.ListListener; |
import org.jsampler.event.ListListener; |
90 |
|
import org.jsampler.event.MidiDeviceEvent; |
91 |
import org.jsampler.event.MidiDeviceListEvent; |
import org.jsampler.event.MidiDeviceListEvent; |
92 |
import org.jsampler.event.MidiDeviceListListener; |
import org.jsampler.event.MidiDeviceListListener; |
93 |
|
import org.jsampler.event.MidiDeviceListener; |
94 |
import org.jsampler.event.SamplerAdapter; |
import org.jsampler.event.SamplerAdapter; |
95 |
import org.jsampler.event.SamplerChannelAdapter; |
import org.jsampler.event.SamplerChannelAdapter; |
96 |
import org.jsampler.event.SamplerChannelEvent; |
import org.jsampler.event.SamplerChannelEvent; |
98 |
import org.jsampler.event.SamplerChannelListListener; |
import org.jsampler.event.SamplerChannelListListener; |
99 |
import org.jsampler.event.SamplerChannelListener; |
import org.jsampler.event.SamplerChannelListener; |
100 |
import org.jsampler.event.SamplerEvent; |
import org.jsampler.event.SamplerEvent; |
101 |
|
import org.jsampler.event.SamplerListener; |
102 |
|
|
103 |
|
import org.jsampler.view.std.JSChannelOutputRoutingDlg; |
104 |
|
import org.jsampler.view.std.JSFxSendsPane; |
105 |
|
import org.jsampler.view.std.JSInstrumentChooser; |
106 |
|
|
107 |
import org.linuxsampler.lscp.AudioOutputDevice; |
import org.linuxsampler.lscp.AudioOutputDevice; |
108 |
import org.linuxsampler.lscp.MidiInputDevice; |
import org.linuxsampler.lscp.MidiInputDevice; |
111 |
import org.linuxsampler.lscp.SamplerEngine; |
import org.linuxsampler.lscp.SamplerEngine; |
112 |
|
|
113 |
import static org.jsampler.view.classic.ClassicI18n.i18n; |
import static org.jsampler.view.classic.ClassicI18n.i18n; |
114 |
|
import static org.jsampler.view.classic.ClassicPrefs.preferences; |
115 |
|
import static org.jsampler.view.std.StdPrefs.*; |
116 |
|
|
117 |
|
|
118 |
/** |
/** |
120 |
* @author Grigor Iliev |
* @author Grigor Iliev |
121 |
*/ |
*/ |
122 |
public class Channel extends org.jsampler.view.JSChannel { |
public class Channel extends org.jsampler.view.JSChannel { |
123 |
|
private final static ImageIcon iconEdit; |
124 |
|
|
125 |
private final static ImageIcon iconMuteOn; |
private final static ImageIcon iconMuteOn; |
126 |
private final static ImageIcon iconMuteOff; |
private final static ImageIcon iconMuteOff; |
127 |
private final static ImageIcon iconMutedBySolo; |
private final static ImageIcon iconMutedBySolo; |
146 |
= new Vector<PropertyChangeListener>(); |
= new Vector<PropertyChangeListener>(); |
147 |
|
|
148 |
static { |
static { |
149 |
|
iconEdit = new ImageIcon(Channel.class.getResource("res/icons/edit.png")); |
150 |
|
|
151 |
String path = "org/jsampler/view/classic/res/icons/"; |
String path = "org/jsampler/view/classic/res/icons/"; |
152 |
URL url = ClassLoader.getSystemClassLoader().getResource(path + "mute_on.png"); |
URL url = ClassLoader.getSystemClassLoader().getResource(path + "mute_on.png"); |
153 |
iconMuteOn = new ImageIcon(url); |
iconMuteOn = new ImageIcon(url); |
313 |
private final ChannelProperties propertiesPane; |
private final ChannelProperties propertiesPane; |
314 |
private final JButton btnInstr = new InstrumentButton(i18n.getLabel("Channel.btnInstr")); |
private final JButton btnInstr = new InstrumentButton(i18n.getLabel("Channel.btnInstr")); |
315 |
private final Action actInstr; |
private final Action actInstr; |
316 |
|
private final JButton btnEdit = new JButton(iconEdit); |
317 |
private final JButton btnMute = new JButton(); |
private final JButton btnMute = new JButton(); |
318 |
private final JButton btnSolo = new JButton(); |
private final JButton btnSolo = new JButton(); |
319 |
private final JSlider slVolume = new JSlider(0, 100); |
private final JSlider slVolume = new JSlider(0, 100); |
343 |
|
|
344 |
mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS)); |
mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS)); |
345 |
addMouseListener(getHandler()); |
addMouseListener(getHandler()); |
346 |
|
addHierarchyListener(getHandler()); |
347 |
|
|
348 |
JPanel p = new JPanel(); |
JPanel p = new JPanel(); |
349 |
p.setOpaque(false); |
p.setOpaque(false); |
357 |
p.add(btnInstr); |
p.add(btnInstr); |
358 |
p.add(Box.createRigidArea(new Dimension(6, 0))); |
p.add(Box.createRigidArea(new Dimension(6, 0))); |
359 |
|
|
360 |
|
btnEdit.setToolTipText(i18n.getLabel("Channel.btnEdit.tt")); |
361 |
|
btnEdit.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
362 |
|
p.add(btnEdit); |
363 |
|
p.add(Box.createRigidArea(new Dimension(6, 0))); |
364 |
|
|
365 |
lStreams.setHorizontalAlignment(JLabel.CENTER); |
lStreams.setHorizontalAlignment(JLabel.CENTER); |
366 |
lVoices.setHorizontalAlignment(JLabel.CENTER); |
lVoices.setHorizontalAlignment(JLabel.CENTER); |
367 |
|
|
430 |
d = getPreferredSize(); |
d = getPreferredSize(); |
431 |
setMaximumSize(new Dimension(getMaximumSize().width, d.height)); |
setMaximumSize(new Dimension(getMaximumSize().width, d.height)); |
432 |
|
|
433 |
|
int i = preferences().getIntProperty(MAXIMUM_CHANNEL_VOLUME); |
434 |
|
slVolume.setMaximum(i); |
435 |
|
String mcv = MAXIMUM_CHANNEL_VOLUME; |
436 |
|
preferences().addPropertyChangeListener(mcv, new PropertyChangeListener() { |
437 |
|
public void |
438 |
|
propertyChange(PropertyChangeEvent e) { |
439 |
|
int j = preferences().getIntProperty(MAXIMUM_CHANNEL_VOLUME); |
440 |
|
slVolume.setMaximum(j); |
441 |
|
} |
442 |
|
}); |
443 |
|
|
444 |
getModel().addSamplerChannelListener(getHandler()); |
getModel().addSamplerChannelListener(getHandler()); |
445 |
|
|
446 |
actInstr = new AbstractAction() { |
actInstr = new AbstractAction() { |
452 |
|
|
453 |
btnInstr.addActionListener(actInstr); |
btnInstr.addActionListener(actInstr); |
454 |
|
|
455 |
|
btnEdit.addActionListener(new ActionListener() { |
456 |
|
public void |
457 |
|
actionPerformed(ActionEvent e) { |
458 |
|
CC.getSamplerModel().editBackendInstrument(getChannelId()); |
459 |
|
} |
460 |
|
}); |
461 |
|
|
462 |
btnMute.addActionListener(new ActionListener() { |
btnMute.addActionListener(new ActionListener() { |
463 |
public void |
public void |
464 |
actionPerformed(ActionEvent e) { changeMute(); } |
actionPerformed(ActionEvent e) { changeMute(); } |
545 |
if(sc.getInstrumentName() == null || sc.getInstrumentStatus() < 0) |
if(sc.getInstrumentName() == null || sc.getInstrumentStatus() < 0) |
546 |
return null; |
return null; |
547 |
|
|
548 |
Instrument instr = new Instrument(); |
OrchestraInstrument instr = new OrchestraInstrument(); |
549 |
instr.setName(sc.getInstrumentName()); |
instr.setName(sc.getInstrumentName()); |
550 |
instr.setInstrumentIndex(sc.getInstrumentIndex()); |
instr.setInstrumentIndex(sc.getInstrumentIndex()); |
551 |
instr.setPath(sc.getInstrumentFile()); |
instr.setFilePath(sc.getInstrumentFile()); |
552 |
return instr.getDnDString(); |
return instr.getDnDString(); |
553 |
} |
} |
554 |
|
|
555 |
public void setInstrument(String instr) { |
public void setInstrument(String instr) { |
556 |
if(!Instrument.isDnDString(instr)) return; |
if(!OrchestraInstrument.isDnDString(instr)) return; |
557 |
|
|
558 |
String[] args = instr.split("\n"); |
String[] args = instr.split("\n"); |
559 |
if(args.length < 6) return; |
if(args.length < 6) return; |
707 |
else btnInstr.setText(i18n.getLabel("Channel.btnInstr")); |
else btnInstr.setText(i18n.getLabel("Channel.btnInstr")); |
708 |
} |
} |
709 |
|
|
710 |
|
boolean b = status == 100; |
711 |
|
if(btnEdit.isEnabled() != b) btnEdit.setEnabled(b); |
712 |
|
|
713 |
updateMuteIcon(sc); |
updateMuteIcon(sc); |
714 |
|
|
715 |
if(sc.isSoloChannel()) btnSolo.setIcon(iconSoloOn); |
if(sc.isSoloChannel()) btnSolo.setIcon(iconSoloOn); |
717 |
|
|
718 |
slVolume.setValue((int)(sc.getVolume() * 100)); |
slVolume.setValue((int)(sc.getVolume() * 100)); |
719 |
|
|
720 |
boolean b = sc.getEngine() != null; |
b = sc.getEngine() != null; |
721 |
slVolume.setEnabled(b); |
slVolume.setEnabled(b); |
722 |
btnSolo.setEnabled(b); |
btnSolo.setEnabled(b); |
723 |
btnMute.setEnabled(b); |
btnMute.setEnabled(b); |
854 |
|
|
855 |
private void |
private void |
856 |
loadInstrument() { |
loadInstrument() { |
857 |
InstrumentChooser dlg = new InstrumentChooser(CC.getMainFrame()); |
JSInstrumentChooser dlg = new JSInstrumentChooser(CC.getMainFrame()); |
858 |
dlg.setVisible(true); |
dlg.setVisible(true); |
859 |
|
|
860 |
if(!dlg.isCancelled()) { |
if(dlg.isCancelled()) return; |
861 |
int idx = dlg.getInstrumentIndex(); |
|
862 |
getModel().loadBackendInstrument(dlg.getFileName(), idx); |
SamplerEngine engine = getChannelInfo().getEngine(); |
863 |
|
if(dlg.getEngine() != null) { |
864 |
|
if(engine == null || !dlg.getEngine().equals(engine.getName())); |
865 |
|
getModel().setBackendEngineType(dlg.getEngine()); |
866 |
} |
} |
867 |
|
|
868 |
|
int idx = dlg.getInstrumentIndex(); |
869 |
|
getModel().loadBackendInstrument(dlg.getInstrumentFile(), idx); |
870 |
|
|
871 |
} |
} |
872 |
} |
} |
873 |
|
|
898 |
private InformationDialog fxSendsDlg = null; |
private InformationDialog fxSendsDlg = null; |
899 |
|
|
900 |
private SamplerChannelModel channelModel = null; |
private SamplerChannelModel channelModel = null; |
901 |
|
private MidiDeviceModel midiDevice = null; |
902 |
|
|
903 |
private boolean update = false; |
private boolean update = false; |
904 |
|
|
905 |
|
private final SamplerListener samplerListener; |
906 |
|
private final MapListListener mapListListener = new MapListListener(); |
907 |
|
|
908 |
private class NoMap { |
private class NoMap { |
909 |
public String |
public String |
910 |
toString() { return "[None]"; } |
toString() { return "[None]"; } |
993 |
channelChanged(SamplerChannelEvent e) { updateChannelProperties(); } |
channelChanged(SamplerChannelEvent e) { updateChannelProperties(); } |
994 |
}); |
}); |
995 |
|
|
996 |
CC.getSamplerModel().addSamplerListener(new SamplerAdapter() { |
samplerListener = new SamplerAdapter() { |
997 |
/** Invoked when the default MIDI instrument map is changed. */ |
/** Invoked when the default MIDI instrument map is changed. */ |
998 |
public void |
public void |
999 |
defaultMapChanged(SamplerEvent e) { |
defaultMapChanged(SamplerEvent e) { |
1000 |
updateCbInstrumentMapToolTipText(); |
updateCbInstrumentMapToolTipText(); |
|
|
|
1001 |
} |
} |
1002 |
}); |
}; |
1003 |
|
|
1004 |
|
CC.getSamplerModel().addSamplerListener(samplerListener); |
1005 |
|
|
1006 |
cbInstrumentMap.addItem(noMap); |
cbInstrumentMap.addItem(noMap); |
1007 |
cbInstrumentMap.addItem(defaultMap); |
cbInstrumentMap.addItem(defaultMap); |
1032 |
CC.getSamplerModel().addMidiDeviceListListener(getHandler()); |
CC.getSamplerModel().addMidiDeviceListListener(getHandler()); |
1033 |
CC.getSamplerModel().addAudioDeviceListListener(getHandler()); |
CC.getSamplerModel().addAudioDeviceListListener(getHandler()); |
1034 |
CC.getSamplerModel().addSamplerChannelListListener(getHandler()); |
CC.getSamplerModel().addSamplerChannelListListener(getHandler()); |
1035 |
|
CC.getSamplerModel().addMidiInstrumentMapListListener(mapListListener); |
|
CC.getSamplerModel().addMidiInstrumentMapListListener(new MapListListener()); |
|
1036 |
|
|
1037 |
btnAudioProps.setToolTipText(i18n.getLabel("ChannelProperties.routing")); |
btnAudioProps.setToolTipText(i18n.getLabel("ChannelProperties.routing")); |
1038 |
|
btnAudioProps.setEnabled(false); |
1039 |
btnAudioProps.addActionListener(new ActionListener() { |
btnAudioProps.addActionListener(new ActionListener() { |
1040 |
public void |
public void |
1041 |
actionPerformed(ActionEvent e) { |
actionPerformed(ActionEvent e) { |
1042 |
SamplerChannel c = getModel().getChannelInfo(); |
SamplerChannel c = getModel().getChannelInfo(); |
1043 |
new ChannelOutputRoutingDlg(CC.getMainFrame(), c).setVisible(true); |
new JSChannelOutputRoutingDlg(CC.getMainFrame(), c).setVisible(true); |
1044 |
|
|
1045 |
} |
} |
1046 |
}); |
}); |
1057 |
FxSendsPane p = new FxSendsPane(getModel()); |
FxSendsPane p = new FxSendsPane(getModel()); |
1058 |
int id = getModel().getChannelId(); |
int id = getModel().getChannelId(); |
1059 |
fxSendsDlg = new InformationDialog(CC.getMainFrame(), p); |
fxSendsDlg = new InformationDialog(CC.getMainFrame(), p); |
1060 |
fxSendsDlg.setTitle(i18n.getLabel("FxSendsPane.title", id)); |
fxSendsDlg.setTitle(i18n.getLabel("FxSendsDlg.title", id)); |
1061 |
fxSendsDlg.setModal(false); |
fxSendsDlg.setModal(false); |
1062 |
fxSendsDlg.showCloseButton(false); |
fxSendsDlg.showCloseButton(false); |
1063 |
fxSendsDlg.setVisible(true); |
fxSendsDlg.setVisible(true); |
1069 |
updateChannelProperties(); |
updateChannelProperties(); |
1070 |
} |
} |
1071 |
|
|
1072 |
|
class FxSendsPane extends JSFxSendsPane { |
1073 |
|
FxSendsPane(SamplerChannelModel model) { |
1074 |
|
super(model); |
1075 |
|
|
1076 |
|
actionAddFxSend.putValue(Action.SMALL_ICON, Res.iconNew16); |
1077 |
|
actionRemoveFxSend.putValue(Action.SMALL_ICON, Res.iconDelete16); |
1078 |
|
} |
1079 |
|
|
1080 |
|
protected JToolBar |
1081 |
|
createToolBar() { |
1082 |
|
JToolBar tb = new JToolBar(); |
1083 |
|
Dimension d = new Dimension(Short.MAX_VALUE, tb.getPreferredSize().height); |
1084 |
|
tb.setMaximumSize(d); |
1085 |
|
tb.setFloatable(false); |
1086 |
|
tb.setAlignmentX(JPanel.RIGHT_ALIGNMENT); |
1087 |
|
|
1088 |
|
tb.add(new ToolbarButton(actionAddFxSend)); |
1089 |
|
tb.add(new ToolbarButton(actionRemoveFxSend)); |
1090 |
|
|
1091 |
|
return tb; |
1092 |
|
} |
1093 |
|
} |
1094 |
|
|
1095 |
private JPanel |
private JPanel |
1096 |
createEnginePane() { |
createEnginePane() { |
1097 |
for(SamplerEngine e : CC.getSamplerModel().getEngines()) cbEngines.addItem(e); |
for(SamplerEngine e : CC.getSamplerModel().getEngines()) cbEngines.addItem(e); |
1278 |
SamplerModel sm = CC.getSamplerModel(); |
SamplerModel sm = CC.getSamplerModel(); |
1279 |
SamplerChannel sc = getModel().getChannelInfo(); |
SamplerChannel sc = getModel().getChannelInfo(); |
1280 |
|
|
1281 |
MidiDeviceModel mm = sm.getMidiDeviceModel(sc.getMidiInputDevice()); |
MidiDeviceModel mm = sm.getMidiDeviceById(sc.getMidiInputDevice()); |
1282 |
AudioDeviceModel am = sm.getAudioDeviceModel(sc.getAudioOutputDevice()); |
AudioDeviceModel am = sm.getAudioDeviceById(sc.getAudioOutputDevice()); |
1283 |
|
|
1284 |
if(isUpdate()) CC.getLogger().warning("Unexpected update state!"); |
if(isUpdate()) CC.getLogger().warning("Unexpected update state!"); |
1285 |
|
|
1291 |
cbEngines.setSelectedItem(sc.getEngine()); |
cbEngines.setSelectedItem(sc.getEngine()); |
1292 |
|
|
1293 |
cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo()); |
cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo()); |
1294 |
|
btnAudioProps.setEnabled(am != null); |
1295 |
} catch(Exception x) { |
} catch(Exception x) { |
1296 |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
1297 |
} |
} |
1298 |
|
|
1299 |
if(sc.getEngine() != null) { |
if(sc.getEngine() != null) { |
1300 |
if(cbInstrumentMap.getItemCount() > 0) cbInstrumentMap.setEnabled(true); |
cbInstrumentMap.setEnabled(true); |
1301 |
|
int id = sc.getMidiInstrumentMapId(); |
1302 |
|
Object o; |
1303 |
|
if(id == -2) o = defaultMap; |
1304 |
|
else if(id == -1) o = noMap; |
1305 |
|
else o = CC.getSamplerModel().getMidiInstrumentMapById(id); |
1306 |
|
|
1307 |
|
if(cbInstrumentMap.getSelectedItem() != o) { |
1308 |
|
cbInstrumentMap.setSelectedItem(o); |
1309 |
|
} |
1310 |
} else { |
} else { |
1311 |
cbInstrumentMap.setSelectedItem(noMap); |
cbInstrumentMap.setSelectedItem(noMap); |
1312 |
cbInstrumentMap.setEnabled(false); |
cbInstrumentMap.setEnabled(false); |
1328 |
try { |
try { |
1329 |
cbMidiDevice.removeAllItems(); |
cbMidiDevice.removeAllItems(); |
1330 |
|
|
1331 |
for(MidiDeviceModel m : sm.getMidiDeviceModels()) |
for(MidiDeviceModel m : sm.getMidiDevices()) |
1332 |
cbMidiDevice.addItem(m.getDeviceInfo()); |
cbMidiDevice.addItem(m.getDeviceInfo()); |
1333 |
|
|
1334 |
MidiDeviceModel mm = sm.getMidiDeviceModel(sc.getMidiInputDevice()); |
MidiDeviceModel mm = sm.getMidiDeviceById(sc.getMidiInputDevice()); |
1335 |
cbMidiDevice.setSelectedItem(mm == null ? null : mm.getDeviceInfo()); |
cbMidiDevice.setSelectedItem(mm == null ? null : mm.getDeviceInfo()); |
1336 |
} catch(Exception x) { |
} catch(Exception x) { |
1337 |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
1353 |
try { |
try { |
1354 |
cbAudioDevice.removeAllItems(); |
cbAudioDevice.removeAllItems(); |
1355 |
|
|
1356 |
for(AudioDeviceModel m : sm.getAudioDeviceModels()) |
for(AudioDeviceModel m : sm.getAudioDevices()) |
1357 |
cbAudioDevice.addItem(m.getDeviceInfo()); |
cbAudioDevice.addItem(m.getDeviceInfo()); |
1358 |
|
|
1359 |
AudioDeviceModel am = sm.getAudioDeviceModel(sc.getAudioOutputDevice()); |
AudioDeviceModel am = sm.getAudioDeviceById(sc.getAudioOutputDevice()); |
1360 |
cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo()); |
cbAudioDevice.setSelectedItem(am == null ? null : am.getDeviceInfo()); |
1361 |
} catch(Exception x) { |
} catch(Exception x) { |
1362 |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
CC.getLogger().log(Level.WARNING, "Unkown error", x); |
1374 |
return; |
return; |
1375 |
} |
} |
1376 |
|
|
1377 |
|
if(midiDevice != null) midiDevice.removeMidiDeviceListener(getHandler()); |
1378 |
|
|
1379 |
cbMidiPort.removeAllItems(); |
cbMidiPort.removeAllItems(); |
1380 |
|
|
1381 |
if(mid == null) { |
if(mid == null) { |
1382 |
|
midiDevice = null; |
1383 |
cbMidiPort.setEnabled(false); |
cbMidiPort.setEnabled(false); |
1384 |
|
|
1385 |
cbMidiChannel.setSelectedItem(null); |
cbMidiChannel.setSelectedItem(null); |
1386 |
cbMidiChannel.setEnabled(false); |
cbMidiChannel.setEnabled(false); |
1387 |
} else { |
} else { |
1388 |
|
midiDevice = CC.getSamplerModel().getMidiDeviceById(mid.getDeviceId()); |
1389 |
|
if(midiDevice != null) midiDevice.addMidiDeviceListener(getHandler()); |
1390 |
|
|
1391 |
cbMidiPort.setEnabled(true); |
cbMidiPort.setEnabled(true); |
1392 |
|
|
1393 |
MidiPort[] ports = mid.getMidiPorts(); |
MidiPort[] ports = mid.getMidiPorts(); |
1429 |
Object oldEngine = getModel().getChannelInfo().getEngine(); |
Object oldEngine = getModel().getChannelInfo().getEngine(); |
1430 |
SamplerEngine newEngine = (SamplerEngine)cbEngines.getSelectedItem(); |
SamplerEngine newEngine = (SamplerEngine)cbEngines.getSelectedItem(); |
1431 |
|
|
1432 |
|
if(newEngine == null) cbEngines.setToolTipText(null); |
1433 |
|
else cbEngines.setToolTipText(newEngine.getDescription()); |
1434 |
|
|
1435 |
if(oldEngine != null) { if(oldEngine.equals(newEngine)) return; } |
if(oldEngine != null) { if(oldEngine.equals(newEngine)) return; } |
1436 |
else if(newEngine == null) return; |
else if(newEngine == null) return; |
1437 |
|
|
1468 |
private Handler |
private Handler |
1469 |
getHandler() { return handler; } |
getHandler() { return handler; } |
1470 |
|
|
1471 |
private class Handler implements MidiDeviceListListener, |
private class Handler implements MidiDeviceListListener, ListListener<AudioDeviceModel>, |
1472 |
ListListener<AudioDeviceModel>, SamplerChannelListListener { |
SamplerChannelListListener, MidiDeviceListener { |
1473 |
|
|
1474 |
/** |
/** |
1475 |
* Invoked when a new MIDI device is created. |
* Invoked when a new MIDI device is created. |
1528 |
channelRemoved(SamplerChannelListEvent e) { |
channelRemoved(SamplerChannelListEvent e) { |
1529 |
// Some cleanup when the channel is removed. |
// Some cleanup when the channel is removed. |
1530 |
if(e.getChannelModel().getChannelId() == channelModel.getChannelId()) { |
if(e.getChannelModel().getChannelId() == channelModel.getChannelId()) { |
1531 |
CC.getSamplerModel().removeMidiDeviceListListener(getHandler()); |
SamplerModel sm = CC.getSamplerModel(); |
1532 |
CC.getSamplerModel().removeAudioDeviceListListener(getHandler()); |
|
1533 |
|
sm.removeMidiDeviceListListener(getHandler()); |
1534 |
|
sm.removeAudioDeviceListListener(getHandler()); |
1535 |
|
sm.removeMidiInstrumentMapListListener(mapListListener); |
1536 |
|
sm.removeSamplerListener(samplerListener); |
1537 |
|
sm.removeSamplerChannelListListener(getHandler()); |
1538 |
|
|
1539 |
|
if(midiDevice != null) { |
1540 |
|
midiDevice.removeMidiDeviceListener(getHandler()); |
1541 |
|
} |
1542 |
|
} |
1543 |
|
} |
1544 |
|
|
1545 |
|
public void |
1546 |
|
settingsChanged(MidiDeviceEvent e) { |
1547 |
|
if(isUpdate()) { |
1548 |
|
CC.getLogger().warning("Invalid update state"); |
1549 |
|
return; |
1550 |
} |
} |
1551 |
|
|
1552 |
|
setUpdate(true); |
1553 |
|
int idx = cbMidiPort.getSelectedIndex(); |
1554 |
|
MidiInputDevice d = e.getMidiDeviceModel().getDeviceInfo(); |
1555 |
|
|
1556 |
|
cbMidiPort.removeAllItems(); |
1557 |
|
for(MidiPort port : d.getMidiPorts()) cbMidiPort.addItem(port); |
1558 |
|
|
1559 |
|
if(idx >= cbMidiPort.getModel().getSize()) idx = 0; |
1560 |
|
|
1561 |
|
setUpdate(false); |
1562 |
|
|
1563 |
|
if(cbMidiPort.getModel().getSize() > 0) cbMidiPort.setSelectedIndex(idx); |
1564 |
} |
} |
1565 |
} |
} |
1566 |
|
|
1568 |
/** Invoked when a new MIDI instrument map is added to a list. */ |
/** Invoked when a new MIDI instrument map is added to a list. */ |
1569 |
public void |
public void |
1570 |
entryAdded(ListEvent<MidiInstrumentMap> e) { |
entryAdded(ListEvent<MidiInstrumentMap> e) { |
|
//cbInstrumentMap.addItem(e.getEntry()); |
|
1571 |
cbInstrumentMap.insertItemAt(e.getEntry(), cbInstrumentMap.getItemCount()); |
cbInstrumentMap.insertItemAt(e.getEntry(), cbInstrumentMap.getItemCount()); |
1572 |
boolean b = getModel().getChannelInfo().getEngine() != null; |
boolean b = getModel().getChannelInfo().getEngine() != null; |
1573 |
if(b && !cbInstrumentMap.isEnabled()) cbInstrumentMap.setEnabled(true); |
if(b && !cbInstrumentMap.isEnabled()) cbInstrumentMap.setEnabled(true); |