~ubuntu-branches/ubuntu/oneiric/tuxguitar/oneiric

« back to all changes in this revision

Viewing changes to TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoardConfig.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.fretboard;
 
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.layout.GridData;
 
15
import org.eclipse.swt.layout.GridLayout;
 
16
import org.eclipse.swt.widgets.Button;
 
17
import org.eclipse.swt.widgets.ColorDialog;
 
18
import org.eclipse.swt.widgets.Composite;
 
19
import org.eclipse.swt.widgets.Display;
 
20
import org.eclipse.swt.widgets.FontDialog;
 
21
import org.eclipse.swt.widgets.Group;
 
22
import org.eclipse.swt.widgets.Label;
 
23
import org.eclipse.swt.widgets.Shell;
 
24
import org.herac.tuxguitar.gui.TuxGuitar;
 
25
import org.herac.tuxguitar.gui.editors.TGPainter;
 
26
import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
 
27
import org.herac.tuxguitar.gui.system.config.TGConfigManager;
 
28
import org.herac.tuxguitar.gui.util.DialogUtils;
 
29
 
 
30
public class FretBoardConfig {
 
31
        
 
32
        public static final int DISPLAY_TEXT_NOTE = 0x01;
 
33
        
 
34
        public static final int DISPLAY_TEXT_SCALE = 0x02;
 
35
        
 
36
        private int style;
 
37
        private Font font;
 
38
        private Color colorBackground;
 
39
        private Color colorString;
 
40
        private Color colorFretPoint;
 
41
        private Color colorNote;
 
42
        private Color colorScale;
 
43
        
 
44
        public FretBoardConfig(){
 
45
                super();
 
46
        }
 
47
        
 
48
        public int getStyle() {
 
49
                return this.style;
 
50
        }
 
51
        
 
52
        public Font getFont() {
 
53
                return this.font;
 
54
        }
 
55
        
 
56
        public Color getColorBackground() {
 
57
                return this.colorBackground;
 
58
        }
 
59
        
 
60
        public Color getColorString() {
 
61
                return this.colorString;
 
62
        }
 
63
        
 
64
        public Color getColorFretPoint() {
 
65
                return this.colorFretPoint;
 
66
        }
 
67
        
 
68
        public Color getColorNote() {
 
69
                return this.colorNote;
 
70
        }
 
71
        
 
72
        public Color getColorScale() {
 
73
                return this.colorScale;
 
74
        }
 
75
        
 
76
        public void load(){
 
77
                Display display = TuxGuitar.instance().getDisplay();
 
78
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
79
                this.style = config.getIntConfigValue(TGConfigKeys.FRETBOARD_STYLE);
 
80
                this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.FRETBOARD_FONT));
 
81
                this.colorBackground = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
 
82
                this.colorString = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_STRING));
 
83
                this.colorFretPoint = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
 
84
                this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_NOTE));
 
85
                this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_SCALE));
 
86
        }
 
87
        
 
88
        public void defaults(){
 
89
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
90
                Properties defaults = config.getDefaults();
 
91
                config.setProperty(TGConfigKeys.FRETBOARD_STYLE,defaults.getProperty(TGConfigKeys.FRETBOARD_STYLE));
 
92
                config.setProperty(TGConfigKeys.FRETBOARD_FONT,defaults.getProperty(TGConfigKeys.FRETBOARD_FONT));
 
93
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
 
94
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_STRING));
 
95
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
 
96
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE));
 
97
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE));
 
98
        }
 
99
        
 
100
        public void save(int style,FontData fontData,RGB rgbBackground,RGB rgbString,RGB rgbFretPoint,RGB rgbNote,RGB rgbScale){
 
101
                TGConfigManager config = TuxGuitar.instance().getConfig();
 
102
                config.setProperty(TGConfigKeys.FRETBOARD_STYLE,style);
 
103
                config.setProperty(TGConfigKeys.FRETBOARD_FONT,fontData);
 
104
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,rgbBackground);
 
105
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,rgbString);
 
106
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,rgbFretPoint);
 
107
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,rgbNote);
 
108
                config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,rgbScale);
 
109
        }
 
110
        
 
111
        public void dispose(){
 
112
                this.font.dispose();
 
113
                this.colorBackground.dispose();
 
114
                this.colorString.dispose();
 
115
                this.colorFretPoint.dispose();
 
116
                this.colorNote.dispose();
 
117
                this.colorScale.dispose();
 
118
        }
 
