annotate Libs/AceGUI-3.0/widgets/AceGUIWidget-Frame.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
rev   line source
Asa@0 1 local AceGUI = LibStub("AceGUI-3.0")
Asa@0 2
Asa@0 3 -- Lua APIs
Asa@0 4 local pairs, assert, type = pairs, assert, type
Asa@0 5
Asa@0 6 -- WoW APIs
Asa@0 7 local CreateFrame, UIParent = CreateFrame, UIParent
Asa@0 8
Asa@0 9 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
Asa@0 10 -- List them here for Mikk's FindGlobals script
Asa@0 11 -- GLOBALS: CLOSE
Asa@0 12
Asa@0 13 ----------------
Asa@0 14 -- Main Frame --
Asa@0 15 ----------------
Asa@0 16 --[[
Asa@0 17 Events :
Asa@0 18 OnClose
Asa@0 19
Asa@0 20 ]]
Asa@0 21 do
Asa@0 22 local Type = "Frame"
Asa@0 23 local Version = 9
Asa@0 24
Asa@0 25 local FrameBackdrop = {
Asa@0 26 bgFile="Interface\\DialogFrame\\UI-DialogBox-Background",
Asa@0 27 edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
Asa@0 28 tile = true, tileSize = 32, edgeSize = 32,
Asa@0 29 insets = { left = 8, right = 8, top = 8, bottom = 8 }
Asa@0 30 }
Asa@0 31
Asa@0 32 local PaneBackdrop = {
Asa@0 33 bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
Asa@0 34 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
Asa@0 35 tile = true, tileSize = 16, edgeSize = 16,
Asa@0 36 insets = { left = 3, right = 3, top = 5, bottom = 3 }
Asa@0 37 }
Asa@0 38
Asa@0 39 local function frameOnClose(this)
Asa@0 40 this.obj:Fire("OnClose")
Asa@0 41 end
Asa@0 42
Asa@0 43 local function closeOnClick(this)
Asa@0 44 this.obj:Hide()
Asa@0 45 end
Asa@0 46
Asa@0 47 local function frameOnMouseDown(this)
Asa@0 48 AceGUI:ClearFocus()
Asa@0 49 end
Asa@0 50
Asa@0 51 local function titleOnMouseDown(this)
Asa@0 52 this:GetParent():StartMoving()
Asa@0 53 AceGUI:ClearFocus()
Asa@0 54 end
Asa@0 55
Asa@0 56 local function frameOnMouseUp(this)
Asa@0 57 local frame = this:GetParent()
Asa@0 58 frame:StopMovingOrSizing()
Asa@0 59 local self = frame.obj
Asa@0 60 local status = self.status or self.localstatus
Asa@0 61 status.width = frame:GetWidth()
Asa@0 62 status.height = frame:GetHeight()
Asa@0 63 status.top = frame:GetTop()
Asa@0 64 status.left = frame:GetLeft()
Asa@0 65 end
Asa@0 66
Asa@0 67 local function sizerseOnMouseDown(this)
Asa@0 68 this:GetParent():StartSizing("BOTTOMRIGHT")
Asa@0 69 AceGUI:ClearFocus()
Asa@0 70 end
Asa@0 71
Asa@0 72 local function sizersOnMouseDown(this)
Asa@0 73 this:GetParent():StartSizing("BOTTOM")
Asa@0 74 AceGUI:ClearFocus()
Asa@0 75 end
Asa@0 76
Asa@0 77 local function sizereOnMouseDown(this)
Asa@0 78 this:GetParent():StartSizing("RIGHT")
Asa@0 79 AceGUI:ClearFocus()
Asa@0 80 end
Asa@0 81
Asa@0 82 local function SetTitle(self,title)
Asa@0 83 self.titletext:SetText(title)
Asa@0 84 end
Asa@0 85
Asa@0 86 local function SetStatusText(self,text)
Asa@0 87 self.statustext:SetText(text)
Asa@0 88 end
Asa@0 89
Asa@0 90 local function Hide(self)
Asa@0 91 self.frame:Hide()
Asa@0 92 end
Asa@0 93
Asa@0 94 local function Show(self)
Asa@0 95 self.frame:Show()
Asa@0 96 end
Asa@0 97
Asa@0 98 local function OnAcquire(self)
Asa@0 99 self.frame:SetParent(UIParent)
Asa@0 100 self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
Asa@0 101 self:ApplyStatus()
Asa@0 102 end
Asa@0 103
Asa@0 104 local function OnRelease(self)
Asa@0 105 self.status = nil
Asa@0 106 for k in pairs(self.localstatus) do
Asa@0 107 self.localstatus[k] = nil
Asa@0 108 end
Asa@0 109 end
Asa@0 110
Asa@0 111 -- called to set an external table to store status in
Asa@0 112 local function SetStatusTable(self, status)
Asa@0 113 assert(type(status) == "table")
Asa@0 114 self.status = status
Asa@0 115 self:ApplyStatus()
Asa@0 116 end
Asa@0 117
Asa@0 118 local function ApplyStatus(self)
Asa@0 119 local status = self.status or self.localstatus
Asa@0 120 local frame = self.frame
Asa@0 121 self:SetWidth(status.width or 700)
Asa@0 122 self:SetHeight(status.height or 500)
Asa@0 123 if status.top and status.left then
Asa@0 124 frame:SetPoint("TOP",UIParent,"BOTTOM",0,status.top)
Asa@0 125 frame:SetPoint("LEFT",UIParent,"LEFT",status.left,0)
Asa@0 126 else
Asa@0 127 frame:SetPoint("CENTER",UIParent,"CENTER")
Asa@0 128 end
Asa@0 129 end
Asa@0 130
Asa@0 131 local function OnWidthSet(self, width)
Asa@0 132 local content = self.content
Asa@0 133 local contentwidth = width - 34
Asa@0 134 if contentwidth < 0 then
Asa@0 135 contentwidth = 0
Asa@0 136 end
Asa@0 137 content:SetWidth(contentwidth)
Asa@0 138 content.width = contentwidth
Asa@0 139 end
Asa@0 140
Asa@0 141
Asa@0 142 local function OnHeightSet(self, height)
Asa@0 143 local content = self.content
Asa@0 144 local contentheight = height - 57
Asa@0 145 if contentheight < 0 then
Asa@0 146 contentheight = 0
Asa@0 147 end
Asa@0 148 content:SetHeight(contentheight)
Asa@0 149 content.height = contentheight
Asa@0 150 end
Asa@0 151
Asa@0 152 local function Constructor()
Asa@0 153 local frame = CreateFrame("Frame",nil,UIParent)
Asa@0 154 local self = {}
Asa@0 155 self.type = "Frame"
Asa@0 156
Asa@0 157 self.Hide = Hide
Asa@0 158 self.Show = Show
Asa@0 159 self.SetTitle = SetTitle
Asa@0 160 self.OnRelease = OnRelease
Asa@0 161 self.OnAcquire = OnAcquire
Asa@0 162 self.SetStatusText = SetStatusText
Asa@0 163 self.SetStatusTable = SetStatusTable
Asa@0 164 self.ApplyStatus = ApplyStatus
Asa@0 165 self.OnWidthSet = OnWidthSet
Asa@0 166 self.OnHeightSet = OnHeightSet
Asa@0 167
Asa@0 168 self.localstatus = {}
Asa@0 169
Asa@0 170 self.frame = frame
Asa@0 171 frame.obj = self
Asa@0 172 frame:SetWidth(700)
Asa@0 173 frame:SetHeight(500)
Asa@0 174 frame:SetPoint("CENTER",UIParent,"CENTER",0,0)
Asa@0 175 frame:EnableMouse()
Asa@0 176 frame:SetMovable(true)
Asa@0 177 frame:SetResizable(true)
Asa@0 178 frame:SetFrameStrata("FULLSCREEN_DIALOG")
Asa@0 179 frame:SetScript("OnMouseDown", frameOnMouseDown)
Asa@0 180
Asa@0 181 frame:SetBackdrop(FrameBackdrop)
Asa@0 182 frame:SetBackdropColor(0,0,0,1)
Asa@0 183 frame:SetScript("OnHide",frameOnClose)
Asa@0 184 frame:SetMinResize(400,200)
Asa@0 185 frame:SetToplevel(true)
Asa@0 186
Asa@0 187 local closebutton = CreateFrame("Button",nil,frame,"UIPanelButtonTemplate")
Asa@0 188 closebutton:SetScript("OnClick", closeOnClick)
Asa@0 189 closebutton:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-27,17)
Asa@0 190 closebutton:SetHeight(20)
Asa@0 191 closebutton:SetWidth(100)
Asa@0 192 closebutton:SetText(CLOSE)
Asa@0 193
Asa@0 194 self.closebutton = closebutton
Asa@0 195 closebutton.obj = self
Asa@0 196
Asa@0 197 local statusbg = CreateFrame("Frame",nil,frame)
Asa@0 198 statusbg:SetPoint("BOTTOMLEFT",frame,"BOTTOMLEFT",15,15)
Asa@0 199 statusbg:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-132,15)
Asa@0 200 statusbg:SetHeight(24)
Asa@0 201 statusbg:SetBackdrop(PaneBackdrop)
Asa@0 202 statusbg:SetBackdropColor(0.1,0.1,0.1)
Asa@0 203 statusbg:SetBackdropBorderColor(0.4,0.4,0.4)
Asa@0 204 self.statusbg = statusbg
Asa@0 205
Asa@0 206 local statustext = statusbg:CreateFontString(nil,"OVERLAY","GameFontNormal")
Asa@0 207 self.statustext = statustext
Asa@0 208 statustext:SetPoint("TOPLEFT",statusbg,"TOPLEFT",7,-2)
Asa@0 209 statustext:SetPoint("BOTTOMRIGHT",statusbg,"BOTTOMRIGHT",-7,2)
Asa@0 210 statustext:SetHeight(20)
Asa@0 211 statustext:SetJustifyH("LEFT")
Asa@0 212 statustext:SetText("")
Asa@0 213
Asa@0 214 local title = CreateFrame("Frame",nil,frame)
Asa@0 215 self.title = title
Asa@0 216 title:EnableMouse()
Asa@0 217 title:SetScript("OnMouseDown",titleOnMouseDown)
Asa@0 218 title:SetScript("OnMouseUp", frameOnMouseUp)
Asa@0 219
Asa@0 220
Asa@0 221 local titlebg = frame:CreateTexture(nil,"OVERLAY")
Asa@0 222 titlebg:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
Asa@0 223 titlebg:SetTexCoord(0.31,0.67,0,0.63)
Asa@0 224 titlebg:SetPoint("TOP",frame,"TOP",0,12)
Asa@0 225 titlebg:SetWidth(100)
Asa@0 226 titlebg:SetHeight(40)
Asa@0 227
Asa@0 228 local titlebg_l = frame:CreateTexture(nil,"OVERLAY")
Asa@0 229 titlebg_l:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
Asa@0 230 titlebg_l:SetTexCoord(0.21,0.31,0,0.63)
Asa@0 231 titlebg_l:SetPoint("RIGHT",titlebg,"LEFT",0,0)
Asa@0 232 titlebg_l:SetWidth(30)
Asa@0 233 titlebg_l:SetHeight(40)
Asa@0 234
Asa@0 235 local titlebg_right = frame:CreateTexture(nil,"OVERLAY")
Asa@0 236 titlebg_right:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
Asa@0 237 titlebg_right:SetTexCoord(0.67,0.77,0,0.63)
Asa@0 238 titlebg_right:SetPoint("LEFT",titlebg,"RIGHT",0,0)
Asa@0 239 titlebg_right:SetWidth(30)
Asa@0 240 titlebg_right:SetHeight(40)
Asa@0 241
Asa@0 242 title:SetAllPoints(titlebg)
Asa@0 243 local titletext = title:CreateFontString(nil,"OVERLAY","GameFontNormal")
Asa@0 244 titletext:SetPoint("TOP",titlebg,"TOP",0,-14)
Asa@0 245
Asa@0 246 self.titletext = titletext
Asa@0 247
Asa@0 248 local sizer_se = CreateFrame("Frame",nil,frame)
Asa@0 249 sizer_se:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,0)
Asa@0 250 sizer_se:SetWidth(25)
Asa@0 251 sizer_se:SetHeight(25)
Asa@0 252 sizer_se:EnableMouse()
Asa@0 253 sizer_se:SetScript("OnMouseDown",sizerseOnMouseDown)
Asa@0 254 sizer_se:SetScript("OnMouseUp", frameOnMouseUp)
Asa@0 255 self.sizer_se = sizer_se
Asa@0 256
Asa@0 257 local line1 = sizer_se:CreateTexture(nil, "BACKGROUND")
Asa@0 258 self.line1 = line1
Asa@0 259 line1:SetWidth(14)
Asa@0 260 line1:SetHeight(14)
Asa@0 261 line1:SetPoint("BOTTOMRIGHT", -8, 8)
Asa@0 262 line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
Asa@0 263 local x = 0.1 * 14/17
Asa@0 264 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
Asa@0 265
Asa@0 266 local line2 = sizer_se:CreateTexture(nil, "BACKGROUND")
Asa@0 267 self.line2 = line2
Asa@0 268 line2:SetWidth(8)
Asa@0 269 line2:SetHeight(8)
Asa@0 270 line2:SetPoint("BOTTOMRIGHT", -8, 8)
Asa@0 271 line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
Asa@0 272 local x = 0.1 * 8/17
Asa@0 273 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
Asa@0 274
Asa@0 275 local sizer_s = CreateFrame("Frame",nil,frame)
Asa@0 276 sizer_s:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-25,0)
Asa@0 277 sizer_s:SetPoint("BOTTOMLEFT",frame,"BOTTOMLEFT",0,0)
Asa@0 278 sizer_s:SetHeight(25)
Asa@0 279 sizer_s:EnableMouse()
Asa@0 280 sizer_s:SetScript("OnMouseDown",sizersOnMouseDown)
Asa@0 281 sizer_s:SetScript("OnMouseUp", frameOnMouseUp)
Asa@0 282 self.sizer_s = sizer_s
Asa@0 283
Asa@0 284 local sizer_e = CreateFrame("Frame",nil,frame)
Asa@0 285 sizer_e:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,25)
Asa@0 286 sizer_e:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0)
Asa@0 287 sizer_e:SetWidth(25)
Asa@0 288 sizer_e:EnableMouse()
Asa@0 289 sizer_e:SetScript("OnMouseDown",sizereOnMouseDown)
Asa@0 290 sizer_e:SetScript("OnMouseUp", frameOnMouseUp)
Asa@0 291 self.sizer_e = sizer_e
Asa@0 292
Asa@0 293 --Container Support
Asa@0 294 local content = CreateFrame("Frame",nil,frame)
Asa@0 295 self.content = content
Asa@0 296 content.obj = self
Asa@0 297 content:SetPoint("TOPLEFT",frame,"TOPLEFT",17,-27)
Asa@0 298 content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-17,40)
Asa@0 299
Asa@0 300 AceGUI:RegisterAsContainer(self)
Asa@0 301 return self
Asa@0 302 end
Asa@0 303
Asa@0 304 AceGUI:RegisterWidgetType(Type,Constructor,Version)
Asa@0 305 end