Include folders in prodos sort

This commit is contained in:
Denis Molony 2019-10-21 17:30:27 +10:00
parent fb68f65a95
commit 0974aa1be7
7 changed files with 71 additions and 60 deletions

View File

@ -635,7 +635,6 @@ public class ApplesoftBasicProgram extends BasicProgram
System.out.println (target); System.out.println (target);
System.out.println (HexFormatter.format (buffer, startPtr, length - 1)); System.out.println (HexFormatter.format (buffer, startPtr, length - 1));
System.out.println (e); System.out.println (e);
// assert false;
} }
} }
// else if (basicPreferences.alignAssign) // else if (basicPreferences.alignAssign)
@ -692,21 +691,6 @@ public class ApplesoftBasicProgram extends BasicProgram
return false; return false;
} }
// private boolean isToken (byte value)
// {
// return (value & 0x80) > 0;
// }
// private boolean isControlCharacter (byte value)
// {
// return value < 32;
// }
// private boolean isDigit (byte value)
// {
// return value >= 48 && value <= 57;
// }
public int getAddress () public int getAddress ()
{ {
return getLoadAddress () + startPtr; return getLoadAddress () + startPtr;

View File

@ -181,12 +181,10 @@ public abstract class AbstractFormattedDisk implements FormattedDisk
{ {
this.originalPath = path; this.originalPath = path;
DefaultMutableTreeNode root = DefaultMutableTreeNode root = getCatalogTreeRoot ();
(DefaultMutableTreeNode) catalogTree.getModel ().getRoot ();
DefaultAppleFileSource afs =
new DefaultAppleFileSource (getName (), disk.toString (), this);
if (root.getUserObject () == null) if (root.getUserObject () == null)
root.setUserObject (afs); root.setUserObject (
new DefaultAppleFileSource (getName (), disk.toString (), this));
} }
@Override @Override
@ -405,8 +403,7 @@ public abstract class AbstractFormattedDisk implements FormattedDisk
@Override @Override
public boolean stillAvailable (DiskAddress da) public boolean stillAvailable (DiskAddress da)
{ {
return sectorTypes[da.getBlock ()] == usedSector return stillAvailable (da.getBlock ());
|| sectorTypes[da.getBlock ()] == emptySector;
} }
@Override @Override

View File

@ -24,6 +24,7 @@ class AppleDiskTab extends AbstractTab
{ {
FormattedDisk disk; FormattedDisk disk;
// restoring from a file selection
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
RedoHandler redoHandler, Font font, FileSelectedEvent event) RedoHandler redoHandler, Font font, FileSelectedEvent event)
{ {
@ -32,6 +33,7 @@ class AppleDiskTab extends AbstractTab
redoHandler.fileSelected (event); redoHandler.fileSelected (event);
} }
// restoring from a sector selection
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
RedoHandler redoHandler, Font font, SectorSelectedEvent event) RedoHandler redoHandler, Font font, SectorSelectedEvent event)
{ {
@ -44,9 +46,9 @@ class AppleDiskTab extends AbstractTab
// couldn't find the file entry. Either the file has been deleted, or it is a disk // couldn't find the file entry. Either the file has been deleted, or it is a disk
// with redefined files (Wizardry, Infocom etc). // with redefined files (Wizardry, Infocom etc).
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
RedoHandler navMan, Font font, String lastFileUsed) RedoHandler redoHandler, Font font, String lastFileUsed)
{ {
super (navMan, selector, font); super (redoHandler, selector, font);
create (disk); create (disk);
// System.out.println ("ooh - couldn't find the previous file"); // System.out.println ("ooh - couldn't find the previous file");
DefaultMutableTreeNode node = findNode (lastFileUsed); DefaultMutableTreeNode node = findNode (lastFileUsed);
@ -54,21 +56,21 @@ class AppleDiskTab extends AbstractTab
{ {
AppleFileSource afs = (AppleFileSource) node.getUserObject (); AppleFileSource afs = (AppleFileSource) node.getUserObject ();
FileSelectedEvent event = new FileSelectedEvent (this, afs); FileSelectedEvent event = new FileSelectedEvent (this, afs);
navMan.fileSelected (event); redoHandler.fileSelected (event);
} }
} }
// User is selecting a new disk from the catalog // User is selecting a new disk from the catalog
public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector, public AppleDiskTab (FormattedDisk disk, DiskAndFileSelector selector,
RedoHandler navMan, Font font) RedoHandler redoHandler, Font font)
{ {
super (navMan, selector, font); super (redoHandler, selector, font);
create (disk); create (disk);
AppleFileSource afs = (AppleFileSource) findNode (2).getUserObject (); // select Catalog AppleFileSource afs = (AppleFileSource) findNode (2).getUserObject (); // select Catalog
if (afs == null) if (afs == null)
afs = (AppleFileSource) findNode (1).getUserObject (); // select Disk afs = (AppleFileSource) findNode (1).getUserObject (); // select Disk
navMan.fileSelected (new FileSelectedEvent (this, afs)); redoHandler.fileSelected (new FileSelectedEvent (this, afs));
} }
private void create (FormattedDisk disk) private void create (FormattedDisk disk)
@ -125,13 +127,10 @@ class AppleDiskTab extends AbstractTab
while (children.hasMoreElements ()) while (children.hasMoreElements ())
{ {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) children.nextElement (); DefaultMutableTreeNode node = (DefaultMutableTreeNode) children.nextElement ();
Object o = node.getUserObject (); Object userObject = node.getUserObject ();
if (o instanceof AppleFileSource) if (userObject instanceof AppleFileSource
{ && nodeName.equals (((AppleFileSource) userObject).getUniqueName ()))
AppleFileSource afs = (AppleFileSource) node.getUserObject (); return node;
if (nodeName.equals (afs.getUniqueName ()))
return node;
}
} }
return null; return null;
} }

