mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-16 10:29:29 +00:00
Include folders in prodos sort
This commit is contained in:
parent
fb68f65a95
commit
0974aa1be7
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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, "");
|
||||||
|
|
|
@ -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)
|
|
|
@ -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 ('.');
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user