/[svn]/jsampler/trunk/src/org/jsampler/view/classic/MidiInstrumentMapsPage.java
ViewVC logotype

Annotation of /jsampler/trunk/src/org/jsampler/view/classic/MidiInstrumentMapsPage.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1285 - (hide annotations) (download)
Fri Aug 10 19:55:03 2007 UTC (16 years, 8 months ago) by iliev
File size: 9749 byte(s)
* Updated to version 0.6a. The Fantasia distribution is now
  capable of controlling all features available in LinuxSampler

1 iliev 1144 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4     * Copyright (C) 2005-2006 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.classic;
24    
25 iliev 1285 import java.awt.BorderLayout;
26 iliev 1144 import java.awt.Dimension;
27    
28     import java.awt.event.ActionEvent;
29     import java.awt.event.ActionListener;
30    
31     import javax.swing.AbstractAction;
32     import javax.swing.Action;
33     import javax.swing.BorderFactory;
34     import javax.swing.Box;
35     import javax.swing.BoxLayout;
36     import javax.swing.JComboBox;
37     import javax.swing.JPanel;
38     import javax.swing.JScrollPane;
39     import javax.swing.JToolBar;
40    
41 iliev 1285 import javax.swing.tree.DefaultTreeCellRenderer;
42 iliev 1144
43     import net.sf.juife.LinkButton;
44     import net.sf.juife.NavigationPage;
45    
46     import org.jsampler.CC;
47     import org.jsampler.MidiInstrument;
48     import org.jsampler.MidiInstrumentMap;
49    
50     import org.jsampler.event.ListEvent;
51     import org.jsampler.event.ListListener;
52     import org.jsampler.event.MidiInstrumentMapEvent;
53     import org.jsampler.event.MidiInstrumentMapListener;
54 iliev 1285 import org.jsampler.view.std.JSEditMidiInstrumentDlg;
55 iliev 1144
56 iliev 1285 import org.jsampler.view.std.JSAddMidiInstrumentMapDlg;
57     import org.jsampler.view.std.JSMidiInstrumentTree;
58     import org.jsampler.view.std.JSMidiInstrumentsPane;
59    
60 iliev 1144 import org.linuxsampler.lscp.MidiInstrumentInfo;
61    
62 iliev 1285 import static org.jsampler.view.classic.A4n.a4n;
63 iliev 1144 import static org.jsampler.view.classic.ClassicI18n.i18n;
64    
65    
66     /**
67     *
68     * @author Grigor Iliev
69     */
70     public class MidiInstrumentMapsPage extends NavigationPage {
71     private final JToolBar tbMaps = new JToolBar();
72    
73     private final EditMap actionEditMap = new EditMap();
74     private final RemoveMap actionRemoveMap = new RemoveMap();
75    
76     private final ToolbarButton btnAddMap = new ToolbarButton(A4n.addMidiInstrumentMap);
77     private final ToolbarButton btnEditMap = new ToolbarButton(actionEditMap);
78     private final ToolbarButton btnRemoveMap = new ToolbarButton(actionRemoveMap);
79 iliev 1285 private final ToolbarButton btnExportMaps = new ToolbarButton(a4n.exportMidiInstrumentMaps);
80 iliev 1144 //private final ToolbarButton btnCloseMapBar = new ToolbarButton();
81    
82     //private final ToolbarButton btnCloseInstrumentBar = new ToolbarButton();
83    
84     private final JComboBox cbMaps = new JComboBox();
85 iliev 1285 private final MidiInstrumentsPane midiInstrumentsPane = new MidiInstrumentsPane();
86 iliev 1144
87     /** Creates a new instance of MidiInstrumentMapsPage */
88     public
89     MidiInstrumentMapsPage() {
90     setTitle(i18n.getLabel("MidiInstrumentMapsPage.title"));
91     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
92    
93     /*btnCloseMapBar.setIcon(Res.iconClose8);
94     btnCloseMapBar.setMargin(new java.awt.Insets(0, 0, 0, 0));
95     btnCloseMapBar.addActionListener(new ActionListener() {
96     public void
97     actionPerformed(ActionEvent e) {
98     tbMaps.setVisible(false);
99     validate();
100     repaint();
101     }
102     });
103    
104    
105     btnCloseInstrumentBar.setIcon(Res.iconClose8);
106     btnCloseInstrumentBar.setMargin(new java.awt.Insets(0, 0, 0, 0));
107     btnCloseInstrumentBar.addActionListener(new ActionListener() {
108     public void
109     actionPerformed(ActionEvent e) {
110     tbInstruments.setVisible(false);
111     validate();
112     repaint();
113     }
114     });*/
115    
116    
117     tbMaps.add(btnAddMap);
118     tbMaps.add(btnEditMap);
119     tbMaps.add(btnRemoveMap);
120 iliev 1204 tbMaps.addSeparator();
121     tbMaps.add(btnExportMaps);
122 iliev 1144
123     /*tbMaps.add(Box.createHorizontalGlue());
124     tbMaps.add(btnCloseMapBar);*/
125    
126     Dimension d = new Dimension(Short.MAX_VALUE, tbMaps.getPreferredSize().height);
127     tbMaps.setMaximumSize(d);
128     tbMaps.setFloatable(false);
129     tbMaps.setAlignmentX(LEFT_ALIGNMENT);
130    
131     add(tbMaps);
132    
133     JPanel p = new JPanel();
134     p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
135     p.setAlignmentX(LEFT_ALIGNMENT);
136     p.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
137    
138     cbMaps.addActionListener(new ActionListener() {
139     public void
140     actionPerformed(ActionEvent e) { mapChanged(); }
141     });
142    
143     for(MidiInstrumentMap m : CC.getSamplerModel().getMidiInstrumentMaps()) {
144     cbMaps.addItem(m);
145     m.addMidiInstrumentMapListener(getHandler());
146     }
147    
148     cbMaps.setEnabled(cbMaps.getItemCount() > 0);
149    
150     d = new Dimension(Short.MAX_VALUE, cbMaps.getPreferredSize().height);
151     cbMaps.setMaximumSize(d);
152    
153     CC.getSamplerModel().addMidiInstrumentMapListListener(getHandler());
154    
155     p.add(cbMaps);
156     p.add(Box.createRigidArea(new Dimension(0, 12)));
157     add(p);
158    
159     /*tbInstruments.add(Box.createHorizontalGlue());
160     tbInstruments.add(btnCloseInstrumentBar); */
161    
162 iliev 1285 add(midiInstrumentsPane);
163 iliev 1144
164     boolean b = cbMaps.getItemCount() != 0;
165     actionEditMap.setEnabled(b);
166     actionRemoveMap.setEnabled(b);
167     A4n.removeMidiInstrumentMap.setEnabled(b);
168 iliev 1285 A4n.addMidiInstrumentWizard.setEnabled(b);
169 iliev 1144 }
170    
171     private void
172     mapChanged() {
173     MidiInstrumentMap map = (MidiInstrumentMap)cbMaps.getSelectedItem();
174 iliev 1285 midiInstrumentsPane.setMidiInstrumentMap(map);
175 iliev 1144
176     boolean b = cbMaps.getItemCount() != 0;
177     actionEditMap.setEnabled(b);
178     actionRemoveMap.setEnabled(b);
179     A4n.removeMidiInstrumentMap.setEnabled(b);
180 iliev 1285 A4n.addMidiInstrumentWizard.setEnabled(b);
181 iliev 1144 }
182    
183 iliev 1285 class MidiInstrumentsPane extends JSMidiInstrumentsPane {
184     private final JToolBar tbInstruments = new JToolBar();
185    
186     private final ToolbarButton btnAddInstrument =
187     new ToolbarButton(A4n.addMidiInstrumentWizard);
188    
189     private final ToolbarButton btnEditInstrument
190     = new ToolbarButton(actionEditInstrument);
191    
192     private final ToolbarButton btnRemoveInstrument = new ToolbarButton(actionRemove);
193    
194     MidiInstrumentsPane() {
195     actionEditInstrument.putValue(Action.SMALL_ICON, Res.iconEdit16);
196     actionRemove.putValue(Action.SMALL_ICON, Res.iconDelete16);
197    
198     removeAll();
199    
200     tbInstruments.add(btnAddInstrument);
201     tbInstruments.add(btnEditInstrument);
202     tbInstruments.add(btnRemoveInstrument);
203    
204     Dimension d;
205     d = new Dimension(Short.MAX_VALUE, tbInstruments.getPreferredSize().height);
206     tbInstruments.setMaximumSize(d);
207     tbInstruments.setFloatable(false);
208    
209     add(tbInstruments, BorderLayout.NORTH);
210     JScrollPane sp = new JScrollPane(midiInstrumentTree);
211    
212     DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
213     renderer.setClosedIcon(Res.iconFolder16);
214     renderer.setOpenIcon(Res.iconFolderOpen16);
215     renderer.setLeafIcon(Res.iconInstrument16);
216    
217     midiInstrumentTree.setCellRenderer(renderer);
218    
219     JPanel p = new JPanel();
220     p.setLayout(new BorderLayout());
221     p.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
222    
223     p.add(sp);
224    
225     add(p);
226    
227     setAlignmentX(LEFT_ALIGNMENT);
228     }
229     }
230 iliev 1144
231     private class EditMap extends AbstractAction {
232     EditMap() {
233     super(i18n.getLabel("MidiInstrumentMapsPage.editMap"));
234    
235     String s = i18n.getLabel("MidiInstrumentMapsPage.editMap.tt");
236     putValue(SHORT_DESCRIPTION, s);
237     putValue(Action.SMALL_ICON, Res.iconEdit16);
238     }
239    
240     public void
241     actionPerformed(ActionEvent e) {
242     MidiInstrumentMap map = (MidiInstrumentMap)cbMaps.getSelectedItem();
243     int id = map.getMapId();
244 iliev 1285 JSAddMidiInstrumentMapDlg dlg = new JSAddMidiInstrumentMapDlg();
245 iliev 1144 dlg.setTitle(i18n.getLabel("MidiInstrumentMapsPage.editMap"));
246     dlg.setMapName(map.getName());
247     dlg.setVisible(true);
248     if(dlg.isCancelled()) return;
249    
250     map.setName(dlg.getMapName());
251     CC.getSamplerModel().setBackendMidiInstrumentMapName(id, dlg.getMapName());
252     }
253     }
254    
255     private class RemoveMap extends AbstractAction {
256     RemoveMap() {
257     super(i18n.getMenuLabel("actions.midiInstruments.removeMap"));
258    
259     String s = i18n.getMenuLabel("actions.midiInstruments.removeMap.tt");
260     putValue(SHORT_DESCRIPTION, s);
261     putValue(Action.SMALL_ICON, Res.iconDelete16);
262     }
263    
264     public void
265     actionPerformed(ActionEvent e) {
266     MidiInstrumentMap map = (MidiInstrumentMap)cbMaps.getSelectedItem();
267     RemoveMidiInstrumentMapDlg dlg = new RemoveMidiInstrumentMapDlg(map);
268     dlg.setVisible(true);
269     if(dlg.isCancelled()) return;
270     int id = dlg.getSelectedMap().getMapId();
271     CC.getSamplerModel().removeBackendMidiInstrumentMap(id);
272     }
273     }
274    
275     private final Handler handler = new Handler();
276    
277     private Handler
278     getHandler() { return handler; }
279    
280     private class Handler implements ListListener<MidiInstrumentMap>,
281 iliev 1285 MidiInstrumentMapListener {
282 iliev 1144
283     /** Invoked when a new map is added. */
284     public void
285     entryAdded(ListEvent<MidiInstrumentMap> e) {
286     MidiInstrumentMap map = e.getEntry();
287     if(cbMaps.getItemCount() == 0) cbMaps.setEnabled(true);
288     cbMaps.addItem(map);
289     cbMaps.setSelectedItem(map);
290     map.addMidiInstrumentMapListener(getHandler());
291     }
292    
293     /** Invoked when a map is removed. */
294     public void
295     entryRemoved(ListEvent<MidiInstrumentMap> e) {
296     cbMaps.removeItem(e.getEntry());
297     if(cbMaps.getItemCount() == 0) cbMaps.setEnabled(false);
298     e.getEntry().removeMidiInstrumentMapListener(getHandler());
299     }
300    
301     /** Invoked when the name of MIDI instrument map is changed. */
302     public void
303     nameChanged(MidiInstrumentMapEvent e) {
304     cbMaps.repaint();
305     }
306    
307     /** Invoked when an instrument is added to a MIDI instrument map. */
308     public void instrumentAdded(MidiInstrumentMapEvent e) { }
309    
310     /** Invoked when an instrument is removed from a MIDI instrument map. */
311     public void instrumentRemoved(MidiInstrumentMapEvent e) { }
312     }
313     }

  ViewVC Help
Powered by ViewVC