Subversion Repositories svn.mios

Rev

Rev 628 | Rev 666 | 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.bassline;
22
 
23
import java.awt.BorderLayout;
660 adamjking 24
import java.awt.Color;
213 tk 25
import java.util.Vector;
628 adamjking 26
 
213 tk 27
import javax.swing.BorderFactory;
28
import javax.swing.JComboBox;
29
import javax.swing.JPanel;
30
import javax.swing.JSlider;
31
import javax.swing.JTabbedPane;
32
import javax.swing.JToggleButton;
628 adamjking 33
 
213 tk 34
import org.midibox.sidedit.SIDEditController;
35
import org.midibox.sidedit.SIDSysexParameterControl;
628 adamjking 36
import org.midibox.sidedit.gui.FilterGUI;
37
import org.midibox.sidedit.gui.GlobalGUI;
660 adamjking 38
import org.midibox.sidedit.gui.MBSIDV2EditorTabbedPaneUI;
628 adamjking 39
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlCombo;
40
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlGUI;
41
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlKnob;
42
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlLFOSelect;
43
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlRadio;
44
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlSlider;
45
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlToggleButton;
46
import org.midibox.sidedit.gui.controls.SIDSysexParameterControlWaveSelect;
213 tk 47
import org.midibox.utils.gui.ImageLoader;
48
import org.midibox.utils.gui.Knob;
49
import org.midibox.utils.gui.MyButtonUI;
50
 
