Subversion Repositories svn.mios

Rev

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
}