From ea542b6f93f90235b04aa233869978774b1e790e Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Mon, 27 Jun 2022 02:19:48 +1000 Subject: In settings, use sliders for tile size/spacing --- src/components/SettingsModal.vue | 145 ++++++++++++++------------------------- 1 file changed, 52 insertions(+), 93 deletions(-) diff --git a/src/components/SettingsModal.vue b/src/components/SettingsModal.vue index 83b42af..f505c99 100644 --- a/src/components/SettingsModal.vue +++ b/src/components/SettingsModal.vue @@ -12,46 +12,9 @@ export default defineComponent({ uiOpts: {type: Object as PropType, required: true}, }, data(){ - // For making subsets of various options' values available for user selection - let userLayoutTypeVals = [ // Holds pairs of labels with option values - ['Yes', 'sweep'], - ['No', 'rect'] - ]; - let userTileSpacingVals = [ - ['Small', 6], - ['Medium', 10], - ['Large', 20] - ]; - let userTileSizeVals = [ - ['Default', 50, 200], - ['Small', 50, 50], - ['Medium', 100, 100], - ['Large', 200, 200], - ['Flexible', 0, 400], - ]; - // Warn if user-available values don't include the active option value (indicates a developer mistake) - let layoutTypeIdx = userLayoutTypeVals.findIndex(([, optVal]) => optVal == this.lytOpts.layoutType); - if (layoutTypeIdx == -1){ - console.log("WARNING: Initial layoutType option value not included in user setting values"); - } - let tileSpacingIdx = userTileSpacingVals.findIndex(([, optVal]) => optVal == this.lytOpts.tileSpacing); - if (tileSpacingIdx == -1){ - console.log("WARNING: Initial tileSpacing option value not included in user setting values"); - } - let tileSizeValIdx = userTileSizeVals.findIndex( - ([, min, max]) => min == this.lytOpts.minTileSz && max == this.lytOpts.maxTileSz - ); - if (tileSizeValIdx == -1){ - console.log("WARNING: Initial minTileSz/maxTileSz option value not included in user setting values"); - } - // return { - userLayoutTypeVals, - userLayoutType: userLayoutTypeVals[layoutTypeIdx != -1 ? layoutTypeIdx : 0][0], - userTileSpacingVals, - userTileSpacing: userTileSpacingVals[tileSpacingIdx != -1 ? tileSpacingIdx : 0][0], - userTileSizeVals, - userTileSize: userTileSizeVals[tileSizeValIdx != -1 ? tileSizeValIdx : 0][0], + sweepLeaves: this.lytOpts.layoutType == 'sweep', + // For making only two of 'layoutType's values available for user selection }; }, computed: { @@ -70,23 +33,23 @@ export default defineComponent({ } }, onSettingChg(setting: string){ + // Maintain min/max-tile-size consistency + if (setting == 'minTileSz' || setting == 'maxTileSz'){ + let minInput = this.$refs.minTileSzInput as HTMLInputElement; + let maxInput = this.$refs.maxTileSzInput as HTMLInputElement; + if (setting == 'minTileSz' && Number(minInput.value) > Number(maxInput.value)){ + this.lytOpts.maxTileSz = this.lytOpts.minTileSz; + } else if (setting == 'maxTileSz' && Number(maxInput.value) < Number(minInput.value)){ + this.lytOpts.minTileSz = this.lytOpts.maxTileSz; + } + } + // this.$emit('setting-chg', setting); }, }, watch: { - // Propagate option-subsetting user-settings to options - userLayoutType(newVal, oldVal){ - let [,optVal] = this.userLayoutTypeVals.find(([val,]) => val == newVal)!; - this.lytOpts.layoutType = optVal as LayoutOptions['layoutType']; - }, - userTileSpacing(newVal, oldVal){ - let [,optVal] = this.userTileSpacingVals.find(([val,]) => val == newVal)!; - this.lytOpts.tileSpacing = optVal as LayoutOptions['tileSpacing']; - }, - userTileSize(newVal, oldVal){ - let [,min,max] = this.userTileSizeVals.find(([val,,]) => val == newVal)!; - this.lytOpts.minTileSz = min as LayoutOptions['minTileSz']; - this.lytOpts.maxTileSz = max as LayoutOptions['maxTileSz']; + sweepLeaves(newVal, oldVal){ + this.lytOpts.layoutType = newVal ? 'sweep' : 'rect'; }, }, components: {RButton, CloseIcon, }, @@ -103,63 +66,59 @@ export default defineComponent({

Settings

Layout

-
-
+
+
Sweep leaves to side
    -
  • - -
  • +
  • +
-
+
Sweep into parent
    -
  • -
  • -
  • -
-
-
- Tile Spacing -
    -
  • - -
  • -
-
-
- Tile Size -
    -
  • - -
  • +
  • +
  • +
+
+ + + +
{{lytOpts.minTileSz}} px
+ + + +
{{lytOpts.maxTileSz}} px
+ + + +
{{lytOpts.tileSpacing}} px
+

Timing

-
+
- -
{{uiOpts.transitionDuration}} ms
+ +
{{uiOpts.transitionDuration}} ms
- -
{{uiOpts.autoActionDelay}} ms
+ +
{{uiOpts.autoActionDelay}} ms
-- cgit v1.2.3