removed com.bytezone.common

This commit is contained in:
Denis Molony 2020-06-29 12:29:26 +10:00
parent 3e1d9d65ca
commit 5191615953
10 changed files with 978 additions and 740 deletions

View File

@ -1,451 +1,451 @@
package com.bytezone.diskbrowser.gui;
/***********************************************************************************************
* Contains a single instance of FileSystemTab, and any number of AppleDiskTab instances.
*
*
***********************************************************************************************/
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.util.prefs.Preferences;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import com.bytezone.common.FontAction.FontChangeEvent;
import com.bytezone.common.FontAction.FontChangeListener;
import com.bytezone.diskbrowser.applefile.AppleFileSource;
import com.bytezone.diskbrowser.disk.DualDosDisk;
import com.bytezone.diskbrowser.disk.FormattedDisk;
import com.bytezone.diskbrowser.duplicates.DiskDetails;
import com.bytezone.diskbrowser.gui.DuplicateAction.DiskTableSelectionListener;
import com.bytezone.diskbrowser.gui.RedoHandler.RedoEvent;
import com.bytezone.diskbrowser.gui.RedoHandler.RedoListener;
import com.bytezone.diskbrowser.gui.TreeBuilder.FileNode;
// -----------------------------------------------------------------------------------//
class CatalogPanel extends JTabbedPane
implements RedoListener, SectorSelectionListener, QuitListener, FontChangeListener,
RootDirectoryChangeListener, DiskTableSelectionListener
// -----------------------------------------------------------------------------------//
{
private static final String prefsLastDiskUsed = "Last disk used";
private static final String prefsLastDosUsed = "Last dos used";
private static final String prefsLastFileUsed = "Last file used";
private static final String prefsLastSectorsUsed = "Last sectors used";
private Font font;
private FileSystemTab fileTab;
private final List<AppleDiskTab> diskTabs = new ArrayList<> ();
private final DiskAndFileSelector selector = new DiskAndFileSelector ();
private final RedoHandler redoHandler;
private CloseTabAction closeTabAction;
private File rootFolder;
private boolean restored = false;
// ---------------------------------------------------------------------------------//
public CatalogPanel (RedoHandler redoHandler)
// ---------------------------------------------------------------------------------//
{
this.redoHandler = redoHandler;
setTabPlacement (SwingConstants.BOTTOM);
setPreferredSize (new Dimension (360, 802)); // width, height
}
// ---------------------------------------------------------------------------------//
@Override
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
// ---------------------------------------------------------------------------------//
{
rootFolder = newRootFolder;
if (!restored)
return; // restore will finish the task
// is the user replacing an existing root folder?
if (fileTab != null)
removeTabAt (0);
insertFileSystemTab (null);
setSelectedIndex (0);
}
// ---------------------------------------------------------------------------------//
private void insertFileSystemTab (DiskSelectedEvent diskEvent)
// ---------------------------------------------------------------------------------//
{
fileTab = new FileSystemTab (rootFolder, selector, redoHandler, font, diskEvent);
fileTab.addTreeMouseListener (new MouseListener ()); // listen for disk selection
insertTab ("Disk Tree", null, fileTab, "Display Apple disks", 0);
}
// ---------------------------------------------------------------------------------//
public void activate ()
// ---------------------------------------------------------------------------------//
{
if (fileTab == null)
{
System.out.println ("No file tab");
return;
}
if (diskTabs.size () > 0)
setSelectedIndex (1);
else if (fileTab != null)
setSelectedIndex (0);
}
// ---------------------------------------------------------------------------------//
void setCloseTabAction (CloseTabAction action)
// ---------------------------------------------------------------------------------//
{
this.closeTabAction = action;
}
// called after a double-click in the fileTab
// ---------------------------------------------------------------------------------//
public void addDiskPanel (FormattedDisk disk, boolean activate)
// ---------------------------------------------------------------------------------//
{
int tabNo = 1;
for (AppleDiskTab tab : diskTabs)
{
if (tab.contains (disk))
{
setSelectedIndex (tabNo);
return;
}
tabNo++;
}
AppleDiskTab tab = new AppleDiskTab (disk, selector, redoHandler, font);
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
if (activate)
setSelectedIndex (diskTabs.size ());
}
// called from RefreshTreeAction
// ---------------------------------------------------------------------------------//
public void refreshTree ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
tab.refresh ();
// Any newly created disk needs to appear in the FileSystemTab's tree
if (tab instanceof AppleDiskTab)
fileTab.replaceDisk (((AppleDiskTab) tab).disk);
}
// called from CloseTabAction
// ---------------------------------------------------------------------------------//
public void closeCurrentTab ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (!(tab instanceof AppleDiskTab) || diskTabs.size () < 2)
return;
int index = getSelectedIndex ();
remove (index);
diskTabs.remove (tab);
for (int i = 1; i <= diskTabs.size (); i++)
setTitleAt (i, "D" + i);
checkCloseTabAction ();
}
// ---------------------------------------------------------------------------------//
private void checkCloseTabAction ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (diskTabs.size () > 1 && tab instanceof AppleDiskTab)
closeTabAction.setEnabled (true);
else
closeTabAction.setEnabled (false);
}
// ---------------------------------------------------------------------------------//
@Override
public void quit (Preferences prefs)
// ---------------------------------------------------------------------------------//
{
if (fileTab == null)
{
prefs.put (prefsLastDiskUsed, "");
prefs.putInt (prefsLastDosUsed, -1);
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, "");
}
else
{
if (diskTabs.size () == 0)
{
RedoEvent redoEvent = fileTab.redoData.getCurrentEvent ();
if (redoEvent != null)
{
DiskSelectedEvent event = (DiskSelectedEvent) redoEvent.value;
prefs.put (prefsLastDiskUsed, event.getFormattedDisk ().getAbsolutePath ());
}
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, "");
}
else
{
AbstractTab selectedTab = (AbstractTab) getSelectedComponent ();
if (selectedTab instanceof FileSystemTab)
selectedTab = diskTabs.get (diskTabs.size () - 1);
FormattedDisk fd = ((AppleDiskTab) selectedTab).disk;
prefs.put (prefsLastDiskUsed, fd.getAbsolutePath ());
if (fd instanceof DualDosDisk)
prefs.putInt (prefsLastDosUsed, ((DualDosDisk) fd).getCurrentDiskNo ());
else
prefs.putInt (prefsLastDosUsed, -1);
RedoEvent redoEvent = selectedTab.redoData.getCurrentEvent ();
if (redoEvent != null)
{
EventObject event = redoEvent.value;
if (event instanceof FileSelectedEvent)
{
AppleFileSource afs = ((FileSelectedEvent) event).appleFileSource;
prefs.put (prefsLastFileUsed, afs == null ? "" : afs.getUniqueName ());
prefs.put (prefsLastSectorsUsed, "");
}
else if (event instanceof SectorSelectedEvent)
{
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, ((SectorSelectedEvent) event).toText ());
}
}
}
}
}
// ---------------------------------------------------------------------------------//
@Override
public void restore (Preferences prefs)
// ---------------------------------------------------------------------------------//
{
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
String lastFileUsed = prefs.get (prefsLastFileUsed, "");
String lastSectorsUsed = prefs.get (prefsLastSectorsUsed, "");
if (false)
{
System.out.println ("Last disk : " + lastDiskUsed);
System.out.println ("Last dos : " + lastDosUsed);
System.out.println ("Last file : " + lastFileUsed);
System.out.println ("Last sectors : " + lastSectorsUsed);
}
FormattedDisk fd1 = null;
DiskSelectedEvent diskEvent = null;
if (!lastDiskUsed.isEmpty ())
{
diskEvent = DiskSelectedEvent.create (this, lastDiskUsed);
if (diskEvent != null)
{
fd1 = diskEvent.getFormattedDisk ();
if (lastDosUsed >= 0 && fd1 instanceof DualDosDisk)
((DualDosDisk) fd1).setCurrentDiskNo (lastDosUsed);
}
}
else
System.out.println ("no disk selected");
if (rootFolder != null)
insertFileSystemTab (diskEvent);
if (diskEvent != null)
{
AppleDiskTab tab = null;
FormattedDisk fd = diskEvent.getFormattedDisk ();
assert fd == fd1;
if (!lastFileUsed.isEmpty ())
{
AppleFileSource afs = fd.getFile (lastFileUsed);
if (afs != null)
{
FileSelectedEvent fileEvent = new FileSelectedEvent (this, afs);
tab = new AppleDiskTab (fd, selector, redoHandler, font, fileEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font, lastFileUsed);
}
else if (!lastSectorsUsed.isEmpty ())
{
SectorSelectedEvent sectorEvent =
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
tab = new AppleDiskTab (fd, selector, redoHandler, font, sectorEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font);
if (tab != null)
{
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
}
else
System.out.println ("No disk tab created");
}
addChangeListener (new TabChangeListener ());
restored = true;
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addDiskSelectionListener (DiskSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addDiskSelectionListener (listener);
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addFileSelectionListener (FileSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addFileSelectionListener (listener);
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addFileNodeSelectionListener (FileNodeSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addFileNodeSelectionListener (listener);
}
// ---------------------------------------------------------------------------------//
private class TabChangeListener implements ChangeListener
// ---------------------------------------------------------------------------------//
{
// -------------------------------------------------------------------------------//
@Override
public void stateChanged (ChangeEvent e)
// -------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (tab != null)
{
tab.activate ();
checkCloseTabAction ();
}
}
}
// ---------------------------------------------------------------------------------//
@Override
public void redo (RedoEvent event)
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
selector.redo = true;
switch (event.type)
{
case "DiskEvent":
case "FileNodeEvent":
if (tab instanceof FileSystemTab)
((FileSystemTab) tab).redoEvent (event);
break;
case "FileEvent":
if (tab instanceof AppleDiskTab)
((AppleDiskTab) tab).redoEvent (event);
break;
case "SectorEvent":
// don't care
break;
default:
System.out.println ("Unknown event type : " + event.type);
}
selector.redo = false;
}
// ---------------------------------------------------------------------------------//
@Override
public void sectorSelected (SectorSelectedEvent event)
// ---------------------------------------------------------------------------------//
{
// user has clicked in the DiskLayoutPanel, so turn off any current file selection
Tab tab = (Tab) getSelectedComponent ();
if (tab instanceof AppleDiskTab)
((AppleDiskTab) tab).tree.setSelectionPath (null);
}
// ---------------------------------------------------------------------------------//
@Override
public void changeFont (FontChangeEvent fontChangeEvent)
// ---------------------------------------------------------------------------------//
{
font = fontChangeEvent.font;
if (fileTab != null)
fileTab.setTreeFont (font);
for (AppleDiskTab tab : diskTabs)
tab.setTreeFont (font);
}
// ---------------------------------------------------------------------------------//
private class MouseListener extends MouseAdapter
// ---------------------------------------------------------------------------------//
{
// -------------------------------------------------------------------------------//
@Override
public void mousePressed (MouseEvent e)
// -------------------------------------------------------------------------------//
{
JTree tree = (JTree) e.getSource ();
int selRow = tree.getRowForLocation (e.getX (), e.getY ());
if (selRow < 0)
return;
TreePath tp = tree.getPathForLocation (e.getX (), e.getY ());
DefaultMutableTreeNode selectedNode =
(DefaultMutableTreeNode) tp.getLastPathComponent ();
FileNode node = (FileNode) selectedNode.getUserObject ();
if (node.file.isDirectory ())
{
// lister.catalogLister.setNode (selectedNode);
}
else if (e.getClickCount () == 2)
addDiskPanel (node.getFormattedDisk (), true);
}
}
// a disk has been selected from the Disk Duplicates Table
// -------------------------------------------------------------------------------//
@Override
public void diskSelected (DiskDetails diskDetails)
// -------------------------------------------------------------------------------//
{
if (getSelectedIndex () != 0)
setSelectedIndex (0);
fileTab.selectDisk (diskDetails.getRootName ());
}
package com.bytezone.diskbrowser.gui;
/***********************************************************************************************
* Contains a single instance of FileSystemTab, and any number of AppleDiskTab instances.
*
*
***********************************************************************************************/
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.util.prefs.Preferences;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import com.bytezone.diskbrowser.applefile.AppleFileSource;
import com.bytezone.diskbrowser.disk.DualDosDisk;
import com.bytezone.diskbrowser.disk.FormattedDisk;
import com.bytezone.diskbrowser.duplicates.DiskDetails;
import com.bytezone.diskbrowser.gui.DuplicateAction.DiskTableSelectionListener;
import com.bytezone.diskbrowser.gui.FontAction.FontChangeEvent;
import com.bytezone.diskbrowser.gui.FontAction.FontChangeListener;
import com.bytezone.diskbrowser.gui.RedoHandler.RedoEvent;
import com.bytezone.diskbrowser.gui.RedoHandler.RedoListener;
import com.bytezone.diskbrowser.gui.TreeBuilder.FileNode;
// -----------------------------------------------------------------------------------//
class CatalogPanel extends JTabbedPane
implements RedoListener, SectorSelectionListener, QuitListener, FontChangeListener,
RootDirectoryChangeListener, DiskTableSelectionListener
// -----------------------------------------------------------------------------------//
{
private static final String prefsLastDiskUsed = "Last disk used";
private static final String prefsLastDosUsed = "Last dos used";
private static final String prefsLastFileUsed = "Last file used";
private static final String prefsLastSectorsUsed = "Last sectors used";
private Font font;
private FileSystemTab fileTab;
private final List<AppleDiskTab> diskTabs = new ArrayList<> ();
private final DiskAndFileSelector selector = new DiskAndFileSelector ();
private final RedoHandler redoHandler;
private CloseTabAction closeTabAction;
private File rootFolder;
private boolean restored = false;
// ---------------------------------------------------------------------------------//
public CatalogPanel (RedoHandler redoHandler)
// ---------------------------------------------------------------------------------//
{
this.redoHandler = redoHandler;
setTabPlacement (SwingConstants.BOTTOM);
setPreferredSize (new Dimension (360, 802)); // width, height
}
// ---------------------------------------------------------------------------------//
@Override
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
// ---------------------------------------------------------------------------------//
{
rootFolder = newRootFolder;
if (!restored)
return; // restore will finish the task
// is the user replacing an existing root folder?
if (fileTab != null)
removeTabAt (0);
insertFileSystemTab (null);
setSelectedIndex (0);
}
// ---------------------------------------------------------------------------------//
private void insertFileSystemTab (DiskSelectedEvent diskEvent)
// ---------------------------------------------------------------------------------//
{
fileTab = new FileSystemTab (rootFolder, selector, redoHandler, font, diskEvent);
fileTab.addTreeMouseListener (new MouseListener ()); // listen for disk selection
insertTab ("Disk Tree", null, fileTab, "Display Apple disks", 0);
}
// ---------------------------------------------------------------------------------//
public void activate ()
// ---------------------------------------------------------------------------------//
{
if (fileTab == null)
{
System.out.println ("No file tab");
return;
}
if (diskTabs.size () > 0)
setSelectedIndex (1);
else if (fileTab != null)
setSelectedIndex (0);
}
// ---------------------------------------------------------------------------------//
void setCloseTabAction (CloseTabAction action)
// ---------------------------------------------------------------------------------//
{
this.closeTabAction = action;
}
// called after a double-click in the fileTab
// ---------------------------------------------------------------------------------//
public void addDiskPanel (FormattedDisk disk, boolean activate)
// ---------------------------------------------------------------------------------//
{
int tabNo = 1;
for (AppleDiskTab tab : diskTabs)
{
if (tab.contains (disk))
{
setSelectedIndex (tabNo);
return;
}
tabNo++;
}
AppleDiskTab tab = new AppleDiskTab (disk, selector, redoHandler, font);
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
if (activate)
setSelectedIndex (diskTabs.size ());
}
// called from RefreshTreeAction
// ---------------------------------------------------------------------------------//
public void refreshTree ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
tab.refresh ();
// Any newly created disk needs to appear in the FileSystemTab's tree
if (tab instanceof AppleDiskTab)
fileTab.replaceDisk (((AppleDiskTab) tab).disk);
}
// called from CloseTabAction
// ---------------------------------------------------------------------------------//
public void closeCurrentTab ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (!(tab instanceof AppleDiskTab) || diskTabs.size () < 2)
return;
int index = getSelectedIndex ();
remove (index);
diskTabs.remove (tab);
for (int i = 1; i <= diskTabs.size (); i++)
setTitleAt (i, "D" + i);
checkCloseTabAction ();
}
// ---------------------------------------------------------------------------------//
private void checkCloseTabAction ()
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (diskTabs.size () > 1 && tab instanceof AppleDiskTab)
closeTabAction.setEnabled (true);
else
closeTabAction.setEnabled (false);
}
// ---------------------------------------------------------------------------------//
@Override
public void quit (Preferences prefs)
// ---------------------------------------------------------------------------------//
{
if (fileTab == null)
{
prefs.put (prefsLastDiskUsed, "");
prefs.putInt (prefsLastDosUsed, -1);
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, "");
}
else
{
if (diskTabs.size () == 0)
{
RedoEvent redoEvent = fileTab.redoData.getCurrentEvent ();
if (redoEvent != null)
{
DiskSelectedEvent event = (DiskSelectedEvent) redoEvent.value;
prefs.put (prefsLastDiskUsed, event.getFormattedDisk ().getAbsolutePath ());
}
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, "");
}
else
{
AbstractTab selectedTab = (AbstractTab) getSelectedComponent ();
if (selectedTab instanceof FileSystemTab)
selectedTab = diskTabs.get (diskTabs.size () - 1);
FormattedDisk fd = ((AppleDiskTab) selectedTab).disk;
prefs.put (prefsLastDiskUsed, fd.getAbsolutePath ());
if (fd instanceof DualDosDisk)
prefs.putInt (prefsLastDosUsed, ((DualDosDisk) fd).getCurrentDiskNo ());
else
prefs.putInt (prefsLastDosUsed, -1);
RedoEvent redoEvent = selectedTab.redoData.getCurrentEvent ();
if (redoEvent != null)
{
EventObject event = redoEvent.value;
if (event instanceof FileSelectedEvent)
{
AppleFileSource afs = ((FileSelectedEvent) event).appleFileSource;
prefs.put (prefsLastFileUsed, afs == null ? "" : afs.getUniqueName ());
prefs.put (prefsLastSectorsUsed, "");
}
else if (event instanceof SectorSelectedEvent)
{
prefs.put (prefsLastFileUsed, "");
prefs.put (prefsLastSectorsUsed, ((SectorSelectedEvent) event).toText ());
}
}
}
}
}
// ---------------------------------------------------------------------------------//
@Override
public void restore (Preferences prefs)
// ---------------------------------------------------------------------------------//
{
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
String lastFileUsed = prefs.get (prefsLastFileUsed, "");
String lastSectorsUsed = prefs.get (prefsLastSectorsUsed, "");
if (false)
{
System.out.println ("Last disk : " + lastDiskUsed);
System.out.println ("Last dos : " + lastDosUsed);
System.out.println ("Last file : " + lastFileUsed);
System.out.println ("Last sectors : " + lastSectorsUsed);
}
FormattedDisk fd1 = null;
DiskSelectedEvent diskEvent = null;
if (!lastDiskUsed.isEmpty ())
{
diskEvent = DiskSelectedEvent.create (this, lastDiskUsed);
if (diskEvent != null)
{
fd1 = diskEvent.getFormattedDisk ();
if (lastDosUsed >= 0 && fd1 instanceof DualDosDisk)
((DualDosDisk) fd1).setCurrentDiskNo (lastDosUsed);
}
}
else
System.out.println ("no disk selected");
if (rootFolder != null)
insertFileSystemTab (diskEvent);
if (diskEvent != null)
{
AppleDiskTab tab = null;
FormattedDisk fd = diskEvent.getFormattedDisk ();
assert fd == fd1;
if (!lastFileUsed.isEmpty ())
{
AppleFileSource afs = fd.getFile (lastFileUsed);
if (afs != null)
{
FileSelectedEvent fileEvent = new FileSelectedEvent (this, afs);
tab = new AppleDiskTab (fd, selector, redoHandler, font, fileEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font, lastFileUsed);
}
else if (!lastSectorsUsed.isEmpty ())
{
SectorSelectedEvent sectorEvent =
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
tab = new AppleDiskTab (fd, selector, redoHandler, font, sectorEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font);
if (tab != null)
{
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
}
else
System.out.println ("No disk tab created");
}
addChangeListener (new TabChangeListener ());
restored = true;
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addDiskSelectionListener (DiskSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addDiskSelectionListener (listener);
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addFileSelectionListener (FileSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addFileSelectionListener (listener);
}
// Pass through to DiskSelector
// ---------------------------------------------------------------------------------//
public void addFileNodeSelectionListener (FileNodeSelectionListener listener)
// ---------------------------------------------------------------------------------//
{
selector.addFileNodeSelectionListener (listener);
}
// ---------------------------------------------------------------------------------//
private class TabChangeListener implements ChangeListener
// ---------------------------------------------------------------------------------//
{
// -------------------------------------------------------------------------------//
@Override
public void stateChanged (ChangeEvent e)
// -------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
if (tab != null)
{
tab.activate ();
checkCloseTabAction ();
}
}
}
// ---------------------------------------------------------------------------------//
@Override
public void redo (RedoEvent event)
// ---------------------------------------------------------------------------------//
{
Tab tab = (Tab) getSelectedComponent ();
selector.redo = true;
switch (event.type)
{
case "DiskEvent":
case "FileNodeEvent":
if (tab instanceof FileSystemTab)
((FileSystemTab) tab).redoEvent (event);
break;
case "FileEvent":
if (tab instanceof AppleDiskTab)
((AppleDiskTab) tab).redoEvent (event);
break;
case "SectorEvent":
// don't care
break;
default:
System.out.println ("Unknown event type : " + event.type);
}
selector.redo = false;
}
// ---------------------------------------------------------------------------------//
@Override
public void sectorSelected (SectorSelectedEvent event)
// ---------------------------------------------------------------------------------//
{
// user has clicked in the DiskLayoutPanel, so turn off any current file selection
Tab tab = (Tab) getSelectedComponent ();
if (tab instanceof AppleDiskTab)
((AppleDiskTab) tab).tree.setSelectionPath (null);
}
// ---------------------------------------------------------------------------------//
@Override
public void changeFont (FontChangeEvent fontChangeEvent)
// ---------------------------------------------------------------------------------//
{
font = fontChangeEvent.font;
if (fileTab != null)
fileTab.setTreeFont (font);
for (AppleDiskTab tab : diskTabs)
tab.setTreeFont (font);
}
// ---------------------------------------------------------------------------------//
private class MouseListener extends MouseAdapter
// ---------------------------------------------------------------------------------//
{
// -------------------------------------------------------------------------------//
@Override
public void mousePressed (MouseEvent e)
// -------------------------------------------------------------------------------//
{
JTree tree = (JTree) e.getSource ();
int selRow = tree.getRowForLocation (e.getX (), e.getY ());
if (selRow < 0)
return;
TreePath tp = tree.getPathForLocation (e.getX (), e.getY ());
DefaultMutableTreeNode selectedNode =
(DefaultMutableTreeNode) tp.getLastPathComponent ();
FileNode node = (FileNode) selectedNode.getUserObject ();
if (node.file.isDirectory ())
{
// lister.catalogLister.setNode (selectedNode);
}
else if (e.getClickCount () == 2)
addDiskPanel (node.getFormattedDisk (), true);
}
}
// a disk has been selected from the Disk Duplicates Table
// -------------------------------------------------------------------------------//
@Override
public void diskSelected (DiskDetails diskDetails)
// -------------------------------------------------------------------------------//
{
if (getSelectedIndex () != 0)
setSelectedIndex (0);
fileTab.selectDisk (diskDetails.getRootName ());
}
}

View File

@ -25,8 +25,6 @@ import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.bytezone.common.FontAction.FontChangeEvent;
import com.bytezone.common.FontAction.FontChangeListener;
import com.bytezone.diskbrowser.applefile.ApplesoftBasicProgram;
import com.bytezone.diskbrowser.applefile.AssemblerProgram;
import com.bytezone.diskbrowser.applefile.HiResImage;
@ -37,6 +35,8 @@ import com.bytezone.diskbrowser.applefile.SHRPictureFile2;
import com.bytezone.diskbrowser.applefile.VisicalcFile;
import com.bytezone.diskbrowser.disk.DiskAddress;
import com.bytezone.diskbrowser.disk.SectorList;
import com.bytezone.diskbrowser.gui.FontAction.FontChangeEvent;
import com.bytezone.diskbrowser.gui.FontAction.FontChangeListener;
// -----------------------------------------------------------------------------------//
public class DataPanel extends JTabbedPane implements DiskSelectionListener,

View File

@ -5,12 +5,12 @@ import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import com.bytezone.common.Platform;
import com.bytezone.common.Platform.FontSize;
import com.bytezone.common.Platform.FontType;
import com.bytezone.diskbrowser.disk.FormattedDisk;
import com.bytezone.diskbrowser.disk.SectorType;
import com.bytezone.diskbrowser.gui.DiskLayoutPanel.LayoutDetails;
import com.bytezone.diskbrowser.utilities.FontUtility;
import com.bytezone.diskbrowser.utilities.FontUtility.FontSize;
import com.bytezone.diskbrowser.utilities.FontUtility.FontType;
// -----------------------------------------------------------------------------------//
class DiskLegendPanel extends DiskPanel
@ -25,7 +25,7 @@ class DiskLegendPanel extends DiskPanel
public DiskLegendPanel ()
// ---------------------------------------------------------------------------------//
{
font = Platform.getFont (FontType.SANS_SERIF, FontSize.BASE);
font = FontUtility.getFont (FontType.SANS_SERIF, FontSize.BASE);
setBackground (Color.WHITE);
}

View File

@ -0,0 +1,154 @@
package com.bytezone.diskbrowser.gui;
import java.awt.Canvas;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.EventListener;
import java.util.prefs.Preferences;
import javax.swing.Action;
import javax.swing.KeyStroke;
import javax.swing.event.EventListenerList;
import com.bytezone.diskbrowser.utilities.DefaultAction;
// -----------------------------------------------------------------------------------//
public class FontAction extends DefaultAction implements QuitListener
// -----------------------------------------------------------------------------------//
{
private static final String prefsFontName = "prefsFontName";
private static final String prefsFontSize = "prefsFontSize";
private static Canvas canvas;
private final EventListenerList listenerList = new EventListenerList ();
private FontFrame frame;
private String fontName;
private String fontSize;
private String text;
// ---------------------------------------------------------------------------------//
public FontAction ()
// ---------------------------------------------------------------------------------//
{
super ("Set Font...", "Set display to a different font or font size",
"/com/bytezone/loadlister/");
int mask = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx ();
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke (KeyEvent.VK_F, mask));
}
// ---------------------------------------------------------------------------------//
@Override
public void actionPerformed (ActionEvent e)
// ---------------------------------------------------------------------------------//
{
if (frame == null)
{
frame = new FontFrame (this);
frame.setSelectedValue (fontName);
frame.setSelectedSize (fontSize);
frame.setText (text);
}
frame.setVisible (true);
}
// ---------------------------------------------------------------------------------//
@Override
public void quit (Preferences preferences)
// ---------------------------------------------------------------------------------//
{
if (frame != null)
{
String fontName = frame.getSelectedValue ();
preferences.put (prefsFontName, fontName == null ? "Monospaced" : fontName);
String fontSize = frame.getSelectedSize ();
preferences.put (prefsFontSize, fontSize == null ? "12 point" : fontSize);
}
}
// ---------------------------------------------------------------------------------//
@Override
public void restore (Preferences preferences)
// ---------------------------------------------------------------------------------//
{
String fontName = preferences.get (prefsFontName, "Monospaced");
if (fontName.isEmpty ())
fontName = "Monospaced";
this.fontName = fontName;
if (frame != null)
frame.setSelectedValue (fontName);
String fontSize = preferences.get (prefsFontSize, "12 point");
if (fontSize.isEmpty ())
fontSize = "12 point";
this.fontSize = fontSize;
if (frame != null)
frame.setSelectedSize (fontSize);
int pos = fontSize.indexOf (' ');
int size = Integer.parseInt (fontSize.substring (0, pos));
fireFontChangeEvent (new Font (fontName, Font.PLAIN, size));
}
// ---------------------------------------------------------------------------------//
public void setSampleText (String text)
// ---------------------------------------------------------------------------------//
{
this.text = text;
if (frame != null)
frame.setText (text);
}
// ---------------------------------------------------------------------------------//
public interface FontChangeListener extends EventListener
// ---------------------------------------------------------------------------------//
{
public void changeFont (FontChangeEvent fontChangeEvent);
}
// ---------------------------------------------------------------------------------//
public class FontChangeEvent
// ---------------------------------------------------------------------------------//
{
public final Font font;
public final FontMetrics fontMetrics;
public FontChangeEvent (Font font)
{
this.font = font;
if (canvas == null)
canvas = new Canvas ();
fontMetrics = canvas.getFontMetrics (font);
}
}
// ---------------------------------------------------------------------------------//
public void addFontChangeListener (FontChangeListener listener)
// ---------------------------------------------------------------------------------//
{
listenerList.add (FontChangeListener.class, listener);
}
// ---------------------------</