fix restore root folder

This commit is contained in:
Denis Molony 2019-10-26 10:53:28 +10:00
parent d7d99da8f8
commit c567c8bb1c
7 changed files with 84 additions and 85 deletions

View File

@ -307,9 +307,9 @@ public class RootFolderData implements RootDirectoryChangeListener
}
@Override
public void rootDirectoryChanged (File rootFolder)
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
{
this.rootFolder = rootFolder;
rootFolder = newRootFolder;
rootFolderNameLength = rootFolder.getAbsolutePath ().length ();
disksWindow = null; // force a recount
}

View File

@ -51,6 +51,7 @@ class CatalogPanel extends JTabbedPane
private final RedoHandler redoHandler;
private CloseTabAction closeTabAction;
private File rootFolder;
private boolean restored = false;
public CatalogPanel (RedoHandler redoHandler)
{
@ -60,86 +61,19 @@ class CatalogPanel extends JTabbedPane
setPreferredSize (new Dimension (360, 802)); // width, height
}
private void createTabs (Preferences prefs)
{
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
String lastFileUsed = prefs.get (prefsLastFileUsed, "");
String lastSectorsUsed = prefs.get (prefsLastSectorsUsed, "");
if (false)
{
System.out.println ("Last disk : " + lastDiskUsed);
System.out.println ("Last dos : " + lastDosUsed);
System.out.println ("Last file : " + lastFileUsed);
System.out.println ("Last sectors : " + lastSectorsUsed);
}
DiskSelectedEvent diskEvent = null;
if (!lastDiskUsed.isEmpty ())
{
diskEvent = DiskSelectedEvent.create (this, lastDiskUsed);
if (diskEvent != null)
{
FormattedDisk fd = diskEvent.getFormattedDisk ();
if (lastDosUsed >= 0 && fd instanceof DualDosDisk)
((DualDosDisk) fd).setCurrentDiskNo (lastDosUsed);
}
}
else
System.out.println ("no disk selected");
insertFileSystemTab (diskEvent);
if (diskEvent != null)
{
AppleDiskTab tab = null;
FormattedDisk fd = diskEvent.getFormattedDisk ();
if (!lastFileUsed.isEmpty ())
{
AppleFileSource afs = fd.getFile (lastFileUsed);
if (afs != null)
{
FileSelectedEvent fileEvent = FileSelectedEvent.create (this, afs);
tab = new AppleDiskTab (fd, selector, redoHandler, font, fileEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font, lastFileUsed);
}
else if (!lastSectorsUsed.isEmpty ())
{
SectorSelectedEvent sectorEvent =
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
tab = new AppleDiskTab (fd, selector, redoHandler, font, sectorEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font);
if (tab != null)
{
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
}
else
System.out.println ("No disk tab created");
}
}
@Override
public void rootDirectoryChanged (File rootFolder)
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
{
this.rootFolder = rootFolder;
if (fileTab == null) // still restoring last session
rootFolder = newRootFolder;
if (!restored)
return;
// is the user replacing an existing root folder?
if (fileTab != null)
{
removeTabAt (0);
insertFileSystemTab (null);
setSelectedIndex (0);
}
insertFileSystemTab (null);
setSelectedIndex (0);
}
private void insertFileSystemTab (DiskSelectedEvent diskEvent)
@ -286,8 +220,71 @@ class CatalogPanel extends JTabbedPane
@Override
public void restore (Preferences prefs)
{
createTabs (prefs);
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
String lastFileUsed = prefs.get (prefsLastFileUsed, "");
String lastSectorsUsed = prefs.get (prefsLastSectorsUsed, "");
if (false)
{
System.out.println ("Last disk : " + lastDiskUsed);
System.out.println ("Last dos : " + lastDosUsed);
System.out.println ("Last file : " + lastFileUsed);
System.out.println ("Last sectors : " + lastSectorsUsed);
}
DiskSelectedEvent diskEvent = null;
if (!lastDiskUsed.isEmpty ())
{
diskEvent = DiskSelectedEvent.create (this, lastDiskUsed);
if (diskEvent != null)
{
FormattedDisk fd = diskEvent.getFormattedDisk ();
if (lastDosUsed >= 0 && fd instanceof DualDosDisk)
((DualDosDisk) fd).setCurrentDiskNo (lastDosUsed);
}
}
else
System.out.println ("no disk selected");
if (rootFolder != null)
insertFileSystemTab (diskEvent);
if (diskEvent != null)
{
AppleDiskTab tab = null;
FormattedDisk fd = diskEvent.getFormattedDisk ();
if (!lastFileUsed.isEmpty ())
{
AppleFileSource afs = fd.getFile (lastFileUsed);
if (afs != null)
{
FileSelectedEvent fileEvent = FileSelectedEvent.create (this, afs);
tab = new AppleDiskTab (fd, selector, redoHandler, font, fileEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font, lastFileUsed);
}
else if (!lastSectorsUsed.isEmpty ())
{
SectorSelectedEvent sectorEvent =
SectorSelectedEvent.create (this, fd, lastSectorsUsed);
tab = new AppleDiskTab (fd, selector, redoHandler, font, sectorEvent);
}
else
tab = new AppleDiskTab (fd, selector, redoHandler, font);
if (tab != null)
{
diskTabs.add (tab);
add (tab, "D" + diskTabs.size ());
}
else
System.out.println ("No disk tab created");
}
addChangeListener (new TabChangeListener ());
restored = true;
}
// Pass through to DiskSelector

View File

@ -32,9 +32,9 @@ public class DuplicateAction extends DefaultAction implements RootDirectoryChang
}
@Override
public void rootDirectoryChanged (File rootFolder)
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
{
assert rootFolderData.getRootFolder () == rootFolder;
assert rootFolderData.getRootFolder () == newRootFolder;
setEnabled (rootFolderData.getRootFolder () != null);
}

View File

@ -30,8 +30,8 @@ class FileSystemTab extends AbstractTab
{
File rootFolder;
public FileSystemTab (File folder, DiskAndFileSelector selector, RedoHandler redoHandler,
Font font, DiskSelectedEvent diskEvent)
public FileSystemTab (File folder, DiskAndFileSelector selector,
RedoHandler redoHandler, Font font, DiskSelectedEvent diskEvent)
{
super (redoHandler, selector, font);
this.rootFolder = folder;

View File

@ -70,6 +70,7 @@ public class RootDirectoryAction extends DefaultAction implements QuitListener
String rootDirectory = prefs.get (prefsRootDirectory, "");
File rootDirectoryFile = new File (rootDirectory);
if (!rootDirectoryFile.exists () || !rootDirectoryFile.isDirectory ())
{
System.out.println ("No root directory");
@ -78,10 +79,11 @@ public class RootDirectoryAction extends DefaultAction implements QuitListener
notifyListeners (rootDirectoryFile);
}
private void notifyListeners (File rootDirectoryFile)
private void notifyListeners (File newRootFolder)
{
rootFolder = rootDirectoryFile;
File oldRootFolder = rootFolder;
rootFolder = newRootFolder;
for (RootDirectoryChangeListener listener : listeners)
listener.rootDirectoryChanged (rootFolder);
listener.rootDirectoryChanged (oldRootFolder, newRootFolder);
}
}

View File

@ -4,5 +4,5 @@ import java.io.File;
public interface RootDirectoryChangeListener
{
public void rootDirectoryChanged (File rootFolder);
public void rootDirectoryChanged (File oldRootFolder, File newRootFolder);
}

View File

@ -145,7 +145,7 @@ public class WizardryScenarioDisk extends PascalDisk
@Override
public AppleFileSource getFile (String fileName)
{
System.out.println ("Wizardry disk looking for : " + fileName);
// System.out.println ("Wizardry disk looking for : " + fileName);
return null;
}