summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnitsGUI
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/sevenUnitsGUI')
-rw-r--r--src/main/java/sevenUnitsGUI/Presenter.java71
-rw-r--r--src/main/java/sevenUnitsGUI/TabbedView.java9
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());