View File

@ -49,7 +49,7 @@ class CatalogPanel extends JTabbedPane
private Font font; private Font font;
private FileSystemTab fileTab; private FileSystemTab fileTab;
private final List<AppleDiskTab> diskTabs = new ArrayList<AppleDiskTab> (); private final List<AppleDiskTab> diskTabs = new ArrayList<> ();
private final DiskAndFileSelector selector = new DiskAndFileSelector (); private final DiskAndFileSelector selector = new DiskAndFileSelector ();
private final RedoHandler redoHandler; private final RedoHandler redoHandler;
private CloseTabAction closeTabAction; private CloseTabAction closeTabAction;
@ -61,9 +61,6 @@ class CatalogPanel extends JTabbedPane
setTabPlacement (SwingConstants.BOTTOM); setTabPlacement (SwingConstants.BOTTOM);
setPreferredSize (new Dimension (360, 802)); // width, height setPreferredSize (new Dimension (360, 802)); // width, height
// createTabs (prefs);
// addChangeListener (new TabChangeListener ());
} }
RootFolderData getRootFolderData () RootFolderData getRootFolderData ()
@ -84,7 +81,6 @@ class CatalogPanel extends JTabbedPane
rootFolderData.setRootFolder (rootDirectoryFile); rootFolderData.setRootFolder (rootDirectoryFile);
// move to restore()
String lastDiskUsed = prefs.get (prefsLastDiskUsed, ""); String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1); int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
String lastFileUsed = prefs.get (prefsLastFileUsed, ""); String lastFileUsed = prefs.get (prefsLastFileUsed, "");

View File

@ -2,8 +2,8 @@ package com.bytezone.diskbrowser.gui;
/*********************************************************************************************** /***********************************************************************************************
* Interface implemented by AbstractTab, and in turn FileSystemTab and AppleDiskTab. * Interface implemented by AbstractTab, and in turn FileSystemTab and AppleDiskTab.
* *
* *
***********************************************************************************************/ ***********************************************************************************************/
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
@ -16,5 +16,3 @@ interface Tab
public DefaultMutableTreeNode getRootNode (); public DefaultMutableTreeNode getRootNode ();
} }
// public void addMouseListener (MouseAdapter ma)

View File

