Files
coa-tsm/TradeSkillMaster/GUI/MainFrame.lua
T
Andrew6810 f3e579cb57 init
2022-11-05 21:19:42 -07:00

140 lines
4.9 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- http://www.curse.com/addons/wow/tradeskill-master --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
-- This file contains all the APIs regarding TSM's main frame (what shows when you type '/tsm').
local TSM = select(2, ...)
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster") -- loads the localization table
local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries
local private = {icons={}, currentIcon=0}
TSMAPI:RegisterForTracing(private, "TradeSkillMaster.MainFrame_private")
local lib = TSMAPI
--- Opens the main TSM window.
function TSMAPI:OpenFrame()
if not TSM.Frame then return end
TSM.Frame:Show()
if #TSM.Frame.children > 0 then
TSM.Frame:ReleaseChildren()
else
TSMAPI:SelectIcon("TradeSkillMaster", L["TSM Status / Options"])
end
if TSM.db.global.infoMessage < 1001 then
TSM.db.global.infoMessage = 1001
StaticPopupDialogs["TSM_INFO_MESSAGE"] = StaticPopupDialogs["TSM_INFO_MESSAGE"] or {
text = format(L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."], TSMAPI.Design:GetInlineColor("advanced")),
button1 = OKAY,
OnAccept = function()
TSM:Printf(L["More advanced options are now designated by %sred text|r. Beginners are encourages to come back to these once they have a solid understanding of the basics."], TSMAPI.Design:GetInlineColor("advanced"))
end,
timeout = 0,
preferredIndex = 3,
}
TSMAPI:ShowStaticPopupDialog("TSM_INFO_MESSAGE")
end
end
--- Closes the main TSM window.
function TSMAPI:CloseFrame()
TSM.Frame:Hide()
end
function TSM:RegisterMainFrameIcon(displayName, icon, loadGUI, moduleName, side)
if not (displayName and icon and loadGUI and moduleName) then
return nil, "invalid args", displayName, icon, loadGUI, moduleName
end
if side and not (side == "module" or side == "options") then
return nil, "invalid side", side
end
local icon = {name=displayName, moduleName=moduleName, icon=icon, loadGUI=loadGUI, side=(strlower(side or "module"))}
if TSM.Frame then
icon.texture = icon.icon
if icon.side == "options" then
icon.where = "topLeft"
else
icon.where = "topRight"
end
TSM.Frame:AddIcon(icon)
end
tinsert(private.icons, icon)
end
--- Selects an icon in the main TSM window once it's open.
-- @param moduleName Which module the icon belongs to (unlocalized).
-- @param iconName The text that shows in the tooltip of the icon to be clicked (localized).
-- @return Returns an error message as the second return value upon error.
function TSMAPI:SelectIcon(moduleName, iconName)
if not moduleName then return nil, "no moduleName passed" end
for _, data in ipairs(private.icons) do
if data.moduleName == moduleName and data.name == iconName then
data.frame:Click()
end
end
end
function TSMAPI:ShowOperationOptions(moduleName, operation, groupPath)
TSMAPI:OpenFrame()
TSM.loadModuleOptionsTab = {module=moduleName, operation=operation, group=groupPath}
TSMAPI:SelectIcon("TradeSkillMaster", L["Module Operations / Options"])
TSM.loadModuleOptionsTab = nil
end
function TSM:CreateMainFrame()
local mainFrame = AceGUI:Create("TSMMainFrame")
local version = TSM._version
mainFrame:SetIconText(version)
mainFrame:SetIconLabels(L["Options"], L["Modules"])
mainFrame:SetLayout("Fill")
for _, icon in ipairs(private.icons) do
icon.texture = icon.icon
if icon.side == "crafting" then
icon.where = "bottom"
elseif icon.side == "options" then
icon.where = "topLeft"
else
icon.where = "topRight"
end
mainFrame:AddIcon(icon)
end
TSM.Frame = mainFrame
TSMAPI:CreateTimeDelay("mainFrameSize", .5, function() mainFrame:SetWidth(mainFrame.frame.options.width) mainFrame:SetHeight(mainFrame.frame.options.height) end)
end
function TSM:TSMFrameIsVisible()
return TSM.Frame and TSM.Frame:IsVisible()
end
function private:FramePathHelper(frame, path)
if not frame.children or not frame.children[1] then return end
frame = frame.children[1]
if frame.type == "TSMTreeGroup" then
tinsert(path, {type="TreeGroup", value={("\001"):split(frame.status.selected)}})
elseif frame.type == "TSMTabGroup" then
tinsert(path, {type="TabGroup", value=frame.localstatus.selected})
end
return private:FramePathHelper(frame, path)
end
function TSM:GetTSMFrameSelectionPath()
if not TSM:TSMFrameIsVisible() then return end
local path = {}
tinsert(path, {type="Icon", value=TSM.Frame.selected.info.name})
private:FramePathHelper(TSM.Frame, path)
return path
end