package org.herac.tuxguitar.io.lilypond;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
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.util.DialogUtils;
public class LilypondSettingsDialog {
private static final int STATUS_ACCEPTED = 2;
private static final int STATUS_CANCELLED = 1;
private static final int STATUS_NONE = 0;
protected int status;
public LilypondSettingsDialog() {
super();
}
private GridData getButtonData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 80;
data.minimumHeight = 25;
return data;
}
private GridLayout getColumnLayout() {
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
return layout;
}
private GridData getComboData() {
GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true);
data.minimumWidth = 120;
return data;
}
private GridData getSpinnerData() {
GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true);
data.minimumWidth = 60;
return data;
}
public LilypondSettings open() {
this.status = STATUS_NONE;
final LilypondSettings settings = LilypondSettings.getDefaults();
final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),
SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
dialog.setLayout(new GridLayout(2, false));
dialog.setText(TuxGuitar.getProperty("lilypond.options"));
Composite columnLeft = new Composite(dialog, SWT.NONE);
columnLeft.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
columnLeft.setLayout(getColumnLayout());
Composite columnRight = new Composite(dialog, SWT.NONE);
columnRight.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
columnRight.setLayout(getColumnLayout());
// ------------------TRACK SELECTION------------------
Group trackGroup = new Group(columnLeft, SWT.SHADOW_ETCHED_IN);
trackGroup.setLayout(new GridLayout(2, false));
trackGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
trackGroup.setText(TuxGuitar
.getProperty("lilypond.options.select-track.tip"));
final Label trackLabel = new Label(trackGroup, SWT.NULL);
trackLabel.setText(TuxGuitar.getProperty("lilypond.options.select-track")
+ ":");
trackLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true));
final Combo trackCombo = new Combo(trackGroup, SWT.DROP_DOWN
| SWT.READ_ONLY);
trackCombo.setLayoutData(getComboData());
for (int number = 1; number <= TuxGuitar.instance().getSongManager()
.getSong().countTracks(); number++) {
trackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number)
.getName());
}
trackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature()
.getCaret().getTrack().getNumber() - 1);
trackCombo.setEnabled(settings.getTrack() != LilypondSettings.ALL_TRACKS);
final Button trackAllCheck = new Button(trackGroup, SWT.CHECK);
trackAllCheck.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true,
2, 1));
trackAllCheck.setText(TuxGuitar
.getProperty("lilypond.options.select-all-tracks"));
trackAllCheck
.setSelection(settings.getTrack() == LilypondSettings.ALL_TRACKS);
// ------------------MEASURE RANGE------------------
Group measureGroup = new Group(columnLeft, SWT.SHADOW_ETCHED_IN);
measureGroup.setLayout(new GridLayout(2, false));
measureGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
measureGroup.setText(TuxGuitar
.getProperty("lilypond.options.measure-range.tip"));
final int minSelection = 1;
final int maxSelection = TuxGuitar.instance().getSongManager().getSong()
.countMeasureHeaders();
Label measureFromLabel = new Label(measureGroup, SWT.NULL);
measureFromLabel.setText(TuxGuitar
.getProperty("lilypond.options.measure-range.from"));
measureFromLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
true));
final Spinner measureFromSpinner = new Spinner(measureGroup, SWT.BORDER);
measureFromSpinner.setLayoutData(getSpinnerData());
measureFromSpinner.setMaximum(maxSelection);
measureFromSpinner.setMinimum(minSelection);
measureFromSpinner.setSelection(minSelection);
Label measureToLabel = new Label(measureGroup, SWT.NULL);
measureToLabel.setText(TuxGuitar
.getProperty("lilypond.options.measure-range.to"));
measureToLabel
.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true));
final Spinner measureToSpinner = new Spinner(measureGroup, SWT.BORDER);
measureToSpinner.setLayoutData(getSpinnerData());
measureToSpinner.setMinimum(minSelection);
measureToSpinner.setMaximum(maxSelection);
measureToSpinner.setSelection(maxSelection);
measureFromSpinner.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int fromSelection = measureFromSpinner.getSelection();
int toSelection = measureToSpinner.getSelection();
if (fromSelection < minSelection) {
measureFromSpinner.setSelection(minSelection);
} else if (fromSelection > toSelection) {
measureFromSpinner.setSelection(toSelection);
}
}
});
measureToSpinner.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int toSelection = measureToSpinner.getSelection();
int fromSelection = measureFromSpinner.getSelection();
if (toSelection < fromSelection) {
measureToSpinner.setSelection(fromSelection);
} else if (toSelection > maxSelection) {
measureToSpinner.setSelection(maxSelection);
}
}
});
// ------------------LAYOUT OPTIONS------------------
Group layoutGroup = new Group(columnRight, SWT.SHADOW_ETCHED_IN);
layoutGroup.setLayout(new GridLayout());
layoutGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
layoutGroup.setText(TuxGuitar.getProperty("lilypond.options.layout.tip"));
final Button scoreCheck = new Button(layoutGroup, SWT.CHECK);
scoreCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
scoreCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-score"));
scoreCheck.setSelection(settings.isScoreEnabled());
final Button tablatureCheck = new Button(layoutGroup, SWT.CHECK);
tablatureCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
tablatureCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-tablature"));
tablatureCheck.setSelection(settings.isTablatureEnabled());
final Button trackGroupCheck = new Button(layoutGroup, SWT.CHECK);
trackGroupCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
trackGroupCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-track-groups"));
trackGroupCheck.setSelection(settings.isTrackGroupEnabled());
trackGroupCheck
.setEnabled(settings.getTrack() == LilypondSettings.ALL_TRACKS);
final Button trackNameCheck = new Button(layoutGroup, SWT.CHECK);
trackNameCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
trackNameCheck.setSelection(settings.isTrackNameEnabled());
trackNameCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-track-names"));
final Button lyricsCheck = new Button(layoutGroup, SWT.CHECK);
lyricsCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
lyricsCheck.setSelection(settings.isLyricsEnabled());
lyricsCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-lyrics"));
final Button textsCheck = new Button(layoutGroup, SWT.CHECK);
textsCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
textsCheck.setSelection(settings.isTextEnabled());
textsCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-texts"));
final Button chordDiagramsCheck = new Button(layoutGroup, SWT.CHECK);
chordDiagramsCheck.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
true));
chordDiagramsCheck.setSelection(settings.isChordDiagramEnabled());
chordDiagramsCheck.setText(TuxGuitar
.getProperty("lilypond.options.layout.enable-chord-diagrams"));
tablatureCheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
if (!tablatureCheck.getSelection()) {
scoreCheck.setSelection(true);
}
}
});
scoreCheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
if (!scoreCheck.getSelection()) {
tablatureCheck.setSelection(true);
}
}
});
trackAllCheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
trackLabel.setEnabled(!trackAllCheck.getSelection());
trackCombo.setEnabled(!trackAllCheck.getSelection());
trackGroupCheck.setEnabled(trackAllCheck.getSelection());
}
});
// ------------------BUTTONS--------------------------
Composite buttons = new Composite(dialog, SWT.NONE);
buttons.setLayout(new GridLayout(2, false));
buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true, 2, 1));
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) {
LilypondSettingsDialog.this.status = STATUS_ACCEPTED;
settings
.setTrack(trackAllCheck.getSelection() ? LilypondSettings.ALL_TRACKS
: trackCombo.getSelectionIndex() + 1);
settings
.setTrackGroupEnabled(trackAllCheck.getSelection() ? trackGroupCheck
.getSelection()
: false);
settings.setTrackNameEnabled(trackNameCheck.getSelection());
settings.setMeasureFrom(measureFromSpinner.getSelection());
settings.setMeasureTo(measureToSpinner.getSelection());
settings.setScoreEnabled(scoreCheck.getSelection());
settings.setTablatureEnabled(tablatureCheck.getSelection());
settings.setChordDiagramEnabled(chordDiagramsCheck.getSelection());
settings.setLyricsEnabled(lyricsCheck.getSelection());
settings.setTextEnabled(textsCheck.getSelection());
settings.check();
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) {
LilypondSettingsDialog.this.status = STATUS_CANCELLED;
dialog.dispose();
}
});
dialog.setDefaultButton(buttonOK);
DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER
| DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
return ((this.status == STATUS_ACCEPTED) ? settings : null);
}
}