-- ------------------------------------------------------------------------------ -- -- 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