/* * 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.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.events.TypedEvent; 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.FileChooser; import org.herac.tuxguitar.io.base.TGLocalFileImporter; import org.herac.tuxguitar.io.base.TGRawImporter; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ImportSongAction extends Action { public static final String NAME = "action.file.import"; public ImportSongAction() { super(NAME, AUTO_LOCK | AUTO_UPDATE); } 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); processImporter(event.widget.getData()); } } }).start(); } } }).start(); return 0; } } processImporter(event.widget.getData()); return 0; } protected boolean isValidFile(String path) { if (path != null) { File file = new File(path); return (file.exists() && file.isFile()); } return false; } protected void processImporter(Object importer) { if (importer instanceof TGLocalFileImporter) { this.processLocalFileImporter((TGLocalFileImporter) importer); } else if (importer instanceof TGRawImporter) { this.processRawImporter((TGRawImporter) importer); } } private void processLocalFileImporter(final TGLocalFileImporter importer) { final String path = FileChooser.instance().open( TuxGuitar.instance().getShell(), importer.getFileFormat()); if (!isValidFile(path) || !importer.configure(false)) { ActionLock.unlock(); return; } TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if (!TuxGuitar.isDisposed()) { FileActionUtils.importSong(importer, path); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } private void processRawImporter(final TGRawImporter importer) { TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT); new Thread(new Runnable() { public void run() { if (!TuxGuitar.isDisposed()) { FileActionUtils.importSong(importer); TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW); ActionLock.unlock(); } } }).start(); } }