1
package org.herac.tuxguitar.gui.editors.fretboard;
3
import java.util.Properties;
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;
30
public class FretBoardConfig {
32
public static final int DISPLAY_TEXT_NOTE = 0x01;
34
public static final int DISPLAY_TEXT_SCALE = 0x02;
38
private Color colorBackground;
39
private Color colorString;
40
private Color colorFretPoint;
41
private Color colorNote;
42
private Color colorScale;
44
public FretBoardConfig(){
48
public int getStyle() {
52
public Font getFont() {
56
public Color getColorBackground() {
57
return this.colorBackground;
60
public Color getColorString() {
61
return this.colorString;
64
public Color getColorFretPoint() {
65
return this.colorFretPoint;
68
public Color getColorNote() {
69
return this.colorNote;
72
public Color getColorScale() {
73
return this.colorScale;
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));
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));
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);
111
public void dispose(){
113
this.colorBackground.dispose();
114
this.colorString.dispose();
115
this.colorFretPoint.dispose();
116
this.colorNote.dispose();
117
this.colorScale.dispose();
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;
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"));
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"));
135
final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("fretboard.font"),this.font.getFontData()[0]);
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());
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"));
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 );
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 );
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));
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) {
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) {
182
style |= (displayTextNote.getSelection() ? DISPLAY_TEXT_NOTE : 0 );
183
style |= (displayTextScale.getSelection() ? DISPLAY_TEXT_SCALE : 0 );
187
save(style, fontData, rgbBackground, rgbString, rgbFretPoint, rgbNote, rgbScale);
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) {
201
dialog.setDefaultButton( buttonOK );
203
DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
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;
213
protected void applyChanges(){
218
private RGB getColorChooser(final Composite parent,String title,RGB rgb){
219
final RGB selection = new RGB(rgb.red,rgb.green,rgb.blue);
221
Label label = new Label(parent, SWT.NULL);
222
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
223
label.setText(title);
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);
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();
245
selection.red = rgb.red;
246
selection.green = rgb.green;
247
selection.blue = rgb.blue;
256
private FontData getFontChooser(final Composite parent,String title,FontData fontData){
257
final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
259
Label label = new Label(parent, SWT.NULL);
260
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
261
label.setText(title);
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();
273
selection.setName( fd.getName() );
274
selection.setHeight( fd.getHeight() );
275
selection.setStyle( fd.getStyle() );
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;