119
        
 
120
        private static final int MINIMUN_CONTROL_WIDTH = 180;
 
121
        private static final int MINIMUN_BUTTON_WIDTH = 80;
 
122
        private static final int MINIMUN_BUTTON_HEIGHT = 25;
 
123
        
 
124
        public void configure(Shell shell) {
 
125
                final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
 
126
                dialog.setLayout(new GridLayout());
 
127
                dialog.setText(TuxGuitar.getProperty("fretboard.settings"));
 
128
                
 
129
                // ----------------------------------------------------------------------
 
130
                Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
 
131
                group.setLayout(new GridLayout(2, false));
 
132
                group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
133
                group.setText(TuxGuitar.getProperty("fretboard.settings"));
 
134
                
 
135
                final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("fretboard.font"),this.font.getFontData()[0]);
 
136
                
 
137
                // Color
 
138
                final RGB rgbBackground = getColorChooser(group,TuxGuitar.getProperty("fretboard.background-color"), this.colorBackground.getRGB());
 
139
                final RGB rgbString = getColorChooser(group,TuxGuitar.getProperty("fretboard.string-color"), this.colorString.getRGB());
 
140
                final RGB rgbFretPoint = getColorChooser(group,TuxGuitar.getProperty("fretboard.fretpoint-color"), this.colorFretPoint.getRGB());
 
141
                final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("fretboard.note-color"), this.colorNote.getRGB());
 
142
                final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("fretboard.scale-note-color"), this.colorScale.getRGB());
 
143
                
 
144
                // ----------------------------------------------------------------------
 
145
                group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
 
146
                group.setLayout(new GridLayout());
 
147
                group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
148
                group.setText(TuxGuitar.getProperty("fretboard.settings.options"));
 
149
                
 
150
                final Button displayTextNote = new Button(group,SWT.CHECK);
 
151
                displayTextNote.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
152
                displayTextNote.setText(TuxGuitar.getProperty("fretboard.display-note-text"));
 
153
                displayTextNote.setSelection( (this.style & DISPLAY_TEXT_NOTE) != 0 );
 
154
                
 
155
                final Button displayTextScale = new Button(group,SWT.CHECK);
 
156
                displayTextScale.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
157
                displayTextScale.setText(TuxGuitar.getProperty("fretboard.display-scale-text"));
 
158
                displayTextScale.setSelection( (this.style & DISPLAY_TEXT_SCALE) != 0 );
 
159
                
 
160
                // ------------------BUTTONS--------------------------
 
161
                Composite buttons = new Composite(dialog, SWT.NONE);
 
162
                buttons.setLayout(new GridLayout(3, false));
 
163
                buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
 
164
                
 
165
                final Button buttonDefaults = new Button(buttons, SWT.PUSH);
 
166
                buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
 
167
                buttonDefaults.setLayoutData(getButtonData());
 
168
                buttonDefaults.addSelectionListener(new SelectionAdapter() {
 
169
                        public void widgetSelected(SelectionEvent arg0) {
 
170
                                dialog.dispose();
 
171
                                defaults();
 
172
                                applyChanges();
 
173
                        }
 
174
                });
 
175
                
 
176
                final Button buttonOK = new Button(buttons, SWT.PUSH);
 
177
                buttonOK.setText(TuxGuitar.getProperty("ok"));
 
178
                buttonOK.setLayoutData(getButtonData());
 
179
                buttonOK.addSelectionListener(new SelectionAdapter() {
 
180
                        public void widgetSelected(SelectionEvent arg0) {
 
181
                                int style = 0;
 
182
                                style |= (displayTextNote.getSelection() ? DISPLAY_TEXT_NOTE : 0 );
 
183
                                style |= (displayTextScale.getSelection() ? DISPLAY_TEXT_SCALE : 0 );
 
184
                                
 
185
                                dialog.dispose();
 
186
                                
 
187
                                save(style, fontData, rgbBackground, rgbString, rgbFretPoint, rgbNote, rgbScale);
 
188
                                applyChanges();
 
189
                        }
 
190
                });
 
191
                
 
192
                Button buttonCancel = new Button(buttons, SWT.PUSH);
 
193
                buttonCancel.setText(TuxGuitar.getProperty("cancel"));
 
194
                buttonCancel.setLayoutData(getButtonData());
 
