Skip to content

feat: redesign options UI for natural UX flow (#124)#144

Merged
Xerrion merged 1 commit into
masterfrom
feat/124-options-ui-redesign
Apr 17, 2026
Merged

feat: redesign options UI for natural UX flow (#124)#144
Xerrion merged 1 commit into
masterfrom
feat/124-options-ui-redesign

Conversation

@Xerrion
Copy link
Copy Markdown
Owner

@Xerrion Xerrion commented Apr 17, 2026

Summary

Redesigns the options UI across all tabs for a more natural, intuitive UX flow. Pure presentation changes - no config key names or defaults are modified.

Changes

Roll Frame tab (was "Loot Roll")

  • Renamed tab to "Roll Frame" to match user goals, not module name
  • Split the overloaded "Layout" section into four focused sections: Frame (dimensions/scale), Timer Bar (style/colors/texture), Buttons (sizing/spacing), Icon (position/offsets)
  • All layout sections contextually disabled when "Enable Custom Roll Frame" is off
  • Sub-state correctly restored on re-enable (compact mode, timer bar style, border toggle, color mode, icon position)
  • Lock Position and Hide After Voting now also disabled when roll frame is off

Loot Window tab

  • Lock Position, Position at Cursor, and all Layout sliders contextually disabled when "Enable Custom Loot Window" is off

History tab

  • Split into three sections: History (enable + auto show), Recording (track direct loot + min quality filter), Display (show roll details + layout sliders)
  • Added missing Lock Position toggle for the history frame

Auto-Loot tab

  • Renamed "Smart Auto-Loot" section header to "Settings" (less redundant with tab label)
  • Minimum Quality dropdown contextually disabled when auto-loot is off

Animation tab

  • Renamed "Animation" section header to "Global Settings" (less redundant with tab label)
  • Duration sliders and all animation type dropdowns contextually disabled when animations are off

Testing

  • luacheck . passes with 0 new warnings
  • Manual in-game test: open /dl config, verify each tab's disable behavior, section grouping, and label clarity

Closes #124

Summary by CodeRabbit

  • New Features

    • Added Lock Position toggle to control history frame positioning.
  • Improvements

    • Reorganized options UI with clearer section groupings across multiple tabs.
    • Enhanced control dependencies: related settings now properly enable/disable together based on parent toggles.
    • Improved labeling for better clarity (e.g., "Roll Frame" tab naming and "Global Settings" organization).

- Rename "Loot Roll" tab to "Roll Frame"
- Split overloaded Layout section in LootRollTab into four focused
  sections: Frame, Timer Bar, Buttons, Icon
- Add contextual disabling in LootRollTab: all layout widgets disabled
  when Enable Custom Roll Frame is off; sub-state (compact mode, timer
  bar style, border, color mode, icon position) correctly re-applied on
  re-enable via reapplySubState closure pattern
- Add contextual disabling in LootWindowTab: Lock Position, Position at
  Cursor, and layout sliders disabled when Enable Custom Loot Window off
- Restructure HistoryTab into three sections: History (master controls),
  Recording (what to capture), Display (how it looks); add missing Lock
  Position toggle for history frame
- Rename AutoLootTab Settings section (was "Smart Auto-Loot"); add
  contextual disabling for Minimum Quality when auto-loot is off
- Rename AnimationTab "Animation" section to "Global Settings"; add
  contextual disabling for duration sliders and animation dropdowns when
  animations are off
- Add 9 new enUS locale keys for new section headers and tooltips

No config key changes; purely presentation/layout.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 17, 2026

📝 Walkthrough

Walkthrough

This pull request restructures the options UI across multiple tabs, introducing clearer section groupings that align settings by purpose rather than implementation. New locale keys are added, and a pattern of contextual enable/disable is applied where dependent controls are disabled when their parent toggle is off.

Changes

Cohort / File(s) Summary
Locale Keys
DragonLoot/Locales/enUS.lua
Added 9 new English locale string keys for section headers ("Settings", "Display", "Recording", "Global Settings") and control groups ("Buttons", "Frame", "Icon", "Timer Bar") across multiple tabs.
Simple Enable/Disable Controls
DragonLoot_Options/Tabs/AnimationTab.lua, DragonLoot_Options/Tabs/AutoLootTab.lua, DragonLoot_Options/Tabs/LootWindowTab.lua
Introduced tracking of UI widgets in collections and wired enable/disable behavior to parent toggles. When the parent toggle changes state, dependent controls are disabled/enabled accordingly. Each file follows the same pattern with minor variations in number of tracked controls.
Complex Layout Restructuring
DragonLoot_Options/Tabs/LootRollTab.lua, DragonLoot_Options/Tabs/HistoryTab.lua
Replaced monolithic "Layout" sections with granular, purpose-driven sections (LootRollTab: Frame, Timer Bar, Buttons, Icon; HistoryTab: History, Recording, Display). LootRollTab introduces reapplySubState callbacks to recompute dependent enable/disable states. HistoryTab restructures control flow and removes old layout section entirely.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

options, localization

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title follows Conventional Commit format (feat: description) and accurately summarizes the main change: redesigning the options UI for improved UX flow.
Linked Issues check ✅ Passed All code changes directly address the objectives from issue #124: tab renames match user goals, sections reorganized by user intent, contextual disabling of dependent options, improved labels, and no config key changes.
Out of Scope Changes check ✅ Passed All changes are in-scope: locale key additions, section reorganization, contextual disabling logic, and sub-state restoration. No unrelated features or refactoring outside the UI redesign objectives.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Xerrion Xerrion added C-Usability UX improvement, better defaults, polish A-Config Options table, config window, AceDB P-All-Versions Affects all supported WoW versions D-Complex Multiple files or systems involved labels Apr 17, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
DragonLoot_Options/Tabs/LootRollTab.lua (1)

665-684: Initial-state logic matches the runtime handler — nice.

Worth noting that when enabled == true the individual creation-time SetDisabled calls (lines 237, 264, 347, 366, 426, 463, 608) already set correct sub-state, so the reapplySubState loop here is a benign redundancy. If you want to trim a few cycles you could drop one of the two, but it's harmless as-is and keeps the init path symmetric with the toggle path.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@DragonLoot_Options/Tabs/LootRollTab.lua` around lines 665 - 684, The init
path re-applies sub-state redundantly: the
CreateRollFrameSection/CreateFrameSection/CreateTimerBarSection/CreateButtonsSection/CreateIconSection
functions already call widget:SetDisabled(...) during creation, so when
db.profile.rollFrame.enabled is true you can remove the reapplySubState loop;
update the conditional after creating layoutWidgets so the "else" branch skips
the for _, fn in ipairs(reapplySubState) do fn() end loop (leaving the initial
disabled-state loop when enabled == false intact) to avoid duplicate sub-state
work.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@DragonLoot_Options/Tabs/LootRollTab.lua`:
- Around line 665-684: The init path re-applies sub-state redundantly: the
CreateRollFrameSection/CreateFrameSection/CreateTimerBarSection/CreateButtonsSection/CreateIconSection
functions already call widget:SetDisabled(...) during creation, so when
db.profile.rollFrame.enabled is true you can remove the reapplySubState loop;
update the conditional after creating layoutWidgets so the "else" branch skips
the for _, fn in ipairs(reapplySubState) do fn() end loop (leaving the initial
disabled-state loop when enabled == false intact) to avoid duplicate sub-state
work.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 0831a433-5acf-440e-b23a-193c93393ecd

📥 Commits

Reviewing files that changed from the base of the PR and between c7c54be and 52c5ff3.

📒 Files selected for processing (6)
  • DragonLoot/Locales/enUS.lua
  • DragonLoot_Options/Tabs/AnimationTab.lua
  • DragonLoot_Options/Tabs/AutoLootTab.lua
  • DragonLoot_Options/Tabs/HistoryTab.lua
  • DragonLoot_Options/Tabs/LootRollTab.lua
  • DragonLoot_Options/Tabs/LootWindowTab.lua

@Xerrion Xerrion merged commit 13cb564 into master Apr 17, 2026
3 checks passed
@Xerrion Xerrion deleted the feat/124-options-ui-redesign branch April 17, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Config Options table, config window, AceDB C-Usability UX improvement, better defaults, polish D-Complex Multiple files or systems involved localization options P-All-Versions Affects all supported WoW versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Redesign options UI for natural UX flow

1 participant