Subversion Repositories svn.mios

Rev

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