From 112da0f4b64767ee2ef3217f6d143d6dd0eb5645 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Tue, 15 Mar 2016 15:40:57 +1100 Subject: [PATCH] more functions --- .../diskbrowser/gui/CatalogPanel.java | 2 +- .../bytezone/diskbrowser/gui/DiskBrowser.java | 44 +++++---------- .../bytezone/diskbrowser/gui/WindowSaver.java | 51 +++++++++++++++++ .../bytezone/diskbrowser/visicalc/Abs.java | 16 ++++++ .../bytezone/diskbrowser/visicalc/Error.java | 12 ++++ .../diskbrowser/visicalc/Function.java | 21 ++++++- .../bytezone/diskbrowser/visicalc/Int.java | 16 ++++++ .../bytezone/diskbrowser/visicalc/IsNa.java | 16 ++++++ src/com/bytezone/diskbrowser/visicalc/Na.java | 27 +++++++++ .../bytezone/diskbrowser/visicalc/Npv.java | 55 +++++++++++++++++++ src/com/bytezone/diskbrowser/visicalc/Pi.java | 2 +- 11 files changed, 228 insertions(+), 34 deletions(-) create mode 100644 src/com/bytezone/diskbrowser/gui/WindowSaver.java create mode 100644 src/com/bytezone/diskbrowser/visicalc/Abs.java create mode 100644 src/com/bytezone/diskbrowser/visicalc/Int.java create mode 100644 src/com/bytezone/diskbrowser/visicalc/IsNa.java create mode 100644 src/com/bytezone/diskbrowser/visicalc/Na.java create mode 100644 src/com/bytezone/diskbrowser/visicalc/Npv.java diff --git a/src/com/bytezone/diskbrowser/gui/CatalogPanel.java b/src/com/bytezone/diskbrowser/gui/CatalogPanel.java index 1d92cbe..af079d5 100755 --- a/src/com/bytezone/diskbrowser/gui/CatalogPanel.java +++ b/src/com/bytezone/diskbrowser/gui/CatalogPanel.java @@ -68,7 +68,7 @@ class CatalogPanel extends JTabbedPane selector.addDiskSelectionListener (lister.diskLister); setTabPlacement (SwingConstants.BOTTOM); - setPreferredSize (new Dimension (360, 802)); // width, height + setPreferredSize (new Dimension (360, 802)); // width, height // setPreferredSize (new Dimension (360, 523)); // width, height createTabs (prefs); diff --git a/src/com/bytezone/diskbrowser/gui/DiskBrowser.java b/src/com/bytezone/diskbrowser/gui/DiskBrowser.java index 56f1364..7c945c6 100755 --- a/src/com/bytezone/diskbrowser/gui/DiskBrowser.java +++ b/src/com/bytezone/diskbrowser/gui/DiskBrowser.java @@ -16,7 +16,8 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi { private static final String windowTitle = "Apple ][ Disk Browser"; private static final String PREFS_FULL_SCREEN = "full screen"; - Preferences prefs = Preferences.userNodeForPackage (this.getClass ()); + private final Preferences prefs = Preferences.userNodeForPackage (this.getClass ()); + private WindowSaver windowSaver; public DiskBrowser () { @@ -157,6 +158,19 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi : e.getFormattedDisk ().getName ()); } + @Override + public void quit (Preferences preferences) + { + windowSaver.saveWindow (); + } + + @Override + public void restore (Preferences preferences) + { + windowSaver = new WindowSaver (prefs, this, "DiskBrowser"); + windowSaver.restoreWindow (); + } + public static void main (String[] args) { EventQueue.invokeLater (new Runnable () @@ -169,32 +183,4 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi } }); } - - @Override - public void quit (Preferences preferences) - { - prefs.putBoolean (PREFS_FULL_SCREEN, getExtendedState () == MAXIMIZED_BOTH); - } - - @Override - public void restore (Preferences preferences) - { - if (true) - { - setLocationRelativeTo (null); // centre - - // if we are on a smallish screen, just go fullscreen width - if (Platform.toolkit.getScreenSize ().width <= 1280) - setExtendedState (MAXIMIZED_HORIZ); - - // restore window if it was previously at full screen - if (prefs.getBoolean (PREFS_FULL_SCREEN, false)) - setExtendedState (MAXIMIZED_BOTH); - } - else - { - setLocation (10, 10); - setSize (1200, 812); - } - } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/gui/WindowSaver.java b/src/com/bytezone/diskbrowser/gui/WindowSaver.java new file mode 100644 index 0000000..7b718a1 --- /dev/null +++ b/src/com/bytezone/diskbrowser/gui/WindowSaver.java @@ -0,0 +1,51 @@ +package com.bytezone.diskbrowser.gui; + +import java.util.prefs.Preferences; + +import javax.swing.JFrame; + +public class WindowSaver +{ + private final Preferences prefs; + private final JFrame frame; + private final String key; + + public WindowSaver (Preferences prefs, JFrame frame, String key) + { + this.prefs = prefs; + this.frame = frame; + this.key = key; + } + + public void saveWindow () + { + prefs.putInt (key + "X", frame.getX ()); + prefs.putInt (key + "Y", frame.getY ()); + prefs.putInt (key + "Height", frame.getHeight ()); + prefs.putInt (key + "Width", frame.getWidth ()); + } + + public boolean restoreWindow () + { + int x = prefs.getInt (key + "X", -1); + int y = prefs.getInt (key + "Y", -1); + int height = prefs.getInt (key + "Height", -1); + int width = prefs.getInt (key + "Width", -1); + + if (width < 0) // nothing to restore + { + frame.setLocationRelativeTo (null); // centre + // frame.centerOnScreen (); + return false; + } + + // frame.setX (x); + // frame.setY (y); + // frame.setHeight (height); + // frame.setWidth (width); + frame.setLocation (x, y); + frame.setSize (width, height); + + return true; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Abs.java b/src/com/bytezone/diskbrowser/visicalc/Abs.java new file mode 100644 index 0000000..f6c6599 --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/Abs.java @@ -0,0 +1,16 @@ +package com.bytezone.diskbrowser.visicalc; + +public class Abs extends Function +{ + + Abs (Sheet parent, String text) + { + super (parent, text); + } + + @Override + public double getValue () + { + return 0; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Error.java b/src/com/bytezone/diskbrowser/visicalc/Error.java index d8cad81..922a794 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Error.java +++ b/src/com/bytezone/diskbrowser/visicalc/Error.java @@ -7,6 +7,18 @@ class Error extends Function super (parent, text); } + @Override + public boolean hasValue () + { + return false; + } + + @Override + public String getError () + { + return "@Error"; + } + @Override public double getValue () { diff --git a/src/com/bytezone/diskbrowser/visicalc/Function.java b/src/com/bytezone/diskbrowser/visicalc/Function.java index 3945f08..6e676c0 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Function.java +++ b/src/com/bytezone/diskbrowser/visicalc/Function.java @@ -60,17 +60,32 @@ abstract class Function implements Value if (text.startsWith ("@AND(")) return new And (parent, text); + if (text.startsWith ("@NPV(")) + return new Npv (parent, text); + + if (text.startsWith ("@ABS(")) + return new Abs (parent, text); + + if (text.startsWith ("@INT(")) + return new Int (parent, text); + if (text.startsWith ("@ISERROR(")) return new IsError (parent, text); - if (text.startsWith ("@ERROR(")) + if (text.startsWith ("@ISNA(")) + return new IsNa (parent, text); + + if (text.startsWith ("@PI")) + return new Pi (parent, text); + + if (text.startsWith ("@ERROR")) return new Error (parent, text); if (text.equals ("@NA")) - return new Error (parent, text); + return new Na (parent, text); System.out.printf ("Unknown function: [%s]%n", text); - return new Error (parent, "@ERROR()"); + return new Error (parent, "@ERROR"); } Function (Sheet parent, String text) diff --git a/src/com/bytezone/diskbrowser/visicalc/Int.java b/src/com/bytezone/diskbrowser/visicalc/Int.java new file mode 100644 index 0000000..bb47ecb --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/Int.java @@ -0,0 +1,16 @@ +package com.bytezone.diskbrowser.visicalc; + +public class Int extends Function +{ + + Int (Sheet parent, String text) + { + super (parent, text); + } + + @Override + public double getValue () + { + return 0; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/IsNa.java b/src/com/bytezone/diskbrowser/visicalc/IsNa.java new file mode 100644 index 0000000..cff1910 --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/IsNa.java @@ -0,0 +1,16 @@ +package com.bytezone.diskbrowser.visicalc; + +public class IsNa extends Function +{ + + IsNa (Sheet parent, String text) + { + super (parent, text); + } + + @Override + public double getValue () + { + return 0; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Na.java b/src/com/bytezone/diskbrowser/visicalc/Na.java new file mode 100644 index 0000000..c1a5237 --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/Na.java @@ -0,0 +1,27 @@ +package com.bytezone.diskbrowser.visicalc; + +public class Na extends Function +{ + public Na (Sheet parent, String text) + { + super (parent, text); + } + + @Override + public boolean hasValue () + { + return false; + } + + @Override + public String getError () + { + return "@NA"; + } + + @Override + public double getValue () + { + return 0; + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Npv.java b/src/com/bytezone/diskbrowser/visicalc/Npv.java new file mode 100644 index 0000000..f7ee6ed --- /dev/null +++ b/src/com/bytezone/diskbrowser/visicalc/Npv.java @@ -0,0 +1,55 @@ +package com.bytezone.diskbrowser.visicalc; + +public class Npv extends Function +{ + private final String valueText; + private final String rangeText; + + private final Expression valueExp; + private final Range range; + + private boolean hasChecked; + private final double value = 0; + + Npv (Sheet parent, String text) + { + super (parent, text); + + int pos = text.indexOf (','); + valueText = text.substring (8, pos); + rangeText = text.substring (pos + 1, text.length () - 1); + + valueExp = new Expression (parent, valueText); + range = getRange (rangeText); + } + + @Override + public boolean hasValue () + { + if (!hasChecked) + calculate (); + return hasValue; + } + + @Override + public double getValue () + { + return hasValue () ? value : 0; + } + + private void calculate () + { + hasChecked = true; + hasValue = false; + + for (Address address : range) + { + Cell cell = parent.getCell (address); + if (cell != null && cell.hasValue ()) + { + hasValue = true; + // calculate something + } + } + } +} \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/visicalc/Pi.java b/src/com/bytezone/diskbrowser/visicalc/Pi.java index a81bff3..fc8a2ba 100644 --- a/src/com/bytezone/diskbrowser/visicalc/Pi.java +++ b/src/com/bytezone/diskbrowser/visicalc/Pi.java @@ -10,6 +10,6 @@ class Pi extends Function @Override public double getValue () { - return 3.14159265; + return 3.1415926536; } }