Redesigned radio buttons

This commit is contained in:
Gonçalo Correia 2026-05-15 13:27:31 +01:00
parent cfdef3cc26
commit 26f25d969c

117
UI.lua
View file

@ -84,27 +84,46 @@ local function CreateDropdown(parent, name, labelText, options, defaultIndex, on
end end
end end
-- Helper: Create a radio button (CheckButton with radio texture) -- Helper: Create a custom flat radio button (gold circle when selected, grey when not)
local function CreateRadioButton(parent, name, text, x, y, isChecked, onClick) local function CreateRadioButton(parent, name, text, x, y, isChecked, onClick)
local radio = CreateFrame("CheckButton", name, parent, "UIRadioButtonTemplate") local size = 20
radio:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) local btn = CreateFrame("CheckButton", name, parent)
radio:SetChecked(isChecked) btn:SetSize(size, size)
btn:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y)
local radioText = radio:GetFontString() -- Background (grey when unselected, yellow when selected) — circular via mask
if radioText then local bg = btn:CreateTexture(nil, "BACKGROUND")
radioText:SetText(text) bg:SetAllPoints()
radioText:SetFontObject("GameFontHighlight") bg:SetColorTexture(0.3, 0.3, 0.3, 1)
local mask = btn:CreateMaskTexture()
mask:SetAllPoints()
mask:SetTexture("Interface\\CharacterFrame\\TempPortraitAlphaMask", "CLAMPTOBLACKADDITIVE", "CLAMPTOBLACKADDITIVE")
bg:AddMaskTexture(mask)
btn.checkTex = nil -- unused, kept for compatibility
local function UpdateVisual()
if btn:GetChecked() then
bg:SetColorTexture(0.9, 0.75, 0.2, 1)
else else
local t = radio:CreateFontString(nil, "OVERLAY", "GameFontHighlight") bg:SetColorTexture(0.3, 0.3, 0.3, 1)
t:SetPoint("LEFT", radio, "RIGHT", 4, 0) end
t:SetText(text)
end end
radio:SetScript("OnClick", function(self) btn:SetChecked(isChecked)
UpdateVisual()
local label = btn:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
label:SetPoint("LEFT", btn, "RIGHT", 6, 0)
label:SetText(text)
btn:SetScript("OnClick", function(self)
onClick(self) onClick(self)
UpdateVisual()
end) end)
return radio btn.UpdateVisual = UpdateVisual
return btn
end end
-- Helper: Create a section header (golden text) -- Helper: Create a section header (golden text)
@ -242,6 +261,8 @@ function AltSystem:CreateMainFrame()
AltSystem.State.rollType = rollType AltSystem.State.rollType = rollType
attackRadio:SetChecked(rollType == "attack") attackRadio:SetChecked(rollType == "attack")
defenseRadio:SetChecked(rollType == "defense") defenseRadio:SetChecked(rollType == "defense")
attackRadio.UpdateVisual()
defenseRadio.UpdateVisual()
-- Update roll button text -- Update roll button text
if AltSystem.RollButton then if AltSystem.RollButton then
local label = rollType == "attack" and "Roll Attack" or "Roll Defense" local label = rollType == "attack" and "Roll Attack" or "Roll Defense"
@ -330,6 +351,7 @@ function AltSystem:CreateMainFrame()
AltSystem.State.selectedDefenseIndex = index AltSystem.State.selectedDefenseIndex = index
for i, radio in ipairs(armorRadios) do for i, radio in ipairs(armorRadios) do
radio:SetChecked(i == index) radio:SetChecked(i == index)
radio.UpdateVisual()
end end
end end
@ -361,6 +383,7 @@ function AltSystem:CreateMainFrame()
AltSystem.State.selectedItemIndex = index AltSystem.State.selectedItemIndex = index
for i, radio in ipairs(itemRadios) do for i, radio in ipairs(itemRadios) do
radio:SetChecked(i == index) radio:SetChecked(i == index)
radio.UpdateVisual()
end end
end end
@ -387,40 +410,76 @@ function AltSystem:CreateMainFrame()
--CreateSubLabel(content, "Label", PADDING, yPos) --CreateSubLabel(content, "Label", PADDING, yPos)
--yPos = yPos - 22 --yPos = yPos - 22
-- Shield checkbox -- Shield checkbox (flat square toggle)
local shieldCheck = CreateFrame("CheckButton", "AltSystemShieldCheck", content, "UICheckButtonTemplate") local shieldCheck = CreateFrame("CheckButton", "AltSystemShieldCheck", content)
shieldCheck:SetSize(20, 20)
shieldCheck:SetPoint("TOPLEFT", content, "TOPLEFT", PADDING, yPos) shieldCheck:SetPoint("TOPLEFT", content, "TOPLEFT", PADDING, yPos)
shieldCheck:SetChecked(AltSystem.State.shieldEnabled) shieldCheck:SetChecked(AltSystem.State.shieldEnabled)
local shieldText = shieldCheck:GetFontString() local shieldBg = shieldCheck:CreateTexture(nil, "BACKGROUND")
if shieldText then shieldBg:SetAllPoints()
shieldText:SetText("Shield (+ 1)") shieldBg:SetColorTexture(0.3, 0.3, 0.3, 1)
local shieldCheckMark = shieldCheck:CreateTexture(nil, "ARTWORK")
shieldCheckMark:SetSize(14, 14)
shieldCheckMark:SetPoint("CENTER")
shieldCheckMark:SetTexture("Interface\\RAIDFRAME\\ReadyCheck-Ready")
shieldCheckMark:SetVertexColor(0.9, 0.75, 0.2, 1)
local function UpdateShieldVisual()
if shieldCheck:GetChecked() then
shieldCheckMark:Show()
shieldBg:SetColorTexture(0.25, 0.25, 0.25, 1)
else else
shieldText = shieldCheck:CreateFontString(nil, "OVERLAY", "GameFontHighlight") shieldCheckMark:Hide()
shieldText:SetPoint("LEFT", shieldCheck, "RIGHT", 2, 0) shieldBg:SetColorTexture(0.3, 0.3, 0.3, 1)
shieldText:SetText("Shield (+ 1)")
end end
end
UpdateShieldVisual()
local shieldLabel = shieldCheck:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
shieldLabel:SetPoint("LEFT", shieldCheck, "RIGHT", 6, 0)
shieldLabel:SetText("Shield (+ 1)")
shieldCheck:SetScript("OnClick", function(self) shieldCheck:SetScript("OnClick", function(self)
AltSystem.State.shieldEnabled = self:GetChecked() AltSystem.State.shieldEnabled = self:GetChecked()
UpdateShieldVisual()
end) end)
-- Pet checkbox -- Pet checkbox (flat square toggle)
local petCheck = CreateFrame("CheckButton", "AltSystemPetSummonCheck", content, "UICheckButtonTemplate") local petCheck = CreateFrame("CheckButton", "AltSystemPetSummonCheck", content)
petCheck:SetSize(20, 20)
petCheck:SetPoint("LEFT", shieldCheck, "RIGHT", 80, 0) petCheck:SetPoint("LEFT", shieldCheck, "RIGHT", 80, 0)
petCheck:SetChecked(AltSystem.State.petSummonEnabled) petCheck:SetChecked(AltSystem.State.petSummonEnabled)
local petText = petCheck:GetFontString() local petBg = petCheck:CreateTexture(nil, "BACKGROUND")
if petText then petBg:SetAllPoints()
petText:SetText("Pet (+d5)") petBg:SetColorTexture(0.3, 0.3, 0.3, 1)
local petCheckMark = petCheck:CreateTexture(nil, "ARTWORK")
petCheckMark:SetSize(14, 14)
petCheckMark:SetPoint("CENTER")
petCheckMark:SetTexture("Interface\\RAIDFRAME\\ReadyCheck-Ready")
petCheckMark:SetVertexColor(0.9, 0.75, 0.2, 1)
local function UpdatePetVisual()
if petCheck:GetChecked() then
petCheckMark:Show()
petBg:SetColorTexture(0.25, 0.25, 0.25, 1)
else else
petText = petCheck:CreateFontString(nil, "OVERLAY", "GameFontHighlight") petCheckMark:Hide()
petText:SetPoint("LEFT", petCheck, "RIGHT", 2, 0) petBg:SetColorTexture(0.3, 0.3, 0.3, 1)
petText:SetText("Pet (+d5)")
end end
end
UpdatePetVisual()
local petLabel = petCheck:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
petLabel:SetPoint("LEFT", petCheck, "RIGHT", 6, 0)
petLabel:SetText("Pet (+d5)")
petCheck:SetScript("OnClick", function(self) petCheck:SetScript("OnClick", function(self)
AltSystem.State.petSummonEnabled = self:GetChecked() AltSystem.State.petSummonEnabled = self:GetChecked()
UpdatePetVisual()
end) end)
yPos = yPos - ROW_HEIGHT - SECTION_GAP yPos = yPos - ROW_HEIGHT - SECTION_GAP