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

« back to all changes in this revision

Viewing changes to TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/AddMeasureAction.java

  • Committer: Bazaar Package Importer
  • Author(s): Philippe Coval
  • Date: 2008-06-19 00:30:30 UTC
  • mto: (5.1.2 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20080619003030-h719szrhsngou7c6
Tags: upstream-1.0
ImportĀ upstreamĀ versionĀ 1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Created on 17-dic-2005
 
3
 *
 
4
 * TODO To change the template for this generated file go to
 
5
 * Window - Preferences - Java - Code Style - Code Templates
 
6
 */
 
7
package org.herac.tuxguitar.gui.actions.measure;
 
8
 
 
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;
 
24
 
 
25
/**
 
26
 * @author julian
 
27
 *
 
28
 * TODO To change the template for this generated type comment go to
 
29
 * Window - Preferences - Java - Code Style - Code Templates
 
30
 */
 
31
public class AddMeasureAction extends Action{
 
32
        public static final String NAME = "action.measure.add";
 
33
        
 
34
        protected int selectedNumber;
 
35
        
 
36
        public AddMeasureAction() {
 
37
                super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
 
38
        }
 
39
        
 
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() {
 
44
                                public void run() {
 
45
                                        new SyncThread(new Runnable() {
 
46
                                                public void run() {
 
47
                                                        //comienza el undoable
 
48
                                                        UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
 
49
                                                        TuxGuitar.instance().getFileHistory().setUnsavedFile();
 
50
                                                        
 
51
                                                        getSongManager().addNewMeasure(number);
 
52
                                                        updateTablature();
 
53
                                                        
 
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);
 
58
                                                        
 
59
                                                        //termia el undoable
 
60
                                                        addUndoableEdit(undoable.endUndo());
 
61
                                                        
 
62
                                                        TuxGuitar.instance().updateCache(true);
 
63
                                                }
 
64
                                        }).start();
 
65
                                }
 
66
                        }).start();
 
67
                }
 
68
                return 0;
 
69
        }
 
70
        
 
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"));
 
77
                        
 
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"));
 
83
                        
 
84
                        final Button beforePosition = new Button(radios,SWT.RADIO);
 
85
                        beforePosition.setText(TuxGuitar.getProperty("measure.add-before-current-position"));
 
86
                        
 
87
                        final Button afterPosition = new Button(radios,SWT.RADIO);
 
88
                        afterPosition.setText(TuxGuitar.getProperty("measure.add-after-current-position"));
 
89
                        
 
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));
 
97
                        
 
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);
 
109
                                        }
 
110
                                        dialog.dispose();
 
111
                                }
 
112
                        });
 
113
                        
 
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) {
 
119
                                        dialog.dispose();
 
120
                                }
 
121
                        });
 
122
                        
 
123
                        dialog.setDefaultButton( buttonOK );
 
124
                        
 
125
                        DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
 
126
                }
 
127
                return this.selectedNumber;
 
128
        }
 
129
        
 
130
        private GridData getButtonData(){
 
131
                GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 
132
                data.minimumWidth = 80;
 
133
                data.minimumHeight = 25;
 
134
                return data;
 
135
        }
 
136
}