diff options
author | Adrien Hopkins <ahopk127@my.yorku.ca> | 2021-12-24 16:03:26 -0500 |
---|---|---|
committer | Adrien Hopkins <ahopk127@my.yorku.ca> | 2021-12-24 16:03:26 -0500 |
commit | da3a5098602f8177f6d5dac4a322f70d6fdf9126 (patch) | |
tree | 325d439c9ea7d4a8885332792b83ec00dd609ede /src/main | |
parent | 4f754b0bc136b972607aa1b39f2358bd98dc4e1c (diff) |
Did some API design for user settings, and moved GUI to a new package
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/sevenUnits/ProgramInfo.java | 6 | ||||
-rw-r--r-- | src/main/java/sevenUnits/newGUI/UserSettings.java | 27 | ||||
-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.java | 74 | ||||
-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 |