/* * 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(); } }