Mercurial > wow > itemauditor
diff Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDownGroup.lua @ 0:169f5211fc7f
First public revision.
At this point ItemAuditor watches mail for auctions sold or purchased, watches for buy/sell (money and 1 item type change) and conversions/tradeskills. Milling isn't working yet because there is too much time between the first event and the last event.
author | Asa Ayers <Asa.Ayers@Gmail.com> |
---|---|
date | Thu, 20 May 2010 19:22:19 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDownGroup.lua Thu May 20 19:22:19 2010 -0700 @@ -0,0 +1,178 @@ +local AceGUI = LibStub("AceGUI-3.0") + +-- Lua APIs +local assert, pairs, type = assert, pairs, type + +-- WoW APIs +local CreateFrame = CreateFrame + +--[[ + Selection Group controls all have an interface to select a group for thier contents + None of them will auto size to thier contents, and should usually be used with a scrollframe + unless you know that the controls will fit inside +]] + +-------------------------- +-- Dropdown Group -- +-------------------------- +--[[ + Events : + OnGroupSelected + +]] +do + local Type = "DropdownGroup" + local Version = 13 + + local function OnAcquire(self) + self.dropdown:SetText("") + self:SetDropdownWidth(200) + self:SetTitle("") + end + + local function OnRelease(self) + self.frame:ClearAllPoints() + self.frame:Hide() + self.dropdown.list = nil + self.status = nil + for k in pairs(self.localstatus) do + self.localstatus[k] = nil + end + end + + local PaneBackdrop = { + bgFile = "Interface\\ChatFrame\\ChatFrameBackground", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 3, right = 3, top = 5, bottom = 3 } + } + + local function SetTitle(self,title) + self.titletext:SetText(title) + self.dropdown.frame:ClearAllPoints() + if title and title ~= "" then + self.dropdown.frame:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -2, 0) + else + self.dropdown.frame:SetPoint("TOPLEFT", self.frame, "TOPLEFT", -1, 0) + end + end + + + local function SelectedGroup(self,event,value) + local group = self.parentgroup + local status = group.status or group.localstatus + status.selected = value + self.parentgroup:Fire("OnGroupSelected", value) + end + + local function SetGroupList(self,list) + self.dropdown:SetList(list) + end + + -- called to set an external table to store status in + local function SetStatusTable(self, status) + assert(type(status) == "table") + self.status = status + end + + local function SetGroup(self,group) + self.dropdown:SetValue(group) + local status = self.status or self.localstatus + status.selected = group + self:Fire("OnGroupSelected", group) + end + + local function OnWidthSet(self, width) + local content = self.content + local contentwidth = width - 26 + if contentwidth < 0 then + contentwidth = 0 + end + content:SetWidth(contentwidth) + content.width = contentwidth + end + + + local function OnHeightSet(self, height) + local content = self.content + local contentheight = height - 63 + if contentheight < 0 then + contentheight = 0 + end + content:SetHeight(contentheight) + content.height = contentheight + end + + local function LayoutFinished(self, width, height) + self:SetHeight((height or 0) + 63) + end + + local function SetDropdownWidth(self, width) + self.dropdown:SetWidth(width) + end + + local function Constructor() + local frame = CreateFrame("Frame") + local self = {} + self.type = Type + + self.OnRelease = OnRelease + self.OnAcquire = OnAcquire + + self.SetTitle = SetTitle + self.SetGroupList = SetGroupList + self.SetGroup = SetGroup + self.SetStatusTable = SetStatusTable + self.SetDropdownWidth = SetDropdownWidth + self.OnWidthSet = OnWidthSet + self.OnHeightSet = OnHeightSet + self.LayoutFinished = LayoutFinished + + self.localstatus = {} + + self.frame = frame + frame.obj = self + + frame:SetHeight(100) + frame:SetWidth(100) + frame:SetFrameStrata("FULLSCREEN_DIALOG") + + local titletext = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + titletext:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -5) + titletext:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -4, -5) + titletext:SetJustifyH("LEFT") + titletext:SetHeight(18) + self.titletext = titletext + + local dropdown = AceGUI:Create("Dropdown") + self.dropdown = dropdown + dropdown.frame:SetParent(frame) + dropdown.frame:SetFrameLevel(dropdown.frame:GetFrameLevel() + 2) + dropdown.parentgroup = self + dropdown:SetCallback("OnValueChanged",SelectedGroup) + dropdown.frame:SetPoint("TOPLEFT",frame,"TOPLEFT", -1, 0) + dropdown.frame:Show() + dropdown:SetLabel("") + + local border = CreateFrame("Frame",nil,frame) + self.border = border + border:SetPoint("TOPLEFT",frame,"TOPLEFT",0,-26) + border:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,3) + + border:SetBackdrop(PaneBackdrop) + border:SetBackdropColor(0.1,0.1,0.1,0.5) + border:SetBackdropBorderColor(0.4,0.4,0.4) + + --Container Support + local content = CreateFrame("Frame",nil,border) + self.content = content + content.obj = self + content:SetPoint("TOPLEFT",border,"TOPLEFT",10,-10) + content:SetPoint("BOTTOMRIGHT",border,"BOTTOMRIGHT",-10,10) + + AceGUI:RegisterAsContainer(self) + return self + end + + AceGUI:RegisterWidgetType(Type,Constructor,Version) +end