195
                buttonCancel.addSelectionListener(new SelectionAdapter() {
 
196
                        public void widgetSelected(SelectionEvent arg0) {
 
197
                                dialog.dispose();
 
198
                        }
 
199
                });
 
200
                
 
201
                dialog.setDefaultButton( buttonOK );
 
202
                
 
203
                DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
 
204
        }
 
205
        
 
206
        protected GridData getButtonData(){
 
207
                GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 
208
                data.minimumWidth = MINIMUN_BUTTON_WIDTH;
 
209
                data.minimumHeight = MINIMUN_BUTTON_HEIGHT;
 
210
                return data;
 
211
        }
 
212
        
 
213
        protected void applyChanges(){
 
214
                this.dispose();
 
215
                this.load();
 
216
        }
 
217
        
 
218
        private RGB getColorChooser(final Composite parent,String title,RGB rgb){
 
219
                final RGB selection = new RGB(rgb.red,rgb.green,rgb.blue);
 
220
                
 
221
                Label label = new Label(parent, SWT.NULL);
 
222
                label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
 
223
                label.setText(title);
 
224
                
 
225
                final Button button = new Button(parent, SWT.PUSH);
 
226
                button.setLayoutData(getAlignmentData(MINIMUN_CONTROL_WIDTH,SWT.FILL));
 
227
                button.addPaintListener(new PaintListener() {
 
228
                        public void paintControl(PaintEvent e) {
 
229
                                Color color = new Color(parent.getDisplay(), selection);
 
230
                                TGPainter painter = new TGPainter(e.gc);
 
231
                                painter.setBackground(color);
 
232
                                painter.initPath(TGPainter.PATH_FILL);
 
233
                                painter.addRectangle(5,5,button.getSize().x - 10,button.getSize().y - 10);
 
234
                                painter.closePath();
 
235
                                color.dispose();
 
236
                        }
 
237
                });
 
238
                button.addSelectionListener(new SelectionAdapter() {
 
239
                        public void widgetSelected(SelectionEvent event) {
 
240
                                ColorDialog dlg = new ColorDialog(parent.getShell());
 
241
                                dlg.setRGB(selection);
 
242
                                dlg.setText(TuxGuitar.getProperty("choose-color"));
 
243
                                RGB rgb = dlg.open();
 
244
                                if (rgb != null) {
 
245
                                        selection.red = rgb.red;
 
246
                                        selection.green = rgb.green;
 
247
                                        selection.blue = rgb.blue;
 
248
                                        button.redraw();
 
249
                                }
 
250
                        }
 
251
                });
 
252
                
 
253
                return selection;
 
254
        }
 
255
        
 
256
        private FontData getFontChooser(final Composite parent,String title,FontData fontData){
 
257
                final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
 
258
                
 
259
                Label label = new Label(parent, SWT.NULL);
 
260
                label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
 
261
                label.setText(title);
 
262
                
 
263
                Button button = new Button(parent, SWT.PUSH);
 
264
                button.setLayoutData(getAlignmentData(MINIMUN_CONTROL_WIDTH,SWT.FILL));
 
265
                button.setText(TuxGuitar.getProperty("choose"));
 
266
                button.addSelectionListener(new SelectionAdapter() {
 
267
                        public void widgetSelected(SelectionEvent arg0) {
 
268
                                Font font = new Font(parent.getDisplay(),selection);
 
269
                                FontDialog fontDialog = new FontDialog(parent.getShell());
 
270
                                fontDialog.setFontList(font.getFontData());
 
271
                                FontData fd = fontDialog.open();
 
272
                                if(fd != null){
 
273
                                        selection.setName( fd.getName() );
 
274
                                        selection.setHeight( fd.getHeight() );
 
275
                                        selection.setStyle( fd.getStyle() );
 
276
                                }
 
277
                                font.dispose();
 
278
                        }
 
279
                });
 
280
                return selection;
 
281
        }
 
282
        
 
283
        private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
 
284
                GridData data = new GridData();
 
285
                data.minimumWidth = minimumWidth;
 
286
                data.horizontalAlignment = horizontalAlignment;
 
287
                data.verticalAlignment = SWT.DEFAULT;
 
288
                data.grabExcessHorizontalSpace = true;
 
289
                data.grabExcessVerticalSpace = true;
 
290
                return data;
 
291
        }
 
292
}