mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-06 21:29:27 +00:00
cursor movement
This commit is contained in:
parent
fade0a4d7d
commit
49af924340
|
@ -1,10 +1,10 @@
|
|||
package com.bytezone.diskbrowser.gui;
|
||||
|
||||
/***********************************************************************************************
|
||||
/*****************************************************************************************
|
||||
* JPanel used to display a scrolling JTree containing details of a single disk. The JTree
|
||||
* consists entirely of AppleFileSource objects. Any number of these objects are contained
|
||||
* in Catalog Panel, along with a single FileSystemTab.
|
||||
***********************************************************************************************/
|
||||
****************************************************************************************/
|
||||
|
||||
import java.awt.Font;
|
||||
import java.util.Enumeration;
|
||||
|
@ -23,29 +23,27 @@ class AppleDiskTab extends AbstractTab
|
|||
{
|
||||
FormattedDisk disk;
|
||||
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, RedoHandler navMan,
|
||||
Font font, FileSelectedEvent event)
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
|
||||
RedoHandler redoHandler, Font font, FileSelectedEvent event)
|
||||
{
|
||||
super (navMan, selector, font);
|
||||
super (redoHandler, selector, font);
|
||||
create (disk);
|
||||
navMan.fileSelected (event);
|
||||
// System.out.println ("restoring a previous disk with a file selected");
|
||||
redoHandler.fileSelected (event);
|
||||
}
|
||||
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, RedoHandler navMan,
|
||||
Font font, SectorSelectedEvent event)
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
|
||||
RedoHandler redoHandler, Font font, SectorSelectedEvent event)
|
||||
{
|
||||
super (navMan, selector, font);
|
||||
super (redoHandler, selector, font);
|
||||
create (disk);
|
||||
navMan.sectorSelected (event);
|
||||
// System.out.println ("restoring a previous disk with a sector selected");
|
||||
redoHandler.sectorSelected (event);
|
||||
}
|
||||
|
||||
// This constructor is only called when lastFileUsed is not null, but the disk
|
||||
// couldn't find the file entry. Either the file has been deleted, or it is a disk
|
||||
// with redefined files (Wizardry, Infocom etc).
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, RedoHandler navMan,
|
||||
Font font, String lastFileUsed)
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
|
||||
RedoHandler navMan, Font font, String lastFileUsed)
|
||||
{
|
||||
super (navMan, selector, font);
|
||||
create (disk);
|
||||
|
@ -60,8 +58,8 @@ class AppleDiskTab extends AbstractTab
|
|||
}
|
||||
|
||||
// User is selecting a new disk from the catalog
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, RedoHandler navMan,
|
||||
Font font)
|
||||
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
|
||||
RedoHandler navMan, Font font)
|
||||
{
|
||||
super (navMan, selector, font);
|
||||
create (disk);
|
||||
|
|
|
@ -35,8 +35,8 @@ 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
|
||||
class CatalogPanel extends JTabbedPane
|
||||
implements RedoListener, SectorSelectionListener, QuitListener, FontChangeListener
|
||||
// PreferenceChangeListener
|
||||
{
|
||||
private static final String prefsLastDiskUsed = "Last disk used";
|
||||
|
@ -50,11 +50,11 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
private final List<AppleDiskTab> diskTabs = new ArrayList<AppleDiskTab> ();
|
||||
private final DocumentCreatorFactory lister;
|
||||
private final DiskAndFileSelector selector = new DiskAndFileSelector ();
|
||||
private final RedoHandler navMan;
|
||||
private final RedoHandler redoHandler;
|
||||
private DuplicateAction duplicateAction; // this sux
|
||||
private CloseTabAction closeTabAction;
|
||||
|
||||
public CatalogPanel (MenuHandler mh, RedoHandler navMan, Preferences prefs)
|
||||
public CatalogPanel (MenuHandler mh, RedoHandler redoHandler, Preferences prefs)
|
||||
{
|
||||
// String catalogFontName =
|
||||
// prefs.get (PreferencesDialog.prefsCatalogFont, PreferencesDialog.defaultFontName);
|
||||
|
@ -63,7 +63,7 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
// PreferencesDialog.defaultFontSize);
|
||||
// this.font = new Font (catalogFontName, Font.PLAIN, catalogFontSize);
|
||||
this.lister = new DocumentCreatorFactory (mh);
|
||||
this.navMan = navMan;
|
||||
this.redoHandler = redoHandler;
|
||||
|
||||
selector.addDiskSelectionListener (lister.diskLister);
|
||||
|
||||
|
@ -113,8 +113,9 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
else
|
||||
System.out.println ("no disk selected");
|
||||
|
||||
fileTab = new FileSystemTab (rootDirectoryFile, selector, navMan, font, diskEvent);
|
||||
fileTab.addTreeMouseListener (new MouseListener ()); // listen for disk selection
|
||||
fileTab =
|
||||
new FileSystemTab (rootDirectoryFile, selector, redoHandler, font, diskEvent);
|
||||
fileTab.addTreeMouseListener (new MouseListener ()); // listen for disk selection
|
||||
lister.catalogLister.setNode (fileTab.getRootNode ());
|
||||
insertTab ("Disk Tree", null, fileTab, "Display Apple disks", 0);
|
||||
|
||||
|
@ -129,19 +130,19 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
if (afs != null)
|
||||
{
|
||||
FileSelectedEvent fileEvent = FileSelectedEvent.create (this, afs);
|
||||
tab = new AppleDiskTab (fd, selector, navMan, font, fileEvent);
|
||||
tab = new AppleDiskTab (fd, selector, redoHandler, font, fileEvent);
|
||||
}
|
||||
else
|
||||
tab = new AppleDiskTab (fd, selector, navMan, font, lastFileUsed);
|
||||
tab = new AppleDiskTab (fd, selector, redoHandler, font, lastFileUsed);
|
||||
}
|
||||
else if (!lastSectorsUsed.isEmpty ())
|
||||
{
|
||||
SectorSelectedEvent sectorEvent =
|
||||
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
|
||||
tab = new AppleDiskTab (fd, selector, navMan, font, sectorEvent);
|
||||
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
|
||||
tab = new AppleDiskTab (fd, selector, redoHandler, font, sectorEvent);
|
||||
}
|
||||
else
|
||||
tab = new AppleDiskTab (fd, selector, navMan, font);
|
||||
tab = new AppleDiskTab (fd, selector, redoHandler, font);
|
||||
|
||||
if (tab != null)
|
||||
{
|
||||
|
@ -185,7 +186,7 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
// try
|
||||
// {
|
||||
// This might throw a NoDisksFoundException
|
||||
FileSystemTab newFileTab = new FileSystemTab (root, selector, navMan, font);
|
||||
FileSystemTab newFileTab = new FileSystemTab (root, selector, redoHandler, font);
|
||||
|
||||
// is the user replacing an existing root folder?
|
||||
if (fileTab != null)
|
||||
|
@ -220,7 +221,7 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
tabNo++;
|
||||
}
|
||||
|
||||
AppleDiskTab tab = new AppleDiskTab (disk, selector, navMan, font);
|
||||
AppleDiskTab tab = new AppleDiskTab (disk, selector, redoHandler, font);
|
||||
diskTabs.add (tab);
|
||||
add (tab, "D" + diskTabs.size ());
|
||||
if (activate)
|
||||
|
@ -324,6 +325,11 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore (Preferences preferences)
|
||||
{
|
||||
}
|
||||
|
||||
// Pass through to DiskSelector
|
||||
public void addDiskSelectionListener (DiskSelectionListener listener)
|
||||
{
|
||||
|
@ -368,7 +374,7 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
|
||||
TreePath tp = tree.getPathForLocation (e.getX (), e.getY ());
|
||||
DefaultMutableTreeNode selectedNode =
|
||||
(DefaultMutableTreeNode) tp.getLastPathComponent ();
|
||||
(DefaultMutableTreeNode) tp.getLastPathComponent ();
|
||||
FileNode node = (FileNode) selectedNode.getUserObject ();
|
||||
if (node.file.isDirectory ())
|
||||
lister.catalogLister.setNode (selectedNode);
|
||||
|
@ -431,11 +437,6 @@ class CatalogPanel extends JTabbedPane implements RedoListener, SectorSelectionL
|
|||
// tab.setTreeFont (font);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void restore (Preferences preferences)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeFont (FontChangeEvent fontChangeEvent)
|
||||
{
|
||||
|
|
|
@ -126,6 +126,9 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
// prefs.addPreferenceChangeListener (catalogPanel);
|
||||
// prefs.addPreferenceChangeListener (dataPanel);
|
||||
|
||||
// restore the menuHandler items before they are referenced
|
||||
quitAction.restore ();
|
||||
|
||||
// Remove the two optional panels if they were previously hidden
|
||||
if (!menuHandler.showLayoutItem.isSelected ())
|
||||
hideLayoutAction.set (false);
|
||||
|
@ -134,8 +137,6 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
|
||||
// activate the highest panel now that the listeners are ready
|
||||
catalogPanel.activate ();
|
||||
|
||||
quitAction.restore ();
|
||||
}
|
||||
|
||||
private JPanel addPanel (JComponent pane, String title, String location)
|
||||
|
|
|
@ -212,6 +212,8 @@ class DiskLayoutImage extends JPanel implements Scrollable
|
|||
setSelection (event.getSectors ());
|
||||
fireSectorSelectionEvent (event);
|
||||
redo = false;
|
||||
|
||||
requestFocusInWindow ();
|
||||
}
|
||||
|
||||
private void fireSectorSelectionEvent ()
|
||||
|
@ -251,7 +253,7 @@ class DiskLayoutImage extends JPanel implements Scrollable
|
|||
case KeyEvent.VK_RIGHT:
|
||||
case KeyEvent.VK_UP:
|
||||
case KeyEvent.VK_DOWN:
|
||||
selectionHandler.keyPress (e);
|
||||
selectionHandler.cursorMove (disk.getDisk (), e);
|
||||
fireSectorSelectionEvent ();
|
||||
repaint ();
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import com.bytezone.diskbrowser.disk.DiskAddress;
|
|||
class DiskLayoutSelection implements Iterable<DiskAddress>
|
||||
{
|
||||
private final List<DiskAddress> highlights;
|
||||
private Disk currentDisk;
|
||||
|
||||
public DiskLayoutSelection ()
|
||||
{
|
||||
|
@ -21,8 +20,6 @@ class DiskLayoutSelection implements Iterable<DiskAddress>
|
|||
|
||||
public void doClick (Disk disk, DiskAddress da, boolean extend, boolean append)
|
||||
{
|
||||
currentDisk = disk;
|
||||
|
||||
/*
|
||||
* Single click without modifiers - just replace previous highlights with the new
|
||||
* sector. If there are no current highlights then even modifiers have the same
|
||||
|
@ -67,7 +64,7 @@ class DiskLayoutSelection implements Iterable<DiskAddress>
|
|||
Collections.sort (highlights);
|
||||
}
|
||||
|
||||
public void keyPress (KeyEvent e)
|
||||
public void cursorMove (Disk disk, KeyEvent e)
|
||||
{
|
||||
if (highlights.size () == 0)
|
||||
{
|
||||
|
@ -79,8 +76,8 @@ class DiskLayoutSelection implements Iterable<DiskAddress>
|
|||
DiskAddress last = highlights.get (highlights.size () - 1);
|
||||
highlights.clear ();
|
||||
|
||||
int totalBlocks = currentDisk.getTotalBlocks ();
|
||||
int rowSize = currentDisk.getTrackSize () / currentDisk.getBlockSize ();
|
||||
int totalBlocks = disk.getTotalBlocks ();
|
||||
int rowSize = disk.getTrackSize () / disk.getBlockSize ();
|
||||
|
||||
switch (e.getKeyCode ())
|
||||
{
|
||||
|
@ -88,28 +85,28 @@ class DiskLayoutSelection implements Iterable<DiskAddress>
|
|||
int block = first.getBlock () - 1;
|
||||
if (block < 0)
|
||||
block = totalBlocks - 1;
|
||||
highlights.add (currentDisk.getDiskAddress (block));
|
||||
highlights.add (disk.getDiskAddress (block));
|
||||
break;
|
||||
|
||||
case KeyEvent.VK_RIGHT:
|
||||
block = last.getBlock () + 1;
|
||||
if (block >= totalBlocks)
|
||||
block = 0;
|
||||
highlights.add (currentDisk.getDiskAddress (block));
|
||||
highlights.add (disk.getDiskAddress (block));
|
||||
break;
|
||||
|
||||
case KeyEvent.VK_UP:
|
||||
block = first.getBlock () - rowSize;
|
||||
if (block < 0)
|
||||
block += totalBlocks;
|
||||
highlights.add (currentDisk.getDiskAddress (block));
|
||||
highlights.add (disk.getDiskAddress (block));
|
||||
break;
|
||||
|
||||
case KeyEvent.VK_DOWN:
|
||||
block = last.getBlock () + rowSize;
|
||||
if (block >= totalBlocks)
|
||||
block -= totalBlocks;
|
||||
highlights.add (currentDisk.getDiskAddress (block));
|
||||
highlights.add (disk.getDiskAddress (block));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,7 +74,9 @@ public class MenuHandler
|
|||
fileMenu.add (rootItem);
|
||||
fileMenu.addSeparator ();
|
||||
fileMenu.add (refreshTreeItem);
|
||||
|
||||
addLauncherMenu ();
|
||||
|
||||
fileMenu.add (printItem);
|
||||
fileMenu.addSeparator ();
|
||||
fileMenu.add (closeTabItem);
|
||||
|
@ -99,15 +101,21 @@ public class MenuHandler
|
|||
formatMenu.add (showCatalogItem);
|
||||
formatMenu.add (showLayoutItem);
|
||||
formatMenu.add (showFreeSectorsItem);
|
||||
|
||||
formatMenu.addSeparator ();
|
||||
|
||||
formatMenu.add (interleave0Item);
|
||||
formatMenu.add (interleave1Item);
|
||||
formatMenu.add (interleave2Item);
|
||||
formatMenu.add (interleave3Item);
|
||||
|
||||
formatMenu.addSeparator ();
|
||||
|
||||
formatMenu.add (sector256Item);
|
||||
formatMenu.add (sector512Item);
|
||||
|
||||
formatMenu.addSeparator ();
|
||||
|
||||
formatMenu.add (colourQuirksItem);
|
||||
formatMenu.add (monochromeItem);
|
||||
|
||||
|
@ -130,14 +138,6 @@ public class MenuHandler
|
|||
|
||||
dbItem.setEnabled (false);
|
||||
|
||||
// preferences
|
||||
lineWrapItem.setSelected (prefs.getBoolean (PREFS_LINE_WRAP, true));
|
||||
showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
||||
showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true));
|
||||
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
||||
colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
||||
monochromeItem.setSelected (prefs.getBoolean (PREFS_MONOCHROME, false));
|
||||
|
||||
HiResImage.setDefaultColourQuirks (colourQuirksItem.isSelected ());
|
||||
HiResImage.setDefaultMonochrome (monochromeItem.isSelected ());
|
||||
}
|
||||
|
@ -197,6 +197,17 @@ public class MenuHandler
|
|||
prefs.putBoolean (PREFS_MONOCHROME, monochromeItem.isSelected ());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore (Preferences prefs)
|
||||
{
|
||||
lineWrapItem.setSelected (prefs.getBoolean (PREFS_LINE_WRAP, true));
|
||||
showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
||||
showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true));
|
||||
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
||||
colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
||||
monochromeItem.setSelected (prefs.getBoolean (PREFS_MONOCHROME, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void diskSelected (DiskSelectedEvent event)
|
||||
{
|
||||
|
@ -258,14 +269,4 @@ public class MenuHandler
|
|||
((InterleaveAction) interleave3Item.getAction ()).setDisk (currentDisk);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore (Preferences prefs)
|
||||
{
|
||||
// lineWrapItem.setSelected (prefs.getBoolean (PREFS_LINE_WRAP, true));
|
||||
// showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
||||
// showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true));
|
||||
// showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
||||
// colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
||||
}
|
||||
}
|
|
@ -9,19 +9,11 @@ import java.util.EventListener;
|
|||
import java.util.EventObject;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.AbstractAction;
|
||||
import javax.swing.Action;
|
||||
import javax.swing.ActionMap;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.InputMap;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JRootPane;
|
||||
import javax.swing.JToolBar;
|
||||
import javax.swing.KeyStroke;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.EventListenerList;
|
||||
|
||||
class RedoHandler implements FileSelectionListener, DiskSelectionListener, SectorSelectionListener,
|
||||
FileNodeSelectionListener
|
||||
class RedoHandler implements FileSelectionListener, DiskSelectionListener,
|
||||
SectorSelectionListener, FileNodeSelectionListener
|
||||
{
|
||||
private static final String base = "/com/bytezone/diskbrowser/icons/";
|
||||
EventListenerList listenerList = new EventListenerList ();
|
||||
|
@ -87,7 +79,7 @@ class RedoHandler implements FileSelectionListener, DiskSelectionListener, Secto
|
|||
@Override
|
||||
public void fileNodeSelected (FileNodeSelectedEvent event)
|
||||
{
|
||||
if (!event.redo) // it's an event we just caused
|
||||
if (!event.redo) // it's an event we just caused
|
||||
addEvent (new RedoEvent ("FileNodeEvent", event));
|
||||
}
|
||||
|
||||
|
@ -101,7 +93,7 @@ class RedoHandler implements FileSelectionListener, DiskSelectionListener, Secto
|
|||
@Override
|
||||
public void sectorSelected (SectorSelectedEvent event)
|
||||
{
|
||||
if (!event.redo) // it's an event we just caused
|
||||
if (!event.redo) // it's an event we just caused
|
||||
addEvent (new RedoEvent ("SectorEvent", event));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user