Subversion Repositories svn.mios

Rev

Rev 259 | Rev 505 | 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;
24
import java.awt.GridLayout;
25
import java.util.Vector;
26
import javax.swing.BorderFactory;
27
import javax.swing.BoxLayout;
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;
33
import org.midibox.sidedit.gui.GlobalGUI;
34
import org.midibox.sidedit.gui.FilterGUI;
35
import org.midibox.sidedit.BasslineSpecs;
36
import org.midibox.sidedit.SIDSysexInfo;
37
import org.midibox.sidedit.SIDEditController;
38
import org.midibox.sidedit.SIDSysexParameterControl;
39
 
40
import org.midibox.sidedit.gui.controls.*;
41
import org.midibox.utils.gui.ImageLoader;
42
import org.midibox.utils.gui.Knob;
43
import org.midibox.utils.gui.MyButtonUI;
44
 
45
public class BasslineGUI extends JPanel {
46
    private Vector GUIs, EXT_L, EXT_R;
272 rutgerv 47
    private SIDEditController sidEditController;
48
 
49
    public BasslineGUI(SIDEditController sidEditController) {  
50
        this.sidEditController = sidEditController;
213 tk 51
        setLayout(new BorderLayout());
52
 
53
        GUIs = createGUIs(sidEditController);
54
        createLinkGroups();
55
        JTabbedPane tabbedPane = new JTabbedPane();    
56
        JPanel t1 = new GlobalGUI((Vector)GUIs.elementAt(0),(Vector)GUIs.elementAt(1));
57
        JPanel t2 = new OscillatorGUI((Vector)GUIs.elementAt(4),(Vector)GUIs.elementAt(5),(Vector)GUIs.elementAt(6),(Vector)GUIs.elementAt(7));
58
        JPanel t3 = new FilterGUI((Vector)GUIs.elementAt(2),(Vector)GUIs.elementAt(3));
59
        JPanel t4 = new LfoGUI((Vector)GUIs.elementAt(8),(Vector)GUIs.elementAt(9),(Vector)GUIs.elementAt(10),(Vector)GUIs.elementAt(11));
60
        JPanel t6 = new SequencerGUI((Vector)GUIs.elementAt(14),(Vector)GUIs.elementAt(12),(Vector)GUIs.elementAt(13));
61
        JPanel t7 = new ArpGUI((Vector)GUIs.elementAt(4),(Vector)GUIs.elementAt(5));
62
 
63
        tabbedPane.addTab("Global", t1);
64
        tabbedPane.addTab("Oscillator", t2);
65
        tabbedPane.addTab("Filter", t3);
66
        tabbedPane.addTab("LFO/ENV", t4);  
67
        tabbedPane.addTab("Sequencer", t6);    
68
        tabbedPane.addTab("Arpeggiator", t7);
69
 
70
        add(tabbedPane, BorderLayout.NORTH);
71
        setOpaque(false);
72
        setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
272 rutgerv 73
        stereoLink(true);
213 tk 74
    }
75
 
76
    protected Vector createGUIs(SIDEditController sidEditController) {
77
        Vector v_in = (Vector)sidEditController.getEngine();
78
        Vector v_out = new Vector();
79
        for (int b = 0; b < v_in.size(); b++) {
80
            v_out.addElement(createGuiElements((Vector)v_in.elementAt(b)));        
81
        }
82
        return v_out;
83
    }
84
 
85
    protected Vector createGuiElements(Vector v) {
86
        // Create controller GUI's
87
        Vector midiParameterGUIs = new Vector();
88
        for (int c = 0; c < v.size(); c++) {
89
            SIDSysexParameterControl midiParameter = (SIDSysexParameterControl) v.elementAt(c);
90
            switch (midiParameter.getType()) {
91
                case 0:
92
                    // Create knob
93
                    Knob knob = new Knob(ImageLoader.getImageIcon("plasticknob_strip.png"));       
94
                    midiParameterGUIs.add(new SIDSysexParameterControlKnob(midiParameter, knob, true, BorderLayout.SOUTH, true, true));
95
                    break;
96
                case 1:
97
                    // Create toggle button
98
                    JToggleButton button = new JToggleButton();
99
                    button.setUI(new MyButtonUI(ImageLoader.getImageIcon("button_on.png"), ImageLoader.getImageIcon("button.png")));
100
                    midiParameterGUIs.add(new SIDSysexParameterControlToggleButton(midiParameter, button, false, true, BorderLayout.SOUTH, true, false));
101
                    break;
102
                case 2:
103
                    // Create simple toggle button
104
                    JToggleButton simpleButton = new JToggleButton();
105
                    simpleButton.setUI(new MyButtonUI(ImageLoader.getImageIcon("button_on.png"), ImageLoader.getImageIcon("button.png")));
106
                    midiParameterGUIs.add(new SIDSysexParameterControlToggleButton(midiParameter, simpleButton, false, false, BorderLayout.SOUTH, true, false));
107
                    break;
108
                case 3:
109
                    // Create slider
110
                    JSlider slider = new JSlider();
111
                    midiParameterGUIs.add(new SIDSysexParameterControlSlider(midiParameter, slider, true, BorderLayout.SOUTH,true,true));
112
                    break;
113
                case 4:
114
                    // Create waveform selector (Voice)
115
                    midiParameterGUIs.add(new SIDSysexParameterControlWaveSelect(midiParameter, true, BorderLayout.NORTH,false,false));
116
                    break;
117
                case 5:
118
                    // Create waveform selector (LFO)
119
                    midiParameterGUIs.add(new SIDSysexParameterControlLFOSelect(midiParameter, true, BorderLayout.NORTH,false,false));
120
                    break;     
121
                case 6:
122
                    // Normal combo
123
                    JComboBox combo = new JComboBox(midiParameter.getSparseValAlias());
124
                    midiParameterGUIs.add(new SIDSysexParameterControlCombo(midiParameter,combo,true,BorderLayout.NORTH,false,false));
125
                    break;
126
                case 7:
127
                    // Simple rotary
128
                    Knob knob1 = new Knob(ImageLoader.getImageIcon("plasticknob_strip.png"));      
129
                    midiParameterGUIs.add(new SIDSysexParameterControlKnob(midiParameter, knob1, false, BorderLayout.SOUTH, true, true));
130
                    break;
131
                default: midiParameterGUIs.add(midiParameter);System.out.println("Unknown controller type!");
132
            }  
133
        }
134
        return midiParameterGUIs;
135
    }  
136
 
137
    public void createLinkGroups() {
138
        // Create vector of pointers to left and right parameters (for linking only)
139
        EXT_L = new Vector();
140
        EXT_R = new Vector();
141
        for (int c = 0; c < 8; c++) {
142
            EXT_L.add(((Vector)GUIs.elementAt(1)).elementAt(2*c));
143
            EXT_R.add(((Vector)GUIs.elementAt(1)).elementAt((2*c)+1));
144
        }
145
    }
146
 
272 rutgerv 147
    public void stereoLink(boolean b) {
148
        if (b) {
149
            sidEditController.getPatch().setStereoLink(true);
150
            linkPar(EXT_L,EXT_R);                                               // Link external outputs 2 by 2
151
            linkPar((Vector)GUIs.elementAt(2),(Vector)GUIs.elementAt(3));       // Link filter left & right
152
            linkPar((Vector)GUIs.elementAt(4),(Vector)GUIs.elementAt(5));       // Link V1 & V2
153
            linkPar((Vector)GUIs.elementAt(6),(Vector)GUIs.elementAt(7));       // Link master L & R
154
            linkPar((Vector)GUIs.elementAt(8),(Vector)GUIs.elementAt(9));       // Link LFO's
155
            linkPar((Vector)GUIs.elementAt(10),(Vector)GUIs.elementAt(11));     // Link Envelopes
156
            linkPar((Vector)GUIs.elementAt(12),(Vector)GUIs.elementAt(13));     // Link Sequencers  
157
        } else {
158
            sidEditController.getPatch().setStereoLink(false);
159
            unlinkPar(EXT_L,EXT_R);                                             // Unlink external outputs 2 by 2
160
            unlinkPar((Vector)GUIs.elementAt(2),(Vector)GUIs.elementAt(3));     // Link filter left & right
161
            unlinkPar((Vector)GUIs.elementAt(4),(Vector)GUIs.elementAt(5));     // Link V1 & V2
162
            unlinkPar((Vector)GUIs.elementAt(6),(Vector)GUIs.elementAt(7));     // Link master L & R
163
            unlinkPar((Vector)GUIs.elementAt(8),(Vector)GUIs.elementAt(9));     // Link LFO's
164
            unlinkPar((Vector)GUIs.elementAt(10),(Vector)GUIs.elementAt(11));   // Link Envelopes
165
            unlinkPar((Vector)GUIs.elementAt(12),(Vector)GUIs.elementAt(13));   // Link Sequencers  
166
        }
213 tk 167
    }
168
 
169
    protected void linkPar(Vector left, Vector right) {
170
        for (int c = 0; c < left.size(); c++) {
171
            SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left.elementAt(c);
172
            SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right.elementAt(c);
173
            g1.addMidiParameter(g2.getMidiParameter());
174
            g2.addMidiParameter(g1.getMidiParameter());
175
        }
176
    }
177
 
178
    protected void unlinkPar(Vector left, Vector right) {
179
        for (int c = 0; c < left.size(); c++) {
180
            SIDSysexParameterControlGUI g1 = (SIDSysexParameterControlGUI) left.elementAt(c);
181
            SIDSysexParameterControlGUI g2 = (SIDSysexParameterControlGUI) right.elementAt(c);
182
            g1.removeMidiParameter(g2.getMidiParameter());
183
            g2.removeMidiParameter(g1.getMidiParameter());
184
        }
185
    }
186
}