457420f90c
New files:
- Modules/QuestieLearnerExport.lua: serialize/compress/encode pipeline using
AceSerializer + LibDeflate:CompressDeflate(level=9) + EncodeForPrint.
QxLD:<version>!<encoded> string format. Export(), ExportAll(), ValidateImport(),
MergeImport(), DryRunPrune(), Prune().
- Modules/Options/DatabaseTab/QuestieOptionsDatabase.lua: new Database tab with:
- Live learned data stats (per server)
- Per-type learner toggles (NPCs/Quests/Objects/Items/Broadcast)
- Export current server / Export all servers buttons (opens scrollable dialog)
- Import window (paste -> Validate -> Import with diff summary)
- Dry-run preview and Prune Now cleanup buttons
- Full reset button (confirm-gated)
- Contribute section with step-by-step GitHub submission instructions
Wiring:
- QuestieOptions.lua: database_tab initialized and registered in args
- All TOC files: QuestieLearnerExport.lua added before options, DatabaseTab lua added
168 lines
5.6 KiB
Lua
168 lines
5.6 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", Questie.db.profile.configWidth, Questie.db.profile.configHeight)
|
|
AceConfigDialog:Open("Questie", configFrame) -- load the options into configFrame
|
|
configFrame:SetLayout("Fill")
|
|
configFrame:EnableResize(true)
|
|
QuestieCompat.SetResizeBounds(configFrame.frame, 550, 400)
|
|
|
|
configFrame.frame:HookScript("OnSizeChanged", function(self, width, height)
|
|
Questie.db.profile.configWidth = width
|
|
Questie.db.profile.configHeight = height
|
|
end)
|
|
|
|
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()
|
|
local database_tab = QuestieOptions.tabs.database:Initialize()
|
|
coroutine.yield()
|
|
local credits_tab = QuestieOptions.tabs.credits: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,
|
|
database_tab = database_tab,
|
|
credits_tab = credits_tab,
|
|
profiles_tab = LibStub("AceDBOptions-3.0"):GetOptionsTable(Questie.db)
|
|
}
|
|
}
|
|
end
|