@ -26,16 +26,16 @@ public class TreeBuilder
private final FileComparator fileComparator = new FileComparator (); private final FileComparator fileComparator = new FileComparator ();
private final JTree tree; private final JTree tree;
public TreeBuilder (File folder) public TreeBuilder (File rootFolder)
{ {
assert (folder.exists ()); assert (rootFolder.exists ());
assert (folder.isDirectory ()); assert (rootFolder.isDirectory ());
FileNode fileNode = new FileNode (folder); FileNode fileNode = new FileNode (rootFolder);
DefaultMutableTreeNode root = new DefaultMutableTreeNode (fileNode); DefaultMutableTreeNode root = new DefaultMutableTreeNode (fileNode);
fileNode.setTreeNode (root); fileNode.setTreeNode (root);
addFiles (root, folder); addFiles (root, rootFolder);
DefaultTreeModel treeModel = new DefaultTreeModel (root); DefaultTreeModel treeModel = new DefaultTreeModel (root);
tree = new JTree (treeModel); tree = new JTree (treeModel);
@ -98,7 +98,7 @@ public class TreeBuilder
/* /*
* Class used to control the text displayed by the JTree. * Class used to control the text displayed by the JTree.
*/ */
public class FileNode implements DataSource public class FileNode implements DataSource // why does it implement DataSource?
{ {
DefaultMutableTreeNode parentNode; DefaultMutableTreeNode parentNode;
public final File file; public final File file;
@ -185,8 +185,6 @@ public class TreeBuilder
if (f.isHidden ()) if (f.isHidden ())
continue; continue;
String name = f.getName (); String name = f.getName ();
// if (name.startsWith ("."))
// continue;
Date d = new Date (f.lastModified ()); Date d = new Date (f.lastModified ());
int pos = name.lastIndexOf ('.'); int pos = name.lastIndexOf ('.');

View File

@ -86,19 +86,20 @@ public class ProdosDisk extends AbstractFormattedDisk
if (ProdosDisk.prodosPreferences.sortDirectories) if (ProdosDisk.prodosPreferences.sortDirectories)
{ {
sort (volumeNode); sortLeaves (volumeNode);
sortFolders (volumeNode);
((DefaultTreeModel) catalogTree.getModel ()).reload (); ((DefaultTreeModel) catalogTree.getModel ()).reload ();
} }
} }
public void sort (DefaultMutableTreeNode node) public void sortLeaves (DefaultMutableTreeNode node)
{ {
for (int base = 0; base < node.getChildCount (); base++) for (int i = 0; i < node.getChildCount (); i++)
{ {
DefaultMutableTreeNode baseNode = (DefaultMutableTreeNode) node.getChildAt (base); DefaultMutableTreeNode baseNode = (DefaultMutableTreeNode) node.getChildAt (i);
if (!baseNode.isLeaf ()) if (!baseNode.isLeaf ())
{ {
sort (baseNode); sortLeaves (baseNode);
continue; continue;
} }
@ -107,7 +108,7 @@ public class ProdosDisk extends AbstractFormattedDisk
String smallestName = childName; String smallestName = childName;
int smallestPos = -1; int smallestPos = -1;
for (int j = base + 1; j < node.getChildCount (); j++) for (int j = i + 1; j < node.getChildCount (); j++)
{ {
DefaultMutableTreeNode compareNode = (DefaultMutableTreeNode) node.getChildAt (j); DefaultMutableTreeNode compareNode = (DefaultMutableTreeNode) node.getChildAt (j);
if (!compareNode.isLeaf ()) if (!compareNode.isLeaf ())
@ -125,7 +126,45 @@ public class ProdosDisk extends AbstractFormattedDisk
if (smallestNode != null) if (smallestNode != null)
{ {
node.insert (baseNode, smallestPos); node.insert (baseNode, smallestPos);
node.insert (smallestNode, base); node.insert (smallestNode, i);
}
}
}
public void sortFolders (DefaultMutableTreeNode node)
{
for (int i = 0; i < node.getChildCount (); i++)
{
DefaultMutableTreeNode baseNode = (DefaultMutableTreeNode) node.getChildAt (i);
if (baseNode.isLeaf ())
continue;
sortFolders (baseNode);
String childName = ((FileEntry) baseNode.getUserObject ()).name;
DefaultMutableTreeNode smallestNode = null;
String smallestName = childName;
int smallestPos = -1;
for (int j = i + 1; j < node.getChildCount (); j++)
{
DefaultMutableTreeNode compareNode = (DefaultMutableTreeNode) node.getChildAt (j);
if (compareNode.isLeaf ())
continue;
String compareName = ((FileEntry) compareNode.getUserObject ()).name;
if (smallestName.compareToIgnoreCase (compareName) > 0)
{
smallestNode = compareNode;
smallestName = compareName;
smallestPos = j;
}
}
if (smallestNode != null)
{
node.insert (baseNode, smallestPos);
node.insert (smallestNode, i);
} }
} }
} }