mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-14 12:29:34 +00:00
better save/restore handling
This commit is contained in:
parent
a2f6839aac
commit
9be53fe921
|
@ -211,6 +211,16 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||
alignPos = 0;
|
||||
}
|
||||
|
||||
int ptr = endPtr + 2;
|
||||
if (ptr < buffer.length)
|
||||
{
|
||||
int offset = HexFormatter.unsignedShort (buffer, 0);
|
||||
int programLoadAddress = offset - getLineLength (0);
|
||||
fullText.append ("\nExtra data:\n\n");
|
||||
fullText.append (HexFormatter.formatNoHeader (buffer, ptr, buffer.length - ptr,
|
||||
programLoadAddress + ptr));
|
||||
}
|
||||
|
||||
if (fullText.length () > 0)
|
||||
fullText.deleteCharAt (fullText.length () - 1); // remove last newline
|
||||
|
||||
|
|
|
@ -277,6 +277,9 @@ public class AssemblerProgram extends AbstractFile
|
|||
if ((buffer[ptr] & 0x80) != 0) // hi bit set
|
||||
continue;
|
||||
|
||||
if (buffer[ptr] == 0x0D) // CR
|
||||
continue;
|
||||
|
||||
if (ptr - start > 3)
|
||||
stringLocations.add (new StringLocation (start, ptr - 1));
|
||||
|
||||
|
|
|
@ -55,15 +55,15 @@ class CatalogPanel extends JTabbedPane
|
|||
private CloseTabAction closeTabAction;
|
||||
private final RootFolderData rootFolderData = new RootFolderData ();
|
||||
|
||||
public CatalogPanel (RedoHandler redoHandler, Preferences prefs)
|
||||
public CatalogPanel (RedoHandler redoHandler)
|
||||
{
|
||||
this.redoHandler = redoHandler;
|
||||
|
||||
setTabPlacement (SwingConstants.BOTTOM);
|
||||
setPreferredSize (new Dimension (360, 802)); // width, height
|
||||
|
||||
createTabs (prefs);
|
||||
addChangeListener (new TabChangeListener ());
|
||||
// createTabs (prefs);
|
||||
// addChangeListener (new TabChangeListener ());
|
||||
}
|
||||
|
||||
RootFolderData getRootFolderData ()
|
||||
|
@ -84,6 +84,7 @@ 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, "");
|
||||
|
@ -307,8 +308,10 @@ class CatalogPanel extends JTabbedPane
|
|||
}
|
||||
|
||||
@Override
|
||||
public void restore (Preferences preferences)
|
||||
public void restore (Preferences prefs)
|
||||
{
|
||||
createTabs (prefs);
|
||||
addChangeListener (new TabChangeListener ());
|
||||
}
|
||||
|
||||
// Pass through to DiskSelector
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.awt.geom.AffineTransform;
|
|||
import java.awt.image.BufferedImage;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
|
@ -26,18 +25,18 @@ class DataPanel extends JTabbedPane
|
|||
private static final int TEXT_WIDTH = 65;
|
||||
private static final int BACKGROUND = 245;
|
||||
|
||||
JTextArea hexText;
|
||||
JTextArea disassemblyText;
|
||||
private final JTextArea formattedText;
|
||||
private final JTextArea hexText;
|
||||
private final JTextArea disassemblyText;
|
||||
|
||||
// these two panes are interchangeable
|
||||
JScrollPane formattedPane;
|
||||
JScrollPane imagePane;
|
||||
private final JScrollPane formattedPane;
|
||||
private final JScrollPane imagePane;
|
||||
|
||||
JTextArea formattedText;
|
||||
ImagePanel imagePanel; // internal class
|
||||
boolean debugMode;
|
||||
private final ImagePanel imagePanel; // internal class
|
||||
private boolean debugMode;
|
||||
|
||||
boolean imageVisible = false;
|
||||
private boolean imageVisible = false;
|
||||
|
||||
// used to determine whether the text has been set
|
||||
boolean formattedTextValid;
|
||||
|
@ -47,14 +46,14 @@ class DataPanel extends JTabbedPane
|
|||
|
||||
final MenuHandler menuHandler;
|
||||
|
||||
public DataPanel (MenuHandler mh, Preferences prefs)
|
||||
public DataPanel (MenuHandler mh)
|
||||
{
|
||||
this.menuHandler = mh;
|
||||
setTabPlacement (SwingConstants.BOTTOM);
|
||||
|
||||
formattedText = new JTextArea (10, TEXT_WIDTH);
|
||||
formattedPane = setPanel (formattedText, "Formatted");
|
||||
formattedText.setLineWrap (prefs.getBoolean (MenuHandler.PREFS_LINE_WRAP, true));
|
||||
// formattedText.setLineWrap (prefs.getBoolean (MenuHandler.PREFS_LINE_WRAP, true));
|
||||
formattedText.setText ("Please use the 'File->Set HOME folder...' command to "
|
||||
+ "\ntell DiskBrowser where your Apple disks are located."
|
||||
+ "\n\nTo see the contents of a disk in more detail, double-click"
|
||||
|
@ -165,6 +164,11 @@ class DataPanel extends JTabbedPane
|
|||
return palette;
|
||||
}
|
||||
|
||||
void setLineWrap (boolean lineWrap)
|
||||
{
|
||||
formattedText.setLineWrap (lineWrap);
|
||||
}
|
||||
|
||||
public void setColourQuirks (boolean value)
|
||||
{
|
||||
if (currentDataSource instanceof HiResImage)
|
||||
|
|
|
@ -12,8 +12,6 @@ import java.util.prefs.Preferences;
|
|||
|
||||
import javax.swing.*;
|
||||
|
||||
import com.bytezone.common.Platform;
|
||||
import com.bytezone.common.State;
|
||||
import com.bytezone.diskbrowser.duplicates.RootFolderData;
|
||||
|
||||
public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitListener
|
||||
|
@ -23,19 +21,21 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
private final Preferences prefs = Preferences.userNodeForPackage (this.getClass ());
|
||||
private WindowSaver windowSaver;
|
||||
|
||||
private static final String OS = System.getProperty ("os.name").toLowerCase ();
|
||||
private static final boolean MAC = OS.startsWith ("mac os");
|
||||
|
||||
public DiskBrowser ()
|
||||
{
|
||||
super (windowTitle);
|
||||
|
||||
if (args.length > 0 && "-reset".equals (args[0]))
|
||||
{
|
||||
State state = new State (prefs);
|
||||
state.clear ();
|
||||
WindowState windowState = new WindowState (prefs);
|
||||
windowState.clear ();
|
||||
}
|
||||
|
||||
JToolBar toolBar = new JToolBar ("Toolbar", JToolBar.HORIZONTAL);
|
||||
MenuHandler menuHandler = new MenuHandler (prefs);
|
||||
// menuHandler.restore (prefs); // early !!
|
||||
MenuHandler menuHandler = new MenuHandler ();
|
||||
|
||||
setJMenuBar (menuHandler.menuBar);
|
||||
setLayout (new BorderLayout ());
|
||||
|
@ -46,11 +46,11 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
toolBar.addSeparator ();
|
||||
|
||||
// create and add the left-hand catalog panel
|
||||
CatalogPanel catalogPanel = new CatalogPanel (redoHandler, prefs);
|
||||
CatalogPanel catalogPanel = new CatalogPanel (redoHandler);
|
||||
JPanel catalogBorderPanel = addPanel (catalogPanel, "Catalog", BorderLayout.WEST);
|
||||
|
||||
// create and add the centre output panel
|
||||
DataPanel dataPanel = new DataPanel (menuHandler, prefs);
|
||||
DataPanel dataPanel = new DataPanel (menuHandler);
|
||||
addPanel (dataPanel, "Output", BorderLayout.CENTER);
|
||||
|
||||
// create and add the right-hand disk layout panel
|
||||
|
@ -161,6 +161,7 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
// restore the menuHandler items before they are referenced
|
||||
fireRestoreEvent ();
|
||||
diskLayoutPanel.setFree (menuHandler.showFreeSectorsItem.isSelected ());
|
||||
dataPanel.setLineWrap (menuHandler.lineWrapItem.isSelected ());
|
||||
|
||||
// Remove the two optional panels if they were previously hidden
|
||||
if (!menuHandler.showLayoutItem.isSelected ())
|
||||
|
@ -213,12 +214,30 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||
@Override
|
||||
public void run ()
|
||||
{
|
||||
Platform.setLookAndFeel ();
|
||||
setLookAndFeel ();
|
||||
new DiskBrowser ().setVisible (true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void setLookAndFeel ()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (MAC)
|
||||
{
|
||||
UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName ());
|
||||
System.setProperty ("apple.laf.useScreenMenuBar", "true");
|
||||
}
|
||||
else
|
||||
UIManager.setLookAndFeel ("javax.swing.plaf.nimbus.NimbusLookAndFeel");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
}
|
||||
|
||||
List<QuitListener> quitListeners = new ArrayList<> ();
|
||||
|
||||
public void addQuitListener (QuitListener listener)
|
||||
|
|
|
@ -10,7 +10,6 @@ import java.util.prefs.Preferences;
|
|||
|
||||
import javax.swing.*;
|
||||
|
||||
import com.bytezone.common.EnvironmentAction;
|
||||
import com.bytezone.common.FontAction;
|
||||
import com.bytezone.diskbrowser.applefile.*;
|
||||
import com.bytezone.diskbrowser.disk.DataDisk;
|
||||
|
@ -65,7 +64,7 @@ public class MenuHandler
|
|||
JMenu applesoftMenu = new JMenu ("Applesoft");
|
||||
JMenu assemblerMenu = new JMenu ("Assembler");
|
||||
JMenu prodosMenu = new JMenu ("Prodos");
|
||||
JMenu helpMenu = new JMenu ("Help");
|
||||
// JMenu helpMenu = new JMenu ("Help");
|
||||
|
||||
// File menu items
|
||||
final JMenuItem rootItem = new JMenuItem ("Set root folder...");
|
||||
|
@ -115,7 +114,7 @@ public class MenuHandler
|
|||
|
||||
ButtonGroup paletteGroup = new ButtonGroup ();
|
||||
|
||||
public MenuHandler (Preferences prefs)
|
||||
public MenuHandler ()
|
||||
{
|
||||
menuBar.add (fileMenu);
|
||||
menuBar.add (formatMenu);
|
||||
|
@ -123,7 +122,7 @@ public class MenuHandler
|
|||
menuBar.add (applesoftMenu);
|
||||
menuBar.add (assemblerMenu);
|
||||
menuBar.add (prodosMenu);
|
||||
menuBar.add (helpMenu);
|
||||
// menuBar.add (helpMenu);
|
||||
|
||||
fileMenu.add (rootItem);
|
||||
fileMenu.addSeparator ();
|
||||
|
@ -235,7 +234,7 @@ public class MenuHandler
|
|||
|
||||
prodosSortDirectoriesItem.addActionListener (prodosPreferencesAction);
|
||||
|
||||
helpMenu.add (new JMenuItem (new EnvironmentAction ()));
|
||||
// helpMenu.add (new JMenuItem (new EnvironmentAction ()));
|
||||
|
||||
sector256Item.setActionCommand ("256");
|
||||
sector256Item.setAccelerator (KeyStroke.getKeyStroke ("alt 4"));
|
||||
|
@ -256,12 +255,13 @@ public class MenuHandler
|
|||
|
||||
// this is done early because the CatalogPanel creates the previous disk used
|
||||
// before restore() is called
|
||||
prodosSortDirectoriesItem
|
||||
.setSelected (prefs.getBoolean (PREFS_PRODOS_SORT_DIRECTORIES, true));
|
||||
// what about all the other preferences???
|
||||
// prodosSortDirectoriesItem
|
||||
// .setSelected (prefs.getBoolean (PREFS_PRODOS_SORT_DIRECTORIES, true));
|
||||
|
||||
setBasicPreferences ();
|
||||
setAssemblerPreferences ();
|
||||
setProdosPreferences ();
|
||||
// setBasicPreferences ();
|
||||
// setAssemblerPreferences ();
|
||||
// setProdosPreferences ();
|
||||
}
|
||||
|
||||
private void setBasicPreferences ()
|
||||
|
@ -334,10 +334,10 @@ public class MenuHandler
|
|||
listener.setProdosPreferences (prodosPreferences);
|
||||
}
|
||||
|
||||
void addHelpMenuAction (Action action, String functionName)
|
||||
{
|
||||
helpMenu.add (new JMenuItem (action));
|
||||
}
|
||||
// void addHelpMenuAction (Action action, String functionName)
|
||||
// {
|
||||
// helpMenu.add (new JMenuItem (action));
|
||||
// }
|
||||
|
||||
private void addLauncherMenu ()
|
||||
{
|
||||
|
@ -417,12 +417,12 @@ public class MenuHandler
|
|||
showAssemblerHeaderItem
|
||||
.setSelected (prefs.getBoolean (PREFS_SHOW_ASSEMBLER_HEADER, true));
|
||||
|
||||
// prodosSortDirectoriesItem
|
||||
// .setSelected (prefs.getBoolean (PREFS_PRODOS_SORT_DIRECTORIES, true));
|
||||
prodosSortDirectoriesItem
|
||||
.setSelected (prefs.getBoolean (PREFS_PRODOS_SORT_DIRECTORIES, true));
|
||||
|
||||
// setBasicPreferences ();
|
||||
// setAssemblerPreferences ();
|
||||
// setProdosPreferences ();
|
||||
setBasicPreferences ();
|
||||
setAssemblerPreferences ();
|
||||
setProdosPreferences ();
|
||||
|
||||
int paletteIndex = prefs.getInt (PREFS_PALETTE, 0);
|
||||
PaletteFactory paletteFactory = HiResImage.getPaletteFactory ();
|
||||
|
|
|
@ -24,8 +24,6 @@ public class WindowSaver
|
|||
prefs.putInt (key + "Y", frame.getY ());
|
||||
prefs.putInt (key + "Height", frame.getHeight ());
|
||||
prefs.putInt (key + "Width", frame.getWidth ());
|
||||
// System.out.printf ("Saving x:%d, y:%d, w:%d, h:%d%n", frame.getX (), frame.getY (),
|
||||
// frame.getWidth (), frame.getHeight ());
|
||||
}
|
||||
|
||||
public boolean restoreWindow ()
|
||||
|
@ -37,22 +35,19 @@ public class WindowSaver
|
|||
|
||||
Dimension screen = java.awt.Toolkit.getDefaultToolkit ().getScreenSize ();
|
||||
|
||||
if (width < 0) // nothing to restore
|
||||
if (width < 0) // nothing to restore
|
||||
{
|
||||
frame.setLocation (100, 100);
|
||||
frame.setSize (1000, 600);
|
||||
frame.setLocationRelativeTo (null); // centre
|
||||
// System.out.printf ("Creating x:%d, y:%d, w:%d, h:%d%n", x, y, width, height);
|
||||
return false;
|
||||
}
|
||||
|
||||
// System.out.printf ("w:%d, sw:%f%n", width, screen.getWidth ());
|
||||
if (width > screen.getWidth () - 15)
|
||||
width = (int) (screen.getWidth () - 15);
|
||||
|
||||
frame.setSize (width, height);
|
||||
frame.setLocation (x, y);
|
||||
// System.out.printf ("Restoring x:%d, y:%d, w:%d, h:%d%n", x, y, width, height);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
52
src/com/bytezone/diskbrowser/gui/WindowState.java
Normal file
52
src/com/bytezone/diskbrowser/gui/WindowState.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
package com.bytezone.diskbrowser.gui;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.util.prefs.BackingStoreException;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
|
||||
class WindowState
|
||||
{
|
||||
private static final String PREF_WINDOW_WIDTH = "WindowWidth";
|
||||
private static final String PREF_WINDOW_HEIGHT = "WindowHeight";
|
||||
private static final String PREF_WINDOW_STATE = "WindowExtendedState";
|
||||
|
||||
public Preferences preferences;
|
||||
|
||||
public WindowState (Preferences preferences)
|
||||
{
|
||||
this.preferences = preferences;
|
||||
}
|
||||
|
||||
public void clear ()
|
||||
{
|
||||
try
|
||||
{
|
||||
preferences.clear ();
|
||||
}
|
||||
catch (BackingStoreException e)
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
}
|
||||
|
||||
public Dimension getWindowSize (int defaultWidth, int defaultHeight)
|
||||
{
|
||||
int width = preferences.getInt (PREF_WINDOW_WIDTH, defaultWidth);
|
||||
int height = preferences.getInt (PREF_WINDOW_HEIGHT, defaultHeight);
|
||||
return new Dimension (width, height);
|
||||
}
|
||||
|
||||
public int getExtendedState (int defaultState)
|
||||
{
|
||||
return preferences.getInt (PREF_WINDOW_STATE, defaultState);
|
||||
}
|
||||
|
||||
public void save (JFrame window)
|
||||
{
|
||||
preferences.putInt (PREF_WINDOW_WIDTH, window.getWidth ());
|
||||
preferences.putInt (PREF_WINDOW_HEIGHT, window.getHeight ());
|
||||
preferences.putInt (PREF_WINDOW_STATE, window.getExtendedState ());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user