File Details
v1.3.0
- R
- Apr 6, 2026
- 55.45 KB
- 7
- 12.0.1
- Retail
File Name
MathWroQOL-v1.3.0.zip
Supported Versions
- 12.0.1
MathWro QOL
v1.3.0 (2026-04-06)
Full Changelog Previous Releases
- Merge pull request #1 from MathWro-WoW/feat/combat-tracker-fixes
feat: Combat Tracker settings overhaul - chore: remove notes2.txt from tracking (already in .gitignore)
- docs: update README with Combat Tracker, Combat Logging, and Edit Mode features
- fix(config): dynamic scroll height and conditional layout visibility
- Replace hardcoded scroll height (2600px) with RecalcScrollHeight that
measures actual content on each panel show - Replace hardcoded gated container height (1200px) with recalcGatedHeight
that sizes from visible children - Add FindScrollChildAndRecalc utility to bubble scroll recalc up the
frame hierarchy from any child - Hook scroll recalc into collapsible section expand/collapse, merge/layout
toggles, and item order list changes - Move 'Merge into' before Layout in section settings; hide Layout, Icons
per row, and Anchor direction when merged - Show 'Icons per row' only when layout is grid (rename from Grid columns)
- Fix MakeOptionRow to use single RIGHT anchor, avoiding WoW Y-value
averaging with conflicting anchor points - Forward-declare mergeRow/layoutRow/gridRow/growDirRow/sizeSep to fix
Lua 5.1 closure scoping
- Replace hardcoded scroll height (2600px) with RecalcScrollHeight that
- feat(consumables): add reorderable item list with rank icons and ElvUI arrow support
Add nested collapsible 'Item Display Order' section to consumables config
panel. Users can reorder all tracked items (predefined + custom) with
up/down arrows. Order persists in itemOrder SavedVariable and controls
in-game icon display.- Dynamic rank detection via C_TradeSkillUI for custom items
- Midnight-style quality diamonds (Tier1 silver, Tier2 gold)
- ElvUI-aware arrow textures with common-icon-arrow fallback
- Expose CONSUMABLE_IDS, BuildDefaultOrder, sections on CombatTracker
- Add itemOrder default to Core.lua savedvariables schema
- fix(consumables): update potion IDs to Midnight and add fleeting priority
Replace TWW potion IDs with Midnight equivalents (Silvermoon Health,
Lightfused Mana, Potion of Recklessness, Light's Potential). Add fleeting
variants for combat and mana potions with priority logic that suppresses
the regular version when the fleeting equivalent is in bags. - feat(config): restructure settings UI with cards, collapsible sections, and layout helpers
Rewrites Config.lua settings panels to use MakeCard, MakeCollapsibleSection,
MakeOptionRow, and MakePanelScaffold helpers for a cleaner, more organized UI.
Key fixes:- MakeSeparator now wraps texture in a Frame to resolve deferred anchor issues
(bare Textures with two-point anchoring return nil from GetBottom) - MakeCollapsibleSection uses atlas arrows instead of Unicode (font support)
- MakeCard content uses TOPLEFT + RIGHT instead of conflicting TOPRIGHT
- BuildSectionBlock uses MakeOptionRow for consistent label/control alignment
Updates AGENTS.md and copilot-instructions.md with new helper docs and pitfalls.
- MakeSeparator now wraps texture in a Frame to resolve deferred anchor issues
- Ignore superpowers
- docs(agents): add performance rules section; ignore notes.txt
- Document OnUpdate prohibition, BAG_UPDATE debounce pattern,
cooldown frame cache pattern, and event scope guidelines in AGENTS.md - Add notes.txt to .gitignore
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Document OnUpdate prohibition, BAG_UPDATE debounce pattern,
- feat(combat-tracker): anchor direction, stack counter, cooldown text, custom item tracker
- Add growDirection per section (Grow Right/Left/Down/Up/Center H/V): LayoutSection
snapshots the stable edge before resize and re-anchors after so icons don't drift
when count changes - Add custom cooldown countdown text (cdCountText, centered) replacing built-in
CooldownFrame numbers; 0.1 Hz ticker drives updates; formats Xh/Xm/XX/X.X - Add stack counter (countText, bottom-right) on all buttons; consumables shows
count > 1 automatically - Per-section font config (enabled checkbox + size slider + font dropdown) for both
stack counter and cooldown text, shared via CT:ApplySectionFont / ApplyCooldownFont - Redesign custom item tracker: input+Add button, live icon/name list with × remove
- Fix C_Item.GetItemCooldown crash in Midnight (returns scalars, not table)
- Fix hideIfMissing nil-safety: nil now treated as true (hide missing items)
- Fix dropdown arrow: Arrow-Down-Up texture, gold colour, flips on open/close
- Apply ElvUI HandleSliderFrame to game menu scale slider
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Add growDirection per section (Grow Right/Left/Down/Up/Center H/V): LayoutSection
- feat(config): apply ElvUI skin to Config.lua widgets when ElvUI is loaded
Add ElvSkin() helper; apply HandleCheckBox to all checkboxes, HandleSliderFrame
to MakeSliderWithInput sliders, ElvUI media colours to displayBtn/dropdown btn
and popup backdrops, and HandleButton to the Combat Tracker Reset Positions button.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(config): prevent multiple dropdown popups from being open simultaneously
- Add module-level _openDropdownPopups table to track open dropdown popups
- Register each new popup in the table when created
- Add OnShow hook that closes all other open popups when any dropdown opens
- Fix frame level: replace relative calculation with explicit safe value of 2
Fixes issue where dropdown menus could stack and remain visible simultaneously.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- refactor(config): replace UIDropDownMenuTemplate with custom dropdown widget
Eliminates the built-in arrow-button overlap and checkbox-square visual
bugs by building a bespoke backdrop button + floating popup list entirely
from scratch. All three call-site SetPoint offsets updated from -16 to 8
now that the template's invisible padding is gone.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - style(combat-tracker): Improve visual styling for consistency and clarity
- Section headers (RACIALS, TRINKETS, CONSUMABLES, MASQUE SKINNING): changed text color to gold (1, 0.82, 0, 1)
- Separators: darkened from (0.4, 0.4, 0.4, 0.5) to (0.3, 0.3, 0.3, 0.8) for better contrast
- MakeSliderWithInput labels: switched from GameFontHighlightSmall to GameFontNormalSmall for bolder appearance
- Combat Tracker panel title: added gold text color (1, 0.82, 0, 1) to match WoW standard category title styling
- Global enable checkbox: increased top spacing from y=-12 to y=-16 for better breathing room
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- fix(combat-tracker): wire EditModeNudge to LibEditMode CT frames
Hook the LibEditMode selection overlay OnMouseDown to call
EditModeNudge:AttachToFrame so nudge arrows appear when clicking a CT
anchor frame in Edit Mode. Arrow OnClick now manually offsets frames
that lack ProcessMovementKey (LibEditMode frames) instead of no-oping.
Expose addon.editModeNudge and add the public AttachToFrame method.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - refactor(config): replace MakeCycleButton with MakeDropdown (UIDropDownMenuTemplate)
Removes the click-to-cycle button pattern and replaces it with native
WoW UIDropDownMenu dropdowns for Layout, Grid Columns, and Merge Into
selectors in the Combat Tracker config panel. Applies -16px LEFT offset
to compensate for UIDropDownMenuTemplate's built-in internal padding.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(edit-mode-nudge): make coordinate label screen-centre-relative
UpdateCoordLabel now converts frame position to centre-relative offsets
using GetCenter() instead of GetPoint() offsets. Coordinates are now
always relative to screen centre (X=0, Y=0) regardless of the frame's
anchor point.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - feat(combat-tracker): add Reset Positions button to config panel
Inserts a UIPanelButtonTemplate button between the global enable
checkbox and the first separator. Clicking it writes the default
centre-spread positions for racials/trinkets/consumables frames into
addon.db and calls NotifyFeature to re-apply immediately.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): populate _allRacialNames at login so racial toggles appear immediately
Config panel now reads _allRacialNames (populated in Initialize() from static
RACIAL_DATA without an IsSpellKnown check) instead of _racialEntries (which
requires RebuildIcons() to have run with IsSpellKnown returning true, which
may not happen until after the first spell cast at login).
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(config): /mqol slash command now opens General sub-panel
- Store generalCat return value from RegisterCanvasLayoutSubcategory
- Update slash command to use Settings.OpenToCategory(generalCat:GetID())
- Fix fallback to use InterfaceOptionsFrame_OpenToCategory(generalPanel)
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- fix(combat-tracker): update default values
- Disable combatTracker by default (enabled: false)
- Enable onUseOnly for trinkets frame (onUseOnly: true)
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- fix(combat-tracker): click-to-edit slider value with FontString+EditBox
Show value as a FontString (always renders). Clicking the value area
swaps to a focused EditBox — focused EditBoxes always paint their text,
avoiding WoW's unfocused EditBox repaint bug. On Enter/focus-loss the
value is committed, EditBox hides, and FontString updates.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): replace slider EditBox with FontString for value display
WoW EditBox does not repaint text when SetText is called before the box
has ever been focused, regardless of template or workarounds. FontString
always renders on SetText. The slider (step=1, range 16-80) is sufficient
for precision without a typed input field.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): force EditBox repaint via Hide/Show in Refresh
WoW EditBox does not redraw its text region after SetText unless a
render event is triggered. Toggling Hide()/Show() within the same
frame forces a fresh render pass, making the value visible immediately.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): replace InputBoxTemplate with plain EditBox+backdrop
InputBoxTemplate's OnShow handler prevents SetText from rendering until
the box is focused. Using a plain EditBox with manual backdrop/font means
text renders immediately on SetText with no template interference.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): remove SetNumeric to fix invisible slider input text
SetNumeric(true) suppresses text repainting until the EditBox is focused.
applyInput() already validates with tonumber()+clamp so the constraint
is unnecessary. Removing it lets the text render immediately on show.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): populate slider input on EditBox OnShow
Hook input:HookScript("OnShow") to set the text from DB after
InputBoxTemplate's own OnShow fires, which was clearing any text
set earlier. panel OnShow was unreliable for Settings subcategories.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): defer panel refresh past child OnShow events
InputBoxTemplate fires OnShow on child frames after the parent panel's
OnShow, clearing any text set by Refresh(). Wrapping the refresh loop
in C_Timer.After(0) defers it to the next tick so all sub-frame OnShow
events have already fired before we populate slider input boxes.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): initialize sliders to DB value at creation time
MakeSliderWithInput now calls Refresh() immediately after construction,
matching the pattern MakeCycleButton already uses. Fixes blank input boxes
on first panel open when the Settings API doesn't fire OnShow on the frame.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - feat(combat-tracker): integrate LibEditMode for native Edit Mode glow and drag
Bundle LibStub + LibEditMode (from AbilityTimeline, MINOR=15) into Libs/.
Replace the custom blue-backdrop overlay with LibEditMode:AddFrame(), which
provides the real gold-glow selection highlight and drag normalization used
by WoW's native Edit Mode UI. Removes UpdateEditOverlays() and the manual
hooksecurefunc Enter/ExitEditMode hooks from CombatTracker.lua.
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com - fix(combat-tracker): Edit Mode overlay for drag; lock movement outside Edit Mode
- fix(combat-tracker): forward drag from icon buttons to section frame
- fix(combat-tracker): use C_Spell/C_Item namespace APIs for cooldown queries (Midnight)
- fix(combat-tracker): replace goto/continue with if-block (WoW is Lua 5.1)
- fix(combat-tracker): correct racial hiddenSpells toggle logic
- feat(combat-tracker): options panel with sliders, cycle buttons, racial toggles
- feat(combat-tracker): consumables section with debounced bag scan
- feat(combat-tracker): trinket section with on-use detection and cooldown
- feat(combat-tracker): racial section with cooldown tracking
- feat(combat-tracker): frame engine, layout, button factory, Initialize/Apply, Masque
- feat(combat-tracker): scaffold TOC entries and Core defaults

