92 lines
2.6 KiB
Lua
92 lines
2.6 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- https://tradeskillmaster.com --
|
|
-- All Rights Reserved - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
local _, TSM = ...
|
|
local MainUI = TSM:NewPackage("MainUI")
|
|
local Settings = TSM.Include("Service.Settings")
|
|
local UIElements = TSM.Include("UI.UIElements")
|
|
local private = {
|
|
settings = nil,
|
|
topLevelPages = {},
|
|
frame = nil,
|
|
}
|
|
local MIN_FRAME_SIZE = { width = 720, height = 588 }
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Module Functions
|
|
-- ============================================================================
|
|
|
|
function MainUI.OnInitialize()
|
|
private.settings = Settings.NewView()
|
|
:AddKey("global", "mainUIContext", "frame")
|
|
end
|
|
|
|
function MainUI.OnDisable()
|
|
-- hide the frame
|
|
if private.frame then
|
|
MainUI.Toggle()
|
|
end
|
|
end
|
|
|
|
function MainUI.RegisterTopLevelPage(name, callback)
|
|
tinsert(private.topLevelPages, { name = name, callback = callback })
|
|
end
|
|
|
|
function MainUI.Toggle()
|
|
if private.frame then
|
|
-- it's already shown, so hide it
|
|
private.frame:Hide()
|
|
assert(not private.frame)
|
|
else
|
|
private.frame = private.CreateMainFrame()
|
|
private.frame:Draw()
|
|
private.frame:Show()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Main Frame
|
|
-- ============================================================================
|
|
|
|
function private.CreateMainFrame()
|
|
TSM.UI.AnalyticsRecordPathChange("main")
|
|
-- Always show the Dashboard first
|
|
private.settings.frame.page = 1
|
|
local frame = UIElements.New("LargeApplicationFrame", "base")
|
|
:SetParent(UIParent)
|
|
:SetSettingsContext(private.settings, "frame")
|
|
:SetMinResize(MIN_FRAME_SIZE.width, MIN_FRAME_SIZE.height)
|
|
:SetStrata("HIGH")
|
|
:AddPlayerGold()
|
|
:AddAppStatusIcon()
|
|
:SetScript("OnHide", private.BaseFrameOnHide)
|
|
for _, info in ipairs(private.topLevelPages) do
|
|
frame:AddNavButton(info.name, info.callback)
|
|
end
|
|
local whatsNewDialog = TSM.UI.WhatsNew.GetDialog()
|
|
if whatsNewDialog then
|
|
frame:ShowDialogFrame(whatsNewDialog)
|
|
end
|
|
return frame
|
|
end
|
|
|
|
|
|
|
|
-- ============================================================================
|
|
-- Local Script Handlers
|
|
-- ============================================================================
|
|
|
|
function private.BaseFrameOnHide(frame)
|
|
assert(frame == private.frame)
|
|
frame:Release()
|
|
private.frame = nil
|
|
TSM.UI.AnalyticsRecordClose("main")
|
|
end
|