2002-12-01 02:21:00 +00:00
|
|
|
/*
|
|
|
|
* AppleCommander - An Apple ][ image utility.
|
2003-12-04 05:57:56 +00:00
|
|
|
* Copyright (C) 2002-3 by Robert Greene
|
2002-12-01 02:21:00 +00:00
|
|
|
* 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;
|
|
|
|
|
2003-02-11 04:41:39 +00:00
|
|
|
import java.io.ByteArrayOutputStream;
|
2002-12-16 02:19:01 +00:00
|
|
|
import java.io.File;
|
2003-02-11 04:41:39 +00:00
|
|
|
import java.io.FileInputStream;
|
2002-12-16 02:19:01 +00:00
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
2003-02-11 04:41:39 +00:00
|
|
|
import java.io.InputStream;
|
2002-12-16 02:19:01 +00:00
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.SWT;
|
|
|
|
import org.eclipse.swt.custom.CTabFolder;
|
|
|
|
import org.eclipse.swt.custom.CTabItem;
|
|
|
|
import org.eclipse.swt.custom.SashForm;
|
|
|
|
import org.eclipse.swt.events.MenuAdapter;
|
|
|
|
import org.eclipse.swt.events.MenuEvent;
|
|
|
|
import org.eclipse.swt.events.SelectionAdapter;
|
|
|
|
import org.eclipse.swt.events.SelectionEvent;
|
|
|
|
import org.eclipse.swt.events.SelectionListener;
|
2003-12-16 03:39:12 +00:00
|
|
|
import org.eclipse.swt.graphics.Font;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.graphics.GC;
|
2003-12-16 03:39:12 +00:00
|
|
|
import org.eclipse.swt.graphics.Point;
|
|
|
|
import org.eclipse.swt.graphics.Rectangle;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.layout.GridData;
|
|
|
|
import org.eclipse.swt.layout.GridLayout;
|
2003-12-16 03:39:12 +00:00
|
|
|
import org.eclipse.swt.printing.PrintDialog;
|
|
|
|
import org.eclipse.swt.printing.Printer;
|
|
|
|
import org.eclipse.swt.printing.PrinterData;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.widgets.Composite;
|
2003-12-07 06:19:15 +00:00
|
|
|
import org.eclipse.swt.widgets.Event;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.widgets.FileDialog;
|
2003-03-06 04:06:17 +00:00
|
|
|
import org.eclipse.swt.widgets.Label;
|
2003-12-07 06:19:15 +00:00
|
|
|
import org.eclipse.swt.widgets.Listener;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.widgets.Menu;
|
|
|
|
import org.eclipse.swt.widgets.MenuItem;
|
|
|
|
import org.eclipse.swt.widgets.MessageBox;
|
2003-03-06 13:53:49 +00:00
|
|
|
import org.eclipse.swt.widgets.ProgressBar;
|
2002-12-01 02:21:00 +00:00
|
|
|
import org.eclipse.swt.widgets.Shell;
|
|
|
|
import org.eclipse.swt.widgets.Table;
|
|
|
|
import org.eclipse.swt.widgets.TableColumn;
|
|
|
|
import org.eclipse.swt.widgets.TableItem;
|
|
|
|
import org.eclipse.swt.widgets.ToolBar;
|
|
|
|
import org.eclipse.swt.widgets.ToolItem;
|
|
|
|
import org.eclipse.swt.widgets.Tree;
|
|
|
|
import org.eclipse.swt.widgets.TreeItem;
|
|
|
|
|
2004-06-03 03:31:56 +00:00
|
|
|
import com.webcodepro.applecommander.compiler.ApplesoftCompiler;
|
|
|
|
import com.webcodepro.applecommander.storage.DirectoryEntry;
|
|
|
|
import com.webcodepro.applecommander.storage.Disk;
|
|
|
|
import com.webcodepro.applecommander.storage.FileEntry;
|
|
|
|
import com.webcodepro.applecommander.storage.FileEntryComparator;
|
|
|
|
import com.webcodepro.applecommander.storage.FileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.FormattedDisk;
|
|
|
|
import com.webcodepro.applecommander.storage.FormattedDisk.FileColumnHeader;
|
2004-06-09 03:58:00 +00:00
|
|
|
import com.webcodepro.applecommander.storage.filters.AppleWorksDataBaseFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.filters.AppleWorksSpreadSheetFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.filters.AppleWorksWordProcessorFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.filters.ApplesoftFileFilter;
|
2004-06-19 04:39:47 +00:00
|
|
|
import com.webcodepro.applecommander.storage.filters.AssemblySourceFileFilter;
|
2004-06-09 03:58:00 +00:00
|
|
|
import com.webcodepro.applecommander.storage.filters.BinaryFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.filters.GraphicsFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.filters.IntegerBasicFileFilter;
|
2004-06-17 03:04:19 +00:00
|
|
|
import com.webcodepro.applecommander.storage.filters.PascalTextFileFilter;
|
2004-06-09 03:58:00 +00:00
|
|
|
import com.webcodepro.applecommander.storage.filters.TextFileFilter;
|
|
|
|
import com.webcodepro.applecommander.storage.os.prodos.ProdosDiskSizeDoesNotMatchException;
|
|
|
|
import com.webcodepro.applecommander.storage.os.prodos.ProdosFormatDisk;
|
2004-06-03 03:31:56 +00:00
|
|
|
import com.webcodepro.applecommander.storage.physical.ByteArrayImageLayout;
|
|
|
|
import com.webcodepro.applecommander.storage.physical.DosOrder;
|
|
|
|
import com.webcodepro.applecommander.storage.physical.ImageOrder;
|
|
|
|
import com.webcodepro.applecommander.storage.physical.NibbleOrder;
|
|
|
|
import com.webcodepro.applecommander.storage.physical.ProdosOrder;
|
|
|
|
import com.webcodepro.applecommander.ui.ImportSpecification;
|
2004-07-11 15:07:56 +00:00
|
|
|
import com.webcodepro.applecommander.ui.UiBundle;
|
2004-06-03 03:31:56 +00:00
|
|
|
import com.webcodepro.applecommander.ui.UserPreferences;
|
2004-06-09 03:58:00 +00:00
|
|
|
import com.webcodepro.applecommander.ui.swt.util.DropDownSelectionListener;
|
|
|
|
import com.webcodepro.applecommander.ui.swt.util.ImageManager;
|
|
|
|
import com.webcodepro.applecommander.ui.swt.util.SwtUtil;
|
|
|
|
import com.webcodepro.applecommander.ui.swt.wizard.compilefile.CompileWizard;
|
|
|
|
import com.webcodepro.applecommander.ui.swt.wizard.exportfile.ExportWizard;
|
|
|
|
import com.webcodepro.applecommander.ui.swt.wizard.importfile.ImportWizard;
|
2004-06-03 03:31:56 +00:00
|
|
|
import com.webcodepro.applecommander.util.AppleUtil;
|
2006-04-16 03:28:36 +00:00
|
|
|
import com.webcodepro.applecommander.util.Host;
|
2004-06-20 17:02:00 +00:00
|
|
|
import com.webcodepro.applecommander.util.StreamUtil;
|
2004-07-11 15:07:56 +00:00
|
|
|
import com.webcodepro.applecommander.util.TextBundle;
|
2004-06-03 03:31:56 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
/**
|
|
|
|
* Build the Disk File tab for the Disk Window.
|
|
|
|
* <p>
|
|
|
|
* Date created: Nov 17, 2002 9:46:53 PM
|
2004-06-18 05:15:33 +00:00
|
|
|
* @author Rob Greene
|
2002-12-01 02:21:00 +00:00
|
|
|
*/
|
|
|
|
public class DiskExplorerTab {
|
2003-12-07 18:21:42 +00:00
|
|
|
private static final char CTRL_C = 'C' - '@';
|
|
|
|
private static final char CTRL_D = 'D' - '@';
|
|
|
|
private static final char CTRL_E = 'E' - '@';
|
|
|
|
private static final char CTRL_I = 'I' - '@';
|
2003-12-16 03:39:12 +00:00
|
|
|
private static final char CTRL_P = 'P' - '@';
|
2003-12-07 18:21:42 +00:00
|
|
|
private static final char CTRL_S = 'S' - '@';
|
|
|
|
private static final char CTRL_V = 'V' - '@';
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
// These are given to us from DiskWindow
|
2002-12-01 02:21:00 +00:00
|
|
|
private Shell shell;
|
2003-12-08 00:52:38 +00:00
|
|
|
private ImageManager imageManager;
|
|
|
|
private DiskWindow diskWindow;
|
|
|
|
private FormattedDisk[] disks;
|
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
private SashForm sashForm;
|
|
|
|
private Tree directoryTree;
|
|
|
|
private Table fileTable;
|
|
|
|
private ToolBar toolBar;
|
2003-12-07 18:21:42 +00:00
|
|
|
private ToolItem standardFormatToolItem;
|
|
|
|
private ToolItem nativeFormatToolItem;
|
|
|
|
private ToolItem detailFormatToolItem;
|
|
|
|
private ToolItem showDeletedFilesToolItem;
|
2002-12-01 02:21:00 +00:00
|
|
|
private ToolItem exportToolItem;
|
|
|
|
private ToolItem importToolItem;
|
2003-12-04 05:57:56 +00:00
|
|
|
private ToolItem compileToolItem;
|
2003-12-07 06:19:15 +00:00
|
|
|
private ToolItem viewFileItem;
|
2003-12-10 04:47:40 +00:00
|
|
|
private ToolItem printToolItem;
|
2002-12-01 02:21:00 +00:00
|
|
|
private ToolItem deleteToolItem;
|
2002-12-09 05:42:39 +00:00
|
|
|
private ToolItem saveToolItem;
|
2003-12-08 00:52:38 +00:00
|
|
|
private ToolItem saveAsToolItem;
|
2004-06-03 03:31:56 +00:00
|
|
|
private ToolItem changeOrderToolItem;
|
2004-07-04 03:37:53 +00:00
|
|
|
private Menu changeImageOrderMenu;
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
private UserPreferences userPreferences = UserPreferences.getInstance();
|
2004-07-11 15:07:56 +00:00
|
|
|
private TextBundle textBundle = UiBundle.getInstance();
|
2002-12-01 02:21:00 +00:00
|
|
|
private FileFilter fileFilter;
|
|
|
|
private GraphicsFileFilter graphicsFilter = new GraphicsFileFilter();
|
|
|
|
private AppleWorksWordProcessorFileFilter awpFilter = new AppleWorksWordProcessorFileFilter();
|
|
|
|
|
|
|
|
private int currentFormat = FormattedDisk.FILE_DISPLAY_STANDARD;
|
|
|
|
private boolean formatChanged;
|
|
|
|
private List currentFileList;
|
|
|
|
private Map columnWidths = new HashMap();
|
|
|
|
private boolean showDeletedFiles;
|
2003-12-07 18:21:42 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
/**
|
|
|
|
* Create the DISK INFO tab.
|
|
|
|
*/
|
2003-12-08 00:52:38 +00:00
|
|
|
public DiskExplorerTab(CTabFolder tabFolder, FormattedDisk[] disks, ImageManager imageManager, DiskWindow diskWindow) {
|
2002-12-16 02:19:01 +00:00
|
|
|
this.disks = disks;
|
2002-12-01 02:21:00 +00:00
|
|
|
this.shell = tabFolder.getShell();
|
|
|
|
this.imageManager = imageManager;
|
2003-12-08 00:52:38 +00:00
|
|
|
this.diskWindow = diskWindow;
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
createFilesTab(tabFolder);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Dispose of resources.
|
|
|
|
*/
|
|
|
|
public void dispose() {
|
|
|
|
sashForm.dispose();
|
|
|
|
directoryTree.dispose();
|
|
|
|
fileTable.dispose();
|
2003-12-07 18:21:42 +00:00
|
|
|
standardFormatToolItem.dispose();
|
|
|
|
nativeFormatToolItem.dispose();
|
|
|
|
detailFormatToolItem.dispose();
|
|
|
|
showDeletedFilesToolItem.dispose();
|
2002-12-01 02:21:00 +00:00
|
|
|
exportToolItem.dispose();
|
|
|
|
importToolItem.dispose();
|
|
|
|
deleteToolItem.dispose();
|
2003-12-04 05:57:56 +00:00
|
|
|
compileToolItem.dispose();
|
2003-12-07 06:19:15 +00:00
|
|
|
viewFileItem.dispose();
|
2002-12-01 02:21:00 +00:00
|
|
|
toolBar.dispose();
|
2004-06-03 03:31:56 +00:00
|
|
|
changeOrderToolItem.dispose();
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
directoryTree = null;
|
|
|
|
fileTable = null;
|
|
|
|
currentFileList = null;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Create the FILES tab.
|
|
|
|
*/
|
|
|
|
protected void createFilesTab(CTabFolder tabFolder) {
|
|
|
|
CTabItem ctabitem = new CTabItem(tabFolder, SWT.NULL);
|
2004-07-04 03:37:53 +00:00
|
|
|
ctabitem.setText(textBundle.get("FilesTab")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
Composite composite = new Composite(tabFolder, SWT.NULL);
|
|
|
|
ctabitem.setControl(composite);
|
|
|
|
GridLayout gridLayout = new GridLayout(1, false);
|
|
|
|
composite.setLayout(gridLayout);
|
|
|
|
|
|
|
|
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
|
|
|
|
createFileToolBar(composite, gridData);
|
|
|
|
|
|
|
|
sashForm = new SashForm(composite, SWT.NONE);
|
|
|
|
sashForm.setOrientation(SWT.HORIZONTAL);
|
|
|
|
gridData = new GridData(GridData.FILL_BOTH);
|
|
|
|
gridData.horizontalSpan = 2;
|
|
|
|
sashForm.setLayoutData(gridData);
|
|
|
|
|
|
|
|
directoryTree = new Tree(sashForm, SWT.SINGLE | SWT.BORDER);
|
|
|
|
directoryTree.setMenu(createDirectoryPopupMenu());
|
|
|
|
directoryTree.addSelectionListener(new SelectionListener() {
|
|
|
|
/**
|
|
|
|
* Single-click handler.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
changeCurrentFormat(getCurrentFormat()); // minor hack
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Double-click handler.
|
|
|
|
*/
|
|
|
|
public void widgetDefaultSelected(SelectionEvent event) {
|
|
|
|
Tree item = (Tree) event.getSource();
|
|
|
|
TreeItem[] treeItem = item.getSelection();
|
|
|
|
treeItem[0].setExpanded(!treeItem[0].getExpanded());
|
|
|
|
}
|
|
|
|
});
|
2003-12-07 06:19:15 +00:00
|
|
|
directoryTree.addListener(SWT.KeyUp, createDirectoryKeyboardHandler());
|
2003-12-07 18:21:42 +00:00
|
|
|
directoryTree.addListener(SWT.KeyUp, createToolbarCommandHandler());
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
fileTable = new Table(sashForm, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
|
|
|
|
fileTable.setHeaderVisible(true);
|
|
|
|
|
|
|
|
sashForm.setWeights(new int[] {1,2});
|
|
|
|
|
2002-12-16 02:19:01 +00:00
|
|
|
for (int i=0; i<disks.length; i++) {
|
|
|
|
TreeItem diskItem = new TreeItem(directoryTree, SWT.BORDER);
|
|
|
|
diskItem.setText(disks[i].getDiskName());
|
|
|
|
diskItem.setData(disks[i]);
|
|
|
|
directoryTree.setSelection(new TreeItem[] { diskItem });
|
|
|
|
|
|
|
|
if (disks[i].canHaveDirectories()) {
|
|
|
|
Iterator files = disks[i].getFiles().iterator();
|
|
|
|
while (files.hasNext()) {
|
|
|
|
FileEntry entry = (FileEntry) files.next();
|
|
|
|
if (entry.isDirectory()) {
|
|
|
|
TreeItem item = new TreeItem(diskItem, SWT.BORDER);
|
|
|
|
item.setText(entry.getFilename());
|
|
|
|
item.setData(entry);
|
2003-03-06 04:06:17 +00:00
|
|
|
addDirectoriesToTree(item, (DirectoryEntry)entry);
|
2002-12-16 02:19:01 +00:00
|
|
|
}
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2002-12-16 02:19:01 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
computeColumnWidths(FormattedDisk.FILE_DISPLAY_STANDARD);
|
|
|
|
computeColumnWidths(FormattedDisk.FILE_DISPLAY_NATIVE);
|
|
|
|
computeColumnWidths(FormattedDisk.FILE_DISPLAY_DETAIL);
|
|
|
|
|
|
|
|
formatChanged = true;
|
2002-12-16 02:19:01 +00:00
|
|
|
fillFileTable(disks[0].getFiles());
|
|
|
|
directoryTree.setSelection(new TreeItem[] { directoryTree.getItems()[0] });
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Construct the popup menu for the directory table on the File tab.
|
2002-12-16 02:19:01 +00:00
|
|
|
* Using the first logical disk as the indicator for all logical disks.
|
2002-12-01 02:21:00 +00:00
|
|
|
*/
|
|
|
|
protected Menu createDirectoryPopupMenu() {
|
|
|
|
Menu menu = new Menu(shell, SWT.POP_UP);
|
|
|
|
|
|
|
|
MenuItem item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExpandMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
TreeItem[] treeItem = getDirectoryTree().getSelection();
|
2002-12-01 02:21:00 +00:00
|
|
|
treeItem[0].setExpanded(true);
|
|
|
|
}
|
|
|
|
});
|
2002-12-16 02:19:01 +00:00
|
|
|
item.setEnabled(disks[0].canHaveDirectories());
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("CollapseMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
TreeItem[] treeItem = getDirectoryTree().getSelection();
|
2002-12-01 02:21:00 +00:00
|
|
|
treeItem[0].setExpanded(false);
|
|
|
|
}
|
|
|
|
});
|
2002-12-16 02:19:01 +00:00
|
|
|
item.setEnabled(disks[0].canHaveDirectories());
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExpandAllMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
TreeItem[] treeItem = getDirectoryTree().getSelection();
|
2002-12-01 02:21:00 +00:00
|
|
|
setDirectoryExpandedStates(treeItem[0], true);
|
|
|
|
}
|
|
|
|
});
|
2002-12-16 02:19:01 +00:00
|
|
|
item.setEnabled(disks[0].canHaveDirectories());
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("CollapseAllMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
TreeItem[] treeItem = getDirectoryTree().getSelection();
|
2002-12-01 02:21:00 +00:00
|
|
|
setDirectoryExpandedStates(treeItem[0], false);
|
|
|
|
}
|
|
|
|
});
|
2002-12-16 02:19:01 +00:00
|
|
|
item.setEnabled(disks[0].canHaveDirectories());
|
2003-03-01 22:57:49 +00:00
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
2004-07-17 00:22:17 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
|
|
|
item.setText(textBundle.get("CreateDirectoryMenuItem")); //$NON-NLS-1$
|
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
// FIXME need to create directory
|
|
|
|
}
|
|
|
|
});
|
|
|
|
item.setEnabled(disks[0].canCreateDirectories());
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
2003-03-01 22:57:49 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ImportMenuItem")); //$NON-NLS-1$
|
2003-12-10 04:47:40 +00:00
|
|
|
item.setImage(imageManager.get(ImageManager.ICON_IMPORT_FILE));
|
2003-03-01 22:57:49 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
importFiles();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
item.setEnabled(disks[0].canCreateFile() && disks[0].canWriteFileData());
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
return menu;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Construct the popup menu for the file table on the File tab.
|
|
|
|
*/
|
|
|
|
protected Menu createFilePopupMenu() {
|
|
|
|
Menu menu = new Menu(shell, SWT.POP_UP);
|
2003-12-07 18:21:42 +00:00
|
|
|
menu.addMenuListener(new MenuAdapter() {
|
|
|
|
/**
|
|
|
|
* Toggle all sub-menu MenuItems to the proper state to reflect
|
|
|
|
* the current file extension chosen.
|
|
|
|
*/
|
|
|
|
public void menuShown(MenuEvent event) {
|
|
|
|
Menu theMenu = (Menu) event.getSource();
|
|
|
|
MenuItem[] subItems = theMenu.getItems();
|
2003-12-08 00:52:38 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
2003-12-07 18:21:42 +00:00
|
|
|
// View File
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[0].setEnabled(getDisk(0).canReadFileData()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && !fileEntry.isDeleted()
|
|
|
|
&& !fileEntry.isDirectory());
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[1].setEnabled(getDisk(0).canReadFileData()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && !fileEntry.isDeleted()
|
|
|
|
&& !fileEntry.isDirectory());
|
2003-12-07 18:21:42 +00:00
|
|
|
// Compile File
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[3].setEnabled(getDisk(0).canReadFileData()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && fileEntry.canCompile()
|
|
|
|
&& !fileEntry.isDeleted());
|
2003-12-08 00:52:38 +00:00
|
|
|
// Export File
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[5].setEnabled(getDisk(0).canReadFileData()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && !fileEntry.isDeleted()
|
|
|
|
&& !fileEntry.isDirectory());
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[6].setEnabled(getDisk(0).canReadFileData()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && !fileEntry.isDeleted()
|
|
|
|
&& !fileEntry.isDirectory());
|
2003-12-08 00:52:38 +00:00
|
|
|
// Delete File
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[8].setEnabled(getDisk(0).canDeleteFile()
|
2004-01-18 19:05:45 +00:00
|
|
|
&& fileEntry != null && !fileEntry.isDeleted());
|
2003-12-07 18:21:42 +00:00
|
|
|
}
|
|
|
|
});
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
MenuItem item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ViewWizardMenuItem")); //$NON-NLS-1$
|
2003-12-07 06:19:15 +00:00
|
|
|
item.setAccelerator(SWT.CTRL+'V');
|
2003-12-10 04:47:40 +00:00
|
|
|
item.setImage(imageManager.get(ImageManager.ICON_VIEW_FILE));
|
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(null);
|
2003-12-10 04:47:40 +00:00
|
|
|
}
|
|
|
|
});
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ViewAsMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.setMenu(createFileViewMenu(SWT.DROP_DOWN));
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2003-12-07 06:19:15 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("CompileMenuItem")); //$NON-NLS-1$
|
2003-12-07 06:19:15 +00:00
|
|
|
item.setAccelerator(SWT.CTRL+'C');
|
2003-12-10 04:47:40 +00:00
|
|
|
item.setImage(imageManager.get(ImageManager.ICON_COMPILE_FILE));
|
2003-12-07 06:19:15 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2003-12-07 18:21:42 +00:00
|
|
|
compileFileWizard();
|
2003-12-07 06:19:15 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportWizardMenuItem")); //$NON-NLS-1$
|
2003-12-07 06:19:15 +00:00
|
|
|
item.setAccelerator(SWT.CTRL+'E');
|
2003-12-10 04:47:40 +00:00
|
|
|
item.setImage(imageManager.get(ImageManager.ICON_EXPORT_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.setMenu(createFileExportMenu(SWT.DROP_DOWN));
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
2004-07-04 03:37:53 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("DeleteMenuItem")); //$NON-NLS-1$
|
2003-12-07 06:19:15 +00:00
|
|
|
item.setAccelerator(SWT.CTRL+'D');
|
2003-12-10 04:47:40 +00:00
|
|
|
item.setImage(imageManager.get(ImageManager.ICON_DELETE_FILE));
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2002-12-23 21:09:45 +00:00
|
|
|
deleteFile();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return menu;
|
|
|
|
}
|
2004-01-18 19:05:45 +00:00
|
|
|
/**
|
|
|
|
* Construct the popup menu for the view as right-click option.
|
|
|
|
*/
|
|
|
|
protected Menu createFileViewMenu(int style) {
|
|
|
|
Menu menu = new Menu(shell, style);
|
|
|
|
|
|
|
|
MenuItem item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ViewAsTextMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(TextFileFilter.class);
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("VeiwAsGraphicsMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(GraphicsFileFilter.class);
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return menu;
|
|
|
|
}
|
2002-12-01 02:21:00 +00:00
|
|
|
/**
|
|
|
|
* Construct the popup menu for the export button on the toolbar.
|
|
|
|
*/
|
|
|
|
protected Menu createFileExportMenu(int style) {
|
|
|
|
Menu menu = new Menu(shell, style);
|
|
|
|
|
|
|
|
MenuItem item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsRawDiskDataMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(null);
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsBinaryMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new BinaryFileFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsApplesoftBasicMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new ApplesoftFileFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsIntegerBasicMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new IntegerBasicFileFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsAsciiTextMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new TextFileFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2004-06-19 04:39:47 +00:00
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsFormattedAssemblyMenuItem")); //$NON-NLS-1$
|
2004-06-19 04:39:47 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new AssemblySourceFileFilter());
|
2004-06-19 04:39:47 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2004-06-17 03:04:19 +00:00
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsPascalTextMenuItem")); //$NON-NLS-1$
|
2004-06-17 03:04:19 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new PascalTextFileFilter());
|
2004-06-17 03:04:19 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsAppleWorksSpreadsheetFileMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new AppleWorksSpreadSheetFileFilter());
|
2004-01-18 19:05:45 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsAppleWorksDatabaseFileMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(new AppleWorksDataBaseFileFilter());
|
2004-01-18 19:05:45 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsAppleWorksWordProcessorFileMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(getAwpFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("WordProcessorRenderingMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
Menu subMenu = new Menu(shell, SWT.DROP_DOWN);
|
|
|
|
item.setMenu(subMenu);
|
|
|
|
subMenu.addMenuListener(new MenuAdapter() {
|
|
|
|
/**
|
|
|
|
* Toggle all sub-menu MenuItems to the proper state to reflect
|
|
|
|
* the current file extension chosen.
|
|
|
|
*/
|
|
|
|
public void menuShown(MenuEvent event) {
|
|
|
|
Menu theMenu = (Menu) event.getSource();
|
|
|
|
MenuItem[] subItems = theMenu.getItems();
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[0].setSelection(getAwpFilter().isTextRendering());
|
|
|
|
subItems[1].setSelection(getAwpFilter().isHtmlRendering());
|
|
|
|
subItems[2].setSelection(getAwpFilter().isRtfRendering());
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("WordProcessorRenderAsTextMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate rendering style.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getAwpFilter().selectTextRendering();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("WordProcessorRenderAsHtmlMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate rendering style.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getAwpFilter().selectHtmlRendering();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("WordProcessorRenderAsRtfMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate rendering style.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getAwpFilter().selectRtfRendering();
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.SEPARATOR);
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportAsGraphicsMenuItem")); //$NON-NLS-1$
|
2004-07-11 15:07:56 +00:00
|
|
|
item.setEnabled(GraphicsFileFilter.isCodecAvailable());
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
setFileFilter(getGraphicsFilter());
|
2002-12-01 02:21:00 +00:00
|
|
|
exportFile(null);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// Add graphics mode
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsModeMenuItem")); //$NON-NLS-1$
|
2004-07-11 15:07:56 +00:00
|
|
|
item.setEnabled(GraphicsFileFilter.isCodecAvailable());
|
2002-12-01 02:21:00 +00:00
|
|
|
subMenu = new Menu(shell, SWT.DROP_DOWN);
|
|
|
|
item.setMenu(subMenu);
|
|
|
|
subMenu.addMenuListener(new MenuAdapter() {
|
|
|
|
/**
|
|
|
|
* Toggle all sub-menu MenuItems to the proper state to reflect
|
|
|
|
* the current file extension chosen.
|
|
|
|
*/
|
|
|
|
public void menuShown(MenuEvent event) {
|
|
|
|
Menu theMenu = (Menu) event.getSource();
|
|
|
|
MenuItem[] subItems = theMenu.getItems();
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[0].setSelection(getGraphicsFilter().isHiresBlackAndWhiteMode());
|
|
|
|
subItems[1].setSelection(getGraphicsFilter().isHiresColorMode());
|
|
|
|
subItems[2].setSelection(getGraphicsFilter().isDoubleHiresBlackAndWhiteMode());
|
|
|
|
subItems[3].setSelection(getGraphicsFilter().isDoubleHiresColorMode());
|
|
|
|
subItems[4].setSelection(getGraphicsFilter().isSuperHires16Mode());
|
|
|
|
subItems[5].setSelection(getGraphicsFilter().isSuperHires3200Mode());
|
|
|
|
subItems[6].setSelection(getGraphicsFilter().isQuickDraw2Icon());
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsHiresBlackAndWhiteMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_HGR_BLACK_AND_WHITE);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsHiresColorMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_HGR_COLOR);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsDoubleHiresBlackAndWhiteMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_DHR_BLACK_AND_WHITE);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsDoubleHiresColorMenuItem")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_DHR_COLOR);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
2004-01-18 19:05:45 +00:00
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsSuperHiresMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_SHR_16);
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsSuperHires3200ColorMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_SHR_3200);
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsAsQuickDraw2IconMenuItem")); //$NON-NLS-1$
|
2004-01-18 19:05:45 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the appropriate graphics mode.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setMode(GraphicsFileFilter.MODE_QUICKDRAW2_ICON);
|
2004-01-18 19:05:45 +00:00
|
|
|
}
|
|
|
|
});
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
// Add graphics formats, if any are defined.
|
2004-07-11 15:07:56 +00:00
|
|
|
String[] formats = GraphicsFileFilter.getFileExtensions();
|
2002-12-01 02:21:00 +00:00
|
|
|
if (formats != null && formats.length > 0) {
|
|
|
|
item = new MenuItem(menu, SWT.CASCADE);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ExportGraphicsFormatMenuItem")); //$NON-NLS-1$
|
2004-07-11 15:07:56 +00:00
|
|
|
item.setEnabled(GraphicsFileFilter.isCodecAvailable());
|
2002-12-01 02:21:00 +00:00
|
|
|
subMenu = new Menu(shell, SWT.DROP_DOWN);
|
|
|
|
item.setMenu(subMenu);
|
|
|
|
subMenu.addMenuListener(new MenuAdapter() {
|
|
|
|
/**
|
|
|
|
* Toggle all sub-menu MenuItems to the proper state to reflect
|
|
|
|
* the current file extension chosen.
|
|
|
|
*/
|
|
|
|
public void menuShown(MenuEvent event) {
|
|
|
|
Menu theMenu = (Menu) event.getSource();
|
|
|
|
MenuItem[] subItems = theMenu.getItems();
|
|
|
|
for (int i=0; i<subItems.length; i++) {
|
|
|
|
subItems[i].setSelection(subItems[i].getText().
|
2004-07-04 03:37:53 +00:00
|
|
|
equals(getGraphicsFilter().getExtension()));
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// Add all graphics formats...
|
|
|
|
for (int i=0; i<formats.length; i++) {
|
|
|
|
item = new MenuItem(subMenu, SWT.RADIO);
|
|
|
|
item.setText(formats[i]);
|
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
/**
|
|
|
|
* Set the file extension to use.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
MenuItem menuItem = (MenuItem) event.getSource();
|
2004-07-04 03:37:53 +00:00
|
|
|
getGraphicsFilter().setExtension(menuItem.getText());
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return menu;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Change the "expanded" state of the node.
|
|
|
|
*/
|
|
|
|
protected void setDirectoryExpandedStates(TreeItem treeItem, boolean expand) {
|
|
|
|
treeItem.setExpanded(expand);
|
|
|
|
TreeItem[] treeItems = treeItem.getItems();
|
|
|
|
for (int i=0; i<treeItems.length; i++) {
|
|
|
|
setDirectoryExpandedStates(treeItems[i], expand);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Pre-compute column widths for the file tab.
|
|
|
|
* These can and are over-ridden by user sizing.
|
|
|
|
*/
|
|
|
|
protected void computeColumnWidths(int format) {
|
2002-12-16 02:19:01 +00:00
|
|
|
List headers = disks[0].getFileColumnHeaders(format);
|
2002-12-01 02:21:00 +00:00
|
|
|
int[] headerWidths = new int[headers.size()];
|
|
|
|
GC gc = new GC(shell);
|
|
|
|
for (int i=0; i<headers.size(); i++) {
|
|
|
|
FileColumnHeader header = (FileColumnHeader) headers.get(i);
|
|
|
|
if (header.getTitle().length() >= header.getMaximumWidth()) {
|
2004-07-04 03:37:53 +00:00
|
|
|
headerWidths[i] = gc.stringExtent(header.getTitle()).x +
|
|
|
|
2 * gc.stringExtent(textBundle.get("WidestCharacter")).x; //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
} else {
|
2004-07-04 03:37:53 +00:00
|
|
|
headerWidths[i] = gc.stringExtent(
|
|
|
|
textBundle.get("WidestCharacter")).x //$NON-NLS-1$
|
|
|
|
* header.getMaximumWidth();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
gc.dispose();
|
|
|
|
gc = null;
|
|
|
|
columnWidths.put(new Integer(format), headerWidths);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Preserve the column widths.
|
|
|
|
*/
|
|
|
|
protected void preserveColumnWidths() {
|
|
|
|
TableColumn[] columns = fileTable.getColumns();
|
|
|
|
int[] widths = new int[columns.length];
|
|
|
|
for (int i=0; i<columns.length; i++) {
|
|
|
|
widths[i] = columns[i].getWidth();
|
|
|
|
}
|
|
|
|
columnWidths.put(new Integer(currentFormat), widths);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Display files in the fileTable.
|
|
|
|
*/
|
|
|
|
protected void fillFileTable(List fileList) {
|
|
|
|
int[] weights = sashForm.getWeights();
|
|
|
|
|
|
|
|
if (formatChanged) {
|
|
|
|
fileTable.dispose();
|
|
|
|
fileTable = new Table(sashForm, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
|
2003-12-07 06:19:15 +00:00
|
|
|
fileTable.addListener(SWT.KeyUp, createFileKeyboardHandler());
|
2003-12-07 18:21:42 +00:00
|
|
|
fileTable.addListener(SWT.KeyUp, createToolbarCommandHandler());
|
2002-12-01 02:21:00 +00:00
|
|
|
fileTable.setHeaderVisible(true);
|
|
|
|
fileTable.setMenu(createFilePopupMenu());
|
|
|
|
fileTable.addSelectionListener(new SelectionListener() {
|
|
|
|
/**
|
|
|
|
* Single-click handler.
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
getImportToolItem().setEnabled(getDisk(0).canCreateFile() && getDisk(0).canWriteFileData());
|
|
|
|
if (getFileTable().getSelectionCount() > 0) {
|
2003-12-08 00:52:38 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
2004-07-04 03:37:53 +00:00
|
|
|
getExportToolItem().setEnabled(getDisk(0).canReadFileData());
|
|
|
|
getDeleteToolItem().setEnabled(getDisk(0).canDeleteFile());
|
|
|
|
getCompileToolItem().setEnabled(fileEntry != null && fileEntry.canCompile());
|
|
|
|
getViewFileToolItem().setEnabled(true);
|
2002-12-01 02:21:00 +00:00
|
|
|
} else {
|
2004-07-04 03:37:53 +00:00
|
|
|
getExportToolItem().setEnabled(false);
|
|
|
|
getDeleteToolItem().setEnabled(false);
|
|
|
|
getCompileToolItem().setEnabled(false);
|
|
|
|
getViewFileToolItem().setEnabled(false);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Double-click handler.
|
|
|
|
*/
|
|
|
|
public void widgetDefaultSelected(SelectionEvent event) {
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(null);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
TableColumn column = null;
|
2002-12-16 02:19:01 +00:00
|
|
|
List headers = disks[0].getFileColumnHeaders(currentFormat);
|
2002-12-01 02:21:00 +00:00
|
|
|
int[] widths = (int[])columnWidths.get(new Integer(currentFormat));
|
|
|
|
for (int i=0; i<headers.size(); i++) {
|
|
|
|
FileColumnHeader header = (FileColumnHeader) headers.get(i);
|
|
|
|
int align = header.isCenterAlign() ? SWT.CENTER :
|
|
|
|
header.isLeftAlign() ? SWT.LEFT : SWT.RIGHT;
|
|
|
|
column = new TableColumn(fileTable, align);
|
|
|
|
column.setText(header.getTitle());
|
|
|
|
column.setWidth(widths[i]);
|
|
|
|
final int columnIndex = i;
|
|
|
|
column.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
sortFileTable(columnIndex);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
fileTable.removeAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
Iterator files = fileList.iterator();
|
|
|
|
while (files.hasNext()) {
|
|
|
|
FileEntry entry = (FileEntry) files.next();
|
|
|
|
if (showDeletedFiles || !entry.isDeleted()) {
|
|
|
|
TableItem item = new TableItem(fileTable, 0);
|
|
|
|
List data = entry.getFileColumnData(currentFormat);
|
|
|
|
for (int i=0; i<data.size(); i++) {
|
|
|
|
item.setText(i, (String)data.get(i));
|
|
|
|
}
|
|
|
|
item.setData(entry);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sashForm.setWeights(weights);
|
|
|
|
formatChanged = false;
|
|
|
|
currentFileList = fileList;
|
|
|
|
|
2003-02-05 03:53:19 +00:00
|
|
|
// disable all file-level operations:
|
2002-12-01 02:21:00 +00:00
|
|
|
exportToolItem.setEnabled(false);
|
|
|
|
deleteToolItem.setEnabled(false);
|
2003-12-07 06:19:15 +00:00
|
|
|
compileToolItem.setEnabled(false);
|
|
|
|
viewFileItem.setEnabled(false);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Open up the Export Wizard dialog box.
|
|
|
|
*/
|
|
|
|
protected void exportFileWizard() {
|
|
|
|
// Get a sugeseted filter, if possible:
|
2003-12-08 00:52:38 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
2003-12-07 06:19:15 +00:00
|
|
|
if (fileEntry != null) {
|
|
|
|
fileFilter = fileEntry.getSuggestedFilter();
|
|
|
|
}
|
|
|
|
// Start wizard:
|
|
|
|
ExportWizard wizard = new ExportWizard(shell,
|
|
|
|
imageManager, fileEntry.getFormattedDisk());
|
|
|
|
wizard.setFileFilter(fileFilter);
|
|
|
|
wizard.setDirectory(userPreferences.getExportDirectory());
|
|
|
|
wizard.open();
|
|
|
|
if (wizard.isWizardCompleted()) {
|
|
|
|
fileFilter = wizard.getFileFilter();
|
|
|
|
String exportDirectory = wizard.getDirectory();
|
|
|
|
exportFile(exportDirectory);
|
|
|
|
}
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Export all selected files.
|
|
|
|
*/
|
2004-07-04 03:37:53 +00:00
|
|
|
protected void exportFile(String directory) {
|
2002-12-01 02:21:00 +00:00
|
|
|
boolean promptForIndividualFiles = (directory == null);
|
|
|
|
TableItem[] selection = fileTable.getSelection();
|
|
|
|
for (int i=0; i<selection.length; i++) {
|
|
|
|
TableItem tableItem = selection[i];
|
|
|
|
FileEntry fileEntry = (FileEntry) tableItem.getData();
|
|
|
|
String filename = null;
|
|
|
|
if (promptForIndividualFiles) {
|
|
|
|
FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
|
|
|
|
fileDialog.setFilterPath(userPreferences.getExportDirectory());
|
|
|
|
if (fileFilter != null) {
|
|
|
|
fileDialog.setFileName(fileFilter.getSuggestedFileName(fileEntry));
|
|
|
|
} else {
|
|
|
|
fileDialog.setFileName(fileEntry.getFilename());
|
|
|
|
}
|
|
|
|
filename = fileDialog.open();
|
|
|
|
directory = fileDialog.getFilterPath();
|
2004-06-23 03:47:12 +00:00
|
|
|
} else if (fileFilter != null) {
|
2002-12-10 05:14:31 +00:00
|
|
|
filename = directory + File.separator + AppleUtil.
|
|
|
|
getNiceFilename(fileFilter.getSuggestedFileName(fileEntry));
|
2004-06-23 03:47:12 +00:00
|
|
|
} else {
|
|
|
|
filename = directory + File.separator + AppleUtil.
|
|
|
|
getNiceFilename(fileEntry.getFilename());
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
if (filename != null) {
|
|
|
|
userPreferences.setExportDirectory(directory);
|
|
|
|
try {
|
|
|
|
File file = new File(filename);
|
|
|
|
if (file.exists()) {
|
2004-07-04 03:37:53 +00:00
|
|
|
int answer = SwtUtil.showYesNoDialog(shell,
|
|
|
|
textBundle.get("FileExistsTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.format("FileExistsMessage", filename)); //$NON-NLS-1$
|
|
|
|
if (answer == SWT.NO) {
|
|
|
|
return; // do not overwrite file
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
byte[] data = null;
|
|
|
|
if (fileFilter != null) {
|
|
|
|
data = fileFilter.filter(fileEntry);
|
|
|
|
} else {
|
2002-12-16 02:19:01 +00:00
|
|
|
data = fileEntry.getFormattedDisk().getFileData(fileEntry);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
OutputStream outputStream = new FileOutputStream(file);
|
|
|
|
outputStream.write(data);
|
|
|
|
outputStream.close();
|
|
|
|
} catch (Exception ex) {
|
|
|
|
String errorMessage = ex.getMessage();
|
|
|
|
if (errorMessage == null) {
|
|
|
|
errorMessage = ex.getClass().getName();
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
int answer = SwtUtil.showOkCancelErrorDialog(shell,
|
|
|
|
textBundle.get("ExportErrorTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.format("ExportErrorMessage", //$NON-NLS-1$
|
|
|
|
new Object[] { filename, errorMessage }));
|
|
|
|
if (answer == SWT.CANCEL) break; // break out of loop
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2003-12-07 06:19:15 +00:00
|
|
|
/**
|
|
|
|
* Launch the compile file wizard.
|
|
|
|
*/
|
|
|
|
protected void compileFileWizard() {
|
2003-12-08 00:52:38 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
2003-12-07 06:19:15 +00:00
|
|
|
CompileWizard wizard = new CompileWizard(shell,
|
|
|
|
imageManager, fileEntry.getFormattedDisk());
|
|
|
|
wizard.setDirectory(userPreferences.getCompileDirectory());
|
|
|
|
wizard.open();
|
|
|
|
if (wizard.isWizardCompleted()) {
|
|
|
|
String compileDirectory = wizard.getDirectory();
|
|
|
|
compileFile(compileDirectory);
|
|
|
|
}
|
|
|
|
}
|
2003-12-04 05:57:56 +00:00
|
|
|
/**
|
|
|
|
* Compile all selected files.
|
|
|
|
* FIXME: This is a near duplicate of exportFile. Can they be merged?
|
|
|
|
*/
|
|
|
|
private void compileFile(String directory) {
|
|
|
|
boolean promptForIndividualFiles = (directory == null);
|
|
|
|
TableItem[] selection = fileTable.getSelection();
|
|
|
|
for (int i=0; i<selection.length; i++) {
|
|
|
|
TableItem tableItem = selection[i];
|
|
|
|
FileEntry fileEntry = (FileEntry) tableItem.getData();
|
|
|
|
String filename = null;
|
|
|
|
if (promptForIndividualFiles) {
|
|
|
|
FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
|
|
|
|
fileDialog.setFilterPath(userPreferences.getCompileDirectory());
|
2004-07-04 03:37:53 +00:00
|
|
|
fileDialog.setFileName(fileEntry.getFilename() + ".S"); //$NON-NLS-1$
|
2003-12-04 05:57:56 +00:00
|
|
|
filename = fileDialog.open();
|
|
|
|
directory = fileDialog.getFilterPath();
|
|
|
|
} else {
|
|
|
|
filename = directory + File.separator + AppleUtil.
|
2004-07-04 03:37:53 +00:00
|
|
|
getNiceFilename(fileEntry.getFilename() + ".S"); //$NON-NLS-1$
|
2003-12-04 05:57:56 +00:00
|
|
|
}
|
|
|
|
if (filename != null) {
|
|
|
|
userPreferences.setCompileDirectory(directory);
|
|
|
|
try {
|
|
|
|
File file = new File(filename);
|
|
|
|
if (file.exists()) {
|
2004-07-04 03:37:53 +00:00
|
|
|
int answer = SwtUtil.showYesNoDialog(shell,
|
|
|
|
textBundle.get("FileExistsTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.format("FileExistsMessage", filename)); //$NON-NLS-1$
|
|
|
|
if (answer == SWT.NO) {
|
2003-12-04 05:57:56 +00:00
|
|
|
return; // do not overwrite file
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ApplesoftCompiler compiler = new ApplesoftCompiler(fileEntry);
|
|
|
|
byte[] assembly = compiler.compile();
|
|
|
|
OutputStream outputStream = new FileOutputStream(file);
|
|
|
|
outputStream.write(assembly);
|
|
|
|
outputStream.close();
|
|
|
|
} catch (Exception ex) {
|
|
|
|
String errorMessage = ex.getMessage();
|
|
|
|
if (errorMessage == null) {
|
|
|
|
errorMessage = ex.getClass().getName();
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
int answer = SwtUtil.showOkCancelErrorDialog(shell,
|
|
|
|
textBundle.get("UnableToCompileTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.format("UnableToCompileMessage", //$NON-NLS-1$
|
|
|
|
new Object[] { filename, errorMessage }));
|
|
|
|
if (answer == SWT.CANCEL) break; // break out of loop
|
2003-12-04 05:57:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2002-12-23 21:09:45 +00:00
|
|
|
/**
|
|
|
|
* Delete the currently selected files.
|
|
|
|
*/
|
|
|
|
protected void deleteFile() {
|
|
|
|
TableItem[] selection = fileTable.getSelection();
|
|
|
|
|
2004-07-04 03:37:53 +00:00
|
|
|
String message = (selection.length > 1) ?
|
|
|
|
textBundle.get("DeletePromptMultipleFiles") : //$NON-NLS-1$
|
|
|
|
textBundle.get("DeletePromptSingleFile") //$NON-NLS-1$
|
|
|
|
+ textBundle.get("DeletePromptTrailer"); //$NON-NLS-1$
|
|
|
|
int answer = SwtUtil.showYesNoDialog(shell,
|
|
|
|
textBundle.get("DeletePromptTitle"), //$NON-NLS-1$
|
|
|
|
message);
|
|
|
|
if (answer == SWT.YES) {
|
2002-12-23 21:09:45 +00:00
|
|
|
for (int i=0; i<selection.length; i++) {
|
|
|
|
TableItem tableItem = selection[i];
|
|
|
|
FileEntry fileEntry = (FileEntry) tableItem.getData();
|
|
|
|
fileEntry.delete();
|
|
|
|
}
|
|
|
|
fillFileTable(currentFileList);
|
|
|
|
saveToolItem.setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
2003-02-11 04:41:39 +00:00
|
|
|
/**
|
|
|
|
* Start the import wizard and import the selected files.
|
|
|
|
*/
|
|
|
|
protected void importFiles() {
|
2003-05-02 02:56:07 +00:00
|
|
|
//FIXME: This code has become really ugly!
|
2003-03-06 04:06:17 +00:00
|
|
|
TreeItem treeItem = directoryTree.getSelection()[0];
|
|
|
|
DirectoryEntry directory = (DirectoryEntry) treeItem.getData();
|
2003-02-11 04:41:39 +00:00
|
|
|
ImportWizard wizard = new ImportWizard(shell,
|
2003-03-06 04:06:17 +00:00
|
|
|
imageManager, directory.getFormattedDisk());
|
2003-02-11 04:41:39 +00:00
|
|
|
wizard.open();
|
|
|
|
if (wizard.isWizardCompleted()) {
|
2003-03-06 13:53:49 +00:00
|
|
|
Shell dialog = null;
|
2003-02-11 04:41:39 +00:00
|
|
|
try {
|
|
|
|
List specs = wizard.getImportSpecifications();
|
2003-03-06 13:53:49 +00:00
|
|
|
// Progress meter for import wizard:
|
|
|
|
dialog = new Shell(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
|
2004-07-04 03:37:53 +00:00
|
|
|
dialog.setText(textBundle.get("ImportingFilesTitle")); //$NON-NLS-1$
|
2003-03-06 13:53:49 +00:00
|
|
|
GridLayout layout = new GridLayout();
|
|
|
|
layout.horizontalSpacing = 5;
|
|
|
|
layout.makeColumnsEqualWidth = false;
|
|
|
|
layout.marginHeight = 5;
|
|
|
|
layout.marginWidth = 5;
|
|
|
|
layout.numColumns = 2;
|
|
|
|
layout.verticalSpacing = 5;
|
|
|
|
dialog.setLayout(layout);
|
|
|
|
Label label = new Label(dialog, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
label.setText(textBundle.get("ImportingFilesProcessingLabel")); //$NON-NLS-1$
|
2003-03-06 13:53:49 +00:00
|
|
|
Label countLabel = new Label(dialog, SWT.NONE);
|
|
|
|
GridData gridData = new GridData();
|
|
|
|
gridData.widthHint = 300;
|
|
|
|
countLabel.setLayoutData(gridData);
|
|
|
|
label = new Label(dialog, SWT.NONE);
|
2004-07-04 03:37:53 +00:00
|
|
|
label.setText(textBundle.get("ImportingFilesFilenameLabel")); //$NON-NLS-1$
|
2003-03-06 13:53:49 +00:00
|
|
|
Label nameLabel = new Label(dialog, SWT.NONE);
|
|
|
|
gridData = new GridData();
|
|
|
|
gridData.widthHint = 300;
|
|
|
|
nameLabel.setLayoutData(gridData);
|
|
|
|
gridData = new GridData(GridData.FILL_HORIZONTAL);
|
|
|
|
gridData.horizontalSpan = 2;
|
|
|
|
gridData.grabExcessHorizontalSpace = true;
|
|
|
|
ProgressBar progressBar = new ProgressBar(dialog, SWT.NONE);
|
|
|
|
progressBar.setLayoutData(gridData);
|
|
|
|
progressBar.setMinimum(0);
|
|
|
|
progressBar.setMaximum(specs.size());
|
|
|
|
dialog.pack();
|
|
|
|
SwtUtil.center(shell, dialog);
|
|
|
|
dialog.open();
|
|
|
|
// begin the import:
|
2003-02-11 04:41:39 +00:00
|
|
|
for (int i=0; i<specs.size(); i++) {
|
|
|
|
ImportSpecification spec =
|
|
|
|
(ImportSpecification) specs.get(i);
|
2004-07-04 03:37:53 +00:00
|
|
|
countLabel.setText(textBundle.format("FileNofM", //$NON-NLS-1$
|
|
|
|
new Object[] { new Integer(i+1), new Integer(specs.size()) }));
|
2003-03-06 13:53:49 +00:00
|
|
|
nameLabel.setText(spec.getSourceFilename());
|
|
|
|
progressBar.setSelection(i);
|
2004-06-20 17:02:00 +00:00
|
|
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
|
|
InputStream input = new FileInputStream(spec.getSourceFilename());
|
|
|
|
StreamUtil.copy(input, buffer);
|
2003-03-06 04:06:17 +00:00
|
|
|
FileEntry fileEntry = directory.createFile();
|
2003-02-11 04:41:39 +00:00
|
|
|
fileEntry.setFilename(spec.getTargetFilename());
|
|
|
|
fileEntry.setFiletype(spec.getFiletype());
|
2004-06-23 03:47:12 +00:00
|
|
|
if (spec.isRawFileImport()) {
|
|
|
|
disks[0].setFileData(fileEntry, buffer.toByteArray());
|
|
|
|
} else {
|
|
|
|
if (fileEntry.needsAddress()) {
|
|
|
|
fileEntry.setAddress(spec.getAddress());
|
|
|
|
}
|
|
|
|
try {
|
2003-05-02 02:56:07 +00:00
|
|
|
fileEntry.setFileData(buffer.toByteArray());
|
2004-06-23 03:47:12 +00:00
|
|
|
} catch (ProdosDiskSizeDoesNotMatchException ex) {
|
2004-07-04 03:37:53 +00:00
|
|
|
int answer = SwtUtil.showYesNoDialog(shell,
|
|
|
|
textBundle.get("ResizeDiskTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.get("ResizeDiskMessage")); //$NON-NLS-1$
|
2004-06-23 03:47:12 +00:00
|
|
|
if (answer == SWT.YES) {
|
|
|
|
ProdosFormatDisk prodosDisk = (ProdosFormatDisk)
|
|
|
|
fileEntry.getFormattedDisk();
|
|
|
|
prodosDisk.resizeDiskImage();
|
|
|
|
fileEntry.setFileData(buffer.toByteArray());
|
|
|
|
}
|
2003-05-02 02:56:07 +00:00
|
|
|
}
|
|
|
|
}
|
2003-02-11 04:41:39 +00:00
|
|
|
}
|
|
|
|
} catch (Exception ex) {
|
2004-07-04 03:37:53 +00:00
|
|
|
SwtUtil.showErrorDialog(shell,
|
|
|
|
textBundle.get("ImportErrorTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.format("ImportErrorMessage", ex.getMessage())); //$NON-NLS-1$
|
2003-02-11 04:41:39 +00:00
|
|
|
}
|
2003-03-06 13:53:49 +00:00
|
|
|
dialog.close();
|
|
|
|
dialog.dispose();
|
2003-02-11 04:41:39 +00:00
|
|
|
changeCurrentFormat(currentFormat);
|
|
|
|
saveToolItem.setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
2002-12-01 02:21:00 +00:00
|
|
|
/**
|
|
|
|
* Sort the file table by the specified columnIndex.
|
|
|
|
*/
|
|
|
|
protected void sortFileTable(int columnIndex) {
|
|
|
|
Collections.sort(currentFileList, new FileEntryComparator(columnIndex, currentFormat));
|
|
|
|
fillFileTable(currentFileList);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Helper function for building fileTree.
|
|
|
|
*/
|
2003-03-06 04:06:17 +00:00
|
|
|
protected void addDirectoriesToTree(TreeItem directoryItem, DirectoryEntry directoryEntry) {
|
2002-12-01 02:21:00 +00:00
|
|
|
Iterator files = directoryEntry.getFiles().iterator();
|
|
|
|
while (files.hasNext()) {
|
|
|
|
final FileEntry entry = (FileEntry) files.next();
|
|
|
|
if (entry.isDirectory()) {
|
|
|
|
TreeItem item = new TreeItem(directoryItem, SWT.BORDER);
|
|
|
|
item.setText(entry.getFilename());
|
|
|
|
item.setData(entry);
|
2003-03-06 04:06:17 +00:00
|
|
|
addDirectoriesToTree(item, (DirectoryEntry)entry);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Creates the FILE tab toolbar.
|
|
|
|
*/
|
|
|
|
private void createFileToolBar(Composite composite, Object layoutData) {
|
|
|
|
toolBar = new ToolBar(composite, SWT.FLAT);
|
2003-12-07 18:21:42 +00:00
|
|
|
toolBar.addListener(SWT.KeyUp, createToolbarCommandHandler());
|
2002-12-01 02:21:00 +00:00
|
|
|
if (layoutData != null) toolBar.setLayoutData(layoutData);
|
|
|
|
|
2003-12-07 18:21:42 +00:00
|
|
|
standardFormatToolItem = new ToolItem(toolBar, SWT.RADIO);
|
2003-12-10 04:47:40 +00:00
|
|
|
standardFormatToolItem.setImage(imageManager.get(ImageManager.ICON_STANDARD_FILE_VIEW));
|
2004-07-04 03:37:53 +00:00
|
|
|
standardFormatToolItem.setText(textBundle.get("StandardViewToolItem")); //$NON-NLS-1$
|
|
|
|
standardFormatToolItem.setToolTipText(textBundle.get("StandardViewHoverText")); //$NON-NLS-1$
|
2003-12-07 18:21:42 +00:00
|
|
|
standardFormatToolItem.setSelection(true);
|
|
|
|
standardFormatToolItem.addSelectionListener(new SelectionAdapter () {
|
2002-12-01 02:21:00 +00:00
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_STANDARD);
|
|
|
|
}
|
|
|
|
});
|
2003-12-07 18:21:42 +00:00
|
|
|
nativeFormatToolItem = new ToolItem(toolBar, SWT.RADIO);
|
2003-12-10 04:47:40 +00:00
|
|
|
nativeFormatToolItem.setImage(imageManager.get(ImageManager.ICON_NATIVE_FILE_VIEW));
|
2004-07-04 03:37:53 +00:00
|
|
|
nativeFormatToolItem.setText(textBundle.get("NativeViewToolItem")); //$NON-NLS-1$
|
|
|
|
nativeFormatToolItem.setToolTipText(textBundle.get("NativeViewHoverText")); //$NON-NLS-1$
|
2003-12-07 18:21:42 +00:00
|
|
|
nativeFormatToolItem.addSelectionListener(new SelectionAdapter () {
|
2002-12-01 02:21:00 +00:00
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_NATIVE);
|
|
|
|
}
|
|
|
|
});
|
2003-12-07 18:21:42 +00:00
|
|
|
detailFormatToolItem = new ToolItem(toolBar, SWT.RADIO);
|
2003-12-10 04:47:40 +00:00
|
|
|
detailFormatToolItem.setImage(imageManager.get(ImageManager.ICON_DETAIL_FILE_VIEW));
|
2004-07-04 03:37:53 +00:00
|
|
|
detailFormatToolItem.setText(textBundle.get("DetailViewToolItem")); //$NON-NLS-1$
|
|
|
|
detailFormatToolItem.setToolTipText(textBundle.get("DetailViewHoverText")); //$NON-NLS-1$
|
2003-12-07 18:21:42 +00:00
|
|
|
detailFormatToolItem.addSelectionListener(new SelectionAdapter () {
|
2002-12-01 02:21:00 +00:00
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_DETAIL);
|
|
|
|
}
|
|
|
|
});
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
2003-06-01 19:47:18 +00:00
|
|
|
|
2003-12-07 18:21:42 +00:00
|
|
|
showDeletedFilesToolItem = new ToolItem(toolBar, SWT.CHECK);
|
2003-12-10 04:47:40 +00:00
|
|
|
showDeletedFilesToolItem.setImage(imageManager.get(ImageManager.ICON_SHOW_DELETED_FILES));
|
2004-07-04 03:37:53 +00:00
|
|
|
showDeletedFilesToolItem.setText(textBundle.get("ShowDeletedFilesToolItem")); //$NON-NLS-1$
|
|
|
|
showDeletedFilesToolItem.setToolTipText(textBundle.get("ShowDeletedFilesHoverText")); //$NON-NLS-1$
|
2003-12-07 18:21:42 +00:00
|
|
|
showDeletedFilesToolItem.setEnabled(disks[0].supportsDeletedFiles());
|
|
|
|
showDeletedFilesToolItem.addSelectionListener(new SelectionAdapter () {
|
2002-12-01 02:21:00 +00:00
|
|
|
public void widgetSelected(SelectionEvent e) {
|
2004-07-04 03:37:53 +00:00
|
|
|
ToolItem toolItem = (ToolItem) e.getSource(); // show deleted files
|
|
|
|
setShowDeletedFiles(toolItem.getSelection());
|
|
|
|
fillFileTable(getCurrentFileList());
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
importToolItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
importToolItem.setImage(imageManager.get(ImageManager.ICON_IMPORT_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
importToolItem.setText(textBundle.get("ImportWizardToolItem")); //$NON-NLS-1$
|
|
|
|
importToolItem.setToolTipText(textBundle.get("ImportWizardHoverText")); //$NON-NLS-1$
|
2003-03-06 04:06:17 +00:00
|
|
|
importToolItem.setEnabled(disks[0].canCreateFile() && disks[0].canWriteFileData());
|
2002-12-01 02:21:00 +00:00
|
|
|
importToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
2003-02-11 04:41:39 +00:00
|
|
|
importFiles();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
exportToolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
|
2003-12-10 04:47:40 +00:00
|
|
|
exportToolItem.setImage(imageManager.get(ImageManager.ICON_EXPORT_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
exportToolItem.setText(textBundle.get("ExportWizardToolItem")); //$NON-NLS-1$
|
|
|
|
exportToolItem.setToolTipText(textBundle.get("ExportWizardHoverText")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
exportToolItem.setEnabled(false);
|
|
|
|
exportToolItem.addSelectionListener(
|
|
|
|
new DropDownSelectionListener(createFileExportMenu(SWT.NONE)));
|
|
|
|
exportToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
if (event.detail != SWT.ARROW) {
|
2003-12-07 06:19:15 +00:00
|
|
|
exportFileWizard();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
2002-12-01 02:21:00 +00:00
|
|
|
|
2003-12-04 05:57:56 +00:00
|
|
|
compileToolItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
compileToolItem.setImage(imageManager.get(ImageManager.ICON_COMPILE_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
compileToolItem.setText(textBundle.get("CompileWizardToolItem")); //$NON-NLS-1$
|
|
|
|
compileToolItem.setToolTipText(textBundle.get("CompileWizardHoverText")); //$NON-NLS-1$
|
2003-12-04 05:57:56 +00:00
|
|
|
compileToolItem.setEnabled(false);
|
|
|
|
compileToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
if (event.detail != SWT.ARROW) {
|
2003-12-07 06:19:15 +00:00
|
|
|
compileFileWizard();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
viewFileItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
viewFileItem.setImage(imageManager.get(ImageManager.ICON_VIEW_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
viewFileItem.setText(textBundle.get("ViewFileToolItem")); //$NON-NLS-1$
|
|
|
|
viewFileItem.setToolTipText(textBundle.get("ViewFileHoverText")); //$NON-NLS-1$
|
2003-12-07 06:19:15 +00:00
|
|
|
viewFileItem.setEnabled(false);
|
|
|
|
viewFileItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
if (event.detail != SWT.ARROW) {
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(null);
|
2003-12-04 05:57:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2003-12-10 04:47:40 +00:00
|
|
|
printToolItem = new ToolItem(toolBar, SWT.PUSH);
|
|
|
|
printToolItem.setImage(imageManager.get(ImageManager.ICON_PRINT_FILE));
|
2004-07-11 15:07:56 +00:00
|
|
|
printToolItem.setText(textBundle.get("PrintButton")); //$NON-NLS-1$
|
2004-07-04 03:37:53 +00:00
|
|
|
printToolItem.setToolTipText(textBundle.get("PrintDirectoryHoverText")); //$NON-NLS-1$
|
2003-12-16 03:39:12 +00:00
|
|
|
printToolItem.setEnabled(true);
|
2003-12-10 04:47:40 +00:00
|
|
|
printToolItem.addSelectionListener(new SelectionAdapter () {
|
2003-12-16 03:39:12 +00:00
|
|
|
public void widgetSelected(SelectionEvent event) {
|
|
|
|
if (event.detail != SWT.ARROW) {
|
|
|
|
print();
|
|
|
|
}
|
2003-12-10 04:47:40 +00:00
|
|
|
}
|
|
|
|
});
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
2003-06-01 19:47:18 +00:00
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
deleteToolItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
deleteToolItem.setImage(imageManager.get(ImageManager.ICON_DELETE_FILE));
|
2004-07-04 03:37:53 +00:00
|
|
|
deleteToolItem.setText(textBundle.get("DeleteFileToolItem")); //$NON-NLS-1$
|
|
|
|
deleteToolItem.setToolTipText(textBundle.get("DeleteFileHoverText")); //$NON-NLS-1$
|
2002-12-01 02:21:00 +00:00
|
|
|
deleteToolItem.setEnabled(false);
|
|
|
|
deleteToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
2002-12-23 21:09:45 +00:00
|
|
|
deleteFile();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
2003-12-08 00:52:38 +00:00
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
2002-12-01 02:21:00 +00:00
|
|
|
|
2004-06-03 03:31:56 +00:00
|
|
|
changeOrderToolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
|
|
|
|
changeOrderToolItem.setImage(imageManager.get(ImageManager.ICON_CHANGE_IMAGE_ORDER));
|
2004-07-04 03:37:53 +00:00
|
|
|
changeOrderToolItem.setText(textBundle.get("ChangeDiskOrderToolItem")); //$NON-NLS-1$
|
|
|
|
changeOrderToolItem.setToolTipText(textBundle.get("ChangeDiskOrderHoverText")); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
ImageOrder imageOrder = disks[0].getImageOrder();
|
|
|
|
changeOrderToolItem.setEnabled(
|
|
|
|
(imageOrder.isBlockDevice()
|
|
|
|
&& imageOrder.getBlocksOnDevice() == Disk.PRODOS_BLOCKS_ON_140KB_DISK)
|
|
|
|
|| (imageOrder.isTrackAndSectorDevice()
|
|
|
|
&& imageOrder.getSectorsPerDisk() == Disk.DOS33_SECTORS_ON_140KB_DISK));
|
|
|
|
changeOrderToolItem.addSelectionListener(
|
2004-07-04 03:37:53 +00:00
|
|
|
new DropDownSelectionListener(getChangeImageOrderMenu()));
|
2004-06-03 03:31:56 +00:00
|
|
|
changeOrderToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
/**
|
|
|
|
* Whenever the button is clicked, force the menu to be shown
|
|
|
|
*/
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
ToolItem toolItem = (ToolItem) event.getSource(); // change order tool item
|
|
|
|
Rectangle rect = toolItem.getBounds();
|
2004-06-03 03:31:56 +00:00
|
|
|
Point pt = new Point(rect.x, rect.y + rect.height);
|
2004-07-04 03:37:53 +00:00
|
|
|
pt = getToolBar().toDisplay(pt);
|
|
|
|
getChangeImageOrderMenu().setLocation(pt.x, pt.y);
|
|
|
|
getChangeImageOrderMenu().setVisible(true);
|
2004-06-03 03:31:56 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
|
|
|
|
2002-12-09 05:42:39 +00:00
|
|
|
saveToolItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
saveToolItem.setImage(imageManager.get(ImageManager.ICON_SAVE_DISK_IMAGE));
|
2004-07-04 03:37:53 +00:00
|
|
|
saveToolItem.setText(textBundle.get("SaveDiskImageToolItem")); //$NON-NLS-1$
|
|
|
|
saveToolItem.setToolTipText(textBundle.get("SaveDiskImageHoverText")); //$NON-NLS-1$
|
2002-12-16 02:19:01 +00:00
|
|
|
saveToolItem.setEnabled(disks[0].hasChanged()); // same physical disk
|
2002-12-09 05:42:39 +00:00
|
|
|
saveToolItem.addSelectionListener(new SelectionAdapter () {
|
2002-12-01 02:21:00 +00:00
|
|
|
public void widgetSelected(SelectionEvent e) {
|
2002-12-09 05:42:39 +00:00
|
|
|
save();
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2003-12-08 00:52:38 +00:00
|
|
|
saveAsToolItem = new ToolItem(toolBar, SWT.PUSH);
|
2003-12-10 04:47:40 +00:00
|
|
|
saveAsToolItem.setImage(imageManager.get(ImageManager.ICON_SAVE_DISK_IMAGE_AS));
|
2004-07-04 03:37:53 +00:00
|
|
|
saveAsToolItem.setText(textBundle.get("SaveDiskImageAsToolItem")); //$NON-NLS-1$
|
|
|
|
saveAsToolItem.setToolTipText(textBundle.get("SaveDiskImageAsHoverText")); //$NON-NLS-1$
|
2003-12-08 00:52:38 +00:00
|
|
|
saveAsToolItem.setEnabled(true); // We can always Save As...
|
|
|
|
saveAsToolItem.addSelectionListener(new SelectionAdapter () {
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
saveAs();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2002-12-01 02:21:00 +00:00
|
|
|
toolBar.pack();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Change the current format and refresh the display.
|
|
|
|
*/
|
|
|
|
protected void changeCurrentFormat(int newFormat) {
|
|
|
|
TreeItem selection = directoryTree.getSelection()[0];
|
|
|
|
Object data = selection.getData();
|
2003-03-06 04:06:17 +00:00
|
|
|
DirectoryEntry directory = (DirectoryEntry) data;
|
|
|
|
List fileList = directory.getFiles();
|
2002-12-01 02:21:00 +00:00
|
|
|
|
|
|
|
formatChanged = (currentFormat != newFormat);
|
|
|
|
if (formatChanged || !fileList.equals(currentFileList)) {
|
|
|
|
preserveColumnWidths(); // must be done before assigning newFormat
|
|
|
|
currentFormat = newFormat;
|
|
|
|
fillFileTable(fileList);
|
2003-12-07 18:21:42 +00:00
|
|
|
|
|
|
|
// Ensure that the control buttons are set appropriately.
|
|
|
|
// Primarly required for keyboard interface.
|
|
|
|
standardFormatToolItem.setSelection(
|
|
|
|
currentFormat == FormattedDisk.FILE_DISPLAY_STANDARD);
|
|
|
|
nativeFormatToolItem.setSelection(
|
|
|
|
currentFormat == FormattedDisk.FILE_DISPLAY_NATIVE);
|
|
|
|
detailFormatToolItem.setSelection(
|
|
|
|
currentFormat == FormattedDisk.FILE_DISPLAY_DETAIL);
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|
|
|
|
}
|
2003-12-08 00:52:38 +00:00
|
|
|
/**
|
|
|
|
* Handle SaveAs.
|
|
|
|
*/
|
|
|
|
protected void saveAs() {
|
|
|
|
FileDialog fileDialog = new FileDialog(shell, SWT.SAVE);
|
2003-12-21 06:16:01 +00:00
|
|
|
fileDialog.setFilterPath(userPreferences.getSaveDirectory());
|
2006-04-16 03:28:36 +00:00
|
|
|
fileDialog.setFileName(Host.getFileName(disks[0].getFilename()));
|
2004-07-04 03:37:53 +00:00
|
|
|
fileDialog.setText(textBundle.get("SaveDiskImageAsPrompt")); //$NON-NLS-1$
|
2003-12-08 00:52:38 +00:00
|
|
|
String fullpath = fileDialog.open();
|
2003-12-21 06:16:01 +00:00
|
|
|
userPreferences.setSaveDirectory(fileDialog.getFilterPath());
|
2003-12-08 00:52:38 +00:00
|
|
|
if (fullpath == null) {
|
|
|
|
return; // user pressed cancel
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
disks[0].saveAs(fullpath);
|
|
|
|
diskWindow.setStandardWindowTitle();
|
|
|
|
saveToolItem.setEnabled(disks[0].hasChanged());
|
|
|
|
} catch (IOException ex) {
|
|
|
|
showSaveError(ex);
|
|
|
|
}
|
|
|
|
}
|
2002-12-09 05:42:39 +00:00
|
|
|
/**
|
|
|
|
* Handle save.
|
2003-12-08 00:52:38 +00:00
|
|
|
* If this is the first time a disk has been saved (a new image),
|
|
|
|
* default to the SaveAs behavior.
|
2002-12-09 05:42:39 +00:00
|
|
|
*/
|
|
|
|
protected void save() {
|
|
|
|
try {
|
2003-12-08 00:52:38 +00:00
|
|
|
if (disks[0].isNewImage()) {
|
|
|
|
saveAs(); // no directory -> assume a new/unsaved image
|
|
|
|
return;
|
|
|
|
}
|
2002-12-16 02:19:01 +00:00
|
|
|
disks[0].save();
|
|
|
|
saveToolItem.setEnabled(disks[0].hasChanged());
|
2002-12-09 05:42:39 +00:00
|
|
|
} catch (IOException ex) {
|
2003-12-08 00:52:38 +00:00
|
|
|
showSaveError(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Display the Save error dialog box.
|
|
|
|
* @see #save
|
|
|
|
* @see #saveAs
|
|
|
|
*/
|
|
|
|
protected void showSaveError(IOException ex) {
|
|
|
|
Shell finalShell = shell;
|
|
|
|
String errorMessage = ex.getMessage();
|
|
|
|
if (errorMessage == null) {
|
|
|
|
errorMessage = ex.getClass().getName();
|
2002-12-09 05:42:39 +00:00
|
|
|
}
|
2003-12-08 00:52:38 +00:00
|
|
|
MessageBox box = new MessageBox(finalShell,
|
|
|
|
SWT.ICON_ERROR | SWT.CLOSE);
|
2004-07-04 03:37:53 +00:00
|
|
|
box.setText(textBundle.get("SaveDiskImageErrorTitle")); //$NON-NLS-1$
|
|
|
|
box.setMessage(textBundle.format("SaveDiskImageErrorMessage", //$NON-NLS-1$
|
|
|
|
new Object[] { getDisk(0).getFilename(), errorMessage }));
|
2003-12-08 00:52:38 +00:00
|
|
|
box.open();
|
2002-12-09 05:42:39 +00:00
|
|
|
}
|
2003-12-07 18:21:42 +00:00
|
|
|
/**
|
|
|
|
* Create the keyboard handler for the directory pane.
|
|
|
|
* These are keys that are <em>only</em> active in the directory
|
|
|
|
* viewer. See createToolbarCommandHandler for the general application
|
|
|
|
* keyboard handler.
|
|
|
|
* @see #createToolbarCommandHandler
|
|
|
|
*/
|
2003-12-07 06:19:15 +00:00
|
|
|
private Listener createDirectoryKeyboardHandler() {
|
|
|
|
return new Listener() {
|
|
|
|
public void handleEvent(Event event) {
|
|
|
|
if (event.type == SWT.KeyUp) {
|
|
|
|
TreeItem[] treeItem = null;
|
|
|
|
if ((event.stateMask & SWT.CTRL) != 0) {
|
|
|
|
switch (event.character) {
|
|
|
|
case '-':
|
2004-07-04 03:37:53 +00:00
|
|
|
treeItem = getDirectoryTree().getSelection();
|
2003-12-07 06:19:15 +00:00
|
|
|
setDirectoryExpandedStates(treeItem[0], false);
|
|
|
|
break;
|
|
|
|
case '+':
|
2004-07-04 03:37:53 +00:00
|
|
|
treeItem = getDirectoryTree().getSelection();
|
2003-12-07 06:19:15 +00:00
|
|
|
setDirectoryExpandedStates(treeItem[0], true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else { // assume no control and no alt
|
|
|
|
switch (event.character) {
|
|
|
|
case '-':
|
2004-07-04 03:37:53 +00:00
|
|
|
treeItem = getDirectoryTree().getSelection();
|
2003-12-07 06:19:15 +00:00
|
|
|
treeItem[0].setExpanded(false);
|
|
|
|
break;
|
|
|
|
case '+':
|
2004-07-04 03:37:53 +00:00
|
|
|
treeItem = getDirectoryTree().getSelection();
|
2003-12-07 06:19:15 +00:00
|
|
|
treeItem[0].setExpanded(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2003-12-10 04:47:40 +00:00
|
|
|
/**
|
|
|
|
* Open up the view file window for the currently selected file.
|
|
|
|
*/
|
2004-06-06 02:12:39 +00:00
|
|
|
protected void viewFile(Class fileFilterClass) {
|
2003-12-10 04:47:40 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
2003-12-29 17:48:13 +00:00
|
|
|
if (fileEntry.isDeleted()) {
|
2004-07-04 03:37:53 +00:00
|
|
|
SwtUtil.showErrorDialog(shell, textBundle.get("DeleteFileErrorTitle"), //$NON-NLS-1$
|
|
|
|
textBundle.get("DeleteFileErrorMessage")); //$NON-NLS-1$
|
2003-12-29 17:48:13 +00:00
|
|
|
} else if (fileEntry.isDirectory()) {
|
|
|
|
TreeItem item = findDirectoryItem(directoryTree.getSelection()[0].getItems(), fileEntry.getFilename(), 1, 0);
|
|
|
|
if (item != null) {
|
|
|
|
directoryTree.showItem(item);
|
|
|
|
directoryTree.setSelection(new TreeItem[] { item });
|
|
|
|
changeCurrentFormat(currentFormat); // minor hack
|
|
|
|
}
|
|
|
|
} else { // Assuming a normal file!
|
2004-06-06 02:12:39 +00:00
|
|
|
FileViewerWindow window = null;
|
|
|
|
FileFilter fileFilter = null;
|
|
|
|
try {
|
|
|
|
fileFilter = (FileFilter) fileFilterClass.newInstance();
|
|
|
|
} catch (NullPointerException ex) {
|
|
|
|
// This is expected
|
|
|
|
} catch (InstantiationException e) {
|
2004-07-04 03:37:53 +00:00
|
|
|
SwtUtil.showSystemErrorDialog(shell, e);
|
2004-06-06 02:12:39 +00:00
|
|
|
} catch (IllegalAccessException e) {
|
2004-07-04 03:37:53 +00:00
|
|
|
SwtUtil.showSystemErrorDialog(shell, e);
|
2004-06-06 02:12:39 +00:00
|
|
|
}
|
|
|
|
if (fileFilter != null) {
|
|
|
|
window = new FileViewerWindow(shell, fileEntry, imageManager, fileFilter);
|
|
|
|
} else {
|
|
|
|
window = new FileViewerWindow(shell, fileEntry, imageManager);
|
|
|
|
}
|
2003-12-29 17:48:13 +00:00
|
|
|
window.open();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Locate a named item in the directory tree.
|
|
|
|
*/
|
|
|
|
protected TreeItem findDirectoryItem(TreeItem[] treeItems, String name, int maxDepth, int currentDepth) {
|
|
|
|
if (maxDepth == currentDepth) return null;
|
|
|
|
for (int i=0; i<treeItems.length; i++) {
|
|
|
|
if (name.equals(treeItems[i].getText())) {
|
|
|
|
return treeItems[i];
|
|
|
|
} else if (treeItems[i].getItems() != null) {
|
|
|
|
TreeItem item = findDirectoryItem(treeItems[i].getItems(), name, maxDepth, currentDepth+1);
|
|
|
|
if (item != null) {
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
2003-12-10 04:47:40 +00:00
|
|
|
}
|
2003-12-07 18:21:42 +00:00
|
|
|
/**
|
|
|
|
* Create the keyboard handler for the file pane.
|
|
|
|
* These are keys that are <em>only</em> active in the file
|
|
|
|
* viewer. See createToolbarCommandHandler for the general application
|
|
|
|
* keyboard handler.
|
|
|
|
* @see #createToolbarCommandHandler
|
|
|
|
*/
|
2003-12-07 06:19:15 +00:00
|
|
|
private Listener createFileKeyboardHandler() {
|
|
|
|
return new Listener() {
|
|
|
|
public void handleEvent(Event event) {
|
2003-12-08 00:52:38 +00:00
|
|
|
FileEntry fileEntry = getSelectedFileEntry();
|
|
|
|
if (fileEntry != null && event.type == SWT.KeyUp && (event.stateMask & SWT.CTRL) != 0) {
|
2003-12-07 06:19:15 +00:00
|
|
|
switch (event.character) {
|
2003-12-07 18:21:42 +00:00
|
|
|
case CTRL_C: // Compile Wizard
|
2004-07-04 03:37:53 +00:00
|
|
|
if (getCompileToolItem().isEnabled()) {
|
2003-12-07 18:21:42 +00:00
|
|
|
compileFileWizard();
|
|
|
|
}
|
2003-12-07 06:19:15 +00:00
|
|
|
break;
|
2003-12-07 18:21:42 +00:00
|
|
|
case CTRL_D: // Delete file
|
2004-07-04 03:37:53 +00:00
|
|
|
if (getDeleteToolItem().isEnabled()) {
|
2003-12-07 18:21:42 +00:00
|
|
|
deleteFile();
|
|
|
|
}
|
2003-12-07 06:19:15 +00:00
|
|
|
break;
|
2003-12-07 18:21:42 +00:00
|
|
|
case CTRL_E: // Export Wizard
|
2003-12-07 06:19:15 +00:00
|
|
|
exportFileWizard();
|
|
|
|
break;
|
2003-12-07 18:21:42 +00:00
|
|
|
case CTRL_V: // View file
|
2004-06-06 02:12:39 +00:00
|
|
|
viewFile(null);
|
2003-12-07 06:19:15 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2003-12-07 18:21:42 +00:00
|
|
|
/**
|
|
|
|
* The toolbar command handler contains the global toolbar
|
|
|
|
* actions. This does not include file-specific actions.
|
|
|
|
* The intent is that the listener is then added to multiple
|
|
|
|
* visual components (i.e., the file listing as well as the
|
|
|
|
* directory listing).
|
|
|
|
*/
|
|
|
|
private Listener createToolbarCommandHandler() {
|
|
|
|
return new Listener() {
|
|
|
|
public void handleEvent(Event event) {
|
|
|
|
if (event.type == SWT.KeyUp) {
|
|
|
|
if ((event.stateMask & SWT.CTRL) != 0) { // CTRL key held
|
2003-12-08 00:52:38 +00:00
|
|
|
if ((event.stateMask & SWT.SHIFT) != 0) { // SHIFT key held
|
|
|
|
switch (event.character) {
|
|
|
|
case CTRL_S: // Save As...
|
|
|
|
saveAs();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch (event.character) {
|
|
|
|
case CTRL_I: // Import Wizard
|
|
|
|
importFiles();
|
|
|
|
break;
|
2003-12-16 03:39:12 +00:00
|
|
|
case CTRL_P: // Print...
|
|
|
|
print();
|
|
|
|
break;
|
2003-12-08 00:52:38 +00:00
|
|
|
case CTRL_S: // Save
|
2004-07-04 03:37:53 +00:00
|
|
|
if (getSaveToolItem().isEnabled()) {
|
2003-12-08 00:52:38 +00:00
|
|
|
save();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2003-12-07 18:21:42 +00:00
|
|
|
}
|
|
|
|
} else { // No CTRL key
|
|
|
|
switch (event.keyCode) {
|
|
|
|
case SWT.F2: // Standard file display
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_STANDARD);
|
|
|
|
break;
|
|
|
|
case SWT.F3: // Native file display
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_NATIVE);
|
|
|
|
break;
|
|
|
|
case SWT.F4: // Detail file display
|
|
|
|
changeCurrentFormat(FormattedDisk.FILE_DISPLAY_DETAIL);
|
|
|
|
break;
|
|
|
|
case SWT.F5: // Show deleted files
|
2004-07-04 03:37:53 +00:00
|
|
|
setShowDeletedFiles(!getShowDeletedFilesToolItem().getSelection());
|
|
|
|
getShowDeletedFilesToolItem().setSelection(isShowDeletedFiles());
|
|
|
|
fillFileTable(getCurrentFileList());
|
2003-12-07 18:21:42 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2003-12-08 00:52:38 +00:00
|
|
|
/**
|
|
|
|
* Get the currently selected FileEntry. Note that this
|
|
|
|
* can return null if there are none selected. Also, if there
|
|
|
|
* are multiple files selected, this is not complete.
|
|
|
|
*/
|
|
|
|
protected FileEntry getSelectedFileEntry() {
|
|
|
|
FileEntry fileEntry = null;
|
|
|
|
if (fileTable.getSelectionIndex() >= 0) {
|
|
|
|
fileEntry = (FileEntry) fileTable.getItem(fileTable.getSelectionIndex()).getData();
|
|
|
|
}
|
|
|
|
return fileEntry;
|
|
|
|
}
|
2003-12-16 03:39:12 +00:00
|
|
|
/**
|
|
|
|
* Internal class that controls printing of a file listing.
|
|
|
|
*/
|
|
|
|
private class Printing implements Runnable {
|
|
|
|
private Printer printer;
|
|
|
|
private int y;
|
|
|
|
private int x;
|
|
|
|
private Rectangle clientArea;
|
|
|
|
private GC gc;
|
|
|
|
private List fileHeaders;
|
2004-07-11 15:07:56 +00:00
|
|
|
private int[] printColumnWidths;
|
|
|
|
private int[] printColumnPosition;
|
2003-12-16 03:39:12 +00:00
|
|
|
private Font normalFont;
|
|
|
|
private Font headerFont;
|
|
|
|
private String filename;
|
|
|
|
private int page = 1;
|
|
|
|
private int dpiY;
|
|
|
|
private int dpiX;
|
|
|
|
public Printing(Printer printer) {
|
|
|
|
this.printer = printer;
|
|
|
|
}
|
|
|
|
public void run() {
|
2004-07-04 03:37:53 +00:00
|
|
|
if (printer.startJob(getDisk(0).getFilename())) {
|
2003-12-16 03:39:12 +00:00
|
|
|
clientArea = printer.getClientArea();
|
|
|
|
dpiY = printer.getDPI().y;
|
|
|
|
dpiX = printer.getDPI().x;
|
|
|
|
// Setup 1" margin:
|
|
|
|
Rectangle trim = printer.computeTrim(0, 0, 0, 0);
|
|
|
|
clientArea.x = dpiX + trim.x;
|
|
|
|
clientArea.y = dpiY + trim.y;
|
|
|
|
clientArea.width -= (clientArea.x + trim.width);
|
|
|
|
clientArea.height -= (clientArea.y + trim.height);
|
|
|
|
// Set default values:
|
|
|
|
y = clientArea.y;
|
|
|
|
x = clientArea.x;
|
|
|
|
gc = new GC(printer);
|
|
|
|
int fontSize = 12;
|
2004-07-04 03:37:53 +00:00
|
|
|
if (getCurrentFormat() == FormattedDisk.FILE_DISPLAY_NATIVE) {
|
2003-12-16 03:39:12 +00:00
|
|
|
fontSize = 10;
|
2004-07-04 03:37:53 +00:00
|
|
|
} else if (getCurrentFormat() == FormattedDisk.FILE_DISPLAY_DETAIL) {
|
2003-12-16 03:39:12 +00:00
|
|
|
fontSize = 8;
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
normalFont = new Font(printer, new String(), fontSize, SWT.NORMAL);
|
|
|
|
headerFont = new Font(printer, new String(), fontSize, SWT.BOLD);
|
|
|
|
for (int i=0; i<getDisks().length; i++) {
|
|
|
|
FormattedDisk disk = getDisk(i);
|
2003-12-16 03:39:12 +00:00
|
|
|
filename = disk.getFilename();
|
2004-07-04 03:37:53 +00:00
|
|
|
fileHeaders = disk.getFileColumnHeaders(getCurrentFormat());
|
2003-12-16 03:39:12 +00:00
|
|
|
gc.setFont(headerFont);
|
|
|
|
computeHeaderWidths();
|
|
|
|
printFileHeaders();
|
|
|
|
gc.setFont(normalFont);
|
|
|
|
println(disk.getDiskName());
|
|
|
|
printFiles(disk, 1);
|
|
|
|
}
|
|
|
|
if (y != clientArea.y) { // partial page
|
|
|
|
printFooter();
|
|
|
|
printer.endPage();
|
|
|
|
}
|
|
|
|
printer.endJob();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
protected void computeHeaderWidths() {
|
|
|
|
int totalWidth = 0;
|
|
|
|
int[] widths = new int[fileHeaders.size()];
|
|
|
|
for (int i=0; i<fileHeaders.size(); i++) {
|
|
|
|
FileColumnHeader header = (FileColumnHeader) fileHeaders.get(i);
|
|
|
|
widths[i] = (header.getMaximumWidth() >= header.getTitle().length()) ?
|
|
|
|
header.getMaximumWidth() : header.getTitle().length();
|
|
|
|
totalWidth+= widths[i];
|
|
|
|
}
|
2004-07-11 15:07:56 +00:00
|
|
|
printColumnWidths = new int[fileHeaders.size()];
|
|
|
|
printColumnPosition = new int[fileHeaders.size()];
|
2003-12-16 03:39:12 +00:00
|
|
|
int position = clientArea.x;
|
|
|
|
for (int i=0; i<fileHeaders.size(); i++) {
|
2004-07-11 15:07:56 +00:00
|
|
|
printColumnWidths[i] = (widths[i] * clientArea.width) / totalWidth;
|
|
|
|
printColumnPosition[i] = position;
|
|
|
|
position+= printColumnWidths[i];
|
2003-12-16 03:39:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
protected void printFileHeaders() {
|
|
|
|
for (int i=0; i<fileHeaders.size(); i++) {
|
|
|
|
FileColumnHeader header = (FileColumnHeader) fileHeaders.get(i);
|
|
|
|
print(i, header.getTitle(), header.getAlignment());
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
println(new String());
|
2003-12-16 03:39:12 +00:00
|
|
|
}
|
|
|
|
protected void print(int column, String text, int alignment) {
|
2004-07-11 15:07:56 +00:00
|
|
|
int x0 = printColumnPosition[column];
|
|
|
|
int x1 = (column+1 < printColumnPosition.length) ?
|
|
|
|
printColumnPosition[column+1] : clientArea.width;
|
|
|
|
int w = printColumnWidths[column];
|
2003-12-16 03:39:12 +00:00
|
|
|
switch (alignment) {
|
|
|
|
case FileColumnHeader.ALIGN_LEFT:
|
|
|
|
x = x0;
|
|
|
|
break;
|
|
|
|
case FileColumnHeader.ALIGN_CENTER:
|
|
|
|
x = x0 + (w - gc.stringExtent(text).x)/2;
|
|
|
|
break;
|
|
|
|
case FileColumnHeader.ALIGN_RIGHT:
|
|
|
|
x = x1 - gc.stringExtent(text).x;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
gc.drawString(text,x,y);
|
|
|
|
}
|
|
|
|
protected void println(String string) {
|
|
|
|
if (y == clientArea.y) { // start of page
|
|
|
|
printer.startPage();
|
|
|
|
printHeader();
|
|
|
|
y++; // hack
|
|
|
|
printFileHeaders();
|
|
|
|
}
|
|
|
|
gc.drawString(string, x, y);
|
|
|
|
x = clientArea.x;
|
|
|
|
y+= gc.stringExtent(string).y;
|
|
|
|
if (y > (clientArea.y + clientArea.height)) { // filled a page
|
|
|
|
printFooter();
|
|
|
|
printer.endPage();
|
|
|
|
y = clientArea.y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
protected void printHeader() {
|
|
|
|
Point point = gc.stringExtent(filename);
|
|
|
|
gc.drawString(filename,
|
|
|
|
clientArea.x + (clientArea.width - point.x)/2,
|
|
|
|
y - dpiY + point.y);
|
|
|
|
}
|
|
|
|
protected void printFooter() {
|
2004-07-11 15:07:56 +00:00
|
|
|
TextBundle textBundle = UiBundle.getInstance();
|
2004-07-04 03:37:53 +00:00
|
|
|
String text = textBundle.format("PageNumberText", Integer.toString(page)); //$NON-NLS-1$
|
2003-12-16 03:39:12 +00:00
|
|
|
Point point = gc.stringExtent(text);
|
|
|
|
gc.drawString(text,
|
|
|
|
clientArea.x + (clientArea.width - point.x)/2,
|
|
|
|
clientArea.y + clientArea.height + dpiY - point.y);
|
|
|
|
page++;
|
|
|
|
}
|
|
|
|
protected void printFiles(DirectoryEntry directory, int level) {
|
|
|
|
Iterator iterator = directory.getFiles().iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
|
|
FileEntry fileEntry = (FileEntry) iterator.next();
|
2004-07-04 03:37:53 +00:00
|
|
|
if (!fileEntry.isDeleted() || isShowDeletedFiles()) {
|
|
|
|
List columns = fileEntry.getFileColumnData(getCurrentFormat());
|
2003-12-16 03:39:12 +00:00
|
|
|
for (int i=0; i<columns.size(); i++) {
|
|
|
|
FileColumnHeader header = (FileColumnHeader) fileHeaders.get(i);
|
|
|
|
String text = (String)columns.get(i);
|
2004-07-04 03:37:53 +00:00
|
|
|
if ("name".equalsIgnoreCase(header.getTitle())) { //$NON-NLS-1$
|
2003-12-16 03:39:12 +00:00
|
|
|
for (int l=0; l<level; l++) {
|
2004-07-04 03:37:53 +00:00
|
|
|
text = " " + text; //$NON-NLS-1$
|
2003-12-16 03:39:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
print(i, text, header.getAlignment());
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
println(new String());
|
2003-12-16 03:39:12 +00:00
|
|
|
if (fileEntry.isDirectory()) {
|
|
|
|
printFiles((DirectoryEntry)fileEntry, level+1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Print the file listing for this disk.
|
|
|
|
*/
|
|
|
|
protected void print() {
|
|
|
|
PrintDialog printDialog = new PrintDialog(shell);
|
|
|
|
PrinterData printerData = printDialog.open();
|
|
|
|
if (printerData == null) {
|
|
|
|
// cancelled
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
final Printer printer = new Printer(printerData);
|
|
|
|
new Thread() {
|
|
|
|
public void run() {
|
|
|
|
new Printing(printer).run();
|
|
|
|
printer.dispose();
|
|
|
|
}
|
|
|
|
}.start();
|
|
|
|
}
|
2004-06-03 03:31:56 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Change the disk to a new image order. It is assumed that the order is
|
|
|
|
* appropriate - that should be handled by the menuing.
|
|
|
|
*/
|
|
|
|
protected void changeImageOrder(String extension, ImageOrder newImageOrder) {
|
|
|
|
try {
|
|
|
|
disks[0].changeImageOrder(newImageOrder);
|
|
|
|
String filename = disks[0].getFilename();
|
|
|
|
if (disks[0].isCompressed()) { // extra ".gz" at end
|
2004-07-04 03:37:53 +00:00
|
|
|
int chop = filename.lastIndexOf(".", filename.length()-4); //$NON-NLS-1$
|
|
|
|
filename = filename.substring(0, chop+1) + extension + ".gz"; //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
} else {
|
2004-07-04 03:37:53 +00:00
|
|
|
int chop = filename.lastIndexOf("."); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
filename = filename.substring(0, chop+1) + extension;
|
|
|
|
}
|
|
|
|
disks[0].setFilename(filename);
|
|
|
|
diskWindow.setStandardWindowTitle();
|
|
|
|
} catch (Throwable t) {
|
|
|
|
Shell finalShell = shell;
|
|
|
|
String errorMessage = t.getMessage();
|
|
|
|
if (errorMessage == null) {
|
|
|
|
errorMessage = t.getClass().getName();
|
|
|
|
}
|
|
|
|
MessageBox box = new MessageBox(finalShell,
|
|
|
|
SWT.ICON_ERROR | SWT.OK);
|
2004-07-04 03:37:53 +00:00
|
|
|
box.setText(textBundle.get("ChangeImageOrderErrorTitle")); //$NON-NLS-1$
|
|
|
|
box.setMessage(textBundle.format(
|
|
|
|
"ChangeImageOrderErrorMessage", errorMessage)); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
box.open();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Construct the popup menu for the export button on the toolbar.
|
|
|
|
*/
|
2004-07-04 03:37:53 +00:00
|
|
|
protected Menu createChangeImageOrderMenu() {
|
|
|
|
Menu menu = new Menu(shell, SWT.NONE);
|
2004-06-03 03:31:56 +00:00
|
|
|
menu.addMenuListener(new MenuAdapter() {
|
|
|
|
public void menuShown(MenuEvent event) {
|
|
|
|
Menu theMenu = (Menu) event.getSource();
|
|
|
|
MenuItem[] subItems = theMenu.getItems();
|
|
|
|
// Nibble Order (*.nib)
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[0].setSelection(getDisk(0).isNibbleOrder());
|
2004-06-03 03:31:56 +00:00
|
|
|
// DOS Order (*.dsk)
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[1].setSelection(getDisk(0).isDosOrder());
|
2004-06-03 03:31:56 +00:00
|
|
|
// ProDOS Order (*.po)
|
2004-07-04 03:37:53 +00:00
|
|
|
subItems[2].setSelection(getDisk(0).isProdosOrder());
|
2004-06-03 03:31:56 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
MenuItem item = new MenuItem(menu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ChangeToNibbleOrderMenuItem")); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
if (!getDisk(0).isNibbleOrder()) {
|
2004-06-03 03:31:56 +00:00
|
|
|
NibbleOrder nibbleOrder = new NibbleOrder(
|
|
|
|
new ByteArrayImageLayout(Disk.APPLE_140KB_NIBBLE_DISK));
|
|
|
|
nibbleOrder.format();
|
2004-07-04 03:37:53 +00:00
|
|
|
changeImageOrder("nib", nibbleOrder); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ChangeToDosOrderMenuItem")); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
if (!getDisk(0).isDosOrder()) {
|
|
|
|
changeImageOrder("dsk", new DosOrder( //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
new ByteArrayImageLayout(Disk.APPLE_140KB_DISK)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
item = new MenuItem(menu, SWT.RADIO);
|
2004-07-04 03:37:53 +00:00
|
|
|
item.setText(textBundle.get("ChangeToProdosOrderMenuItem")); //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
item.addSelectionListener(new SelectionAdapter() {
|
|
|
|
public void widgetSelected(SelectionEvent event) {
|
2004-07-04 03:37:53 +00:00
|
|
|
if (!getDisk(0).isProdosOrder()) {
|
|
|
|
changeImageOrder("po", new ProdosOrder( //$NON-NLS-1$
|
2004-06-03 03:31:56 +00:00
|
|
|
new ByteArrayImageLayout(Disk.APPLE_140KB_DISK)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return menu;
|
|
|
|
}
|
2004-07-04 03:37:53 +00:00
|
|
|
|
|
|
|
protected void setFileFilter(FileFilter fileFilter) {
|
|
|
|
this.fileFilter = fileFilter;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void setShowDeletedFiles(boolean showDeletedFiles) {
|
|
|
|
this.showDeletedFiles = showDeletedFiles;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected boolean isShowDeletedFiles() {
|
|
|
|
return showDeletedFiles;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Menu getChangeImageOrderMenu() {
|
|
|
|
if (changeImageOrderMenu == null) {
|
|
|
|
changeImageOrderMenu = createChangeImageOrderMenu();
|
|
|
|
}
|
|
|
|
return changeImageOrderMenu;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolBar getToolBar() {
|
|
|
|
return toolBar;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected FormattedDisk[] getDisks() {
|
|
|
|
return disks;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected FormattedDisk getDisk(int diskNumber) {
|
|
|
|
return disks[diskNumber];
|
|
|
|
}
|
|
|
|
|
|
|
|
protected int getCurrentFormat() {
|
|
|
|
return currentFormat;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Tree getDirectoryTree() {
|
|
|
|
return directoryTree;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected AppleWorksWordProcessorFileFilter getAwpFilter() {
|
|
|
|
return awpFilter;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected GraphicsFileFilter getGraphicsFilter() {
|
|
|
|
return graphicsFilter;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getImportToolItem() {
|
|
|
|
return importToolItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getExportToolItem() {
|
|
|
|
return exportToolItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getCompileToolItem() {
|
|
|
|
return compileToolItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected Table getFileTable() {
|
|
|
|
return fileTable;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getDeleteToolItem() {
|
|
|
|
return deleteToolItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getViewFileToolItem() {
|
|
|
|
return viewFileItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected List getCurrentFileList() {
|
|
|
|
return currentFileList;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getSaveToolItem() {
|
|
|
|
return saveToolItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected ToolItem getShowDeletedFilesToolItem() {
|
|
|
|
return showDeletedFilesToolItem;
|
|
|
|
}
|
2002-12-01 02:21:00 +00:00
|
|
|
}
|