annotate Modules/Frames.lua @ 58:bdf3aba93aa9

Refactored the way the window for /ia invested works so I can add more tabs.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Sun, 25 Jul 2010 15:51:00 -0700
parents
children 4ec321eb0dfe
rev   line source
Asa@58 1 local addonName, addonTable = ...;
Asa@58 2 local addon = _G[addonName]
Asa@58 3
Asa@58 4 local AceGUI = LibStub("AceGUI-3.0")
Asa@58 5
Asa@58 6 local tabs = {}
Asa@58 7
Asa@58 8 function addon:RegisterTab(text, value, width, callback)
Asa@58 9 tabs[value] = {text=text, callback=callback, width=width}
Asa@58 10 end
Asa@58 11
Asa@58 12 local displayFrame = false
Asa@58 13 local currentContent = false
Asa@58 14 local function switchTab(container, event, group)
Asa@58 15 if tabs[group] == nil then
Asa@58 16 error(format("Invaid tab name: %s", tostring(group)))
Asa@58 17 end
Asa@58 18 local cb = tabs[group].callback
Asa@58 19
Asa@58 20 container:ReleaseChildren()
Asa@58 21
Asa@58 22 if currentContent then
Asa@58 23 currentContent:Hide()
Asa@58 24 if displayFrame then
Asa@58 25 displayFrame:SetStatusText('')
Asa@58 26 end
Asa@58 27 end
Asa@58 28
Asa@58 29 currentContent = cb(container)
Asa@58 30 end
Asa@58 31
Asa@58 32
Asa@58 33 function addon:CreateFrame(selectedTab)
Asa@58 34 --@debug@
Asa@58 35 -- This is here so I can verify that all of the callbacks and tab switching works.
Asa@58 36 -- The real crafting tab will become its own module.
Asa@58 37 -- addon:RegisterTab('Placeholder Crafting', 'tab_crafting', 400, function() addon:Print('crafting') end)
Asa@58 38 --@end-debug@
Asa@58 39
Asa@58 40 if not displayFrame then
Asa@58 41 -- Create the frame container
Asa@58 42 displayFrame = AceGUI:Create("Frame")
Asa@58 43 ItemAuditor:RegisterFrame(displayFrame)
Asa@58 44 local window = displayFrame.frame;
Asa@58 45 -- I have no idea why AceGUI insists on using FULLSCREEN_DIALOG by default.
Asa@58 46 window:SetFrameStrata("MEDIUM")
Asa@58 47 displayFrame:SetTitle("ItemAuditor")
Asa@58 48 displayFrame:SetStatusText("")
Asa@58 49
Asa@58 50 displayFrame:SetLayout("Fill")
Asa@58 51
Asa@58 52 window:SetHeight(500);
Asa@58 53
Asa@58 54 local tabSet = {}
Asa@58 55 for key, data in pairs(tabs) do
Asa@58 56 tinsert(tabSet, {text=data['text'], value=key})
Asa@58 57 -- Default to the first tab.
Asa@58 58 if not selectedTab then
Asa@58 59 selectedTab = key
Asa@58 60 end
Asa@58 61 end
Asa@58 62 -- Each tab can adjust the width as needed.
Asa@58 63 window:SetWidth(300);
Asa@58 64
Asa@58 65 displayFrame.tab = AceGUI:Create("TabGroup")
Asa@58 66 displayFrame.tab:SetLayout("Flow")
Asa@58 67 displayFrame.tab:SetTabs(tabSet)
Asa@58 68 displayFrame.tab:SetCallback("OnGroupSelected", switchTab)
Asa@58 69
Asa@58 70
Asa@58 71 displayFrame:AddChild(displayFrame.tab)
Asa@58 72 end
Asa@58 73
Asa@58 74 if not selectedTab then
Asa@58 75 for key in pairs(tabs) do
Asa@58 76 selectedTab = key
Asa@58 77 break
Asa@58 78 end
Asa@58 79 end
Asa@58 80
Asa@58 81 displayFrame.tab:SelectTab(selectedTab)
Asa@58 82 displayFrame:Show()
Asa@58 83 end
Asa@58 84
Asa@58 85 function addon:UpdateStatusText(message)
Asa@58 86 if displayFrame then
Asa@58 87 displayFrame:SetStatusText(message)
Asa@58 88 end
Asa@58 89 end