Subversion Repositories svn.mios

Rev

Rev 272 | Rev 696 | 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.controls;
22
 
23
import java.awt.BorderLayout;
24
import java.awt.Color;
25
import java.awt.GridLayout;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
628 adamjking 28
import java.awt.event.MouseEvent;
29
import java.awt.event.MouseListener;
213 tk 30
import java.util.Observable;
31
import java.util.Observer;
32
import java.util.Vector;
628 adamjking 33
 
213 tk 34
import javax.swing.JDialog;
35
import javax.swing.JLabel;
36
import javax.swing.JPanel;
37
import javax.swing.JTextField;
38
import javax.swing.SwingConstants;
628 adamjking 39
 
40
import org.midibox.sidedit.SIDSysexParameter;
41
import org.midibox.sidedit.SIDSysexParameterControl;
213 tk 42
import org.midibox.sidedit.gui.MBSIDV2EditorGUI;
43
import org.midibox.utils.gui.FontLoader;
44
 
628 adamjking 45
public class SIDSysexParameterControlGUI extends JPanel implements Observer,
46
        ActionListener, MouseListener {
213 tk 47
 
48
    protected SIDSysexParameterControl midiParameter;
628 adamjking 49
 
213 tk 50
    protected Vector midiParameters;
51
 
52
    protected boolean showLabel;
53
 
54
    protected String labelLocation;
55
 
56
    protected boolean valueBelow;
57
 
58
    protected boolean showValue;
59
 
60
    protected JLabel midiParameterLabel;
61
 
62
    protected JTextField valueField;
63
 
64
    protected StringBuffer valueBuffer;
65
 
66
    protected Color valueFieldColor = new Color(150, 20, 0);
67
 
68
    protected Color labelFieldColor = Color.BLACK;
69
 
70
    protected boolean update = true;
628 adamjking 71
 
213 tk 72
    protected JDialog midiParameterPropertiesDialog;
73
 
74
    public SIDSysexParameterControlGUI(SIDSysexParameterControl midiParameter,
75
            boolean showLabel, String labelLocation, boolean valueBelow,
76
            boolean showValue) {
77
 
78
        super(new BorderLayout());
79
        this.midiParameter = midiParameter;
80
        this.showLabel = showLabel;
81
        this.labelLocation = labelLocation;
82
        this.valueBelow = valueBelow;
83
        this.showValue = showValue;
84
        this.midiParameters = new Vector();
628 adamjking 85
 
213 tk 86
        midiParameter.addObserver(this);
87
 
88
        valueBuffer = new StringBuffer();
89
 
628 adamjking 90
        if ((showLabel) || (showValue)) {
213 tk 91
            add(createLabelPanel(), labelLocation);
92
        }
93
        addMouseListener(this);
94
        setOpaque(false);
95
    }
96
 
97
    protected JPanel createLabelPanel() {
628 adamjking 98
        JPanel labelPanel = new JPanel(new GridLayout(
99
                (valueBelow ? (showLabel ? 2 : 1) : 1), (valueBelow ? 1
100
                        : (showLabel ? 2 : 1))));
213 tk 101
        labelPanel.setOpaque(false);
102
 
103
        if (showLabel) {
104
            midiParameterLabel = new JLabel(midiParameter.getMidiName()
628 adamjking 105
                    .toUpperCase(),
106
                    (showValue) ? ((valueBelow ? SwingConstants.CENTER
107
                            : SwingConstants.RIGHT)) : SwingConstants.CENTER);
213 tk 108
            midiParameterLabel.setOpaque(false);
109
            midiParameterLabel.setFont(FontLoader.getFont("uni05_53.ttf", 8f));
110
            midiParameterLabel.setForeground(labelFieldColor);
111
            labelPanel.add(midiParameterLabel);
628 adamjking 112
        }
113
 
213 tk 114
        if (showValue) {
115
            valueField = new JTextField();
116
            valueField.setHorizontalAlignment(JTextField.CENTER);
117
            valueField.setFont(FontLoader.getFont("uni05_53.ttf", 8f));
118
            valueField.setForeground(valueFieldColor);
119
            valueField.addActionListener(this);
120
            valueField.setOpaque(false);
121
            valueField.setBorder(null);
122
            labelPanel.add(valueField);
123
        }
628 adamjking 124
 
213 tk 125
        return labelPanel;
126
    }
127
 
128
    protected JTextField createValueField() {
129
        valueField = new JTextField();
130
        return valueField;
131
    }
132
 
133
    public void setValueFieldColor(Color valueFieldColor) {
134
        this.valueFieldColor = valueFieldColor;
135
        this.valueField.setForeground(valueFieldColor);
136
    }
137
 
138
    public void setLabelFieldColor(Color labelFieldColor) {
139
        this.labelFieldColor = labelFieldColor;
140
        this.midiParameterLabel.setForeground(labelFieldColor);
141
    }
628 adamjking 142
 
213 tk 143
    public SIDSysexParameterControl getMidiParameter() {
144
        return midiParameter;
145
    }
146
 
147
    public void addMidiParameter(SIDSysexParameterControl midiPar) {
148
        midiParameters.add(midiPar);
149
        midiPar.addObserver(this);
150
    }
628 adamjking 151
 
213 tk 152
    public void removeMidiParameter(SIDSysexParameterControl midiPar) {
153
        midiParameters.remove(midiPar);
154
        midiPar.deleteObserver(this);
155
    }
628 adamjking 156
 
213 tk 157
    public void updateGraphics() {
158
        if (valueField != null) {
159
            updateValueField();
160
        }
161
    }
628 adamjking 162
 
213 tk 163
    public void useAlias(boolean b) {
164
        midiParameter.useAlias = b;
165
    }
628 adamjking 166
 
254 rutgerv 167
    private boolean snapExist(int i) {
168
        boolean b = false;
628 adamjking 169
        for (int c = 0; c < midiParameter.snapvals.length; c++) {
170
            if (midiParameter.snapvals[c] == i) {
254 rutgerv 171
                b = true;
172
                break;
628 adamjking 173
            }
254 rutgerv 174
        }
175
        return b;
176
    }
628 adamjking 177
 
213 tk 178
    public void setSnap(boolean b) {
628 adamjking 179
        if (b) { // Turn on snap
213 tk 180
            midiParameter.useAlias = true;
628 adamjking 181
            midiParameter.snap = true;
182
 
183
            if (!snapExist(midiParameter.getMidiValue())) { // If current midi
184
                // value is not part
185
                // of the snap
186
                // values reset to
187
                // snapvals[0];
188
                midiParameter.setMidiValue(midiParameter.snapvals[0], true);
254 rutgerv 189
                for (int c = 0; c < midiParameters.size(); c++) {
628 adamjking 190
                    SIDSysexParameterControl mp = (SIDSysexParameterControl) midiParameters
191
                            .elementAt(c);
254 rutgerv 192
                    mp.snap = true;
628 adamjking 193
                    mp.useAlias = true;
254 rutgerv 194
                }
628 adamjking 195
            } else { // Keep current midi value, only update labels
254 rutgerv 196
                for (int c = 0; c < midiParameters.size(); c++) {
628 adamjking 197
                    SIDSysexParameterControl mp = (SIDSysexParameterControl) midiParameters
198
                            .elementAt(c);
254 rutgerv 199
                    mp.snap = true;
628 adamjking 200
                    mp.useAlias = true;
254 rutgerv 201
                }
202
                updateGraphics();
213 tk 203
            }
628 adamjking 204
 
205
        } else { // Turn off snap
213 tk 206
            midiParameter.useAlias = false;
628 adamjking 207
            midiParameter.snap = false;
213 tk 208
            for (int c = 0; c < midiParameters.size(); c++) {
628 adamjking 209
                SIDSysexParameterControl mp = (SIDSysexParameterControl) midiParameters
210
                        .elementAt(c);
213 tk 211
                mp.snap = false;
628 adamjking 212
                mp.useAlias = false;
213
            }
254 rutgerv 214
            updateGraphics();
213 tk 215
        }
216
    }
217
 
218
    public void updateValueField() {
628 adamjking 219
        String newval = new String();
213 tk 220
        valueBuffer.delete(0, valueBuffer.length());
221
        valueBuffer.insert(0, midiParameter.getMidiValue());
628 adamjking 222
 
213 tk 223
        if ((midiParameter.getValAlias() == null) || !midiParameter.useAlias) {
224
            newval = valueBuffer.toString();
628 adamjking 225
        } else {
226
            newval = (midiParameter.getValAlias())[Integer.valueOf(valueBuffer
227
                    .toString())];
213 tk 228
        }
229
        valueField.setText(newval);
230
    }
628 adamjking 231
 
232
    public int findAliasMatch(String s) {
213 tk 233
        String[] alias = midiParameter.getValAlias();
234
        int i = 0;
235
        while ((i < alias.length) && (!alias[i].equals(s))) {
236
            i++;
628 adamjking 237
        }
213 tk 238
        return i;
239
    }
628 adamjking 240
 
213 tk 241
    public void actionPerformed(ActionEvent ae) {
242
        Object source = ae.getSource();
243
        if (source == valueField) {
244
            try {
628 adamjking 245
                int newval = 0;
246
                if ((midiParameter.getValAlias() == null)
247
                        || !midiParameter.useAlias) {
248
                    newval = Integer.parseInt(valueField.getText());
249
                } else {
213 tk 250
                    newval = findAliasMatch(valueField.getText());
251
                }
628 adamjking 252
 
213 tk 253
                midiParameter.setMidiValue(newval, true);
628 adamjking 254
 
213 tk 255
                for (int c = 0; c < midiParameters.size(); c++) {
628 adamjking 256
                    SIDSysexParameterControl mp = (SIDSysexParameterControl) midiParameters
257
                            .elementAt(c);
272 rutgerv 258
                    mp.setMidiValue(newval, false);
213 tk 259
                }
628 adamjking 260
 
213 tk 261
            } catch (Exception e) {
262
                midiParameter.setMidiValue(midiParameter.getMidiValue(), true);
263
            }
628 adamjking 264
        }
213 tk 265
    }
266
 
267
    public void update(Observable observable, Object object) {
268
        if (observable == midiParameter) {
269
            if (object != SIDSysexParameter.VALUE) {
270
                if (showLabel) {
271
                    midiParameterLabel.setText(midiParameter.getMidiName()
272
                            .toUpperCase());
273
                }
274
            }
275
            updateGraphics();
276
        }
277
    }
278
 
628 adamjking 279
    public void mousePressed(MouseEvent e) {
280
    }
213 tk 281
 
628 adamjking 282
    public void mouseReleased(MouseEvent e) {
283
    }
213 tk 284
 
628 adamjking 285
    public void mouseEntered(MouseEvent e) {
286
        if (midiParameter.getTooltipListener().getClass() == MBSIDV2EditorGUI.class) {
287
            ((MBSIDV2EditorGUI) midiParameter.getTooltipListener())
288
                    .setTooltip(midiParameter.getTooltip());
289
        }
290
    }
213 tk 291
 
628 adamjking 292
    public void mouseExited(MouseEvent e) {
293
        if (midiParameter.getTooltipListener().getClass() == MBSIDV2EditorGUI.class) {
294
            ((MBSIDV2EditorGUI) midiParameter.getTooltipListener())
295
                    .setTooltip("");
296
        }
297
    }
298
 
299
    public void mouseClicked(MouseEvent e) {
300
    }
301
 
213 tk 302
}