diff options
author | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-04-18 17:41:43 -0500 |
---|---|---|
committer | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-04-18 17:41:43 -0500 |
commit | 40f7b6e806140fc2fc741c63c71f5ce97b4bd1d2 (patch) | |
tree | e43ce4a066da9714da5d7274a443e98b818e73a5 /src/main/java/sevenUnitsGUI | |
parent | f0541a955b6e4b12d808cffec0874f50a004e8b9 (diff) |
Implemented one-way conversion, duplicate prefixes can now be hidden
Diffstat (limited to 'src/main/java/sevenUnitsGUI')
-rw-r--r-- | src/main/java/sevenUnitsGUI/Presenter.java | 71 | ||||
-rw-r--r-- | src/main/java/sevenUnitsGUI/TabbedView.java | 9 |
2 files changed, 46 insertions, 34 deletions
diff --git a/src/main/java/sevenUnitsGUI/Presenter.java b/src/main/java/sevenUnitsGUI/Presenter.java index 85a0ddc..f4f3e3a 100644 --- a/src/main/java/sevenUnitsGUI/Presenter.java +++ b/src/main/java/sevenUnitsGUI/Presenter.java @@ -30,6 +30,7 @@ import java.util.Set; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; import sevenUnits.ProgramInfo; import sevenUnits.unit.BaseDimension; @@ -194,10 +195,10 @@ public final class Presenter { private boolean oneWayConversionEnabled; /** - * If this is false, duplicate units will be removed from the unit view in - * views that show units as a list to choose from. + * If this is false, duplicate units and prefixes will be removed from the + * unit view in views that show units as a list to choose from. */ - private boolean showDuplicateUnits; + private boolean showDuplicates; /** * Creates a Presenter @@ -416,8 +417,8 @@ public final class Presenter { * @return true iff duplicate units are shown in unit lists * @since 2022-03-30 */ - public boolean duplicateUnitsShown() { - return this.showDuplicateUnits; + public boolean duplicatesShown() { + return this.showDuplicates; } /** @@ -455,25 +456,18 @@ public final class Presenter { } /** - * @return type of unit {@code u} + * @return whether or not the provided unit is semi-metric (i.e. an + * exception) * @since 2022-04-16 */ - private final UnitType getUnitType(Unit u) { + private final boolean isSemiMetric(Unit u) { // determine if u is an exception final var primaryName = u.getPrimaryName(); final var symbol = u.getSymbol(); - final boolean isException = primaryName.isPresent() + return primaryName.isPresent() && this.metricExceptions.contains(primaryName.orElseThrow()) || symbol.isPresent() && this.metricExceptions.contains(symbol.orElseThrow()); - - // determine unit type - if (isException) - return UnitType.SEMI_METRIC; - else if (u.isMetric()) - return UnitType.METRIC; - else - return UnitType.NON_METRIC; } /** @@ -510,10 +504,7 @@ public final class Presenter { ucview.setDimensionNames(this.database.dimensionMap().keySet()); } - // load units & prefixes into viewers - this.view.setViewableUnitNames( - this.database.unitMapPrefixless(this.showDuplicateUnits).keySet()); - this.view.setViewablePrefixNames(this.database.prefixMap().keySet()); + this.updateView(); } void prefixSelected() { @@ -572,8 +563,8 @@ public final class Presenter { * @param showDuplicateUnits whether or not duplicate units should be shown * @since 2022-03-30 */ - public void setShowDuplicateUnits(boolean showDuplicateUnits) { - this.showDuplicateUnits = showDuplicateUnits; + public void setShowDuplicates(boolean showDuplicateUnits) { + this.showDuplicates = showDuplicateUnits; this.updateView(); } @@ -589,7 +580,7 @@ public final class Presenter { || u instanceof LinearUnit && ((LinearUnit) u).isBase(); final var definition = isBase ? "(Base unit)" : u.toDefinitionString(); final var dimensionString = this.getDimensionName(u.getDimension()); - final var unitType = this.getUnitType(u); + final var unitType = UnitType.getType(u, this::isSemiMetric); this.view.showUnit(nameSymbol, definition, dimensionString, unitType); } @@ -621,14 +612,36 @@ public final class Presenter { .getDimension(((UnitConversionView) this.view) .getSelectedDimensionName().orElseThrow()); - final Set<String> units = this.database - .unitMapPrefixless(this.showDuplicateUnits).entrySet().stream() + // load units & prefixes into viewers + this.view.setViewableUnitNames( + this.database.unitMapPrefixless(this.showDuplicates).keySet()); + this.view.setViewablePrefixNames( + this.database.prefixMap(this.showDuplicates).keySet()); + + // get From and To units + Stream<Unit> fromUnits = this.database + .unitMapPrefixless(this.showDuplicates).entrySet().stream() .map(Map.Entry::getValue) - .filter(u -> viewDimension.equals(u.getDimension())) - .map(Unit::getName).collect(Collectors.toSet()); + .filter(u -> viewDimension.equals(u.getDimension())); + + Stream<Unit> toUnits = this.database + .unitMapPrefixless(this.showDuplicates).entrySet().stream() + .map(Map.Entry::getValue) + .filter(u -> viewDimension.equals(u.getDimension())); + + // filter by unit type, if desired + if (this.oneWayConversionEnabled) { + fromUnits = fromUnits.filter(u -> UnitType.getType(u, + this::isSemiMetric) != UnitType.METRIC); + toUnits = toUnits.filter(u -> UnitType.getType(u, + this::isSemiMetric) != UnitType.NON_METRIC); + } - ucview.setFromUnitNames(units); - ucview.setToUnitNames(units); + // set unit names + ucview.setFromUnitNames( + fromUnits.map(Unit::getName).collect(Collectors.toSet())); + ucview.setToUnitNames( + toUnits.map(Unit::getName).collect(Collectors.toSet())); } } diff --git a/src/main/java/sevenUnitsGUI/TabbedView.java b/src/main/java/sevenUnitsGUI/TabbedView.java index 3a951ef..098c374 100644 --- a/src/main/java/sevenUnitsGUI/TabbedView.java +++ b/src/main/java/sevenUnitsGUI/TabbedView.java @@ -634,11 +634,10 @@ final class TabbedView implements ExpressionConversionView, UnitConversionView { .setAnchor(GridBagConstraints.LINE_START).build()); final JCheckBox showAllVariations = new JCheckBox( - "Show Duplicates in \"Convert Units\""); - showAllVariations.setSelected(this.presenter.duplicateUnitsShown()); - showAllVariations - .addItemListener(e -> this.presenter.setShowDuplicateUnits( - e.getStateChange() == ItemEvent.SELECTED)); + "Show Duplicate Units & Prefixes"); + showAllVariations.setSelected(this.presenter.duplicatesShown()); + showAllVariations.addItemListener(e -> this.presenter + .setShowDuplicates(e.getStateChange() == ItemEvent.SELECTED)); miscPanel.add(showAllVariations, new GridBagBuilder(0, 1) .setAnchor(GridBagConstraints.LINE_START).build()); |