local addonname, shared = ... ---@cast shared HeimdallShared ---@cast addonname string local configFrame = CreateFrame("Frame", "HeimdallConfig", UIParent) ---@diagnostic disable-next-line: missing-fields shared.Config = {} function shared.Config.Init() ---@class UIElement shared.UIElement = { ---@return UIElement new = function() local self = setmetatable({}, { __index = shared.UIElement }) return self 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) 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 title = configFrame:CreateFontString(nil, "ARTWORK", "GameFontNormal") title:SetText("Heimdall Config") title:SetPoint("TOP", configFrame, "TOP", 0, -8) 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 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 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 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 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 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 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() end SLASH_HEIMDALL_CONFIG1 = "/heimdall_config" SLASH_HEIMDALL_CONFIG2 = "/hc"