initial commit
This commit is contained in:
91
Core/UI/MainUI/Core.lua
Normal file
91
Core/UI/MainUI/Core.lua
Normal file
@@ -0,0 +1,91 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- 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
|
||||
Reference in New Issue
Block a user