~ubuntu-branches/ubuntu/karmic/tuxguitar/karmic

« back to all changes in this revision

Viewing changes to TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixConfig.java

  • Committer: Bazaar Package Importer
  • Author(s): Philippe Coval
  • Date: 2008-06-19 00:30:30 UTC
  • mfrom: (1.1.1 upstream) (2.1.3 hardy)
  • Revision ID: james.westby@ubuntu.com-20080619003030-agens2gvd5m4dacu
New upstream release (Closes: #481728) also (LP: #176979, #212207)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.herac.tuxguitar.gui.editors.matrix;
 
2
 
 
3
import java.util.Properties;
 
4
 
 
5
import org.eclipse.swt.SWT;
 
6
import org.eclipse.swt.events.PaintEvent;
 
7
import org.eclipse.swt.events.PaintListener;
 
8
import org.eclipse.swt.events.SelectionAdapter;
 
9
import org.eclipse.swt.events.SelectionEvent;
 
10
import org.eclipse.swt.graphics.Color;
 
11
import org.eclipse.swt.graphics.Font;
 
12
import org.eclipse.swt.graphics.FontData;
 
13
import org.eclipse.swt.graphics.RGB;
 
14
import org.eclipse.swt.graphics.Resource;
 
15
import org.eclipse.swt.layout.GridData;
 
16
import org.eclipse.swt.layout.GridLayout;
 
17
import org.eclipse.swt.widgets.Button;
 
18
import org.eclipse.swt.widgets.ColorDialog;
 
19
import org.eclipse.swt.widgets.Composite;
 
20
import org.eclipse.swt.widgets.Display;
 
21
import org.eclipse.swt.widgets.FontDialog;
 
22
import org.eclipse.swt.widgets.Group;
 
23
import org.eclipse.swt.widgets.Label;
 
24
import org.eclipse.swt.widgets.Shell;
 
25
import org.herac.tuxguitar.gui.TuxGuitar;
 
26
import org.herac.tuxguitar.gui.editors.TGPainter;
 
27
import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
 
28
import org.herac.tuxguitar.gui.system.config.TGConfigManager;
 
29
import org.herac.tuxguitar.gui.util.DialogUtils;
 
30
 
 
31
public class MatrixConfig {
 
32
        
 
33
        private Font font;
 
34
        private Color[] colorLines;
 
35
        private Color colorForeground;
 
36
        private Color colorBorder;
 
37
        private Color colorPosition;
 
38
        private Color colorNote;
 
39
        private Color colorPlay;
 
40
        
 
41
        public MatrixConfig(){
 
42
                super();
 
43
        }
 
44
        
 
45
        public Font getFont() {
 
46
                return this.font;
 
47
        }
 
48
        
 
49
        public Color getColorForeground() {
 
50
                return this.colorForeground;
 
51
        }
 
52
        
 
53
        public Color getColorBorder() {
 
54
                return this.colorBorder;
 
55
        }
 
56
        
 
57
        public Color getColorPosition() {
 
58
                return this.colorPosition;
 
59
        }
 
60
        
 
61
        public Color getColorNote() {
 
62
                return this.colorNote;
 
63
        }
 
64
        
 
65
        public Color getColorPlay() {
 
66
                return this.colorPlay;
 
67
        }
 
68
        
 
69
        public Color[] getColorLines() {
 
70
                return this.colorLines;
 
71
        }
 
72
        
 
73
        public Color getColorLine(int index) {
 
74
                return this.colorLines[index];
 
75
        }
 
76
        
 
77
        public void load(){
 
78
                Display display = TuxGuitar.instance().getDisplay();
 
79
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
80
                this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.MATRIX_FONT));
 
81
                this.colorForeground = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
 
82
                this.colorBorder = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_BORDER));
 
83
                this.colorPosition = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_POSITION));
 
84
                this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_NOTE));
 
85
                this.colorPlay = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
 
86
                this.colorLines = new Color[]{
 
87
                                new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_1)),
 
88
                                new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_2)),
 
89
                                new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_3)),
 
90
                };
 
91
        }
 
92
        
 
93
        public void defaults(){
 
94
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
95
                Properties defaults = config.getDefaults();
 
96
                config.setProperty(TGConfigKeys.MATRIX_FONT,defaults.getProperty(TGConfigKeys.MATRIX_FONT));
 
97
                config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
 
98
                config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_BORDER));
 
99
                config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_POSITION));
 
100
                config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_NOTE));
 
101
                config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
 
102
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_1));
 
103
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_2));
 
104
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_3));
 
105
        }
 
