mirror of
https://github.com/AppleCommander/AppleCommander.git
synced 2024-11-20 08:31:39 +00:00
Separated the generic wizard interface from export wizard. This will
be reused in all wizards (ie, the Disk Image wizard as well as the Import wizard).
This commit is contained in:
parent
b05fcd2bea
commit
726a10810f
@ -19,159 +19,32 @@
|
||||
*/
|
||||
package com.webcodepro.applecommander.ui.swt;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.layout.FillLayout;
|
||||
import org.eclipse.swt.layout.RowData;
|
||||
import org.eclipse.swt.layout.RowLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
import com.webcodepro.applecommander.storage.FileFilter;
|
||||
import com.webcodepro.applecommander.storage.FormattedDisk;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* File export wizard.
|
||||
* <p>
|
||||
* Date created: Nov 7, 2002 9:22:35 PM
|
||||
* @author: Rob Greene
|
||||
*/
|
||||
public class ExportWizard {
|
||||
public class ExportWizard extends Wizard {
|
||||
private FormattedDisk disk;
|
||||
private Shell parent;
|
||||
private Shell dialog;
|
||||
private Image logo; // managed by SwtAppleCommander
|
||||
private Stack wizardPanes = new Stack();
|
||||
private FileFilter fileFilter;
|
||||
private Stack wizardPanes = new Stack();
|
||||
private String directory;
|
||||
private boolean wizardCompleted;
|
||||
private Button backButton;
|
||||
private Button nextButton;
|
||||
private Button finishButton;
|
||||
private Composite contentPane;
|
||||
/**
|
||||
* Constructor for ExportWizard.
|
||||
*/
|
||||
public ExportWizard(Shell parent, Image logo, FormattedDisk disk) {
|
||||
super();
|
||||
this.parent = parent;
|
||||
this.logo = logo;
|
||||
super(parent, logo, "Export Wizard");
|
||||
this.disk = disk;
|
||||
}
|
||||
/**
|
||||
* Create the dialog.
|
||||
*/
|
||||
private void createDialog() {
|
||||
dialog = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
|
||||
dialog.setText("Export Wizard");
|
||||
RowLayout layout = new RowLayout(SWT.VERTICAL);
|
||||
layout.justify = true;
|
||||
layout.marginBottom = 5;
|
||||
layout.marginLeft = 5;
|
||||
layout.marginRight = 5;
|
||||
layout.marginTop = 5;
|
||||
layout.spacing = 3;
|
||||
dialog.setLayout(layout);
|
||||
|
||||
// Wizard logo
|
||||
RowData rowData = new RowData();
|
||||
rowData.width = logo.getImageData().width;
|
||||
rowData.height = logo.getImageData().height;
|
||||
ImageCanvas imageCanvas = new ImageCanvas(dialog, SWT.BORDER, logo, rowData);
|
||||
|
||||
// Starting pane
|
||||
rowData = new RowData();
|
||||
rowData.width = logo.getImageData().width;
|
||||
contentPane = new Composite(dialog, SWT.BORDER);
|
||||
contentPane.setLayoutData(rowData);
|
||||
contentPane.setLayout(new FillLayout());
|
||||
|
||||
// Bottom row of buttons
|
||||
Composite composite = new Composite(dialog, SWT.NONE);
|
||||
composite.setLayoutData(rowData);
|
||||
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
|
||||
Button button = new Button(composite, SWT.PUSH);
|
||||
button.setText("Cancel");
|
||||
button.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
wizardCompleted = false;
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
backButton = new Button(composite, SWT.PUSH);
|
||||
backButton.setEnabled(false);
|
||||
backButton.setText("< Back");
|
||||
backButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
WizardPane current = (WizardPane) wizardPanes.pop();
|
||||
WizardPane previous = (WizardPane) wizardPanes.peek();
|
||||
backButton.setEnabled(wizardPanes.size() > 1);
|
||||
current.dispose();
|
||||
previous.open();
|
||||
dialog.pack();
|
||||
}
|
||||
});
|
||||
nextButton = new Button(composite, SWT.PUSH);
|
||||
nextButton.setText("Next >");
|
||||
nextButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
WizardPane current = (WizardPane) wizardPanes.peek();
|
||||
WizardPane next = current.getNextPane();
|
||||
wizardPanes.add(next);
|
||||
backButton.setEnabled(wizardPanes.size() > 1);
|
||||
current.dispose();
|
||||
next.open();
|
||||
dialog.pack();
|
||||
}
|
||||
});
|
||||
finishButton = new Button(composite, SWT.PUSH);
|
||||
finishButton.setEnabled(false);
|
||||
finishButton.setText("Finish");
|
||||
finishButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
wizardCompleted = true;
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
|
||||
WizardPane wizardPane = new ExportFileStartPane(contentPane, this, null);
|
||||
wizardPanes.add(wizardPane);
|
||||
wizardPane.open();
|
||||
|
||||
dialog.pack();
|
||||
}
|
||||
/**
|
||||
* Open and display the dialog.
|
||||
*/
|
||||
public void open() {
|
||||
createDialog();
|
||||
dialog.open();
|
||||
Display display = dialog.getDisplay();
|
||||
while (!dialog.isDisposed()) {
|
||||
if (!display.readAndDispatch()) display.sleep ();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Dispose of all panels and resources.
|
||||
*/
|
||||
public void dispose() {
|
||||
while (!wizardPanes.empty()) {
|
||||
WizardPane pane = (WizardPane) wizardPanes.pop();
|
||||
pane.dispose();
|
||||
pane = null;
|
||||
}
|
||||
dialog.dispose();
|
||||
backButton.dispose();
|
||||
nextButton.dispose();
|
||||
finishButton.dispose();
|
||||
contentPane.dispose();
|
||||
}
|
||||
/**
|
||||
* Get the FileFilter.
|
||||
*/
|
||||
@ -184,24 +57,6 @@ public class ExportWizard {
|
||||
public void setFileFilter(FileFilter fileFilter) {
|
||||
this.fileFilter = fileFilter;
|
||||
}
|
||||
/**
|
||||
* Indicates if the wizard was completed.
|
||||
*/
|
||||
public boolean isWizardCompleted() {
|
||||
return wizardCompleted;
|
||||
}
|
||||
/**
|
||||
* Enable/disable the next button.
|
||||
*/
|
||||
public void enableNextButton(boolean state) {
|
||||
nextButton.setEnabled(state);
|
||||
}
|
||||
/**
|
||||
* Enable/disable the finish button.
|
||||
*/
|
||||
public void enableFinishButton(boolean state) {
|
||||
finishButton.setEnabled(state);
|
||||
}
|
||||
/**
|
||||
* Get the disk that is being worked on.
|
||||
*/
|
||||
@ -222,4 +77,12 @@ public class ExportWizard {
|
||||
public void setDirectory(String directory) {
|
||||
this.directory = directory;
|
||||
}
|
||||
/**
|
||||
* Create the initial display used in the wizard.
|
||||
* @see com.webcodepro.applecommander.ui.swt.Wizard#createInitialWizardPane()
|
||||
*/
|
||||
public WizardPane createInitialWizardPane() {
|
||||
return new ExportFileStartPane(getContentPane(), this, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
196
src/com/webcodepro/applecommander/ui/swt/Wizard.java
Normal file
196
src/com/webcodepro/applecommander/ui/swt/Wizard.java
Normal file
@ -0,0 +1,196 @@
|
||||
/*
|
||||
* AppleCommander - An Apple ][ image utility.
|
||||
* Copyright (C) 2002 by Robert Greene
|
||||
* robgreene at users.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
package com.webcodepro.applecommander.ui.swt;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.layout.FillLayout;
|
||||
import org.eclipse.swt.layout.RowData;
|
||||
import org.eclipse.swt.layout.RowLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
/**
|
||||
* A frame work for displaying a wizard-like user interface.
|
||||
* @author: Rob Greene
|
||||
*/
|
||||
public abstract class Wizard {
|
||||
private Shell parent;
|
||||
private Shell dialog;
|
||||
private Image logo;
|
||||
private String title;
|
||||
private Stack wizardPanes = new Stack();
|
||||
private boolean wizardCompleted;
|
||||
private Button backButton;
|
||||
private Button nextButton;
|
||||
private Button finishButton;
|
||||
private Composite contentPane;
|
||||
/**
|
||||
* Constructor for Wizard.
|
||||
*/
|
||||
public Wizard(Shell parent, Image logo, String title) {
|
||||
super();
|
||||
this.parent = parent;
|
||||
this.logo = logo;
|
||||
this.title= title;
|
||||
}
|
||||
/**
|
||||
* Create the dialog.
|
||||
*/
|
||||
private void createDialog() {
|
||||
dialog = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
|
||||
dialog.setText(title);
|
||||
RowLayout layout = new RowLayout(SWT.VERTICAL);
|
||||
layout.justify = true;
|
||||
layout.marginBottom = 5;
|
||||
layout.marginLeft = 5;
|
||||
layout.marginRight = 5;
|
||||
layout.marginTop = 5;
|
||||
layout.spacing = 3;
|
||||
dialog.setLayout(layout);
|
||||
|
||||
// Wizard logo
|
||||
RowData rowData = new RowData();
|
||||
rowData.width = logo.getImageData().width;
|
||||
rowData.height = logo.getImageData().height;
|
||||
ImageCanvas imageCanvas = new ImageCanvas(dialog, SWT.BORDER, logo, rowData);
|
||||
|
||||
// Starting pane
|
||||
rowData = new RowData();
|
||||
rowData.width = logo.getImageData().width;
|
||||
contentPane = new Composite(dialog, SWT.BORDER);
|
||||
contentPane.setLayoutData(rowData);
|
||||
contentPane.setLayout(new FillLayout());
|
||||
|
||||
// Bottom row of buttons
|
||||
Composite composite = new Composite(dialog, SWT.NONE);
|
||||
composite.setLayoutData(rowData);
|
||||
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
|
||||
Button button = new Button(composite, SWT.PUSH);
|
||||
button.setText("Cancel");
|
||||
button.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
wizardCompleted = false;
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
backButton = new Button(composite, SWT.PUSH);
|
||||
backButton.setEnabled(false);
|
||||
backButton.setText("< Back");
|
||||
backButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
WizardPane current = (WizardPane) wizardPanes.pop();
|
||||
WizardPane previous = (WizardPane) wizardPanes.peek();
|
||||
backButton.setEnabled(wizardPanes.size() > 1);
|
||||
current.dispose();
|
||||
previous.open();
|
||||
dialog.pack();
|
||||
}
|
||||
});
|
||||
nextButton = new Button(composite, SWT.PUSH);
|
||||
nextButton.setText("Next >");
|
||||
nextButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
WizardPane current = (WizardPane) wizardPanes.peek();
|
||||
WizardPane next = current.getNextPane();
|
||||
wizardPanes.add(next);
|
||||
backButton.setEnabled(wizardPanes.size() > 1);
|
||||
current.dispose();
|
||||
next.open();
|
||||
dialog.pack();
|
||||
}
|
||||
});
|
||||
finishButton = new Button(composite, SWT.PUSH);
|
||||
finishButton.setEnabled(false);
|
||||
finishButton.setText("Finish");
|
||||
finishButton.addSelectionListener(new SelectionAdapter() {
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
wizardCompleted = true;
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
|
||||
WizardPane wizardPane = createInitialWizardPane();
|
||||
wizardPanes.add(wizardPane);
|
||||
wizardPane.open();
|
||||
|
||||
dialog.pack();
|
||||
}
|
||||
/**
|
||||
* Create the initial display used in the wizard.
|
||||
*/
|
||||
public abstract WizardPane createInitialWizardPane();
|
||||
/**
|
||||
* Open and display the dialog.
|
||||
*/
|
||||
public void open() {
|
||||
createDialog();
|
||||
dialog.open();
|
||||
Display display = dialog.getDisplay();
|
||||
while (!dialog.isDisposed()) {
|
||||
if (!display.readAndDispatch()) display.sleep ();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Dispose of all panels and resources.
|
||||
*/
|
||||
public void dispose() {
|
||||
while (!wizardPanes.empty()) {
|
||||
WizardPane pane = (WizardPane) wizardPanes.pop();
|
||||
pane.dispose();
|
||||
pane = null;
|
||||
}
|
||||
dialog.dispose();
|
||||
backButton.dispose();
|
||||
nextButton.dispose();
|
||||
finishButton.dispose();
|
||||
contentPane.dispose();
|
||||
}
|
||||
/**
|
||||
* Indicates if the wizard was completed.
|
||||
*/
|
||||
public boolean isWizardCompleted() {
|
||||
return wizardCompleted;
|
||||
}
|
||||
/**
|
||||
* Enable/disable the next button.
|
||||
*/
|
||||
public void enableNextButton(boolean state) {
|
||||
nextButton.setEnabled(state);
|
||||
}
|
||||
/**
|
||||
* Enable/disable the finish button.
|
||||
*/
|
||||
public void enableFinishButton(boolean state) {
|
||||
finishButton.setEnabled(state);
|
||||
}
|
||||
/**
|
||||
* Get the content pane.
|
||||
*/
|
||||
protected Composite getContentPane() {
|
||||
return contentPane;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user