1
package org.herac.tuxguitar.gui.editors.matrix;
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.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;
31
public class MatrixConfig {
34
private Color[] colorLines;
35
private Color colorForeground;
36
private Color colorBorder;
37
private Color colorPosition;
38
private Color colorNote;
39
private Color colorPlay;
41
public MatrixConfig(){
45
public Font getFont() {
49
public Color getColorForeground() {
50
return this.colorForeground;
53
public Color getColorBorder() {
54
return this.colorBorder;
57
public Color getColorPosition() {
58
return this.colorPosition;
61
public Color getColorNote() {
62
return this.colorNote;
65
public Color getColorPlay() {
66
return this.colorPlay;
69
public Color[] getColorLines() {
70
return this.colorLines;
73
public Color getColorLine(int index) {
74
return this.colorLines[index];
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)),
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));
107
public void save(FontData fontData,
114
TGConfigManager config = TuxGuitar.instance().getConfig();
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]);
127
public void dispose(){
129
dispose(this.colorForeground);
130
dispose(this.colorBorder);
131
dispose(this.colorPosition);
132
dispose(this.colorNote);
133
dispose(this.colorPlay);
134
dispose(this.colorLines);
137
protected void dispose(Resource[] resources){
138
if(resources != null){
139
for(int i = 0; i < resources.length; i ++){
140
dispose(resources[i]);
145
protected void dispose(Resource resource){
146
if(resource != null){
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;
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"));
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"));
167
final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("matrix.font"),this.font.getFontData()[0]);
170
final RGB rgbForeground = getColorChooser(group,TuxGuitar.getProperty("matrix.foreground-color"), this.colorForeground.getRGB());
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()),
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());
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));
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) {
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) {
205
save(fontData, rgbForeground, rgbBorder, rgbPosition, rgbNote, rgbPlay, rgbLines);
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) {
219
dialog.setDefaultButton( buttonOK );
221
DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
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;
231
protected void applyChanges(){
236
private RGB getColorChooser(final Composite parent,String title,RGB rgb){
237
final RGB selection = new RGB(rgb.red,rgb.green,rgb.blue);
239
Label label = new Label(parent, SWT.NULL);
240
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
241
label.setText(title);
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);
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();
263
selection.red = rgb.red;
264
selection.green = rgb.green;
265
selection.blue = rgb.blue;
274
private FontData getFontChooser(final Composite parent,String title,FontData fontData){
275
final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
277
Label label = new Label(parent, SWT.NULL);
278
label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
279
label.setText(title);
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();
291
selection.setName( fd.getName() );
292
selection.setHeight( fd.getHeight() );
293
selection.setStyle( fd.getStyle() );
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;