factor: fix UI layout overlaps and anchor constraints in options menu and update changelog
This commit is contained in:
Bluewhale1337
2026-06-24 22:24:47 +02:00
parent dd9cfc301a
commit 03634b37e4
4 changed files with 147 additions and 126 deletions
+7 -5
View File
@@ -391,7 +391,8 @@ function HealBot_Action_SetHeightWidth(width,height,bwidth)
end end
HealBot_Action:SetHeight(height); HealBot_Action:SetHeight(height);
HealBot_ActionHeight = height; HealBot_ActionHeight = height;
HealBot_Action:SetWidth(width+bwidth+10) local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
HealBot_Action:SetWidth(width+bwidth+bpadding)
end end
function HealBot_Action_SetHealButton(index,unit) function HealBot_Action_SetHealButton(index,unit)
@@ -776,7 +777,7 @@ if not HealBot_IsFighting then
if HealBot_Config.HideOptions==1 then if HealBot_Config.HideOptions==1 then
HealBot_Action_OptionsButton:Hide(); HealBot_Action_OptionsButton:Hide();
else else
HealBot_Action_OptionsButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); HealBot_Action_OptionsButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding);
HealBot_Action_OptionsButton:Show(); HealBot_Action_OptionsButton:Show();
MaxOffsetY = MaxOffsetY+30; MaxOffsetY = MaxOffsetY+30;
end end
@@ -804,8 +805,8 @@ if not HealBot_IsFighting then
HealBot_Action_AbortButton:SetWidth(width) HealBot_Action_AbortButton:SetWidth(width)
HealBot_Action_AbortButton:SetHeight(bheight+abortsize); HealBot_Action_AbortButton:SetHeight(bheight+abortsize);
if HealBot_Config.HideOptions==1 then if HealBot_Config.HideOptions==1 then
HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding);
bar:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); bar:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding);
else else
HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10); HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10);
bar:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10); bar:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10);
@@ -815,7 +816,7 @@ if not HealBot_IsFighting then
HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY+10, bwidth); HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY+bpadding, bwidth);
end end
HealBot_Action_RefreshButtons(); HealBot_Action_RefreshButtons();
end end
@@ -1304,3 +1305,4 @@ end
+62 -56
View File
@@ -1701,62 +1701,68 @@ function HealBot_Options_Buff_Initialize()
func = HealBot_Options_Buff_OnClick, func = HealBot_Options_Buff_OnClick,
value = i value = i
} }
UIDropDownMenu_AddButton(info) UIDropDownMenu_AddButton(info)
end end
end end
end end
function HealBot_Options_Buff_OnClick()
local frameName = UIDROPDOWNMENU_OPEN_MENU function HealBot_Options_Buff_OnClick()
local frame = getglobal(frameName) local frameName = UIDROPDOWNMENU_OPEN_MENU
local myClass = UnitClass("player") local frame = getglobal(frameName)
local id = frame:GetID() local myClass = UnitClass("player")
local id = frame:GetID()
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
HealBot_Config.BuffDropDowns[myClass][id] = this.value if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
HealBot_Config.BuffDropDowns[myClass][id] = this.value
local text = "None"
if this.value > 0 then local text = "None"
text = HealBot_Buff_Spells[myClass][this.value] if this.value > 0 then
end text = HealBot_Buff_Spells[myClass][this.value]
end
UIDropDownMenu_SetSelectedID(frame, this.value + 1)
UIDropDownMenu_SetText(text, frame) UIDropDownMenu_SetSelectedID(frame, this.value + 1)
end UIDropDownMenu_SetText(text, frame)
end
function HealBot_Options_SetBuffs()
local myClass = UnitClass("player") function HealBot_Options_SetBuffs()
if HealBot_Options_BuffWatch then local myClass = UnitClass("player")
HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch) if HealBot_Options_BuffWatch then
HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat) HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch)
if HealBot_Config.BuffWatch == 0 then HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat)
HealBot_Options_BuffWatchInCombat:Disable() if HealBot_Config.BuffWatch == 0 then
else HealBot_Options_BuffWatchInCombat:Disable()
HealBot_Options_BuffWatchInCombat:Enable() else
end HealBot_Options_BuffWatchInCombat:Enable()
end end
end
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
for i = 1, 8 do
local dropDown = getglobal("HealBot_Options_Buff" .. i) for i = 1, 8 do
if dropDown then local dropDown = getglobal("HealBot_Options_Buff" .. i)
local val = HealBot_Config.BuffDropDowns[myClass][i] or 0 if dropDown then
UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize) local val = HealBot_Config.BuffDropDowns[myClass][i] or 0
UIDropDownMenu_SetSelectedID(dropDown, val + 1) UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize)
end UIDropDownMenu_SetSelectedID(dropDown, val + 1)
end end
end
local selfCheck = getglobal("HealBot_Options_BuffSelf" .. i)
if selfCheck then
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[i] then
selfCheck:SetChecked(HealBot_Config.BuffWatchSelf[i])
else
selfCheck:SetChecked(0)
end
end
end
end
function HealBot_Options_FramePaddingS_OnValueChanged(this) function HealBot_Options_FramePaddingS_OnValueChanged(this)
if not HealBot_Config.bpadding then HealBot_Config.bpadding = {} end if not HealBot_Config.bpadding then HealBot_Config.bpadding = {} end
+65 -60
View File
@@ -241,8 +241,8 @@
<CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="20" y="5" /> <AbsDimension x="20" y="-2" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -307,9 +307,9 @@
<CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ManaBarsHealersOnly" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="20" y="-10" /> <AbsDimension x="-20" y="-2" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -321,9 +321,9 @@
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_HideAbort" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_HideAbort" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideOptions" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideOptions" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="5" /> <AbsDimension x="0" y="-2" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -334,9 +334,9 @@
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_QualityRange" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_QualityRange" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideAbort" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideAbort" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="5" /> <AbsDimension x="0" y="-2" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -347,9 +347,9 @@
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_ProtectPvP" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_ProtectPvP" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_QualityRange" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_QualityRange" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="5" /> <AbsDimension x="0" y="-2" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -1739,9 +1739,9 @@
<AbsDimension x="123" y="17" /> <AbsDimension x="123" y="17" />
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FramePaddingS" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="-35" /> <AbsDimension x="0" y="-35" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -1843,9 +1843,9 @@
<AbsDimension x="87" y="20"/> <AbsDimension x="87" y="20"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_FontHeight" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="19" y="-50"/> <AbsDimension x="0" y="-15"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -1858,9 +1858,9 @@
<AbsDimension x="87" y="20"/> <AbsDimension x="87" y="20"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_FontHeight" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="37" y="-50"/> <AbsDimension x="0" y="-15"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -1888,9 +1888,9 @@
<AbsDimension x="87" y="20"/> <AbsDimension x="87" y="20"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_FontHeight" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="37" y="-50"/> <AbsDimension x="0" y="-15"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2575,9 +2575,9 @@
<AbsDimension x="80" y="22"/> <AbsDimension x="80" y="22"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1_Text" relativePoint="RIGHT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Text" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="0"/> <AbsDimension x="0" y="-5"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2588,11 +2588,11 @@
</Scripts> </Scripts>
</Button> </Button>
<!-- Chat Message 2 --> <!-- Chat Message 2 -->
<Frame name="HealBot_Options_ChatMsg2" inherits="UIDropDownMenuTemplate" id="2"> <Frame name="HealBot_Options_ChatMsg2" inherits="UIDropDownMenuTemplate" id="2">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="-70" /> <AbsDimension x="0" y="-90" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2621,9 +2621,9 @@
<AbsDimension x="80" y="22"/> <AbsDimension x="80" y="22"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg2_Text" relativePoint="RIGHT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Text" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="0"/> <AbsDimension x="0" y="-5"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2634,11 +2634,11 @@
</Scripts> </Scripts>
</Button> </Button>
<!-- Chat Message 3 --> <!-- Chat Message 3 -->
<Frame name="HealBot_Options_ChatMsg3" inherits="UIDropDownMenuTemplate" id="3"> <Frame name="HealBot_Options_ChatMsg3" inherits="UIDropDownMenuTemplate" id="3">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="-110" /> <AbsDimension x="0" y="-150" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2667,9 +2667,9 @@
<AbsDimension x="80" y="22"/> <AbsDimension x="80" y="22"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg3_Text" relativePoint="RIGHT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Text" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="0"/> <AbsDimension x="0" y="-5"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2680,11 +2680,11 @@
</Scripts> </Scripts>
</Button> </Button>
<!-- Chat Message 4 --> <!-- Chat Message 4 -->
<Frame name="HealBot_Options_ChatMsg4" inherits="UIDropDownMenuTemplate" id="4"> <Frame name="HealBot_Options_ChatMsg4" inherits="UIDropDownMenuTemplate" id="4">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="-150" /> <AbsDimension x="0" y="-210" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2713,9 +2713,9 @@
<AbsDimension x="80" y="22"/> <AbsDimension x="80" y="22"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg4_Text" relativePoint="RIGHT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Text" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="0"/> <AbsDimension x="0" y="-5"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2726,11 +2726,11 @@
</Scripts> </Scripts>
</Button> </Button>
<!-- Chat Message 5 --> <!-- Chat Message 5 -->
<Frame name="HealBot_Options_ChatMsg5" inherits="UIDropDownMenuTemplate" id="5"> <Frame name="HealBot_Options_ChatMsg5" inherits="UIDropDownMenuTemplate" id="5">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="-190" /> <AbsDimension x="0" y="-270" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2759,9 +2759,9 @@
<AbsDimension x="80" y="22"/> <AbsDimension x="80" y="22"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg5_Text" relativePoint="RIGHT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Text" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="0"/> <AbsDimension x="0" y="-5"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -2857,3 +2857,8 @@
+13 -5
View File
@@ -1,6 +1,9 @@
**HealBotBlue** **HealBotBlue**
By Bluewhale. By Bluewhale.
Original Vanilla HealBot, while being a staple healing addon in Wrath and later expansions, was in its infancy during Vanilla WoW. It was a memory and CPU hog that ate up resources, featured a clunky UI, and offered limited functions. To fix all of the above while still using it as a base framework, I refactored the entire codebase. The monolithic code structure was split to follow a more modern approach (MVC design pattern), making it more stable and easily editable. Additionally, the inefficient AURA scanning was replaced with lightweight (Observer Pattern) reactive programming. It now updates only what is necessary when a trigger fires, rather than performing clumsy, continuous scans of a 40-man raid. By doing so, I managed to throttle down CPU and memory usage significantly, placing it on par with modern addons. Additional functionalities are being added over time to provide a holistic, healer-centered raid frame.
> **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled. > **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled.
### Reporting Errors ### Reporting Errors
@@ -19,6 +22,10 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
### Change Log ### Change Log
**v1.2.1**
* **UI Layout Fixes:** Fixed slider width constraints in the Skin menu causing layout overlaps. Realigned Chat tab buttons to ensure they do not exceed the window bounds. Fixed Color Picker anchors.
* **Menu Cleanup:** Fixed Options panel checkboxes overlapping due to incorrect vertical spacing offsets.
**v1.2** **v1.2**
* **Class Colors & Dimming:** Frame text now inherits class colors with black outline for better visibility. Missing buffs intelligently dim the class color and turn the text yellow. * **Class Colors & Dimming:** Frame text now inherits class colors with black outline for better visibility. Missing buffs intelligently dim the class color and turn the text yellow.
* **Modern Skin Updates:** Fixed white background bugs in modern skins and brightened debuff indicators. * **Modern Skin Updates:** Fixed white background bugs in modern skins and brightened debuff indicators.
@@ -33,11 +40,12 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash. * **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash.
**v1.0** **v1.0**
* **Buff tracking** - Added submenu for tracking buffs on element * **Buff tracking:** Added a submenu for tracking buffs on elements.
* ***Hot tracking with icons** - Hots and DoTs display on player bars * **HoT tracking with icons:** HoTs and DoTs display on player bars.
* **Incoming heals use newer protocol** * **Incoming heals:** Now using a newer protocol.
* **Chat functionalities** - modified chat functionalities for spellcast announcements * **Chat functionalities:** Modified chat functionalities for spellcast announcements.
* **Mana Bars** - Mana bars for healers in the grid added togglable from options menu. * **Mana Bars:** Mana bars for healers in the grid added, toggleable from the options menu.