106
        
 
107
        public void save(FontData fontData,
 
108
                                         RGB rgbForeground,
 
109
                                         RGB rgbBorder,
 
110
                                         RGB rgbPosition,
 
111
                                         RGB rgbNote,
 
112
                                         RGB rgbPlay,
 
113
                                         RGB rgbLines[]){
 
114
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
115
                
 
116
                config.setProperty(TGConfigKeys.MATRIX_FONT,fontData);
 
117
                config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,rgbForeground);
 
118
                config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,rgbBorder);
 
119
                config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,rgbPosition);
 
120
                config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,rgbNote);
 
121
                config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,rgbPlay);
 
122
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,rgbLines[0]);
 
123
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,rgbLines[1]);
 
124
                config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,rgbLines[2]);
 
125
        }
 
126
        
 
127
        public void dispose(){
 
128
                dispose(this.font);
 
129
                dispose(this.colorForeground);
 
130
                dispose(this.colorBorder);
 
131
                dispose(this.colorPosition);
 
132
                dispose(this.colorNote);
 
133
                dispose(this.colorPlay);
 
134
                dispose(this.colorLines);
 
135
        }
 
136
        
 
137
        protected void dispose(Resource[] resources){
 
138
                if(resources != null){
 
139
                        for(int i = 0; i < resources.length; i ++){
 
140
                                dispose(resources[i]);
 
141
                        }
 
142
                }
 
143
        }
 
144
        
 
145
        protected void dispose(Resource resource){
 
146
                if(resource != null){
 
147
                        resource.dispose();
 
148
                }
 
149
        }
 
150
        
 
151
        private static final int MINIMUN_CONTROL_WIDTH = 180;
 
152
        private static final int MINIMUN_BUTTON_WIDTH = 80;
 
153
        private static final int MINIMUN_BUTTON_HEIGHT = 25;
 
154
        
 
155
        public void configure(Shell shell) {
 
156
                final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
 
157
                dialog.setLayout(new GridLayout());
 
158
                dialog.setText(TuxGuitar.getProperty("matrix.settings"));
 
159
                
 
160
                // ----------------------------------------------------------------------
 
161
                Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
 
162
                group.setLayout(new GridLayout(2, false));
 
163
                group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
164
                group.setText(TuxGuitar.getProperty("matrix.settings"));
 
165
                
 
166
                // fonts
 
167
                final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("matrix.font"),this.font.getFontData()[0]);
 
168
                
 
169
                // colors
 
170
                final RGB rgbForeground = getColorChooser(group,TuxGuitar.getProperty("matrix.foreground-color"), this.colorForeground.getRGB());
 
171
                
 
172
                final RGB rgbLines[] = new RGB[]{
 
173
                                getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-1"), this.colorLines[0].getRGB()),
 
174
                                getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-2"), this.colorLines[1].getRGB()),
 
175
                                getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-over"), this.colorLines[2].getRGB()),
 
176
                };
 
177
                
 
178
                final RGB rgbBorder = getColorChooser(group,TuxGuitar.getProperty("matrix.border-color"), this.colorBorder.getRGB());
 
179
                final RGB rgbPosition = getColorChooser(group,TuxGuitar.getProperty("matrix.position-color"), this.colorPosition.getRGB());
 
180
                final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("matrix.note-color"), this.colorNote.getRGB());
 
181
                final RGB rgbPlay = getColorChooser(group,TuxGuitar.getProperty("matrix.play-note-color"), this.colorPlay.getRGB());
 
182
                
 
183
                // ------------------BUTTONS--------------------------
 
184
                Composite buttons = new Composite(dialog, SWT.NONE);
 
185
                buttons.setLayout(new GridLayout(3, false));
 
186
                buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
 
187
                
 
188
                final Button buttonDefaults = new Button(buttons, SWT.PUSH);
 
189
                buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
 
190
                buttonDefaults.setLayoutData(getButtonData());
 
191
                buttonDefaults.addSelectionListener(new SelectionAdapter() {
 
192
                        public void widgetSelected(SelectionEvent arg0) {
 
193
                                dialog.dispose();
 
194
                                defaults();
 
195
                                applyChanges();
 
196
                        }
 
197
                });
 
198
                
 
199
                final Button buttonOK = new Button(buttons, SWT.PUSH);
 
200
                buttonOK.setText(TuxGuitar.getProperty("ok"));
 
201
                buttonOK.setLayoutData(getButtonData());
 
202
                buttonOK.addSelectionListener(new SelectionAdapter() {
 
203
                        public void widgetSelected(SelectionEvent arg0) {
 
204
                                dialog.dispose();
 
205
                                save(fontData, rgbForeground, rgbBorder, rgbPosition, rgbNote, rgbPlay, rgbLines);
 
206
                                applyChanges();
 
207
                        }
 
208
                });
 
209
                
 
210
                Button buttonCancel = new Button(buttons, SWT.PUSH);
 
211
                buttonCancel.setText(TuxGuitar.getProperty("cancel"));
 
212
                buttonCancel.setLayoutData(getButtonData());
 
213
                buttonCancel.addSelectionListener(new SelectionAdapter() {
 
214
                        public void widgetSelected(SelectionEvent arg0) {
 
215
                                dialog.dispose();
 
216
                        }
 
217
                });
 
218
                
 
219
                dialog.setDefaultButton( buttonOK );
 
220
                
 
221
                DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
 
222
        }
 
223
        
 
224
        protected GridData getButtonData(){
 
225
                GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 
226
                data.minimumWidth = MINIMUN_BUTTON_WIDTH;
 
227
                data.minimumHeight = MINIMUN_BUTTON_HEIGHT;
 
228
                return data;
 
229
        }
 
230
        
 
231
        protected void applyChanges(){
 
232
                this.dispose();
 
233
                this.load();
 
234
        }
 
235
        
 
236
        private RGB getColorChooser(final Composite parent,String title,RGB rgb){
 
237
                final RGB selection = new RGB(rgb.red,rgb.green,rgb.blue);
 
238
                
 
239
                Label label = new Label(parent, SWT.NULL);
 
240
                label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
 
241
                label.setText(title);
 
242
                
 
243
                final Button button = new Button(parent, SWT.PUSH);
 
244
                button.setLayoutData(getAlignmentData(MINIMUN_CONTROL_WIDTH,SWT.FILL));
 
245
                button.addPaintListener(new PaintListener() {
 
246
                        public void paintControl(PaintEvent e) {
 
247
                                Color color = new Color(parent.getDisplay(), selection);
 
248
                                TGPainter painter = new TGPainter(e.gc);
 
249
                                painter.setBackground(color);
 
250
                                painter.initPath(TGPainter.PATH_FILL);
 
251
                                painter.addRectangle(5,5,button.getSize().x - 10,button.getSize().y - 10);
 
252
                                painter.closePath();
 
253
                                color.dispose();
 
254
                        }
 
255
                });
 
256
                button.addSelectionListener(new SelectionAdapter() {
 
257
                        public void widgetSelected(SelectionEvent event) {
 
258
                                ColorDialog dlg = new ColorDialog(parent.getShell());
 
259
                                dlg.setRGB(selection);
 
260
                                dlg.setText(TuxGuitar.getProperty("choose-color"));
 
261
                                RGB rgb = dlg.open();
 
262
                                if (rgb != null) {
 
263
                                        selection.red = rgb.red;
 
264
                                        selection.green = rgb.green;
 
265
                                        selection.blue = rgb.blue;
 
266
                                        button.redraw();
 
267
                                }
 
268
                        }
 
269
                });
 
270
                
 
271
                return selection;
 
272
        }
 
273
        
 
274
        private FontData getFontChooser(final Composite parent,String title,FontData fontData){
 
275
                final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
 
276
                
 
277
                Label label = new Label(parent, SWT.NULL);
 
278
                label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
 
279
                label.setText(title);
 
280
                
 
281
                Button button = new Button(parent, SWT.PUSH);
 
282
                button.setLayoutData(getAlignmentData(MINIMUN_CONTROL_WIDTH,SWT.FILL));
 
283
                button.setText(TuxGuitar.getProperty("choose"));
 
284
                button.addSelectionListener(new SelectionAdapter() {
 
285
                        public void widgetSelected(SelectionEvent arg0) {
 
286
                                Font font = new Font(parent.getDisplay(),selection);
 
287
                                FontDialog fontDialog = new FontDialog(parent.getShell());
 
288
                                fontDialog.setFontList(font.getFontData());
 
289
                                FontData fd = fontDialog.open();
 
290
                                if(fd != null){
 
291
                                        selection.setName( fd.getName() );
 
292
                                        selection.setHeight( fd.getHeight() );
 
293
                                        selection.setStyle( fd.getStyle() );
 
294
                                }
 
295
                                font.dispose();
 
296
                        }
 
297
                });
 
298
                return selection;
 
299
        }
 
300
        
 
301
        private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
 
302
                GridData data = new GridData();
 
303
                data.minimumWidth = minimumWidth;
 
304
                data.horizontalAlignment = horizontalAlignment;
 
305
                data.verticalAlignment = SWT.DEFAULT;
 
306
                data.grabExcessHorizontalSpace = true;
 
307
                data.grabExcessVerticalSpace = true;
 
308
                return data;
 
309
        }
 
310
}