/*
* 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.file;
import java.net.URL;
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.Text;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.actions.Action;
import org.herac.tuxguitar.gui.actions.ActionLock;
import org.herac.tuxguitar.gui.helper.SyncThread;
import org.herac.tuxguitar.gui.util.ConfirmDialog;
import org.herac.tuxguitar.gui.util.DialogUtils;
import org.herac.tuxguitar.gui.util.MessageDialog;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class OpenURLAction extends Action {
protected class URLDialog {
protected URL url;
private GridData getButtonData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 80;
data.minimumHeight = 25;
return data;
}
private GridData getMainData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 450;
return data;
}
protected URL openDialog() {
this.url = null;
final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance()
.getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
dialog.setLayout(new GridLayout());
dialog.setText(TuxGuitar.getProperty("file.open-url"));
Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN);
group.setLayout(new GridLayout());
group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
group.setText(TuxGuitar.getProperty("file.open-url"));
Composite composite = new Composite(group, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(getMainData());
final Label label = new Label(composite, SWT.LEFT);
label.setText(TuxGuitar.getProperty("url") + ":");
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true));
final Text url = new Text(composite, SWT.BORDER | SWT.SINGLE);
url.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// ------------------BUTTONS--------------------------
Composite buttons = new Composite(dialog, SWT.NONE);
buttons.setLayout(new GridLayout(2, false));
buttons.setLayoutData(new GridData(SWT.RIGHT, 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) {
try {
URLDialog.this.url = new URL(url.getText());
dialog.dispose();
} catch (Throwable throwable) {
MessageDialog.errorMessage(throwable);
}
}
});
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);
return this.url;
}
}
public static final String NAME = "action.file.open-url";
public OpenURLAction() {
super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
}
protected int execute(final TypedEvent event) {
TuxGuitar.instance().getPlayer().reset();
if (TuxGuitar.instance().getFileHistory().isUnsavedFile()) {
ConfirmDialog confirm = new ConfirmDialog(TuxGuitar
.getProperty("file.save-changes-question"));
confirm.setDefaultStatus(ConfirmDialog.STATUS_CANCEL);
int status = confirm.confirm(ConfirmDialog.BUTTON_YES
| ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL,
ConfirmDialog.BUTTON_YES);
if (status == ConfirmDialog.STATUS_CANCEL) {
return AUTO_UNLOCK;
}
if (status == ConfirmDialog.STATUS_YES) {
final String fileName = FileActionUtils.getFileName();
if (fileName == null) {
return AUTO_UNLOCK;
}
TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
new Thread(new Runnable() {
public void run() {
if (!TuxGuitar.isDisposed()) {
FileActionUtils.save(fileName);
new SyncThread(new Runnable() {
public void run() {
if (!TuxGuitar.isDisposed()) {
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
openURL(event.widget.getData());
}
}
}).start();
}
}
}).start();
return 0;
}
}
openURL(event.widget.getData());
return 0;
}
protected URL getURL(Object data) {
if (data instanceof URL) {
return (URL) data;
}
return new URLDialog().openDialog();
}
protected void openURL(Object data) {
final URL url = getURL(data);
if (url == null) {
ActionLock.unlock();
return;
}
TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
new Thread(new Runnable() {
public void run() {
if (!TuxGuitar.isDisposed()) {
FileActionUtils.open(url);
TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
ActionLock.unlock();
}
}
}).start();
}
}