diff --git a/Modules/Config.lua b/Modules/Config.lua index 1b763ae..443cf68 100644 --- a/Modules/Config.lua +++ b/Modules/Config.lua @@ -7,176 +7,212 @@ local configFrame = CreateFrame("Frame", "HeimdallConfig", UIParent) ---@diagnostic disable-next-line: missing-fields shared.Config = {} function shared.Config.Init() - configFrame:SetSize(256 + 256, 512) - configFrame:SetPoint("CENTER") - configFrame:SetFrameStrata("HIGH") - configFrame:EnableMouse(true) - configFrame:SetMovable(true) - configFrame:SetResizable(false) - configFrame:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 4, - edgeSize = 4, - insets = { left = 4, right = 4, top = 4, bottom = 4 } - }) - configFrame:SetBackdropColor(0, 0, 0, 0.8) - configFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) + ---@class UIElement + shared.UIElement = { + ---@return UIElement + new = function() + local self = setmetatable({}, { + __index = shared.UIElement + }) + return self + end + } - configFrame:SetMovable(true) - configFrame:EnableMouse(true) - configFrame:RegisterForDrag("LeftButton") - configFrame:SetScript("OnDragStart", function(self) - self:StartMoving() - end) - configFrame:SetScript("OnDragStop", function(self) - self:StopMovingOrSizing() - end) - configFrame:SetScript("OnShow", function(self) - self:SetScale(1) - end) + configFrame:SetSize(256 + 256, 512) + configFrame:SetPoint("CENTER") + configFrame:SetFrameStrata("HIGH") + configFrame:EnableMouse(true) + configFrame:SetMovable(true) + configFrame:SetResizable(false) + configFrame:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 4, + edgeSize = 4, + insets = { + left = 4, + right = 4, + top = 4, + bottom = 4 + } + }) + configFrame:SetBackdropColor(0, 0, 0, 0.8) + configFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) - local title = configFrame:CreateFontString(nil, "ARTWORK", "GameFontNormal") - title:SetText("Heimdall Config") - title:SetPoint("TOP", configFrame, "TOP", 0, -8) + configFrame:SetMovable(true) + configFrame:EnableMouse(true) + configFrame:RegisterForDrag("LeftButton") + configFrame:SetScript("OnDragStart", function(self) + self:StartMoving() + end) + configFrame:SetScript("OnDragStop", function(self) + self:StopMovingOrSizing() + end) + configFrame:SetScript("OnShow", function(self) + self:SetScale(1) + end) - local spotterConfigFrame = CreateFrame("Frame", "HeimdallSpotterConfig", configFrame) - spotterConfigFrame:SetSize(256, 128) - spotterConfigFrame:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 8, -24) - spotterConfigFrame:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 4, - edgeSize = 4, - insets = { left = 4, right = 4, top = 4, bottom = 4 } - }) - spotterConfigFrame:SetBackdropColor(0, 0, 0, 0.8) - spotterConfigFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) + local title = configFrame:CreateFontString(nil, "ARTWORK", "GameFontNormal") + title:SetText("Heimdall Config") + title:SetPoint("TOP", configFrame, "TOP", 0, -8) - local spotterEnableButton = CreateFrame("CheckButton", "HeimdallSpotterEnable", spotterConfigFrame, - "UICheckButtonTemplate") - spotterEnableButton.text = spotterEnableButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterEnableButton.text:SetText("Enable Spotter") - spotterEnableButton.text:SetPoint("LEFT", spotterEnableButton, "RIGHT", 0, 0) - spotterEnableButton:SetSize(24, 24) - spotterEnableButton:SetPoint("TOPLEFT", spotterConfigFrame, "TOPLEFT", 4, -4) - spotterEnableButton:SetChecked(Heimdall_Data.config.spotter.enabled) - spotterEnableButton:SetScript("OnClick", function() - Heimdall_Data.config.spotter.enabled = spotterEnableButton:GetChecked() - end) + local spotterConfigFrame = CreateFrame("Frame", "HeimdallSpotterConfig", configFrame) + spotterConfigFrame:SetSize(256, 128) + spotterConfigFrame:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 8, -24) + spotterConfigFrame:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 4, + edgeSize = 4, + insets = { + left = 4, + right = 4, + top = 4, + bottom = 4 + } + }) + spotterConfigFrame:SetBackdropColor(0, 0, 0, 0.8) + spotterConfigFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) - local spotterEveryoneButton = CreateFrame("CheckButton", "HeimdallSpotterEveryone", spotterConfigFrame, - "UICheckButtonTemplate") - spotterEveryoneButton.text = spotterEveryoneButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterEveryoneButton.text:SetText("Everyone") - spotterEveryoneButton.text:SetPoint("LEFT", spotterEveryoneButton, "RIGHT", 0, 0) - spotterEveryoneButton:SetSize(24, 24) - spotterEveryoneButton:SetPoint("LEFT", spotterEnableButton, "LEFT", 128, 0) - spotterEveryoneButton:SetChecked(Heimdall_Data.config.spotter.everyone) - spotterEveryoneButton:SetScript("OnClick", function() - Heimdall_Data.config.spotter.everyone = spotterEveryoneButton:GetChecked() - end) + local spotterEnableButton = CreateFrame("CheckButton", "HeimdallSpotterEnable", spotterConfigFrame, + "UICheckButtonTemplate") + spotterEnableButton.text = spotterEnableButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterEnableButton.text:SetText("Enable Spotter") + spotterEnableButton.text:SetPoint("LEFT", spotterEnableButton, "RIGHT", 0, 0) + spotterEnableButton:SetSize(24, 24) + spotterEnableButton:SetPoint("TOPLEFT", spotterConfigFrame, "TOPLEFT", 4, -4) + spotterEnableButton:SetChecked(Heimdall_Data.config.spotter.enabled) + spotterEnableButton:SetScript("OnClick", function() + Heimdall_Data.config.spotter.enabled = spotterEnableButton:GetChecked() + end) - local spotterHostileButton = CreateFrame("CheckButton", "HeimdallSpotterHostile", spotterConfigFrame, - "UICheckButtonTemplate") - spotterHostileButton.text = spotterHostileButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterHostileButton.text:SetText("Hostile") - spotterHostileButton.text:SetPoint("LEFT", spotterHostileButton, "RIGHT", 0, 0) - spotterHostileButton:SetSize(24, 24) - spotterHostileButton:SetPoint("LEFT", spotterEnableButton, "LEFT", 0, -24) - spotterHostileButton:SetChecked(Heimdall_Data.config.spotter.hostile) - spotterHostileButton:SetScript("OnClick", function() - Heimdall_Data.config.spotter.hostile = spotterHostileButton:GetChecked() - end) + local spotterEveryoneButton = CreateFrame("CheckButton", "HeimdallSpotterEveryone", spotterConfigFrame, + "UICheckButtonTemplate") + spotterEveryoneButton.text = spotterEveryoneButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterEveryoneButton.text:SetText("Everyone") + spotterEveryoneButton.text:SetPoint("LEFT", spotterEveryoneButton, "RIGHT", 0, 0) + spotterEveryoneButton:SetSize(24, 24) + spotterEveryoneButton:SetPoint("LEFT", spotterEnableButton, "LEFT", 128, 0) + spotterEveryoneButton:SetChecked(Heimdall_Data.config.spotter.everyone) + spotterEveryoneButton:SetScript("OnClick", function() + Heimdall_Data.config.spotter.everyone = spotterEveryoneButton:GetChecked() + end) - local spotterAllianceButton = CreateFrame("CheckButton", "HeimdallSpotterAlliance", spotterConfigFrame, - "UICheckButtonTemplate") - spotterAllianceButton.text = spotterAllianceButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterAllianceButton.text:SetText("Alliance") - spotterAllianceButton.text:SetPoint("LEFT", spotterAllianceButton, "RIGHT", 0, 0) - spotterAllianceButton:SetSize(24, 24) - spotterAllianceButton:SetPoint("LEFT", spotterEveryoneButton, "LEFT", 0, -24) - spotterAllianceButton:SetChecked(Heimdall_Data.config.spotter.alliance) - spotterAllianceButton:SetScript("OnClick", function() - Heimdall_Data.config.spotter.alliance = spotterAllianceButton:GetChecked() - end) + local spotterHostileButton = CreateFrame("CheckButton", "HeimdallSpotterHostile", spotterConfigFrame, + "UICheckButtonTemplate") + spotterHostileButton.text = spotterHostileButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterHostileButton.text:SetText("Hostile") + spotterHostileButton.text:SetPoint("LEFT", spotterHostileButton, "RIGHT", 0, 0) + spotterHostileButton:SetSize(24, 24) + spotterHostileButton:SetPoint("LEFT", spotterEnableButton, "LEFT", 0, -24) + spotterHostileButton:SetChecked(Heimdall_Data.config.spotter.hostile) + spotterHostileButton:SetScript("OnClick", function() + Heimdall_Data.config.spotter.hostile = spotterHostileButton:GetChecked() + end) - local spotterStinkyButton = CreateFrame("CheckButton", "HeimdallSpotterStinky", spotterConfigFrame, - "UICheckButtonTemplate") - spotterStinkyButton.text = spotterStinkyButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterStinkyButton.text:SetText("Stinky") - spotterStinkyButton.text:SetPoint("LEFT", spotterStinkyButton, "RIGHT", 0, 0) - spotterStinkyButton:SetSize(24, 24) - spotterStinkyButton:SetPoint("LEFT", spotterHostileButton, "LEFT", 0, -24) - spotterStinkyButton:SetChecked(Heimdall_Data.config.spotter.stinky) - spotterStinkyButton:SetScript("OnClick", function() - Heimdall_Data.config.spotter.stinky = spotterStinkyButton:GetChecked() - end) + local spotterAllianceButton = CreateFrame("CheckButton", "HeimdallSpotterAlliance", spotterConfigFrame, + "UICheckButtonTemplate") + spotterAllianceButton.text = spotterAllianceButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterAllianceButton.text:SetText("Alliance") + spotterAllianceButton.text:SetPoint("LEFT", spotterAllianceButton, "RIGHT", 0, 0) + spotterAllianceButton:SetSize(24, 24) + spotterAllianceButton:SetPoint("LEFT", spotterEveryoneButton, "LEFT", 0, -24) + spotterAllianceButton:SetChecked(Heimdall_Data.config.spotter.alliance) + spotterAllianceButton:SetScript("OnClick", function() + Heimdall_Data.config.spotter.alliance = spotterAllianceButton:GetChecked() + end) - local spotterThrottleBox = CreateFrame("EditBox", "HeimdallSpotterThrottle", configFrame) - spotterThrottleBox.text = spotterThrottleBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterThrottleBox.text:SetText("Throttle Time") - spotterThrottleBox.text:SetPoint("TOPLEFT", spotterThrottleBox, "TOPLEFT", 0, 8) - spotterThrottleBox:SetNumeric(true) - spotterThrottleBox:SetSize(128, 24) - spotterThrottleBox:SetPoint("LEFT", spotterAllianceButton, "LEFT", 0, -24-8) - spotterThrottleBox:SetAutoFocus(false) - spotterThrottleBox:SetFontObject("GameFontNormal") - spotterThrottleBox:SetText(Heimdall_Data.config.spotter.throttleTime) - spotterThrottleBox:SetScript("OnEnterPressed", function() - local throttleTime = tonumber(spotterThrottleBox:GetText()) - if throttleTime then - Heimdall_Data.config.spotter.throttleTime = throttleTime - end - end) - spotterThrottleBox:SetScript("OnEscapePressed", function() - spotterThrottleBox:ClearFocus() - end) - -- ---@type table - -- local spotterEnableButton = CreateFrame("Button", "HeimdallSpotterEnable", configFrame, "UIPanelButtonTemplate") - -- spotterEnableButton:SetText("Enable Spotter") - -- spotterEnableButton:SetSize(100, 30) - -- spotterEnableButton:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -40) - -- spotterEnableButton:SetScript("OnClick", function() - -- print("Button was clicked!") - -- end) - -- - -- -- Create a text element - -- local text = configFrame:CreateFontString(nil, "ARTWORK", "GameFontHighlight") - -- text:SetText("This is some text in the frame.") - -- text:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -80) - -- - -- -- Create a small edit box - -- local smallEditBox = CreateFrame("EditBox", nil, configFrame) - -- smallEditBox:SetSize(200, 20) - -- smallEditBox:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -110) - -- smallEditBox:SetAutoFocus(false) - -- smallEditBox:SetFontObject("GameFontNormal") - -- smallEditBox:SetScript("OnEnterPressed", function() - -- print("Entered text: " .. smallEditBox:GetText()) - -- end) - -- - -- -- Create a large edit box - -- local largeEditBox = CreateFrame("EditBox", nil, configFrame) - -- largeEditBox:SetSize(280, 100) - -- largeEditBox:SetPoint("TOP", configFrame, "TOP", 0, -150) - -- largeEditBox:SetAutoFocus(false) - -- largeEditBox:SetFontObject("GameFontNormal") - -- largeEditBox:SetMultiLine(true) - -- largeEditBox:EnableMouse(true) - -- largeEditBox:SetMaxLetters(0) - -- largeEditBox:SetScript("OnEscapePressed", function() - -- largeEditBox:ClearFocus() - -- end) + local spotterStinkyButton = CreateFrame("CheckButton", "HeimdallSpotterStinky", spotterConfigFrame, + "UICheckButtonTemplate") + spotterStinkyButton.text = spotterStinkyButton:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterStinkyButton.text:SetText("Stinky") + spotterStinkyButton.text:SetPoint("LEFT", spotterStinkyButton, "RIGHT", 0, 0) + spotterStinkyButton:SetSize(24, 24) + spotterStinkyButton:SetPoint("LEFT", spotterHostileButton, "LEFT", 0, -24) + spotterStinkyButton:SetChecked(Heimdall_Data.config.spotter.stinky) + spotterStinkyButton:SetScript("OnClick", function() + Heimdall_Data.config.spotter.stinky = spotterStinkyButton:GetChecked() + end) - configFrame:Show() - print("Heimdall - Config loaded") + local spotterThrottleBox = CreateFrame("EditBox", "HeimdallSpotterThrottle", configFrame) + spotterThrottleBox.text = spotterThrottleBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterThrottleBox.text:SetText("Throttle Time") + spotterThrottleBox.text:SetPoint("TOPLEFT", spotterThrottleBox, "TOPLEFT", 0, 8 + 4) + spotterThrottleBox:SetNumeric(true) + spotterThrottleBox:SetSize(128 - 8, 24) + spotterThrottleBox:SetPoint("LEFT", spotterAllianceButton, "LEFT", 0, -24 - 8 - 4) + spotterThrottleBox:SetAutoFocus(false) + spotterThrottleBox:SetFontObject("GameFontNormal") + spotterThrottleBox:SetText(Heimdall_Data.config.spotter.throttleTime) + spotterThrottleBox:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 2, + edgeSize = 2, + insets = { + left = 2, + right = 2, + top = 2, + bottom = 2 + } + }) + spotterThrottleBox:SetBackdropColor(0.8, 0.8, 0.8, 1) + spotterThrottleBox:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) + spotterThrottleBox:SetScript("OnEnterPressed", function() + local throttleTime = tonumber(spotterThrottleBox:GetText()) + if throttleTime then + Heimdall_Data.config.spotter.throttleTime = throttleTime + end + end) + spotterThrottleBox:SetScript("OnEscapePressed", function() + spotterThrottleBox:ClearFocus() + end) + -- ---@type table + -- local spotterEnableButton = CreateFrame("Button", "HeimdallSpotterEnable", configFrame, "UIPanelButtonTemplate") + -- spotterEnableButton:SetText("Enable Spotter") + -- spotterEnableButton:SetSize(100, 30) + -- spotterEnableButton:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -40) + -- spotterEnableButton:SetScript("OnClick", function() + -- print("Button was clicked!") + -- end) + -- + -- -- Create a text element + -- local text = configFrame:CreateFontString(nil, "ARTWORK", "GameFontHighlight") + -- text:SetText("This is some text in the frame.") + -- text:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -80) + -- + -- -- Create a small edit box + -- local smallEditBox = CreateFrame("EditBox", nil, configFrame) + -- smallEditBox:SetSize(200, 20) + -- smallEditBox:SetPoint("TOPLEFT", configFrame, "TOPLEFT", 10, -110) + -- smallEditBox:SetAutoFocus(false) + -- smallEditBox:SetFontObject("GameFontNormal") + -- smallEditBox:SetScript("OnEnterPressed", function() + -- print("Entered text: " .. smallEditBox:GetText()) + -- end) + -- + -- -- Create a large edit box + -- local largeEditBox = CreateFrame("EditBox", nil, configFrame) + -- largeEditBox:SetSize(280, 100) + -- largeEditBox:SetPoint("TOP", configFrame, "TOP", 0, -150) + -- largeEditBox:SetAutoFocus(false) + -- largeEditBox:SetFontObject("GameFontNormal") + -- largeEditBox:SetMultiLine(true) + -- largeEditBox:EnableMouse(true) + -- largeEditBox:SetMaxLetters(0) + -- largeEditBox:SetScript("OnEscapePressed", function() + -- largeEditBox:ClearFocus() + -- end) + + configFrame:Show() + print("Heimdall - Config loaded") end SlashCmdList["HEIMDALL_CONFIG"] = function() - configFrame:Show() + configFrame:Show() end SLASH_HEIMDALL_CONFIG1 = "/heimdall_config" SLASH_HEIMDALL_CONFIG2 = "/hc"