Rev 272 | Rev 660 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
213 | tk | 1 | /* |
2 | * @(#)SIDV2librarian.java beta1 2008/01/21 |
||
3 | * |
||
4 | * Copyright (C) 2008 Rutger Vlek (rutgervlek@hotmail.com) |
||
5 | * |
||
6 | * This application is free software; you can redistribute it and/or modify |
||
7 | * it under the terms of the GNU General Public License as published by |
||
8 | * the Free Software Foundation; either version 2 of the License, or |
||
9 | * (at your option) any later version. |
||
10 | * |
||
11 | * This application is distributed in the hope that it will be useful, |
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
14 | * GNU General Public License for more details. |
||
15 | * |
||
16 | * You should have received a copy of the GNU General Public License |
||
17 | * along with this application; if not, write to the Free Software |
||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||
19 | */ |
||
20 | |||
21 | package org.midibox.sidedit.gui.drum; |
||
22 | |||
23 | import java.awt.BorderLayout; |
||
24 | import java.util.Vector; |
||
628 | adamjking | 25 | |
213 | tk | 26 | import javax.swing.BorderFactory; |
27 | import javax.swing.JComboBox; |
||
28 | import javax.swing.JPanel; |
||
29 | import javax.swing.JSlider; |
||
30 | import javax.swing.JTabbedPane; |
||
31 | import javax.swing.JToggleButton; |
||
32 | |||
33 | import org.midibox.sidedit.SIDEditController; |
||
34 | import org.midibox.sidedit.SIDSysexParameterControl; |
||
628 | adamjking | 35 | import org.midibox.sidedit.gui.FilterGUI; |
36 | import org.midibox.sidedit.gui.GlobalGUI; |
||
37 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlCombo; |
||
38 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlGUI; |
||
39 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlKnob; |
||
40 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlLFOSelect; |
||
41 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlSlider; |
||
42 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlToggleButton; |
||
43 | import org.midibox.sidedit.gui.controls.SIDSysexParameterControlWaveSelect; |
||
213 | tk | 44 | import org.midibox.utils.gui.ImageLoader; |
45 | import org.midibox.utils.gui.Knob; |
||
46 | import org.midibox.utils.gui.MyButtonUI; |
||
47 | |||
48 | public class DrumGUI extends JPanel { |
||
49 | private Vector GUIs, EXT_L, EXT_R; |
||
272 | rutgerv | 50 | private SIDEditController sidEditController; |
628 | adamjking | 51 | |
52 | public DrumGUI(SIDEditController sidEditController) { |
||
272 | rutgerv | 53 | this.sidEditController = sidEditController; |
213 | tk | 54 | setLayout(new BorderLayout()); |
628 | adamjking | 55 | |
213 | tk | 56 | GUIs = createGUIs(sidEditController); |
57 | createLinkGroups(); |
||
58 | JTabbedPane tabbedPane = new JTabbedPane(); |
||
628 | adamjking | 59 | |
60 | JPanel t1 = new GlobalGUI((Vector) GUIs.elementAt(0), (Vector) GUIs |
||
61 | .elementAt(1)); |
||
62 | JPanel t2 = new DrumInstrumentGUI((Vector) GUIs.elementAt(4), false); |
||
63 | JPanel t3 = new DrumInstrumentGUI((Vector) GUIs.elementAt(4), true); |
||
64 | JPanel t4 = new FilterGUI((Vector) GUIs.elementAt(2), (Vector) GUIs |
||
65 | .elementAt(3)); |
||
66 | JPanel t5 = new SequencerGUI((Vector) GUIs.elementAt(5), (Vector) GUIs |
||
67 | .elementAt(6)); |
||
68 | |||
213 | tk | 69 | tabbedPane.addTab("Global", t1); |
70 | tabbedPane.addTab("Drum Instr.1-8", t2); |
||
71 | tabbedPane.addTab("Drum Instr.9-16", t3); |
||
628 | adamjking | 72 | tabbedPane.addTab("Filter", t4); |
213 | tk | 73 | tabbedPane.addTab("Sequencer", t5); |
628 | adamjking | 74 | |
213 | tk | 75 | add(tabbedPane, BorderLayout.NORTH); |
76 | setOpaque(false); |
||
77 | setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); |
||
272 | rutgerv | 78 | stereoLink(true); |
213 | tk | 79 | } |
628 | adamjking | 80 | |
213 | tk | 81 | protected Vector createGUIs(SIDEditController sidEditController) { |
628 | adamjking | 82 | Vector v_in = (Vector) sidEditController.getEngine(); |
213 | tk | 83 | Vector v_out = new Vector(); |
84 | for (int b = 0; b < v_in.size(); b++) { |
||
628 | adamjking | 85 | v_out.addElement(createGuiElements((Vector) v_in.elementAt(b))); |
213 | tk | 86 | } |
87 | return v_out; |
||
88 | } |
||
628 | adamjking | 89 | |
213 | tk | 90 | protected Vector createGuiElements(Vector v) { |
91 | // Create controller GUI's |
||
92 | Vector midiParameterGUIs = new Vector(); |
||
93 | for (int c = 0; c < v.size(); c++) { |
||
628 | adamjking | 94 | SIDSysexParameterControl midiParameter = (SIDSysexParameterControl) v |
95 | .elementAt(c); |
||
213 | tk | 96 | switch (midiParameter.getType()) { |
628 | adamjking | 97 | case 0: |
98 | // Create knob |
||
99 | Knob knob = new Knob(ImageLoader |
||
100 | .getImageIcon("plasticknob_strip.png")); |
||
101 | midiParameterGUIs.add(new SIDSysexParameterControlKnob( |
||
102 | midiParameter, knob, true, BorderLayout.SOUTH, true, |
||
103 | true)); |
||
104 | break; |
||
105 | case 1: |
||
106 | // Create toggle button |
||
107 | JToggleButton button = new JToggleButton(); |
||
108 | button.setUI(new MyButtonUI(ImageLoader |
||
109 | .getImageIcon("button_on.png"), ImageLoader |
||
110 | .getImageIcon("button.png"))); |
||
111 | midiParameterGUIs.add(new SIDSysexParameterControlToggleButton( |
||
112 | midiParameter, button, false, true, BorderLayout.SOUTH, |
||
113 | true, false)); |
||
114 | break; |
||
115 | case 2: |
||
116 | // Create simple toggle button |
||
117 | JToggleButton simpleButton = new JToggleButton(); |
||
118 | simpleButton.setUI(new MyButtonUI(ImageLoader |
||
119 | .getImageIcon("button_on.png"), ImageLoader |
||
120 | .getImageIcon("button.png"))); |
||
121 | midiParameterGUIs.add(new SIDSysexParameterControlToggleButton( |
||
122 | midiParameter, simpleButton, false, false, |
||
123 | BorderLayout.SOUTH, true, false)); |
||
124 | break; |
||
125 | case 3: |
||
126 | // Create slider |
||
127 | JSlider slider = new JSlider(); |
||
128 | midiParameterGUIs.add(new SIDSysexParameterControlSlider( |
||
129 | midiParameter, slider, true, BorderLayout.SOUTH, true, |
||
130 | true)); |
||
131 | break; |
||
132 | case 4: |
||
133 | // Create waveform selector (Voice) |
||
134 | midiParameterGUIs.add(new SIDSysexParameterControlWaveSelect( |
||
135 | midiParameter, true, BorderLayout.NORTH, false, false)); |
||
136 | break; |
||
137 | case 5: |
||
138 | // Create waveform selector (LFO) |
||
139 | midiParameterGUIs.add(new SIDSysexParameterControlLFOSelect( |
||
140 | midiParameter, true, BorderLayout.NORTH, false, false)); |
||
141 | break; |
||
142 | case 6: |
||
143 | // Normal combo |
||
144 | JComboBox combo = new JComboBox(midiParameter |
||
145 | .getSparseValAlias()); |
||
146 | midiParameterGUIs.add(new SIDSysexParameterControlCombo( |
||
147 | midiParameter, combo, true, BorderLayout.NORTH, false, |
||
148 | false)); |
||
149 | break; |
||
150 | case 7: |
||
151 | // Simple rotary |
||
152 | Knob knob1 = new Knob(ImageLoader |
||
153 | .getImageIcon("plasticknob_strip.png")); |
||
154 | midiParameterGUIs.add(new SIDSysexParameterControlKnob( |
||
155 | midiParameter, knob1, false, BorderLayout.SOUTH, true, |
||
156 | true)); |
||
157 | break; |
||
158 | default: |
||
159 | midiParameterGUIs.add(midiParameter); |
||
160 | System.out.println("Unknown controller type!"); |
||
161 | } |
||
213 | tk | 162 | } |
163 | return midiParameterGUIs; |
||
628 | adamjking | 164 | } |
165 | |||
213 | tk | 166 | public void createLinkGroups() { |
628 | adamjking | 167 | // Create vector of pointers to left and right parameters (for linking |
168 | // only) |
||
213 | tk | 169 | EXT_L = new Vector(); |
170 | EXT_R = new Vector(); |
||
171 | for (int c = 0; c < 8; c++) { |
||
628 | adamjking | 172 | EXT_L.add(((Vector) GUIs.elementAt(1)).elementAt(2 * c)); |
173 | EXT_R.add(((Vector) GUIs.elementAt(1)).elementAt((2 * c) + 1)); |
||
213 | tk | 174 | } |
175 | } |
||
628 | adamjking | 176 | |
272 | rutgerv | 177 | public void stereoLink(boolean b) { |
178 | if (b) { |
||
179 | sidEditController.getPatch().setStereoLink(true); |
||
628 | adamjking | 180 | linkPar(EXT_L, EXT_R); // Link external outputs 2 by 2 |
181 | linkPar((Vector) GUIs.elementAt(2), (Vector) GUIs.elementAt(3)); // Link |
||
182 | // filter |
||
183 | // left |
||
184 | // & |
||
185 | // right |
||
272 | rutgerv | 186 | } else { |
187 | sidEditController.getPatch().setStereoLink(false); |
||
628 | adamjking | 188 | unlinkPar(EXT_L, EXT_R); // Unlink external outputs 2 by 2 |
189 | unlinkPar((Vector) GUIs.elementAt(2), (Vector) GUIs.elementAt(3)); // Link |
||
190 | // filter |
||
191 | // left |
||
192 | // & |
||
193 | // right |
||
272 | rutgerv | 194 | } |
213 | tk | 195 | } |
628 | adamjking | 196 | |
213 | tk | 197 | protected void linkPar(Vector left, Vector right) { |
198 | for (int c = 0; c < left.size(); c++) { |
||
628 | adamjking | 199 | SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left |
200 | .elementAt(c); |
||
201 | SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right |
||
202 | .elementAt(c); |
||
213 | tk | 203 | g1.addMidiParameter(g2.getMidiParameter()); |
204 | g2.addMidiParameter(g1.getMidiParameter()); |
||
205 | } |
||
206 | } |
||
628 | adamjking | 207 | |
213 | tk | 208 | protected void unlinkPar(Vector left, Vector right) { |
209 | for (int c = 0; c < left.size(); c++) { |
||
628 | adamjking | 210 | SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left |
211 | .elementAt(c); |
||
212 | SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right |
||
213 | .elementAt(c); |
||
213 | tk | 214 | g1.removeMidiParameter(g2.getMidiParameter()); |
215 | g2.removeMidiParameter(g1.getMidiParameter()); |
||
216 | } |
||
217 | } |
||
218 | } |