2
* Created on 17-dic-2005
4
* TODO To change the template for this generated file go to
5
* Window - Preferences - Java - Code Style - Code Templates
7
package org.herac.tuxguitar.gui.system.config;
9
import java.util.ArrayList;
10
import java.util.Iterator;
11
import java.util.List;
12
import java.util.Properties;
14
import org.eclipse.swt.SWT;
15
import org.eclipse.swt.events.SelectionAdapter;
16
import org.eclipse.swt.events.SelectionEvent;
17
import org.eclipse.swt.graphics.Point;
18
import org.eclipse.swt.layout.FormLayout;
19
import org.eclipse.swt.layout.GridData;
20
import org.eclipse.swt.layout.GridLayout;
21
import org.eclipse.swt.widgets.Button;
22
import org.eclipse.swt.widgets.Composite;
23
import org.eclipse.swt.widgets.Shell;
24
import org.eclipse.swt.widgets.ToolBar;
25
import org.herac.tuxguitar.gui.TuxGuitar;
26
import org.herac.tuxguitar.gui.actions.ActionLock;
27
import org.herac.tuxguitar.gui.editors.TablatureEditor;
28
import org.herac.tuxguitar.gui.helper.SyncThread;
29
import org.herac.tuxguitar.gui.system.config.items.LanguageOption;
30
import org.herac.tuxguitar.gui.system.config.items.MainOption;
31
import org.herac.tuxguitar.gui.system.config.items.Option;
32
import org.herac.tuxguitar.gui.system.config.items.SkinOption;
33
import org.herac.tuxguitar.gui.system.config.items.SoundOption;
34
import org.herac.tuxguitar.gui.system.config.items.StylesOption;
35
import org.herac.tuxguitar.gui.system.config.items.ToolBarsOption;
36
import org.herac.tuxguitar.gui.util.ConfirmDialog;
37
import org.herac.tuxguitar.gui.util.DialogUtils;
42
* TODO To change the template for this generated type comment go to
43
* Window - Preferences - Java - Code Style - Code Templates
45
public class TGConfigEditor{
47
protected Shell dialog;
48
protected TGConfigManager config;
49
protected List options;
50
protected Properties defaults;
51
protected boolean accepted;
53
protected List runnables;
55
public TGConfigEditor() {
56
this.config = TuxGuitar.instance().getConfig();
59
public void showDialog(Shell shell) {
60
this.accepted = false;
62
this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
63
this.dialog.setLayout(new GridLayout());
64
this.dialog.setText(TuxGuitar.getProperty("settings.config"));
66
//-------main-------------------------------------
67
Composite mainComposite = new Composite(this.dialog,SWT.NONE);
68
mainComposite.setLayout(new GridLayout(2,false));
69
mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
70
createComposites(mainComposite);
72
//-------buttons-------------------------------------
73
Composite buttonComposite = new Composite(this.dialog,SWT.NONE);
74
buttonComposite.setLayout(new GridLayout(3,true));
75
buttonComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
77
Button buttonDefaults = new Button(buttonComposite, SWT.PUSH);
78
buttonDefaults.setLayoutData(getButtonData());
79
buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
80
buttonDefaults.addSelectionListener(new SelectionAdapter() {
81
public void widgetSelected(SelectionEvent arg0) {
82
TGConfigEditor.this.accepted = true;
83
TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
86
ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
87
confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
88
if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
89
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
97
Button buttonOK = new Button(buttonComposite, SWT.PUSH);
98
buttonOK.setLayoutData(getButtonData());
99
buttonOK.setText(TuxGuitar.getProperty("ok"));
100
buttonOK.addSelectionListener(new SelectionAdapter() {
101
public void widgetSelected(SelectionEvent arg0) {
102
TGConfigEditor.this.accepted = true;
103
TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
106
ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
107
confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
108
if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
109
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
117
Button buttonCancel = new Button(buttonComposite, SWT.PUSH);
118
buttonCancel.setLayoutData(getButtonData());
119
buttonCancel.setText(TuxGuitar.getProperty("cancel"));
120
buttonCancel.addSelectionListener(new SelectionAdapter() {
121
public void widgetSelected(SelectionEvent arg0) {
122
TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
124
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
128
this.dialog.setDefaultButton( buttonOK );
130
DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
137
private void createComposites(Composite parent) {
138
ToolBar toolBar = new ToolBar(parent, SWT.VERTICAL | SWT.FLAT | SWT.WRAP);
139
toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
141
Composite option = new Composite(parent,SWT.NONE);
142
option.setLayout(new FormLayout());
144
initOptions(toolBar,option);
146
Point optionSize = computeOptionsSize( 0 , toolBar.computeSize(SWT.DEFAULT,SWT.DEFAULT).y );
147
option.setLayoutData(new GridData(optionSize.x,optionSize.y));
149
if(this.options.size() > 0){
150
select((Option)this.options.get(0));
154
private void initOptions(ToolBar toolBar,Composite parent){
155
this.options = new ArrayList();
156
this.options.add(new MainOption(this,toolBar,parent));
157
this.options.add(new StylesOption(this,toolBar,parent));
158
this.options.add(new LanguageOption(this,toolBar,parent));
159
this.options.add(new ToolBarsOption(this,toolBar,parent));
160
this.options.add(new SkinOption(this,toolBar,parent));
161
this.options.add(new SoundOption(this,toolBar,parent));
163
Iterator it = this.options.iterator();
165
Option option = (Option)it.next();
166
option.createOption();
170
private Point computeOptionsSize(int minimumWidth, int minimumHeight){
171
int width = minimumWidth;
172
int height = minimumHeight;
174
Iterator it = this.options.iterator();
176
Option option = (Option)it.next();
177
Point size = option.computeSize();
185
return new Point(width, height);
192
protected GridData getButtonData(){
193
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
194
data.minimumWidth = 80;
195
data.minimumHeight = 25;
199
public GridData makeGridData(int with,int height,int minWith,int minHeight){
200
GridData data = new GridData();
201
data.minimumWidth = minWith;
202
data.minimumHeight = minHeight;
204
data.widthHint = with;
206
data.horizontalAlignment = SWT.FILL;
207
data.grabExcessHorizontalSpace = true;
210
data.heightHint = with;
212
data.verticalAlignment = SWT.FILL;
213
data.grabExcessVerticalSpace = true;
219
public void select(Option option){
221
option.setVisible(true);
222
//this.dialog.layout();
223
this.dialog.redraw();
226
private void hideAll(){
227
Iterator it = this.options.iterator();
229
Option option = (Option)it.next();
230
option.setVisible(false);
234
protected void updateOptions(){
235
Iterator it = this.options.iterator();
237
Option option = (Option)it.next();
238
option.updateConfig();
243
protected void setDefaults(){
244
Iterator it = this.options.iterator();
246
Option option = (Option)it.next();
247
option.updateDefaults();
252
protected void applyConfig(final boolean force){
253
new Thread(new Runnable() {
255
TGConfigEditor.this.runnables = new ArrayList();
257
Iterator it = TGConfigEditor.this.options.iterator();
259
Option option = (Option)it.next();
260
option.applyConfig(force);
263
new SyncThread( new Runnable() {
265
Iterator it = TGConfigEditor.this.runnables.iterator();
267
Runnable current = (Runnable)it.next();
270
new Thread(new Runnable() {
272
TuxGuitar.instance().fireUpdate();
273
TuxGuitar.instance().updateCache(true);
274
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
284
protected void dispose(){
285
Iterator it = this.options.iterator();
287
Option option = (Option)it.next();
290
getDialog().dispose();
293
public Properties getDefaults(){
294
if(this.defaults == null){
295
this.defaults = new TGConfigDefaults().getProperties();
297
return this.defaults;
300
public TGConfigManager getConfig(){
304
public TablatureEditor getEditor(){
305
return TuxGuitar.instance().getTablatureEditor();
308
public Shell getDialog(){
312
public void addSyncThread(Runnable runnable){
313
this.runnables.add( runnable );