package org.herac.tuxguitar.io.image;
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.DirectoryDialog;
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.editors.tab.layout.ViewLayout;
import org.herac.tuxguitar.gui.helper.SyncThread;
import org.herac.tuxguitar.gui.printer.PrintStyles;
import org.herac.tuxguitar.gui.util.DialogUtils;
import org.herac.tuxguitar.song.models.TGSong;
public class ImageExporterDialog extends ImageExporter {
private static GridData getButtonData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 80;
data.minimumHeight = 25;
return data;
}
private static GridData getGroupData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 300;
return data;
}
private static GridData getSpinnerData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 60;
return data;
}
public void exportSong(final TGSong song) {
new SyncThread(new Runnable() {
public void run() {
try {
exportSongDialog(song, TuxGuitar.instance().getShell());
} catch (Throwable throwable) {
return;
}
}
}).start();
}
public void exportSong(TGSong song, PrintStyles styles, ImageFormat format) {
try {
DirectoryDialog dialog = new DirectoryDialog(TuxGuitar.instance()
.getShell());
dialog.setText(TuxGuitar
.getProperty("tuxguitar-image.directory-dialog.title"));
String path = dialog.open();
if (path != null) {
setPath(path);
setStyles(styles);
setFormat(format);
super.exportSong(song);
}
} catch (Throwable throwable) {
return;
}
}
public void exportSongDialog(final TGSong song, final Shell shell) {
final PrintStyles styles = getDefaultStyles(song);
final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM
| SWT.APPLICATION_MODAL);
dialog.setLayout(new GridLayout());
dialog.setText(TuxGuitar.getProperty("options"));
// ------------------FORMAT SELECTION------------------
Group formatGroup = new Group(dialog, SWT.SHADOW_ETCHED_IN);
formatGroup.setLayout(new GridLayout(2, false));
formatGroup.setLayoutData(getGroupData());
formatGroup.setText(TuxGuitar.getProperty("tuxguitar-image.format"));
Label formatLabel = new Label(formatGroup, SWT.NULL);
formatLabel.setText(TuxGuitar.getProperty("tuxguitar-image.format"));
final Combo formatCombo = new Combo(formatGroup, SWT.DROP_DOWN
| SWT.READ_ONLY);
formatCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
for (int i = 0; i < ImageFormat.IMAGE_FORMATS.length; i++) {
formatCombo.add(ImageFormat.IMAGE_FORMATS[i].getName());
}
formatCombo.select(0);
// ------------------TRACK SELECTION------------------
Group track = new Group(dialog, SWT.SHADOW_ETCHED_IN);
track.setLayout(new GridLayout(2, false));
track.setLayoutData(getGroupData());
track.setText(TuxGuitar.getProperty("track"));
Label trackLabel = new Label(track, SWT.NULL);
trackLabel.setText(TuxGuitar.getProperty("track"));
final Combo tracks = new Combo(track, SWT.DROP_DOWN | SWT.READ_ONLY);
tracks.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
for (int number = 1; number <= TuxGuitar.instance().getSongManager()
.getSong().countTracks(); number++) {
tracks.add(TuxGuitar.instance().getSongManager().getTrack(number)
.getName());
}
tracks.select(TuxGuitar.instance().getTablatureEditor().getTablature()
.getCaret().getTrack().getNumber() - 1);
// ------------------MEASURE RANGE------------------
Group range = new Group(dialog, SWT.SHADOW_ETCHED_IN);
range.setLayout(new GridLayout(2, false));
range.setLayoutData(getGroupData());
range.setText(TuxGuitar.getProperty("print.range"));
final int minSelection = 1;
final int maxSelection = TuxGuitar.instance().getSongManager().getSong()
.countMeasureHeaders();
Label fromLabel = new Label(range, SWT.NULL);
fromLabel.setText(TuxGuitar.getProperty("edit.from"));
final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
fromSpinner.setLayoutData(getSpinnerData());
fromSpinner.setMaximum(maxSelection);
fromSpinner.setMinimum(minSelection);
fromSpinner.setSelection(minSelection);
Label toLabel = new Label(range, SWT.NULL);
toLabel.setText(TuxGuitar.getProperty("edit.to"));
final Spinner toSpinner = new Spinner(range, SWT.BORDER);
toSpinner.setLayoutData(getSpinnerData());
toSpinner.setMinimum(minSelection);
toSpinner.setMaximum(maxSelection);
toSpinner.setSelection(maxSelection);
fromSpinner.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int fromSelection = fromSpinner.getSelection();
int toSelection = toSpinner.getSelection();
if (fromSelection < minSelection) {
fromSpinner.setSelection(minSelection);
} else if (fromSelection > toSelection) {
fromSpinner.setSelection(toSelection);
}
}
});
toSpinner.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int toSelection = toSpinner.getSelection();
int fromSelection = fromSpinner.getSelection();
if (toSelection < fromSelection) {
toSpinner.setSelection(fromSelection);
} else if (toSelection > maxSelection) {
toSpinner.setSelection(maxSelection);
}
}
});
// ------------------CHECK OPTIONS--------------------
Group options = new Group(dialog, SWT.SHADOW_ETCHED_IN);
options.setLayout(new GridLayout());
options.setLayoutData(getGroupData());
options.setText(TuxGuitar.getProperty("options"));
final Button tablatureEnabled = new Button(options, SWT.CHECK);
tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled"));
tablatureEnabled.setSelection(true);
final Button scoreEnabled = new Button(options, SWT.CHECK);
scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled"));
scoreEnabled.setSelection(true);
final Button chordNameEnabled = new Button(options, SWT.CHECK);
chordNameEnabled
.setText(TuxGuitar.getProperty("export.chord-name-enabled"));
chordNameEnabled.setSelection(true);
final Button chordDiagramEnabled = new Button(options, SWT.CHECK);
chordDiagramEnabled.setText(TuxGuitar
.getProperty("export.chord-diagram-enabled"));
chordDiagramEnabled.setSelection(true);
final Button blackAndWhite = new Button(options, SWT.CHECK);
blackAndWhite.setText(TuxGuitar.getProperty("export.black-and-white"));
blackAndWhite.setSelection(true);
tablatureEnabled.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
if (!tablatureEnabled.getSelection()) {
scoreEnabled.setSelection(true);
}
}
});
scoreEnabled.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
if (!scoreEnabled.getSelection()) {
tablatureEnabled.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 format = formatCombo.getSelectionIndex();
if (format < 0 || format >= ImageFormat.IMAGE_FORMATS.length) {
format = 0;
}
int style = 0;
style |= (scoreEnabled.getSelection() ? ViewLayout.DISPLAY_SCORE : 0);
style |= (tablatureEnabled.getSelection() ? ViewLayout.DISPLAY_TABLATURE
: 0);
style |= (chordNameEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_NAME
: 0);
style |= (chordDiagramEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_DIAGRAM
: 0);
styles.setTrackNumber(tracks.getSelectionIndex() + 1);
styles.setFromMeasure(fromSpinner.getSelection());
styles.setToMeasure(toSpinner.getSelection());
styles.setBlackAndWhite(blackAndWhite.getSelection());
styles.setStyle(style);
dialog.dispose();
exportSong(song, styles, ImageFormat.IMAGE_FORMATS[format]);
}
});
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);
}
}