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 (HexFormatter.format (buffer, startPtr, length - 1));
System.out.println (e);
// assert false;
}
}
// else if (basicPreferences.alignAssign)
@ -692,21 +691,6 @@ public class ApplesoftBasicProgram extends BasicProgram
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 ()
{
return getLoadAddress () + startPtr;

View File

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

View File

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

View File

@ -49,7 +49,7 @@ class CatalogPanel extends JTabbedPane
private Font font;
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 RedoHandler redoHandler;
private CloseTabAction closeTabAction;
@ -61,9 +61,6 @@ class CatalogPanel extends JTabbedPane
setTabPlacement (SwingConstants.BOTTOM);
setPreferredSize (new Dimension (360, 802)); // width, height
// createTabs (prefs);
// addChangeListener (new TabChangeListener ());
}
RootFolderData getRootFolderData ()
@ -84,7 +81,6 @@ class CatalogPanel extends JTabbedPane
rootFolderData.setRootFolder (rootDirectoryFile);
// move to restore()
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
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.
*
*
*
*
***********************************************************************************************/
import javax.swing.tree.DefaultMutableTreeNode;
@ -16,5 +16,3 @@ interface Tab
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 JTree tree;
public TreeBuilder (File folder)
public TreeBuilder (File rootFolder)
{
assert (folder.exists ());
assert (folder.isDirectory ());
assert (rootFolder.exists ());
assert (rootFolder.isDirectory ());
FileNode fileNode = new FileNode (folder);
FileNode fileNode = new FileNode (rootFolder);
DefaultMutableTreeNode root = new DefaultMutableTreeNode (fileNode);
fileNode.setTreeNode (root);
addFiles (root, folder);
addFiles (root, rootFolder);
DefaultTreeModel treeModel = new DefaultTreeModel (root);
tree = new JTree (treeModel);
@ -98,7 +98,7 @@ public class TreeBuilder
/*
* 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;
public final File file;
@ -185,8 +185,6 @@ public class TreeBuilder
if (f.isHidden ())
continue;
String name = f.getName ();
// if (name.startsWith ("."))
// continue;
Date d = new Date (f.lastModified ());
int pos = name.lastIndexOf ('.');

View File

@ -86,19 +86,20 @@ public class ProdosDisk extends AbstractFormattedDisk
if (ProdosDisk.prodosPreferences.sortDirectories)
{
sort (volumeNode);
sortLeaves (volumeNode);
sortFolders (volumeNode);
((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 ())
{
sort (baseNode);
sortLeaves (baseNode);
continue;
}
@ -107,7 +108,7 @@ public class ProdosDisk extends AbstractFormattedDisk
String smallestName = childName;
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);
if (!compareNode.isLeaf ())
@ -125,7 +126,45 @@ public class ProdosDisk extends AbstractFormattedDisk
if (smallestNode != null)
{
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);
}
}
}