diff --git a/Config.lua b/Config.lua index adbef20..2e01a1d 100644 --- a/Config.lua +++ b/Config.lua @@ -53,6 +53,7 @@ SlashCmdList["NIXXNUXXPBAR"] = function(msg) local function showHelp() print("NixxnuxXPBar: Commands:") print(" /nxp help") + print(" /nxp options") print(" /nxp toggle | /nxp show | /nxp hide") print(" /nxp toggle level | xp | percent | quest | leveling") print(" /nxp toggle incomplete | completed | rested") @@ -110,6 +111,15 @@ SlashCmdList["NIXXNUXXPBAR"] = function(msg) return end + if cmd == "options" then + if F.Options and F.Options.Open then + F.Options.Open() + else + print("NixxnuxXPBar: Options not available yet") + end + return + end + if cmd == "tracked" then if F.InitDB then F.InitDB() end F.DB.trackedOnly = not F.DB.trackedOnly diff --git a/NixxnuxXPBar.toc b/NixxnuxXPBar.toc index 0a7070a..c8bd2c6 100644 --- a/NixxnuxXPBar.toc +++ b/NixxnuxXPBar.toc @@ -18,6 +18,7 @@ Init.lua Config.lua +Options.lua Utils.lua UI.lua State.lua diff --git a/Options.lua b/Options.lua new file mode 100644 index 0000000..d164ae2 --- /dev/null +++ b/Options.lua @@ -0,0 +1,107 @@ +local _, F = ... + +F.Options = F.Options or {} + +local panel +local controls = {} + +local function SetOption(key, value) + if F.InitDB then F.InitDB() end + if not F.DB then return end + + F.DB[key] = value and true or false + + if key == "enabled" then + if value then + if F.UpdateUI then F.UpdateUI() end + else + if F.Frame and F.Frame.Hide then F.Frame:Hide() end + end + return + end + + if key == "hideBlizzardXPBar" and F.UI and F.UI.HideBlizzardBars then + F.UI.HideBlizzardBars() + end + + if F.UpdateUI then F.UpdateUI() end +end + +local function CreateHeader(parent, text, y) + local fs = parent:CreateFontString(nil, "ARTWORK", "GameFontNormal") + fs:SetPoint("TOPLEFT", parent, "TOPLEFT", 16, y) + fs:SetText(text) + return y - 20 +end + +local function CreateCheckbox(parent, key, label, y) + local cb = CreateFrame("CheckButton", nil, parent, "InterfaceOptionsCheckButtonTemplate") + cb.Text:SetText(label) + cb:SetPoint("TOPLEFT", parent, "TOPLEFT", 16, y) + cb:SetScript("OnClick", function(self) + SetOption(key, self:GetChecked()) + end) + + controls[key] = cb + return y - 28 +end + +function F.Options.Refresh() + if F.InitDB then F.InitDB() end + if not F.DB then return end + + for key, cb in pairs(controls) do + cb:SetChecked(F.DB[key] and true or false) + end +end + +function F.Options.Open() + if not panel then return end + + if Settings and Settings.OpenToCategory then + Settings.OpenToCategory(panel.name) + elseif InterfaceOptionsFrame_OpenToCategory then + InterfaceOptionsFrame_OpenToCategory(panel) + InterfaceOptionsFrame_OpenToCategory(panel) + end +end + +function F.Options.Create() + if panel then return end + + panel = CreateFrame("Frame", "NXP_OptionsPanel", UIParent) + panel.name = "NixxnuxXPBar" + + local title = panel:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") + title:SetPoint("TOPLEFT", panel, "TOPLEFT", 16, -16) + title:SetText("NixxnuxXPBar") + + local y = -48 + y = CreateHeader(panel, "General", y) + y = CreateCheckbox(panel, "enabled", "Enable addon", y) + y = CreateCheckbox(panel, "trackedOnly", "Count tracked (pinned) quests only", y) + + y = y - 10 + y = CreateHeader(panel, "Text Labels", y) + y = CreateCheckbox(panel, "showLevelText", "Level text", y) + y = CreateCheckbox(panel, "showXPText", "XP text", y) + y = CreateCheckbox(panel, "showPercentText", "Percent text", y) + y = CreateCheckbox(panel, "showQuestRestedText", "Quest/rested percent text", y) + y = CreateCheckbox(panel, "showLevelingText", "Leveling info text", y) + y = CreateCheckbox(panel, "showIncompleteQuestXPText", "Uncompleted quest XP text", y) + y = CreateCheckbox(panel, "showCompletedQuestXPText", "Completed quest XP text", y) + y = CreateCheckbox(panel, "showRestedXPText", "Rested XP text", y) + + panel:SetScript("OnShow", function() + F.Options.Refresh() + end) + + if Settings and Settings.RegisterCanvasLayoutCategory then + local category = Settings.RegisterCanvasLayoutCategory(panel, panel.name) + Settings.RegisterAddOnCategory(category) + elseif InterfaceOptions_AddCategory then + InterfaceOptions_AddCategory(panel) + end +end + +F.Options.Create()