Skip to content

Consolidate FlexWheelMode::Volume and FlexWheelMode::MasterAf (post-#2925 redundancy) #2986

Description

@ten9876

Context

PR #2925 changed `FlexWheelMode::Volume` to call `applyMasterVolume()`
instead of `SliceModel::setAudioGain()`, fulfilling the #2921 user
request to match SmartSDR's wheel-volume-is-master-volume behavior.

But PR #2888 (AetherControl) had previously added a separate
`FlexWheelMode::MasterAf` mode that already routed to master volume —
intended as a new "master volume" wheel mode while leaving the existing
"Volume" as slice gain.

After #2925 lands, both modes are behaviorally identical:

```cpp
// src/gui/MainWindow.cpp, applyFlexControlWheelAction():
} else if (actionId == "WheelVolume") {
// ... adjust master volume ...
} else if (actionId == "WheelMasterAf") {
// ... adjust master volume (same code) ...
}
```

Two action strings, two enum values, identical behavior.

Why this is a wart

  • The FlexControl + AetherControl wheel-mode selectors expose both
    "Volume" and "MasterAf" as separate choices. Users picking either get
    the same outcome — confusing.
  • The shortcut-actions list in `RadioSetupDialog.cpp` (`WheelVolume`,
    `WheelMasterAf`) is the same redundancy.
  • Anyone reading the code has to verify "these two do the same thing"
    rather than getting the answer from the mode name alone.

Recommended resolution

Remove `FlexWheelMode::MasterAf` and its action string
`WheelMasterAf`.
Reasoning:

If we want to preserve the per-slice gain control that `WheelVolume`
previously offered, add a new `WheelSliceGain` mode rather than
trying to repurpose either of the two existing master-volume modes.

Touch points

File Change
`src/gui/MainWindow.h` Drop `FlexWheelMode::MasterAf` from the enum
`src/gui/MainWindow.cpp` Drop `WheelMasterAf` cases in `applyFlexControlWheelAction` and `handleFlexControlTuneSteps`
`src/gui/RadioSetupDialog.cpp` Drop `WheelMasterAf` from the shortcut-action string list
`src/gui/FlexControlDialog.cpp` Drop the AetherControl popout's MasterAf wheel option
(migration?) If anyone is bound to `WheelMasterAf` in their AppSettings, optionally migrate to `WheelVolume` on load

Migration consideration

A user who bound an Aux button to `WheelMasterAf` in the v26.5.3-with-#2888 release would lose that binding after this consolidation. Options:

  1. Migration on AppSettings load — translate any stored `WheelMasterAf`
    to `WheelVolume` once on first launch. ~5 lines, no user-visible loss.
  2. Just drop it, no migration — bindings to `WheelMasterAf` silently
    fail to bind. Documented in changelog.

Recommend option 1 if anyone has had time to bind in the brief window
between #2888 (today) and this consolidation.

Effort

~1 hour with migration; ~30 min without.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfaceenhancementImprovement to existing featureexternal devicesFlexControl, MIDI, serial port, USB peripheralsgood first issueGood for newcomersmaintainer-reviewRequires maintainer review before any action is takenpriority: lowLow priority

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions