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.actions.measure;
9
import org.eclipse.swt.SWT;
10
import org.eclipse.swt.events.SelectionAdapter;
11
import org.eclipse.swt.events.SelectionEvent;
12
import org.eclipse.swt.events.TypedEvent;
13
import org.eclipse.swt.layout.GridData;
14
import org.eclipse.swt.layout.GridLayout;
15
import org.eclipse.swt.widgets.Button;
16
import org.eclipse.swt.widgets.Composite;
17
import org.eclipse.swt.widgets.Group;
18
import org.eclipse.swt.widgets.Shell;
19
import org.herac.tuxguitar.gui.TuxGuitar;
20
import org.herac.tuxguitar.gui.actions.Action;
21
import org.herac.tuxguitar.gui.helper.SyncThread;
22
import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure;
23
import org.herac.tuxguitar.gui.util.DialogUtils;
28
* TODO To change the template for this generated type comment go to
29
* Window - Preferences - Java - Code Style - Code Templates
31
public class AddMeasureAction extends Action{
32
public static final String NAME = "action.measure.add";
34
protected int selectedNumber;
36
public AddMeasureAction() {
37
super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
40
protected int execute(TypedEvent e){
41
final int number = showDialog();
42
if(number > 0 && number <= (getSongManager().getSong().countMeasureHeaders() + 1)){
43
new Thread(new Runnable() {
45
new SyncThread(new Runnable() {
47
//comienza el undoable
48
UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
49
TuxGuitar.instance().getFileHistory().setUnsavedFile();
51
getSongManager().addNewMeasure(number);
54
int trackNumber = getEditor().getTablature().getCaret().getTrack().getNumber();
55
int stringNumber = getEditor().getTablature().getCaret().getStringNumber();
56
long start = getSongManager().getMeasureHeader(number).getStart();
57
getEditor().getTablature().getCaret().update(trackNumber,start,stringNumber);
60
addUndoableEdit(undoable.endUndo());
62
TuxGuitar.instance().updateCache(true);
71
public int showDialog() {
72
this.selectedNumber = -1;
73
if (getEditor().getTablature().getCaret().getMeasure() != null) {
74
final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
75
dialog.setLayout(new GridLayout());
76
dialog.setText(TuxGuitar.getProperty("measure.add"));
78
//----------------------------------------------------------------------
79
Group radios = new Group(dialog,SWT.SHADOW_ETCHED_IN);
80
radios.setLayout(new GridLayout());
81
radios.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
82
radios.setText(TuxGuitar.getProperty("measure.add"));
84
final Button beforePosition = new Button(radios,SWT.RADIO);
85
beforePosition.setText(TuxGuitar.getProperty("measure.add-before-current-position"));
87
final Button afterPosition = new Button(radios,SWT.RADIO);
88
afterPosition.setText(TuxGuitar.getProperty("measure.add-after-current-position"));
90
final Button atEnd = new Button(radios,SWT.RADIO);
91
atEnd.setText(TuxGuitar.getProperty("measure.add-at-end"));
92
atEnd.setSelection(true);
93
//------------------BUTTONS--------------------------
94
Composite buttons = new Composite(dialog, SWT.NONE);
95
buttons.setLayout(new GridLayout(2,false));
96
buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
98
final Button buttonOK = new Button(buttons, SWT.PUSH);
99
buttonOK.setText(TuxGuitar.getProperty("ok"));
100
buttonOK.setLayoutData(getButtonData());
101
buttonOK.addSelectionListener(new SelectionAdapter() {
102
public void widgetSelected(SelectionEvent arg0) {
103
if(beforePosition.getSelection()){
104
AddMeasureAction.this.selectedNumber = (getEditor().getTablature().getCaret().getMeasure().getNumber());
105
}else if(afterPosition.getSelection()){
106
AddMeasureAction.this.selectedNumber = (getEditor().getTablature().getCaret().getMeasure().getNumber() + 1);
107
}else if(atEnd.getSelection()){
108
AddMeasureAction.this.selectedNumber = (getSongManager().getSong().countMeasureHeaders() + 1);
114
Button buttonCancel = new Button(buttons, SWT.PUSH);
115
buttonCancel.setText(TuxGuitar.getProperty("cancel"));
116
buttonCancel.setLayoutData(getButtonData());
117
buttonCancel.addSelectionListener(new SelectionAdapter() {
118
public void widgetSelected(SelectionEvent arg0) {
123
dialog.setDefaultButton( buttonOK );
125
DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
127
return this.selectedNumber;
130
private GridData getButtonData(){
131
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
132
data.minimumWidth = 80;
133
data.minimumHeight = 25;