annotate Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.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 --[[ $Id: AceGUIWidget-DropDown-Items.lua 877 2009-11-02 15:56:50Z nevcairiel $ ]]--
Asa@0 2
Asa@0 3 local AceGUI = LibStub("AceGUI-3.0")
Asa@0 4
Asa@0 5 -- Lua APIs
Asa@0 6 local select, assert = select, assert
Asa@0 7
Asa@0 8 -- WoW APIs
Asa@0 9 local CreateFrame = CreateFrame
Asa@0 10
Asa@0 11 local function fixlevels(parent,...)
Asa@0 12 local i = 1
Asa@0 13 local child = select(i, ...)
Asa@0 14 while child do
Asa@0 15 child:SetFrameLevel(parent:GetFrameLevel()+1)
Asa@0 16 fixlevels(child, child:GetChildren())
Asa@0 17 i = i + 1
Asa@0 18 child = select(i, ...)
Asa@0 19 end
Asa@0 20 end
Asa@0 21
Asa@0 22 local function fixstrata(strata, parent, ...)
Asa@0 23 local i = 1
Asa@0 24 local child = select(i, ...)
Asa@0 25 parent:SetFrameStrata(strata)
Asa@0 26 while child do
Asa@0 27 fixstrata(strata, child, child:GetChildren())
Asa@0 28 i = i + 1
Asa@0 29 child = select(i, ...)
Asa@0 30 end
Asa@0 31 end
Asa@0 32
Asa@0 33 -- ItemBase is the base "class" for all dropdown items.
Asa@0 34 -- Each item has to use ItemBase.Create(widgetType) to
Asa@0 35 -- create an initial 'self' value.
Asa@0 36 -- ItemBase will add common functions and ui event handlers.
Asa@0 37 -- Be sure to keep basic usage when you override functions.
Asa@0 38
Asa@0 39 local ItemBase = {
Asa@0 40 -- NOTE: The ItemBase version is added to each item's version number
Asa@0 41 -- to ensure proper updates on ItemBase changes.
Asa@0 42 -- Use at least 1000er steps.
Asa@0 43 version = 1000,
Asa@0 44 counter = 0,
Asa@0 45 }
Asa@0 46
Asa@0 47 function ItemBase.Frame_OnEnter(this)
Asa@0 48 local self = this.obj
Asa@0 49
Asa@0 50 if self.useHighlight then
Asa@0 51 self.highlight:Show()
Asa@0 52 end
Asa@0 53 self:Fire("OnEnter")
Asa@0 54
Asa@0 55 if self.specialOnEnter then
Asa@0 56 self.specialOnEnter(self)
Asa@0 57 end
Asa@0 58 end
Asa@0 59
Asa@0 60 function ItemBase.Frame_OnLeave(this)
Asa@0 61 local self = this.obj
Asa@0 62
Asa@0 63 self.highlight:Hide()
Asa@0 64 self:Fire("OnLeave")
Asa@0 65
Asa@0 66 if self.specialOnLeave then
Asa@0 67 self.specialOnLeave(self)
Asa@0 68 end
Asa@0 69 end
Asa@0 70
Asa@0 71 -- exported, AceGUI callback
Asa@0 72 function ItemBase.OnAcquire(self)
Asa@0 73 self.frame:SetToplevel(true)
Asa@0 74 self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
Asa@0 75 end
Asa@0 76
Asa@0 77 -- exported, AceGUI callback
Asa@0 78 function ItemBase.OnRelease(self)
Asa@0 79 self:SetDisabled(false)
Asa@0 80 self.pullout = nil
Asa@0 81 self.frame:SetParent(nil)
Asa@0 82 self.frame:ClearAllPoints()
Asa@0 83 self.frame:Hide()
Asa@0 84 end
Asa@0 85
Asa@0 86 -- exported
Asa@0 87 -- NOTE: this is called by a Dropdown-Pullout.
Asa@0 88 -- Do not call this method directly
Asa@0 89 function ItemBase.SetPullout(self, pullout)
Asa@0 90 self.pullout = pullout
Asa@0 91
Asa@0 92 self.frame:SetParent(nil)
Asa@0 93 self.frame:SetParent(pullout.itemFrame)
Asa@0 94 self.parent = pullout.itemFrame
Asa@0 95 fixlevels(pullout.itemFrame, pullout.itemFrame:GetChildren())
Asa@0 96 end
Asa@0 97
Asa@0 98 -- exported
Asa@0 99 function ItemBase.SetText(self, text)
Asa@0 100 self.text:SetText(text or "")
Asa@0 101 end
Asa@0 102
Asa@0 103 -- exported
Asa@0 104 function ItemBase.GetText(self)
Asa@0 105 return self.text:GetText()
Asa@0 106 end
Asa@0 107
Asa@0 108 -- exported
Asa@0 109 function ItemBase.SetPoint(self, ...)
Asa@0 110 self.frame:SetPoint(...)
Asa@0 111 end
Asa@0 112
Asa@0 113 -- exported
Asa@0 114 function ItemBase.Show(self)
Asa@0 115 self.frame:Show()
Asa@0 116 end
Asa@0 117
Asa@0 118 -- exported
Asa@0 119 function ItemBase.Hide(self)
Asa@0 120 self.frame:Hide()
Asa@0 121 end
Asa@0 122
Asa@0 123 -- exported
Asa@0 124 function ItemBase.SetDisabled(self, disabled)
Asa@0 125 self.disabled = disabled
Asa@0 126 if disabled then
Asa@0 127 self.useHighlight = false
Asa@0 128 self.text:SetTextColor(.5, .5, .5)
Asa@0 129 else
Asa@0 130 self.useHighlight = true
Asa@0 131 self.text:SetTextColor(1, 1, 1)
Asa@0 132 end
Asa@0 133 end
Asa@0 134
Asa@0 135 -- exported
Asa@0 136 -- NOTE: this is called by a Dropdown-Pullout.
Asa@0 137 -- Do not call this method directly
Asa@0 138 function ItemBase.SetOnLeave(self, func)
Asa@0 139 self.specialOnLeave = func
Asa@0 140 end
Asa@0 141
Asa@0 142 -- exported
Asa@0 143 -- NOTE: this is called by a Dropdown-Pullout.
Asa@0 144 -- Do not call this method directly
Asa@0 145 function ItemBase.SetOnEnter(self, func)
Asa@0 146 self.specialOnEnter = func
Asa@0 147 end
Asa@0 148
Asa@0 149 function ItemBase.Create(type)
Asa@0 150 -- NOTE: Most of the following code is copied from AceGUI-3.0/Dropdown widget
Asa@0 151 local count = AceGUI:GetNextWidgetNum(type)
Asa@0 152 local frame = CreateFrame("Button", "AceGUI30DropDownItem"..count)
Asa@0 153 local self = {}
Asa@0 154 self.frame = frame
Asa@0 155 frame.obj = self
Asa@0 156 self.type = type
Asa@0 157
Asa@0 158 self.useHighlight = true
Asa@0 159
Asa@0 160 frame:SetHeight(17)
Asa@0 161 frame:SetFrameStrata("FULLSCREEN_DIALOG")
Asa@0 162
Asa@0 163 local text = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall")
Asa@0 164 text:SetTextColor(1,1,1)
Asa@0 165 text:SetJustifyH("LEFT")
Asa@0 166 text:SetPoint("TOPLEFT",frame,"TOPLEFT",18,0)
Asa@0 167 text:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-8,0)
Asa@0 168 self.text = text
Asa@0 169
Asa@0 170 local highlight = frame:CreateTexture(nil, "OVERLAY")
Asa@0 171 highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
Asa@0 172 highlight:SetBlendMode("ADD")
Asa@0 173 highlight:SetHeight(14)
Asa@0 174 highlight:ClearAllPoints()
Asa@0 175 highlight:SetPoint("RIGHT",frame,"RIGHT",-3,0)
Asa@0 176 highlight:SetPoint("LEFT",frame,"LEFT",5,0)
Asa@0 177 highlight:Hide()
Asa@0 178 self.highlight = highlight
Asa@0 179
Asa@0 180 local check = frame:CreateTexture("OVERLAY")
Asa@0 181 check:SetWidth(16)
Asa@0 182 check:SetHeight(16)
Asa@0 183 check:SetPoint("LEFT",frame,"LEFT",3,-1)
Asa@0 184 check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
Asa@0 185 check:Hide()
Asa@0 186 self.check = check
Asa@0 187
Asa@0 188 local sub = frame:CreateTexture("OVERLAY")
Asa@0 189 sub:SetWidth(16)
Asa@0 190 sub:SetHeight(16)
Asa@0 191 sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1)
Asa@0 192 sub:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow")
Asa@0 193 sub:Hide()
Asa@0 194 self.sub = sub
Asa@0 195
Asa@0 196 frame:SetScript("OnEnter", ItemBase.Frame_OnEnter)
Asa@0 197 frame:SetScript("OnLeave", ItemBase.Frame_OnLeave)
Asa@0 198
Asa@0 199 self.OnAcquire = ItemBase.OnAcquire
Asa@0 200 self.OnRelease = ItemBase.OnRelease
Asa@0 201
Asa@0 202 self.SetPullout = ItemBase.SetPullout
Asa@0 203 self.GetText = ItemBase.GetText
Asa@0 204 self.SetText = ItemBase.SetText
Asa@0 205 self.SetDisabled = ItemBase.SetDisabled
Asa@0 206
Asa@0 207 self.SetPoint = ItemBase.SetPoint
Asa@0 208 self.Show = ItemBase.Show
Asa@0 209 self.Hide = ItemBase.Hide
Asa@0 210
Asa@0 211 self.SetOnLeave = ItemBase.SetOnLeave
Asa@0 212 self.SetOnEnter = ItemBase.SetOnEnter
Asa@0 213
Asa@0 214 return self
Asa@0 215 end
Asa@0 216
Asa@0 217 --[[
Asa@0 218 Template for items:
Asa@0 219
Asa@0 220 -- Item:
Asa@0 221 --
Asa@0 222 do
Asa@0 223 local widgetType = "Dropdown-Item-"
Asa@0 224 local widgetVersion = 1
Asa@0 225
Asa@0 226 local function Constructor()
Asa@0 227 local self = ItemBase.Create(widgetType)
Asa@0 228
Asa@0 229 AceGUI:RegisterAsWidget(self)
Asa@0 230 return self
Asa@0 231 end
Asa@0 232
Asa@0 233 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 234 end
Asa@0 235 --]]
Asa@0 236
Asa@0 237 -- Item: Header
Asa@0 238 -- A single text entry.
Asa@0 239 -- Special: Different text color and no highlight
Asa@0 240 do
Asa@0 241 local widgetType = "Dropdown-Item-Header"
Asa@0 242 local widgetVersion = 1
Asa@0 243
Asa@0 244 local function OnEnter(this)
Asa@0 245 local self = this.obj
Asa@0 246 self:Fire("OnEnter")
Asa@0 247
Asa@0 248 if self.specialOnEnter then
Asa@0 249 self.specialOnEnter(self)
Asa@0 250 end
Asa@0 251 end
Asa@0 252
Asa@0 253 local function OnLeave(this)
Asa@0 254 local self = this.obj
Asa@0 255 self:Fire("OnLeave")
Asa@0 256
Asa@0 257 if self.specialOnLeave then
Asa@0 258 self.specialOnLeave(self)
Asa@0 259 end
Asa@0 260 end
Asa@0 261
Asa@0 262 -- exported, override
Asa@0 263 local function SetDisabled(self, disabled)
Asa@0 264 ItemBase.SetDisabled(self, disabled)
Asa@0 265 if not disabled then
Asa@0 266 self.text:SetTextColor(1, 1, 0)
Asa@0 267 end
Asa@0 268 end
Asa@0 269
Asa@0 270 local function Constructor()
Asa@0 271 local self = ItemBase.Create(widgetType)
Asa@0 272
Asa@0 273 self.SetDisabled = SetDisabled
Asa@0 274
Asa@0 275 self.frame:SetScript("OnEnter", OnEnter)
Asa@0 276 self.frame:SetScript("OnLeave", OnLeave)
Asa@0 277
Asa@0 278 self.text:SetTextColor(1, 1, 0)
Asa@0 279
Asa@0 280 AceGUI:RegisterAsWidget(self)
Asa@0 281 return self
Asa@0 282 end
Asa@0 283
Asa@0 284 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 285 end
Asa@0 286
Asa@0 287 -- Item: Execute
Asa@0 288 -- A simple button
Asa@0 289 do
Asa@0 290 local widgetType = "Dropdown-Item-Execute"
Asa@0 291 local widgetVersion = 1
Asa@0 292
Asa@0 293 local function Frame_OnClick(this, button)
Asa@0 294 local self = this.obj
Asa@0 295 if self.disabled then return end
Asa@0 296 self:Fire("OnClick")
Asa@0 297 if self.pullout then
Asa@0 298 self.pullout:Close()
Asa@0 299 end
Asa@0 300 end
Asa@0 301
Asa@0 302 local function Constructor()
Asa@0 303 local self = ItemBase.Create(widgetType)
Asa@0 304
Asa@0 305 self.frame:SetScript("OnClick", Frame_OnClick)
Asa@0 306
Asa@0 307 AceGUI:RegisterAsWidget(self)
Asa@0 308 return self
Asa@0 309 end
Asa@0 310
Asa@0 311 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 312 end
Asa@0 313
Asa@0 314 -- Item: Toggle
Asa@0 315 -- Some sort of checkbox for dropdown menus.
Asa@0 316 -- Does not close the pullout on click.
Asa@0 317 do
Asa@0 318 local widgetType = "Dropdown-Item-Toggle"
Asa@0 319 local widgetVersion = 2
Asa@0 320
Asa@0 321 local function UpdateToggle(self)
Asa@0 322 if self.value then
Asa@0 323 self.check:Show()
Asa@0 324 else
Asa@0 325 self.check:Hide()
Asa@0 326 end
Asa@0 327 end
Asa@0 328
Asa@0 329 local function OnRelease(self)
Asa@0 330 ItemBase.OnRelease(self)
Asa@0 331 self:SetValue(nil)
Asa@0 332 end
Asa@0 333
Asa@0 334 local function Frame_OnClick(this, button)
Asa@0 335 local self = this.obj
Asa@0 336 if self.disabled then return end
Asa@0 337 self.value = not self.value
Asa@0 338 UpdateToggle(self)
Asa@0 339 self:Fire("OnValueChanged", self.value)
Asa@0 340 end
Asa@0 341
Asa@0 342 -- exported
Asa@0 343 local function SetValue(self, value)
Asa@0 344 self.value = value
Asa@0 345 UpdateToggle(self)
Asa@0 346 end
Asa@0 347
Asa@0 348 -- exported
Asa@0 349 local function GetValue(self)
Asa@0 350 return self.value
Asa@0 351 end
Asa@0 352
Asa@0 353 local function Constructor()
Asa@0 354 local self = ItemBase.Create(widgetType)
Asa@0 355
Asa@0 356 self.frame:SetScript("OnClick", Frame_OnClick)
Asa@0 357
Asa@0 358 self.SetValue = SetValue
Asa@0 359 self.GetValue = GetValue
Asa@0 360 self.OnRelease = OnRelease
Asa@0 361
Asa@0 362 AceGUI:RegisterAsWidget(self)
Asa@0 363 return self
Asa@0 364 end
Asa@0 365
Asa@0 366 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 367 end
Asa@0 368
Asa@0 369 -- Item: Menu
Asa@0 370 -- Shows a submenu on mouse over
Asa@0 371 -- Does not close the pullout on click
Asa@0 372 do
Asa@0 373 local widgetType = "Dropdown-Item-Menu"
Asa@0 374 local widgetVersion = 2
Asa@0 375
Asa@0 376 local function OnEnter(this)
Asa@0 377 local self = this.obj
Asa@0 378 self:Fire("OnEnter")
Asa@0 379
Asa@0 380 if self.specialOnEnter then
Asa@0 381 self.specialOnEnter(self)
Asa@0 382 end
Asa@0 383
Asa@0 384 self.highlight:Show()
Asa@0 385
Asa@0 386 if not self.disabled and self.submenu then
Asa@0 387 self.submenu:Open("TOPLEFT", self.frame, "TOPRIGHT", self.pullout:GetRightBorderWidth(), 0, self.frame:GetFrameLevel() + 100)
Asa@0 388 end
Asa@0 389 end
Asa@0 390
Asa@0 391 local function OnHide(this)
Asa@0 392 local self = this.obj
Asa@0 393 if self.submenu then
Asa@0 394 self.submenu:Close()
Asa@0 395 end
Asa@0 396 end
Asa@0 397
Asa@0 398 -- exported
Asa@0 399 local function SetMenu(self, menu)
Asa@0 400 assert(menu.type == "Dropdown-Pullout")
Asa@0 401 self.submenu = menu
Asa@0 402 end
Asa@0 403
Asa@0 404 -- exported
Asa@0 405 local function CloseMenu(self)
Asa@0 406 self.submenu:Close()
Asa@0 407 end
Asa@0 408
Asa@0 409 local function Constructor()
Asa@0 410 local self = ItemBase.Create(widgetType)
Asa@0 411
Asa@0 412 self.sub:Show()
Asa@0 413
Asa@0 414 self.frame:SetScript("OnEnter", OnEnter)
Asa@0 415 self.frame:SetScript("OnHide", OnHide)
Asa@0 416
Asa@0 417 self.SetMenu = SetMenu
Asa@0 418 self.CloseMenu = CloseMenu
Asa@0 419
Asa@0 420 AceGUI:RegisterAsWidget(self)
Asa@0 421 return self
Asa@0 422 end
Asa@0 423
Asa@0 424 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 425 end
Asa@0 426
Asa@0 427 -- Item: Separator
Asa@0 428 -- A single line to separate items
Asa@0 429 do
Asa@0 430 local widgetType = "Dropdown-Item-Separator"
Asa@0 431 local widgetVersion = 1
Asa@0 432
Asa@0 433 -- exported, override
Asa@0 434 local function SetDisabled(self, disabled)
Asa@0 435 ItemBase.SetDisabled(self, disabled)
Asa@0 436 self.useHighlight = false
Asa@0 437 end
Asa@0 438
Asa@0 439 local function Constructor()
Asa@0 440 local self = ItemBase.Create(widgetType)
Asa@0 441
Asa@0 442 self.SetDisabled = SetDisabled
Asa@0 443
Asa@0 444 local line = self.frame:CreateTexture(nil, "OVERLAY")
Asa@0 445 line:SetHeight(1)
Asa@0 446 line:SetTexture(.5, .5, .5)
Asa@0 447 line:SetPoint("LEFT", self.frame, "LEFT", 10, 0)
Asa@0 448 line:SetPoint("RIGHT", self.frame, "RIGHT", -10, 0)
Asa@0 449
Asa@0 450 self.text:Hide()
Asa@0 451
Asa@0 452 self.useHighlight = false
Asa@0 453
Asa@0 454 AceGUI:RegisterAsWidget(self)
Asa@0 455 return self
Asa@0 456 end
Asa@0 457
Asa@0 458 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version)
Asa@0 459 end