/* * Created on 17-dic-2005 * * TODO To change the template for this generated file go to Window - * Preferences - Java - Code Style - Code Templates */ package org.herac.tuxguitar.gui.actions.measure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.Action; import org.herac.tuxguitar.gui.helper.SyncThread; import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined; import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure; import org.herac.tuxguitar.gui.util.DialogUtils; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class AddMeasureAction extends Action { public static final String NAME = "action.measure.add"; public AddMeasureAction() { super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE); } private void addMeasure(final int number, final int count) { if (count > 0 && number > 0 && number <= (getSongManager().getSong().countMeasureHeaders() + 1)) { new Thread(new Runnable() { public void run() { new SyncThread(new Runnable() { public void run() { UndoableJoined undoable = new UndoableJoined(); for (int i = 0; i < count; i++) { // comienza el undoable UndoableAddMeasure mUndoable = UndoableAddMeasure .startUndo((number + i)); getSongManager().addNewMeasure((number + i)); // termia el undoable undoable.addUndoableEdit(mUndoable.endUndo()); } updateTablature(); int trackNumber = getEditor().getTablature().getCaret() .getTrack().getNumber(); int stringNumber = getEditor().getTablature().getCaret() .getStringNumber(); long start = getSongManager().getMeasureHeader(number).getStart(); getEditor().getTablature().getCaret().update(trackNumber, start, stringNumber); // termia el undoable addUndoableEdit(undoable.endUndo()); TuxGuitar.instance().getFileHistory().setUnsavedFile(); TuxGuitar.instance().updateCache(true); } }).start(); } }).start(); } } protected int execute(TypedEvent e) { showDialog(); return 0; } private GridData getButtonData() { GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } private GridData getSpinnerData() { GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 150; return data; } public void showDialog() { if (getEditor().getTablature().getCaret().getMeasure() != null) { final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance() .getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("measure.add")); // -----------------COUNT------------------------ Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("measure.add")); Label countLabel = new Label(group, SWT.NULL); countLabel.setText(TuxGuitar.getProperty("measure.add.count")); final Spinner countSpinner = new Spinner(group, SWT.BORDER); countSpinner.setLayoutData(getSpinnerData()); countSpinner.setMinimum(1); countSpinner.setMaximum(100); countSpinner.setSelection(1); // ---------------------------------------------------------------------- Group options = new Group(dialog, SWT.SHADOW_ETCHED_IN); options.setLayout(new GridLayout()); options.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); options.setText(TuxGuitar.getProperty("options")); final Button beforePosition = new Button(options, SWT.RADIO); beforePosition.setText(TuxGuitar .getProperty("measure.add-before-current-position")); final Button afterPosition = new Button(options, SWT.RADIO); afterPosition.setText(TuxGuitar .getProperty("measure.add-after-current-position")); final Button atEnd = new Button(options, SWT.RADIO); atEnd.setText(TuxGuitar.getProperty("measure.add-at-end")); atEnd.setSelection(true); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int number = 0; int count = countSpinner.getSelection(); if (beforePosition.getSelection()) { number = (getEditor().getTablature().getCaret().getMeasure() .getNumber()); } else if (afterPosition.getSelection()) { number = (getEditor().getTablature().getCaret().getMeasure() .getNumber() + 1); } else if (atEnd.getSelection()) { number = (getSongManager().getSong().countMeasureHeaders() + 1); } addMeasure(number, count); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton(buttonOK); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } } }