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 @Override
public void rootDirectoryChanged (File rootFolder) public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
{ {
this.rootFolder = rootFolder; rootFolder = newRootFolder;
rootFolderNameLength = rootFolder.getAbsolutePath ().length (); rootFolderNameLength = rootFolder.getAbsolutePath ().length ();
disksWindow = null; // force a recount disksWindow = null; // force a recount
} }

View File

@ -51,6 +51,7 @@ class CatalogPanel extends JTabbedPane
private final RedoHandler redoHandler; private final RedoHandler redoHandler;
private CloseTabAction closeTabAction; private CloseTabAction closeTabAction;
private File rootFolder; private File rootFolder;
private boolean restored = false;
public CatalogPanel (RedoHandler redoHandler) public CatalogPanel (RedoHandler redoHandler)
{ {
@ -60,86 +61,19 @@ class CatalogPanel extends JTabbedPane
setPreferredSize (new Dimension (360, 802)); // width, height 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 @Override
public void rootDirectoryChanged (File rootFolder) public void rootDirectoryChanged (File oldRootFolder, File newRootFolder)
{ {
this.rootFolder = rootFolder; rootFolder = newRootFolder;
if (fileTab == null) // still restoring last session if (!restored)
return; return;
// is the user replacing an existing root folder? // is the user replacing an existing root folder?
if (fileTab != null) if (fileTab != null)
{
removeTabAt (0); removeTabAt (0);
insertFileSystemTab (null);
setSelectedIndex (0); insertFileSystemTab (null);
} setSelectedIndex (0);
} }
private void insertFileSystemTab (DiskSelectedEvent diskEvent) private void insertFileSystemTab (DiskSelectedEvent diskEvent)
@ -286,8 +220,71 @@ class CatalogPanel extends JTabbedPane
@Override @Override
public void restore (Preferences prefs) 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 ()); addChangeListener (new TabChangeListener ());
restored = true;
} }
// Pass through to DiskSelector // Pass through to DiskSelector

View File

@ -32,9 +32,9 @@ public class DuplicateAction extends DefaultAction implements RootDirectoryChang
} }
@Override @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); setEnabled (rootFolderData.getRootFolder () != null);
} }

View File

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

View File

@ -70,6 +70,7 @@ public class RootDirectoryAction extends DefaultAction implements QuitListener
String rootDirectory = prefs.get (prefsRootDirectory, ""); String rootDirectory = prefs.get (prefsRootDirectory, "");
File rootDirectoryFile = new File (rootDirectory); File rootDirectoryFile = new File (rootDirectory);
if (!rootDirectoryFile.exists () || !rootDirectoryFile.isDirectory ()) if (!rootDirectoryFile.exists () || !rootDirectoryFile.isDirectory ())
{ {
System.out.println ("No root directory"); System.out.println ("No root directory");
@ -78,10 +79,11 @@ public class RootDirectoryAction extends DefaultAction implements QuitListener
notifyListeners (rootDirectoryFile); notifyListeners (rootDirectoryFile);
} }
private void notifyListeners (File rootDirectoryFile) private void notifyListeners (File newRootFolder)
{ {
rootFolder = rootDirectoryFile; File oldRootFolder = rootFolder;
rootFolder = newRootFolder;
for (RootDirectoryChangeListener listener : listeners) 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 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 @Override
public AppleFileSource getFile (String fileName) public AppleFileSource getFile (String fileName)
{ {
System.out.println ("Wizardry disk looking for : " + fileName); // System.out.println ("Wizardry disk looking for : " + fileName);
return null; return null;
} }