51
public class BasslineGUI extends JPanel {
52
    private Vector GUIs, EXT_L, EXT_R;
272 rutgerv 53
    private SIDEditController sidEditController;
628 adamjking 54
 
55
    public BasslineGUI(SIDEditController sidEditController) {
272 rutgerv 56
        this.sidEditController = sidEditController;
213 tk 57
        setLayout(new BorderLayout());
628 adamjking 58
 
213 tk 59
        GUIs = createGUIs(sidEditController);
60
        createLinkGroups();
628 adamjking 61
        JTabbedPane tabbedPane = new JTabbedPane();
62
        JPanel t1 = new GlobalGUI((Vector) GUIs.elementAt(0), (Vector) GUIs
63
                .elementAt(1));
64
        JPanel t2 = new OscillatorGUI((Vector) GUIs.elementAt(4), (Vector) GUIs
65
                .elementAt(5), (Vector) GUIs.elementAt(6), (Vector) GUIs
66
                .elementAt(7));
67
        JPanel t3 = new FilterGUI((Vector) GUIs.elementAt(2), (Vector) GUIs
68
                .elementAt(3));
69
        JPanel t4 = new LfoGUI((Vector) GUIs.elementAt(8), (Vector) GUIs
70
                .elementAt(9), (Vector) GUIs.elementAt(10), (Vector) GUIs
71
                .elementAt(11));
72
        JPanel t6 = new SequencerGUI((Vector) GUIs.elementAt(14), (Vector) GUIs
73
                .elementAt(12), (Vector) GUIs.elementAt(13));
74
        JPanel t7 = new ArpGUI((Vector) GUIs.elementAt(4), (Vector) GUIs
75
                .elementAt(5));
76
 
213 tk 77
        tabbedPane.addTab("Global", t1);
78
        tabbedPane.addTab("Oscillator", t2);
79
        tabbedPane.addTab("Filter", t3);
628 adamjking 80
        tabbedPane.addTab("LFO/ENV", t4);
81
        tabbedPane.addTab("Sequencer", t6);
213 tk 82
        tabbedPane.addTab("Arpeggiator", t7);
628 adamjking 83
 
660 adamjking 84
        tabbedPane.setUI(new MBSIDV2EditorTabbedPaneUI(
85
                new Color(245, 245, 245), new Color(200, 200, 200)));
86
 
213 tk 87
        add(tabbedPane, BorderLayout.NORTH);
88
        setOpaque(false);
89
        setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
272 rutgerv 90
        stereoLink(true);
213 tk 91
    }
628 adamjking 92
 
213 tk 93
    protected Vector createGUIs(SIDEditController sidEditController) {
628 adamjking 94
        Vector v_in = (Vector) sidEditController.getEngine();
213 tk 95
        Vector v_out = new Vector();
96
        for (int b = 0; b < v_in.size(); b++) {
628 adamjking 97
            v_out.addElement(createGuiElements((Vector) v_in.elementAt(b)));
213 tk 98
        }
99
        return v_out;
100
    }
628 adamjking 101
 
213 tk 102
    protected Vector createGuiElements(Vector v) {
103
        // Create controller GUI's
104
        Vector midiParameterGUIs = new Vector();
105
        for (int c = 0; c < v.size(); c++) {
628 adamjking 106
            SIDSysexParameterControl midiParameter = (SIDSysexParameterControl) v
107
                    .elementAt(c);
213 tk 108
            switch (midiParameter.getType()) {
628 adamjking 109
            case 0:
110
                // Create knob
111
                Knob knob = new Knob(ImageLoader
112
                        .getImageIcon("plasticknob_strip.png"));
113
                midiParameterGUIs.add(new SIDSysexParameterControlKnob(
114
                        midiParameter, knob, true, BorderLayout.SOUTH, true,
115
                        true));
116
                break;
117
            case 1:
118
                // Create toggle button
119
                JToggleButton button = new JToggleButton();
120
                button.setUI(new MyButtonUI(ImageLoader
121
                        .getImageIcon("button_on.png"), ImageLoader
122
                        .getImageIcon("button.png")));
123
                midiParameterGUIs.add(new SIDSysexParameterControlToggleButton(
124
                        midiParameter, button, false, true, BorderLayout.SOUTH,
125
                        true, false));
126
                break;
127
            case 2:
128
                // Create simple toggle button
129
                JToggleButton simpleButton = new JToggleButton();
130
                simpleButton.setUI(new MyButtonUI(ImageLoader
131
                        .getImageIcon("button_on.png"), ImageLoader
132
                        .getImageIcon("button.png")));
133
                midiParameterGUIs.add(new SIDSysexParameterControlToggleButton(
134
                        midiParameter, simpleButton, false, false,
135
                        BorderLayout.SOUTH, true, false));
136
                break;
137
            case 3:
138
                // Create slider
139
                JSlider slider = new JSlider();
140
                midiParameterGUIs.add(new SIDSysexParameterControlSlider(
141
                        midiParameter, slider, true, BorderLayout.SOUTH, true,
142
                        true));
143
                break;
144
            case 4:
145
                // Create waveform selector (Voice)
146
                midiParameterGUIs.add(new SIDSysexParameterControlWaveSelect(
147
                        midiParameter, true, BorderLayout.NORTH, false, false));
148
                break;
149
            case 5:
150
                // Create waveform selector (LFO)
151
                midiParameterGUIs.add(new SIDSysexParameterControlLFOSelect(
152
                        midiParameter, true, BorderLayout.NORTH, false, false));
153
                break;
154
            case 6:
155
                // Normal combo
156
                JComboBox combo = new JComboBox(midiParameter
157
                        .getSparseValAlias());
158
                midiParameterGUIs.add(new SIDSysexParameterControlCombo(
159
                        midiParameter, combo, true, BorderLayout.NORTH, false,
160
                        false));
161
                break;
162
            case 7:
163
                // Simple rotary
164
                Knob knob1 = new Knob(ImageLoader
165
                        .getImageIcon("plasticknob_strip.png"));
166
                midiParameterGUIs.add(new SIDSysexParameterControlKnob(
167
                        midiParameter, knob1, false, BorderLayout.SOUTH, true,
168
                        true));
169
                break;
170
            case 8:
171
                // Radio button list
172
                midiParameterGUIs.add(new SIDSysexParameterControlRadio(
173
                        midiParameter, false, BorderLayout.SOUTH, true, true));
174
                break;
175
            default:
176
                midiParameterGUIs.add(midiParameter);
177
                System.out.println("Unknown controller type!");
178
            }
213 tk 179
        }
180
        return midiParameterGUIs;
628 adamjking 181
    }
182
 
213 tk 183
    public void createLinkGroups() {
628 adamjking 184
        // Create vector of pointers to left and right parameters (for linking
185
        // only)
213 tk 186
        EXT_L = new Vector();
187
        EXT_R = new Vector();
188
        for (int c = 0; c < 8; c++) {
628 adamjking 189
            EXT_L.add(((Vector) GUIs.elementAt(1)).elementAt(2 * c));
190
            EXT_R.add(((Vector) GUIs.elementAt(1)).elementAt((2 * c) + 1));
213 tk 191
        }
192
    }
628 adamjking 193
 
272 rutgerv 194
    public void stereoLink(boolean b) {
195
        if (b) {
196
            sidEditController.getPatch().setStereoLink(true);
628 adamjking 197
            linkPar(EXT_L, EXT_R); // Link external outputs 2 by 2
198
            linkPar((Vector) GUIs.elementAt(2), (Vector) GUIs.elementAt(3)); // Link
199
            // filter
200
            // left
201
            // &
202
            // right
203
            linkPar((Vector) GUIs.elementAt(4), (Vector) GUIs.elementAt(5)); // Link
204
            // V1
205
            // &
206
            // V2
207
            linkPar((Vector) GUIs.elementAt(6), (Vector) GUIs.elementAt(7)); // Link
208
            // master
209
            // L
210
            // &
211
            // R
212
            linkPar((Vector) GUIs.elementAt(8), (Vector) GUIs.elementAt(9)); // Link
213
            // LFO's
214
            linkPar((Vector) GUIs.elementAt(10), (Vector) GUIs.elementAt(11)); // Link
215
            // Envelopes
216
            linkPar((Vector) GUIs.elementAt(12), (Vector) GUIs.elementAt(13)); // Link
217
            // Sequencers
272 rutgerv 218
        } else {
219
            sidEditController.getPatch().setStereoLink(false);
628 adamjking 220
            unlinkPar(EXT_L, EXT_R); // Unlink external outputs 2 by 2
221
            unlinkPar((Vector) GUIs.elementAt(2), (Vector) GUIs.elementAt(3)); // Link
222
            // filter
223
            // left
224
            // &
225
            // right
226
            unlinkPar((Vector) GUIs.elementAt(4), (Vector) GUIs.elementAt(5)); // Link
227
            // V1
228
            // &
229
            // V2
230
            unlinkPar((Vector) GUIs.elementAt(6), (Vector) GUIs.elementAt(7)); // Link
231
            // master
232
            // L
233
            // &
234
            // R
235
            unlinkPar((Vector) GUIs.elementAt(8), (Vector) GUIs.elementAt(9)); // Link
236
            // LFO's
237
            unlinkPar((Vector) GUIs.elementAt(10), (Vector) GUIs.elementAt(11)); // Link
238
            // Envelopes
239
            unlinkPar((Vector) GUIs.elementAt(12), (Vector) GUIs.elementAt(13)); // Link
240
            // Sequencers
272 rutgerv 241
        }
213 tk 242
    }
628 adamjking 243
 
213 tk 244
    protected void linkPar(Vector left, Vector right) {
245
        for (int c = 0; c < left.size(); c++) {
628 adamjking 246
            SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left
247
                    .elementAt(c);
248
            SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right
249
                    .elementAt(c);
213 tk 250
            g1.addMidiParameter(g2.getMidiParameter());
251
            g2.addMidiParameter(g1.getMidiParameter());
252
        }
253
    }
628 adamjking 254
 
213 tk 255
    protected void unlinkPar(Vector left, Vector right) {
256
        for (int c = 0; c < left.size(); c++) {
628 adamjking 257
            SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left
258
                    .elementAt(c);
259
            SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right
260
                    .elementAt(c);
213 tk 261
            g1.removeMidiParameter(g2.getMidiParameter());
262
            g2.removeMidiParameter(g1.getMidiParameter());
263
        }
264
    }
265
}