Files
Questie-X/Modules/Options/QuestieOptions.lua
T

157 lines
5.1 KiB
Lua

---@class QuestieOptions
local QuestieOptions = QuestieLoader:CreateModule("QuestieOptions");
-------------------------
--Import modules.
-------------------------
---@type QuestieQuest
local QuestieQuest = QuestieLoader:ImportModule("QuestieQuest");
---@type QuestieJourney
local QuestieJourney = QuestieLoader:ImportModule("QuestieJourney");
---@type l10n
local l10n = QuestieLoader:ImportModule("l10n")
---@type QuestieCombatQueue
local QuestieCombatQueue = QuestieLoader:ImportModule("QuestieCombatQueue")
QuestieOptions.tabs = { ... }
QuestieConfigFrame = nil
local AceGUI = LibStub("AceGUI-3.0")
local AceConfigDialog = LibStub("AceConfigDialog-3.0")
-- Forward declaration
local _CreateOptionsTable
---Initializes the frames for the options menu
function QuestieOptions:Initialize()
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieOptions]: Initializing...")
local optionsTable = _CreateOptionsTable()
coroutine.yield()
LibStub("AceConfig-3.0"):RegisterOptionsTable("Questie", optionsTable)
AceConfigDialog:AddToBlizOptions("Questie", "Questie");
coroutine.yield()
---@type AceGUIFrame, AceGUIFrame
local configFrame = AceGUI:Create("Frame")
configFrame:Hide()
coroutine.yield()
AceConfigDialog:SetDefaultSize("Questie", 640, 700)
AceConfigDialog:Open("Questie", configFrame) -- load the options into configFrame
configFrame:SetLayout("Fill")
configFrame:EnableResize(false)
QuestieCompat.SetResizeBounds(configFrame.frame, 550, 400)
configFrame:Hide()
coroutine.yield()
local journeyButton = CreateFrame("Button", nil, configFrame.frame, "UIPanelButtonTemplate")
journeyButton:SetSize(140, 24)
journeyButton:SetPoint("TOPRIGHT", configFrame.frame, "TOPRIGHT", -50, -13)
journeyButton:SetText(l10n('My Journey'))
journeyButton:SetScript("OnClick", function()
QuestieCombatQueue:Queue(function()
QuestieJourney:ToggleJourneyWindow()
QuestieOptions:OpenConfigWindow()
end)
end)
configFrame:Hide()
coroutine.yield()
QuestieConfigFrame = configFrame
table.insert(UISpecialFrames, "QuestieConfigFrame")
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieOptions]: Initialization done")
end
-- Generic function to hide the config frame.
function QuestieOptions:HideFrame()
if QuestieConfigFrame and QuestieConfigFrame:IsShown() then
QuestieConfigFrame:Hide();
end
end
-- Open the configuration window
function QuestieOptions:OpenConfigWindow()
if not QuestieConfigFrame:IsShown() then
PlaySound(882)
-- AceConfigDialog:Open("Questie", QuestieConfigFrame)
QuestieConfigFrame:Show()
else
QuestieConfigFrame:Hide()
end
end
-- get option value
function QuestieOptions:GetProfileValue(info)
return Questie.db.profile[info[#info]]
end
-- set option value
function QuestieOptions:SetProfileValue(info, value)
if debug and Questie.db.profile[info[#info]] ~= value then
Questie:Debug(Questie.DEBUG_SPAM, "DEBUG: global option", info[#info], "changed from '" .. tostring(Questie.db.profile[info[#info]]) .. "' to '" .. tostring(value) .. "'")
end
Questie.db.profile[info[#info]] = value
end
function QuestieOptions:ClusterRedraw()
Questie:Debug(Questie.DEBUG_INFO, "Clustering changed, redrawing!")
--Redraw clusters here
QuestieQuest:SmoothReset();
end
---@return table
_CreateOptionsTable = function()
local general_tab = QuestieOptions.tabs.general:Initialize()
coroutine.yield()
--local social_tab = QuestieOptions.tabs.social:Initialize()
--coroutine.yield()
--local minimap_tab = QuestieOptions.tabs.minimap:Initialize()
--coroutine.yield()
--local map_tab = QuestieOptions.tabs.map:Initialize()
--coroutine.yield()
local icons_tab = QuestieOptions.tabs.icons:Initialize()
coroutine.yield()
local tracker_tab = QuestieOptions.tabs.tracker:Initialize()
coroutine.yield()
local auto_tab = QuestieOptions.tabs.auto:Initialize()
coroutine.yield()
--local tooltip_tab = QuestieOptions.tabs.tooltip:Initialize()
--coroutine.yield()
--local sounds_tab = QuestieOptions.tabs.sounds:Initialize()
--coroutine.yield()
local nameplate_tab = QuestieOptions.tabs.nameplate:Initialize()
coroutine.yield()
local dbm_hud_tab = QuestieOptions.tabs.dbm:Initialize()
coroutine.yield()
local advanced_tab = QuestieOptions.tabs.advanced:Initialize()
coroutine.yield()
return {
name = "Questie",
handler = Questie,
type = "group",
childGroups = "tab",
args = {
general_tab = general_tab,
--social_tab = social_tab,
--minimap_tab = minimap_tab,
--map_tab = map_tab,
icons_tab = icons_tab,
tracker_tab = tracker_tab,
auto_tab = auto_tab,
--tooltip_tab = tooltip_tab,
--sounds_tab = sounds_tab,
nameplate_tab = nameplate_tab,
dbm_hud_tab = dbm_hud_tab,
advanced_tab = advanced_tab,
profiles_tab = LibStub("AceDBOptions-3.0"):GetOptionsTable(Questie.db)
}
}
end