summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/sevenUnits/ProgramInfo.java6
-rw-r--r--src/main/java/sevenUnits/newGUI/UserSettings.java27
-rw-r--r--src/main/java/sevenUnitsGUI/ExpressionConversionView.java (renamed from src/main/java/sevenUnits/newGUI/ExpressionConversionView.java)2
-rw-r--r--src/main/java/sevenUnitsGUI/Presenter.java (renamed from src/main/java/sevenUnits/newGUI/Presenter.java)51
-rw-r--r--src/main/java/sevenUnitsGUI/StandardDisplayRules.java74
-rw-r--r--src/main/java/sevenUnitsGUI/UnitConversionView.java (renamed from src/main/java/sevenUnits/newGUI/UnitConversionView.java)17
-rw-r--r--src/main/java/sevenUnitsGUI/View.java (renamed from src/main/java/sevenUnits/newGUI/View.java)18
-rw-r--r--src/main/java/sevenUnitsGUI/package-info.java (renamed from src/main/java/sevenUnits/newGUI/package-info.java)2
8 files changed, 139 insertions, 58 deletions
diff --git a/src/main/java/sevenUnits/ProgramInfo.java b/src/main/java/sevenUnits/ProgramInfo.java
index 31e43c7..ba6bc7a 100644
--- a/src/main/java/sevenUnits/ProgramInfo.java
+++ b/src/main/java/sevenUnits/ProgramInfo.java
@@ -26,6 +26,10 @@ public final class ProgramInfo {
public static final String VERSION = "0.3.2";
- private ProgramInfo() {}
+ private ProgramInfo() {
+ // this class is only for static variables, you shouldn't be able to
+ // construct an instance
+ throw new AssertionError();
+ }
}
diff --git a/src/main/java/sevenUnits/newGUI/UserSettings.java b/src/main/java/sevenUnits/newGUI/UserSettings.java
deleted file mode 100644
index 207ef11..0000000
--- a/src/main/java/sevenUnits/newGUI/UserSettings.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright (C) 2021 Adrien Hopkins
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-package sevenUnits.newGUI;
-
-/**
- * An object containing all of the user settings for a 7Units session.
- *
- * @author Adrien Hopkins
- * @since 2021-12-15
- */
-public final class UserSettings {
-
-}
diff --git a/src/main/java/sevenUnits/newGUI/ExpressionConversionView.java b/src/main/java/sevenUnitsGUI/ExpressionConversionView.java
index 0f00090..5a587d4 100644
--- a/src/main/java/sevenUnits/newGUI/ExpressionConversionView.java
+++ b/src/main/java/sevenUnitsGUI/ExpressionConversionView.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.newGUI;
+package sevenUnitsGUI;
/**
* A View that can convert unit expressions
diff --git a/src/main/java/sevenUnits/newGUI/Presenter.java b/src/main/java/sevenUnitsGUI/Presenter.java
index 6f7d34a..4373049 100644
--- a/src/main/java/sevenUnits/newGUI/Presenter.java
+++ b/src/main/java/sevenUnitsGUI/Presenter.java
@@ -14,7 +14,15 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.newGUI;
+package sevenUnitsGUI;
+
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import sevenUnits.unit.UnitDatabase;
+import sevenUnits.unit.UnitPrefix;
+import sevenUnits.utils.UncertainDouble;
/**
* An object that handles interactions between the view and the backend code
@@ -29,6 +37,46 @@ public final class Presenter {
private final View view;
/**
+ * The database that this presenter communicates with (effectively the model)
+ */
+ private final UnitDatabase database;
+
+ // ====== SETTINGS ======
+
+ /**
+ * The rule used for parsing input numbers. Any number-string inputted into
+ * this program will be parsed using this method.
+ */
+ private Function<String, UncertainDouble> numberParsingRule;
+
+ /**
+ * The rule used for displaying the results of unit conversions. The result
+ * of unit conversions will be put into this function, and the resulting
+ * string will be used in the output.
+ */
+ private Function<UncertainDouble, String> numberDisplayRule;
+
+ /**
+ * A predicate that determines whether or not a certain combination of
+ * prefixes is allowed. If it returns false, a combination of prefixes will
+ * not be allowed. Prefixes are put in the list from right to left.
+ */
+ private Predicate<List<UnitPrefix>> prefixRepetitionRule;
+
+ /**
+ * If this is true, views that show units as a list will have metric units
+ * removed from the From unit list and imperial/USC units removed from the To
+ * unit list.
+ */
+ private boolean oneWayConversion;
+
+ /**
+ * If this is false, duplicate units will be removed from the unit view in
+ * views that show units as a list to choose from.
+ */
+ private boolean showDuplicateUnits;
+
+ /**
* Creates a Presenter
*
* @param view the view that this presenter communicates with
@@ -36,6 +84,7 @@ public final class Presenter {
*/
public Presenter(View view) {
this.view = view;
+ this.database = new UnitDatabase();
}
/**
diff --git a/src/main/java/sevenUnitsGUI/StandardDisplayRules.java b/src/main/java/sevenUnitsGUI/StandardDisplayRules.java
new file mode 100644
index 0000000..331f598
--- /dev/null
+++ b/src/main/java/sevenUnitsGUI/StandardDisplayRules.java
@@ -0,0 +1,74 @@
+/**
+ * Copyright (C) 2021 Adrien Hopkins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package sevenUnitsGUI;
+
+import java.util.function.Function;
+
+import sevenUnits.utils.UncertainDouble;
+
+/**
+ * The default rules for displaying numbers.
+ *
+ * Unless otherwise stated, all of this class's functions throw
+ * {@link NullPointerException} when they receive a null parameter.
+ *
+ * @since 2021-12-24
+ */
+final class StandardDisplayRules {
+ /**
+ * Rounds using UncertainDouble's toString method.
+ */
+ private static final Function<UncertainDouble, String> SCIENTIFIC_ROUNDING_RULE = new Function<>() {
+ @Override
+ public String apply(UncertainDouble t) {
+ return t.toString(false);
+ }
+
+ @Override
+ public String toString() {
+ return "Scientific Rounding";
+ }
+ };
+
+ /**
+ * @return a rule that rounds using UncertainDouble's own toString(false)
+ * function.
+ * @since 2021-12-24
+ */
+ public static final Function<UncertainDouble, String> getScientificRule() {
+ return SCIENTIFIC_ROUNDING_RULE;
+ }
+
+ /**
+ * Gets one of the standard rules from its string representation.
+ *
+ * @param ruleToString string representation of the display rule
+ * @return display rule
+ * @throws IllegalArgumentException if the provided string is not that of a
+ * standard rule.
+ * @since 2021-12-24
+ */
+ public static final Function<UncertainDouble, String> getStandardRule(
+ String ruleToString) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ private StandardDisplayRules() {
+ throw new AssertionError(
+ "This is a static utility class, you may not get instances of it.");
+ }
+}
diff --git a/src/main/java/sevenUnits/newGUI/UnitConversionView.java b/src/main/java/sevenUnitsGUI/UnitConversionView.java
index dafd461..f653051 100644
--- a/src/main/java/sevenUnits/newGUI/UnitConversionView.java
+++ b/src/main/java/sevenUnitsGUI/UnitConversionView.java
@@ -14,15 +14,13 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.newGUI;
+package sevenUnitsGUI;
import java.util.List;
import java.util.Optional;
-import java.util.OptionalDouble;
import sevenUnits.unit.BaseDimension;
import sevenUnits.unit.Unit;
-import sevenUnits.unit.UnitValue;
import sevenUnits.utils.NamedObjectProduct;
import sevenUnits.utils.ObjectProduct;
@@ -40,10 +38,11 @@ public interface UnitConversionView extends View {
Optional<Unit> getFromSelection();
/**
- * @return value to convert between the units
+ * @return value to convert between the units (specifically, the numeric
+ * string provided by the user)
* @since 2021-12-15
*/
- OptionalDouble getInputValue();
+ Optional<String> getInputValue();
/**
* @return selected dimension
@@ -88,10 +87,8 @@ public interface UnitConversionView extends View {
/**
* Shows the output of a unit conversion.
*
- * @param input unit value before conversion, as obtained from the view
- * @param output unit value after conversion
- * @throws NullPointerException if either argument is null
- * @since 2021-12-15
+ * @param outputString string that shows output of conversion
+ * @since 2021-12-24
*/
- void showUnitConversionOutput(UnitValue input, UnitValue output);
+ void showUnitConversionOutput(String outputString);
}
diff --git a/src/main/java/sevenUnits/newGUI/View.java b/src/main/java/sevenUnitsGUI/View.java
index 8758a41..a93c76a 100644
--- a/src/main/java/sevenUnits/newGUI/View.java
+++ b/src/main/java/sevenUnitsGUI/View.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package sevenUnits.newGUI;
+package sevenUnitsGUI;
/**
* An object that controls user interaction with 7Units
@@ -24,22 +24,6 @@ package sevenUnits.newGUI;
*/
public interface View {
/**
- * @return settings user has set in the view
- * @since 2021-12-15
- */
- UserSettings getUserSettings();
-
- /**
- * Sets the user settings on the settings page, if this view has one. Does
- * not update settings internally; this is intended for loading settings from
- * a file.
- *
- * @param settings settings to set
- * @since 2021-12-15
- */
- void setUserSettings(UserSettings settings);
-
- /**
* Shows an error message.
*
* @param title title of error message; on any view that uses an error
diff --git a/src/main/java/sevenUnits/newGUI/package-info.java b/src/main/java/sevenUnitsGUI/package-info.java
index b58dccc..cff1ded 100644
--- a/src/main/java/sevenUnits/newGUI/package-info.java
+++ b/src/main/java/sevenUnitsGUI/package-info.java
@@ -20,4 +20,4 @@
* @author Adrien Hopkins
* @since 2021-12-15
*/
-package sevenUnits.newGUI; \ No newline at end of file
+package sevenUnitsGUI; \ No newline at end of file