cursor movement

This commit is contained in:
Denis Molony 2016-03-01 19:51:15 +11:00
parent fade0a4d7d
commit 49af924340
7 changed files with 72 additions and 80 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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)

View File

@ -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 ();
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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));
}