32 |
import java.awt.event.MouseAdapter; |
import java.awt.event.MouseAdapter; |
33 |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseEvent; |
34 |
|
|
35 |
|
import java.util.LinkedList; |
36 |
import java.util.Vector; |
import java.util.Vector; |
37 |
|
|
38 |
import javax.swing.AbstractAction; |
import javax.swing.AbstractAction; |
47 |
import javax.swing.JPopupMenu; |
import javax.swing.JPopupMenu; |
48 |
import javax.swing.JTable; |
import javax.swing.JTable; |
49 |
import javax.swing.KeyStroke; |
import javax.swing.KeyStroke; |
|
import javax.swing.SwingUtilities; |
|
50 |
|
|
51 |
import javax.swing.event.ChangeEvent; |
import javax.swing.event.ChangeEvent; |
52 |
import javax.swing.event.ChangeListener; |
import javax.swing.event.ChangeListener; |
77 |
import org.jsampler.event.SamplerChannelListListener; |
import org.jsampler.event.SamplerChannelListListener; |
78 |
|
|
79 |
import org.jsampler.task.InstrumentsDb; |
import org.jsampler.task.InstrumentsDb; |
80 |
|
import org.jsampler.task.Midi; |
81 |
|
|
82 |
import org.jsampler.view.DbClipboard; |
import org.jsampler.view.DbClipboard; |
83 |
import org.jsampler.view.DbDirectoryTreeNode; |
import org.jsampler.view.DbDirectoryTreeNode; |
84 |
import org.jsampler.view.InstrumentsDbTableModel; |
import org.jsampler.view.InstrumentsDbTableModel; |
85 |
|
|
|
import org.jsampler.view.JSChannelsPane; |
|
|
|
|
86 |
import org.linuxsampler.lscp.DbDirectoryInfo; |
import org.linuxsampler.lscp.DbDirectoryInfo; |
87 |
import org.linuxsampler.lscp.DbInstrumentInfo; |
import org.linuxsampler.lscp.DbInstrumentInfo; |
88 |
|
import org.linuxsampler.lscp.MidiInstrumentEntry; |
89 |
|
import org.linuxsampler.lscp.MidiInstrumentInfo; |
90 |
|
|
91 |
import static org.jsampler.view.InstrumentsDbTableModel.ColumnType; |
import static org.jsampler.view.InstrumentsDbTableModel.ColumnType; |
92 |
import static org.jsampler.view.std.StdI18n.i18n; |
import static org.jsampler.view.std.StdI18n.i18n; |
695 |
|
|
696 |
JSAddMidiInstrumentDlg dlg; |
JSAddMidiInstrumentDlg dlg; |
697 |
Window w = JuifeUtils.getWindow(JSInstrumentsDbTable.this); |
Window w = JuifeUtils.getWindow(JSInstrumentsDbTable.this); |
698 |
|
|
699 |
|
boolean b = instruments.length > 1; |
700 |
|
boolean apply2all = false; |
701 |
|
float volume = 1.0f; |
702 |
|
MidiInstrumentInfo.LoadMode loadMode = MidiInstrumentInfo.LoadMode.DEFAULT; |
703 |
|
final LinkedList<MidiInstrumentInfo> instrs = new LinkedList<MidiInstrumentInfo>(); |
704 |
|
|
705 |
for(DbInstrumentInfo i : instruments) { |
for(DbInstrumentInfo i : instruments) { |
706 |
if(w instanceof Dialog) { |
if(!apply2all) { |
707 |
dlg = new JSAddMidiInstrumentDlg((Dialog)w, midiMap, i); |
if(w instanceof Dialog) { |
708 |
} else if(w instanceof Frame) { |
dlg = new JSAddMidiInstrumentDlg((Dialog)w, midiMap, i, b); |
709 |
dlg = new JSAddMidiInstrumentDlg((Frame)w, midiMap, i); |
} else if(w instanceof Frame) { |
710 |
|
dlg = new JSAddMidiInstrumentDlg((Frame)w, midiMap, i, b); |
711 |
|
} else { |
712 |
|
dlg = new JSAddMidiInstrumentDlg((Frame)null, midiMap, i, b); |
713 |
|
} |
714 |
|
|
715 |
|
dlg.setVisible(true); |
716 |
|
if(dlg.isApplyToAllSelected()) { |
717 |
|
if(dlg.isCancelled()) break; |
718 |
|
|
719 |
|
apply2all = true; |
720 |
|
volume = dlg.getVolume(); |
721 |
|
loadMode = dlg.getLoadMode(); |
722 |
|
} |
723 |
} else { |
} else { |
724 |
dlg = new JSAddMidiInstrumentDlg((Frame)null, midiMap, i); |
final MidiInstrumentInfo instrInfo = new MidiInstrumentInfo(); |
725 |
|
instrInfo.setName(i.getName()); |
726 |
|
instrInfo.setFilePath(i.getFilePath()); |
727 |
|
instrInfo.setInstrumentIndex(i.getInstrumentIndex()); |
728 |
|
instrInfo.setEngine(i.getEngine()); |
729 |
|
instrInfo.setVolume(volume); |
730 |
|
instrInfo.setLoadMode(loadMode); |
731 |
|
|
732 |
|
instrs.add(instrInfo); |
733 |
} |
} |
|
|
|
|
dlg.setVisible(true); |
|
734 |
} |
} |
735 |
|
|
736 |
|
if(instrs.isEmpty()) return; |
737 |
|
|
738 |
|
addToMap(instrs); |
739 |
|
} |
740 |
|
|
741 |
|
private void |
742 |
|
addToMap(final LinkedList<MidiInstrumentInfo> instrs) { |
743 |
|
CC.scheduleInTaskQueue(new Runnable() { |
744 |
|
public void |
745 |
|
run() { addToMap0(instrs); } |
746 |
|
}); |
747 |
|
} |
748 |
|
|
749 |
|
private void |
750 |
|
addToMap0(final LinkedList<MidiInstrumentInfo> instrs) { |
751 |
|
if(instrs.isEmpty()) return; |
752 |
|
|
753 |
|
MidiInstrumentEntry e = midiMap.getAvailableEntry(); |
754 |
|
if(e == null) { |
755 |
|
CC.getLogger().info("No available MIDI entry"); |
756 |
|
return; |
757 |
|
} |
758 |
|
|
759 |
|
int id = midiMap.getMapId(); |
760 |
|
int b = e.getMidiBank(); |
761 |
|
int p = e.getMidiProgram(); |
762 |
|
final Midi.MapInstrument t = new Midi.MapInstrument(id, b, p, instrs.pop()); |
763 |
|
|
764 |
|
t.addTaskListener(new TaskListener() { |
765 |
|
public void |
766 |
|
taskPerformed(TaskEvent e) { |
767 |
|
CC.scheduleTask(new Midi.UpdateInstruments(midiMap.getMapId())); |
768 |
|
addToMap(instrs); |
769 |
|
} |
770 |
|
}); |
771 |
|
|
772 |
|
CC.getTaskQueue().add(t); |
773 |
} |
} |
774 |
} |
} |
775 |
|
|