Asa@63: local ItemAuditor = select(2, ...) Asa@63: local Frames = ItemAuditor:NewModule("Frames") Asa@58: Asa@58: local AceGUI = LibStub("AceGUI-3.0") Asa@58: Asa@58: local tabs = {} Asa@58: Asa@65: function Frames.RegisterTab(text, value, callback) Asa@59: tabs[value] = {text=text, callback=callback} Asa@58: end Asa@58: Asa@58: local displayFrame = false Asa@58: local currentContent = false Asa@58: local function switchTab(container, event, group) Asa@58: if tabs[group] == nil then Asa@58: error(format("Invaid tab name: %s", tostring(group))) Asa@58: end Asa@58: local cb = tabs[group].callback Asa@58: Asa@58: container:ReleaseChildren() Asa@58: Asa@58: if currentContent then Asa@58: currentContent:Hide() Asa@58: if displayFrame then Asa@58: displayFrame:SetStatusText('') Asa@58: end Asa@58: end Asa@59: Asa@58: currentContent = cb(container) Asa@58: end Asa@58: Asa@65: function Frames.CreateFrame(selectedTab) Asa@59: Asa@58: if not displayFrame then Asa@58: -- Create the frame container Asa@58: displayFrame = AceGUI:Create("Frame") Asa@58: ItemAuditor:RegisterFrame(displayFrame) Asa@58: local window = displayFrame.frame; Asa@58: -- I have no idea why AceGUI insists on using FULLSCREEN_DIALOG by default. Asa@58: window:SetFrameStrata("MEDIUM") Asa@58: displayFrame:SetTitle("ItemAuditor") Asa@58: displayFrame:SetStatusText("") Asa@58: Asa@58: displayFrame:SetLayout("Fill") Asa@58: Asa@58: window:SetHeight(500); Asa@58: Asa@58: local tabSet = {} Asa@58: for key, data in pairs(tabs) do Asa@58: tinsert(tabSet, {text=data['text'], value=key}) Asa@58: -- Default to the first tab. Asa@58: if not selectedTab then Asa@58: selectedTab = key Asa@58: end Asa@58: end Asa@58: -- Each tab can adjust the width as needed. Asa@58: window:SetWidth(300); Asa@58: Asa@58: displayFrame.tab = AceGUI:Create("TabGroup") Asa@58: displayFrame.tab:SetLayout("Flow") Asa@58: displayFrame.tab:SetTabs(tabSet) Asa@58: displayFrame.tab:SetCallback("OnGroupSelected", switchTab) Asa@58: Asa@58: Asa@58: displayFrame:AddChild(displayFrame.tab) Asa@58: end Asa@130: Asa@130: displayFrame.frame:Raise() Asa@58: Asa@58: if not selectedTab then Asa@58: for key in pairs(tabs) do Asa@58: selectedTab = key Asa@58: break Asa@58: end Asa@58: end Asa@58: Asa@58: displayFrame.tab:SelectTab(selectedTab) Asa@58: displayFrame:Show() Asa@58: end Asa@58: Asa@65: function Frames.UpdateStatusText(message) Asa@58: if displayFrame then Asa@58: displayFrame:SetStatusText(message) Asa@58: end Asa@65: end Asa@65: Asa@65: function ItemAuditor:UpdateStatusText(message) Asa@65: return Frames.UpdateStatusText(message) Asa@65: end Asa@65: Asa@65: function ItemAuditor:RegisterTab(text, value, callback) Asa@65: return Frames.RegisterTab(text, value, callback) Asa@65: end Asa@65: Asa@65: function ItemAuditor:CreateFrame(selectedTab) Asa@65: Frames.CreateFrame(selectedTab) Asa@65: end