annotate ObjectiveTracker/ObjectiveWidgets.lua @ 77:51f248dc0276

setup working copy dingaling
author Nenue
date Sat, 27 Aug 2016 10:51:08 -0400
parents 66b927b46776
children
rev   line source
Nenue@13 1 local B = select(2,...).frame
Nenue@24 2 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@13 3 local print = B.print('WidgetFactory')
Nenue@24 4 local _G, UIParent = _G, UIParent
Nenue@13 5 local GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown
Nenue@13 6 local CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll = CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll
Nenue@24 7 local tremove, tContains, pairs, ipairs, setmetatable, floor = tremove, tContains, pairs, ipairs, setmetatable, floor
Nenue@24 8 local SetItemButtonTexture, SetItemButtonCount = SetItemButtonTexture, SetItemButtonCount
Nenue@24 9 local ToggleWorldMap, GetTrackedAchievements, GetTasksTable = ToggleWorldMap, GetTrackedAchievements, GetTasksTable
Nenue@24 10 -- GLOBALS: Veneer_QuestObjectiveItem_UpdateCooldown, Veneer_QuestObjectiveItem_OnUpdate
Nenue@14 11 --- frame refs
Nenue@14 12 local Wrapper = _G.VeneerObjectiveWrapper
Nenue@14 13 local Scroller = Wrapper.scrollArea
Nenue@14 14 local CloseButton = Wrapper.CloseButton
Nenue@14 15 local QuestMapButton = Wrapper.QuestMapButton
Nenue@14 16 local Scroll = _G.VeneerObjectiveScroll
Nenue@24 17 local usedButtons = T.Quest.itemButtons
Nenue@24 18 local freeButtons = T.Quest.freeButtons
Nenue@14 19
Nenue@24 20 T.buttons = {
Nenue@14 21 CloseButton = {
Nenue@14 22 closedSwatch = {
Nenue@14 23 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 24 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 25 0, 0.5, 0.5, 1,
Nenue@14 26 0.5, 1, 0.5, 1,
Nenue@14 27 },
Nenue@14 28 openSwatch = {
Nenue@14 29 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 30 [[Interface\Buttons\UI-Panel-QuestHideButton]],
Nenue@14 31 0.5, 1, 0.5, 1,
Nenue@14 32 0, 0.5, 0.5, 1,
Nenue@14 33 },
Nenue@14 34 parent = 'VeneerObjectiveWrapper'
Nenue@14 35 },
Nenue@14 36 QuestMapButton = {
Nenue@14 37 closedSwatch = {
Nenue@14 38 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 39 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 40 0, 1, 0.5, 1,
Nenue@14 41 0, 1, 0, 0.5,
Nenue@14 42 },
Nenue@14 43 openSwatch = {
Nenue@14 44 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 45 [[Interface\QUESTFRAME\UI-QUESTMAP_BUTTON]],
Nenue@14 46 0, 1, 0, 0.5,
Nenue@14 47 0, 1, 0.5, 1,
Nenue@14 48 }
Nenue@14 49 }
Nenue@14 50 }
Nenue@14 51
Nenue@14 52 local Scroller_OnShow = function()
Nenue@14 53 Wrapper.watchMoneyReasons = 0;
Nenue@24 54 --T:Update()
Nenue@24 55 --T:OnInitialize()
Nenue@14 56 for i, region in ipairs(Wrapper.headerComplex) do
Nenue@14 57 region:Show()
Nenue@14 58 end
Nenue@14 59 end
Nenue@14 60
Nenue@14 61 local Scroller_OnHide = function()
Nenue@14 62 local self = Wrapper
Nenue@14 63 Wrapper:UnregisterAllEvents()
Nenue@14 64 Wrapper:SetScript('OnEvent', nil)
Nenue@14 65 for i, region in ipairs(Wrapper.headerComplex) do
Nenue@14 66 region:Hide()
Nenue@14 67 end
Nenue@14 68 end
Nenue@14 69
Nenue@14 70 local Scroller_OnMouseWheel = function(self, delta)
Nenue@14 71 local r = Scroll:GetHeight() - Scroller:GetHeight()
Nenue@14 72 local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5)
Nenue@14 73 local from = self:GetVerticalScroll()
Nenue@21 74 print('|cFF00FF00OnMouseWheel', 'scroll =', s)
Nenue@14 75 if s >= r then
Nenue@14 76 s = r
Nenue@14 77 elseif s < 1 then
Nenue@14 78 s = 0
Nenue@14 79 end
Nenue@14 80 self:SetVerticalScroll(s)
Nenue@14 81 B.Conf.ObjectiveScroll = s
Nenue@14 82 print('|cFF00FF00OnMouseWheel', 'from = ', from, 'scroll =', s, ' range =', r, 'current =', self:GetVerticalScroll())
Nenue@14 83
Nenue@24 84 T.UpdateActionButtons('SCROLLING')
Nenue@14 85 end
Nenue@14 86
Nenue@14 87 local UpdatePanelButton = function (self, state)
Nenue@24 88 state = state or true
Nenue@24 89 local swatch = (state == true) and self.openSwatch or self.closedSwatch
Nenue@24 90 print((state ~= true) and 'closedSwatch' or 'openSwatch')
Nenue@14 91 self:SetNormalTexture(swatch[1])
Nenue@14 92 self:SetPushedTexture(swatch[2])
Nenue@14 93 if #swatch >= 6 then
Nenue@14 94 self:GetNormalTexture():SetTexCoord(swatch[3], swatch[4], swatch[5], swatch[6])
Nenue@14 95 end
Nenue@14 96 if #swatch == 10 then
Nenue@14 97 self:GetPushedTexture():SetTexCoord(swatch[7], swatch[8], swatch[9], swatch[10])
Nenue@14 98 end
Nenue@14 99
Nenue@14 100 end
Nenue@14 101
Nenue@14 102 local OnClick = {}
Nenue@14 103 OnClick.CloseButton = function(self)
Nenue@24 104 T:SetEnabled()
Nenue@24 105 UpdatePanelButton(self, T.Conf.enabled)
Nenue@14 106 end
Nenue@14 107
Nenue@14 108 OnClick.QuestMapButton = function()
Nenue@14 109 ToggleWorldMap()
Nenue@14 110 end
Nenue@14 111
Nenue@22 112
Nenue@24 113 T.InitializeWidgets = function()
Nenue@24 114 local panelButtons = T.buttons
Nenue@14 115 --- tracker scroll
Nenue@14 116 Scroller:SetScript('OnMouseWheel', Scroller_OnMouseWheel)
Nenue@14 117 Scroller:SetScript('OnShow', Scroller_OnShow)
Nenue@14 118 Scroller:SetScript('OnHide', Scroller_OnHide)
Nenue@14 119 for name, swatch in pairs(panelButtons) do
Nenue@14 120 local source = swatch and swatch or panelButtons.CloseButton
Nenue@14 121 local button = Wrapper[name]
Nenue@14 122 button.parent = swatch.parent
Nenue@14 123 button.openSwatch = source.openSwatch
Nenue@14 124 button.closedSwatch = source.closedSwatch
Nenue@14 125 if OnClick[name] then
Nenue@14 126 button:SetScript('OnClick', OnClick[name])
Nenue@14 127 end
Nenue@24 128 UpdatePanelButton(button, T.Conf.enabled)
Nenue@14 129 end
Nenue@14 130 end
Nenue@14 131
Nenue@13 132 ----------------------------------------------------------------------------------------
Nenue@24 133 --- modified version of the itemButton initializer used by Barjack's 'QuestKing 2' addon,
Nenue@24 134 --- url: http://mods.curse.com/addons/wow/questking
Nenue@13 135 ----------------------------------------------------------------------------------------
Nenue@24 136 T.SetItemButton = function(block, info)
Nenue@13 137 local itemInfo = info.specialItem
Nenue@13 138 if not itemInfo then
Nenue@13 139 return
Nenue@13 140 end
Nenue@13 141
Nenue@13 142 local itemButton
Nenue@13 143 if not info.itemButton then
Nenue@13 144 if #freeButtons >= 1 then
Nenue@13 145 print(' |cFF00FFFFfound a free button')
Nenue@13 146 itemButton = freeButtons[#freeButtons]
Nenue@13 147 freeButtons[#freeButtons] = nil
Nenue@13 148 if itemButton.block then
Nenue@13 149 itemButton.block.itemButton = nil
Nenue@13 150 itemButton.block = nil
Nenue@13 151 end
Nenue@13 152 else
Nenue@24 153 local buttonIndex = T.Quest.numButtons + #freeButtons + 1
Nenue@13 154 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
Nenue@13 155 itemButton.buttonIndex = buttonIndex
Nenue@13 156 itemButton:SetSize(36, 36)
Nenue@13 157 itemButton:GetNormalTexture():SetSize(36 * (5/3), 36 * (5/3))
Nenue@13 158 print(' |cFFFF4400starting new button', itemButton:GetName())
Nenue@13 159 end
Nenue@24 160 T.Quest.numButtons = T.Quest.numButtons + 1
Nenue@13 161 else
Nenue@13 162 itemButton = info.itemButton
Nenue@13 163 print(' |cFF00FF00found assigned button', itemButton:GetName())
Nenue@13 164
Nenue@13 165 end
Nenue@13 166 -- set values
Nenue@13 167
Nenue@13 168 info.itemButton = itemButton
Nenue@13 169 usedButtons[info.questID] = itemButton
Nenue@13 170 print(' |cFF8800FFassigning|r', itemButton:GetName(), 'to quest|cFF00FF00', info.questID, '|rat|cFFFFFF00', block:GetName(),'|r')
Nenue@13 171
Nenue@13 172 for k,v in pairs(usedButtons) do
Nenue@13 173 print('|cFFFF44DD'..k..'|r', v:GetName())
Nenue@13 174 end
Nenue@13 175
Nenue@13 176 itemButton:SetAttribute("type", "item")
Nenue@13 177 itemButton:SetAttribute("item", itemInfo.link)
Nenue@13 178
Nenue@13 179 itemButton.questID = info.questID
Nenue@13 180 itemButton.questLogIndex = info.questLogIndex
Nenue@13 181 itemButton.charges = itemInfo.charges
Nenue@13 182 itemButton.rangeTimer = -1
Nenue@13 183 itemButton.block = block
Nenue@13 184
Nenue@13 185 SetItemButtonTexture(itemButton, itemInfo.icon)
Nenue@13 186 SetItemButtonCount(itemButton, itemInfo.charges)
Nenue@13 187 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
Nenue@13 188
Nenue@13 189 return itemButton
Nenue@13 190 end
Nenue@13 191 --- Clear an itemButton from the given block
Nenue@24 192 T.FreeItemButtons = function(block)
Nenue@13 193
Nenue@13 194 if block.itemButton then
Nenue@13 195 local itemButton = block.itemButton
Nenue@13 196 if itemButton.questID ~= block.info.questID then
Nenue@13 197 block.itemButton = nil
Nenue@24 198 itemButton.block = T.Quest.InfoBlock[itemButton.questID]
Nenue@13 199 else
Nenue@13 200 itemButton.block = nil
Nenue@13 201 itemButton:Hide()
Nenue@13 202
Nenue@13 203 usedButtons[itemButton.questID] = nil
Nenue@13 204 freeButtons[#freeButtons + 1] = itemButton
Nenue@24 205 T.Quest.numButtons = T.Quest.numButtons - 1
Nenue@13 206 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
Nenue@13 207 end
Nenue@13 208 end
Nenue@13 209 end
Nenue@13 210
Nenue@13 211 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
Nenue@13 212 -- Handle range indicator
Nenue@13 213 local rangeTimer = self.rangeTimer
Nenue@13 214 if (rangeTimer) then
Nenue@13 215 rangeTimer = rangeTimer - elapsed
Nenue@13 216 if (rangeTimer <= 0) then
Nenue@13 217 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
Nenue@13 218 if ((not charges) or (charges ~= self.charges)) then
Nenue@24 219 T:Update()
Nenue@13 220 return
Nenue@13 221 end
Nenue@13 222
Nenue@13 223 local count = self.HotKey
Nenue@13 224 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
Nenue@13 225 if (valid == 0) then
Nenue@13 226 count:Show()
Nenue@13 227 count:SetVertexColor(1.0, 0.1, 0.1)
Nenue@13 228 elseif (valid == 1) then
Nenue@13 229 count:Show()
Nenue@13 230 count:SetVertexColor(0.6, 0.6, 0.6)
Nenue@13 231 else
Nenue@13 232 count:Hide()
Nenue@13 233 end
Nenue@13 234 rangeTimer = TOOLTIP_UPDATE_TIME
Nenue@13 235 end
Nenue@13 236
Nenue@13 237 self.rangeTimer = rangeTimer
Nenue@13 238 end
Nenue@13 239 end
Nenue@13 240
Nenue@13 241 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
Nenue@13 242 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
Nenue@13 243 if (start) then
Nenue@13 244 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
Nenue@13 245 if (duration > 0 and enable == 0) then
Nenue@13 246 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
Nenue@13 247 else
Nenue@13 248 SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
Nenue@13 249 end
Nenue@13 250 end
Nenue@13 251 end
Nenue@13 252
Nenue@13 253 -----------------------------------------
Nenue@13 254 -- Criteria frames
Nenue@13 255
Nenue@13 256 --[[
Nenue@13 257 text = description,
Nenue@13 258 type = type,
Nenue@13 259 finished = completed,
Nenue@13 260 quantity = quantity,
Nenue@13 261 requiredQuantity = requiredQuantity,
Nenue@13 262 characterName = characterName,
Nenue@13 263 flags = flags,
Nenue@13 264 assetID = assetID,
Nenue@13 265 quantityString = quantityString,
Nenue@13 266 criteriaID = criteriaID,
Nenue@13 267 ]]
Nenue@13 268 local newWidgetID = 0
Nenue@24 269 T.WidgetRegistry = {}
Nenue@24 270 local wr = T.WidgetRegistry
Nenue@13 271
Nenue@13 272 --- Get a usable widget for the given achievement criteria set.
Nenue@13 273 -- Returns a frame object with dimensioning parameters needed to size the receiving tracker block
Nenue@24 274 T.SetWidget = function(line, data, objectiveType, objectiveKey)
Nenue@13 275 local print = B.print('ObjectiveWidgets')
Nenue@14 276 local widgetType = objectiveType
Nenue@13 277 local widget
Nenue@14 278 if wr[widgetType] and wr[widgetType].used[objectiveKey] then
Nenue@14 279 widget = wr[widgetType].used[objectiveKey]
Nenue@14 280 print('|cFF00FF00Updating ('..objectiveKey..')', widget)
Nenue@13 281 elseif not wr[widgetType] or #wr[widgetType].free == 0 then
Nenue@13 282 widget = CreateFrame('Frame', 'VeneerObjective' .. widgetType .. (wr[widgetType] and (wr[widgetType].lastn+1) or (1)), VeneerObjectiveScroll, 'VeneerObjectiveCriteria' .. widgetType)
Nenue@13 283
Nenue@13 284 print('|cFFFF0088Creating `'..widget:GetName()..'` id', wr[widgetType].lastn)
Nenue@13 285 else
Nenue@13 286 widget = tremove(wr[widgetType].free)
Nenue@13 287 print('|cFFFFFF00Acquiring released widget', widget:GetName())
Nenue@13 288 end
Nenue@13 289
Nenue@14 290
Nenue@14 291 wr[widgetType].used[objectiveKey] = widget
Nenue@14 292 widget.line = line
Nenue@21 293 widget.objective = data
Nenue@14 294 widget.key = objectiveKey
Nenue@24 295 T.InitializeWidget(widget)
Nenue@13 296 return widget
Nenue@13 297 end
Nenue@13 298
Nenue@13 299 --- WidgetTemplate 'OnLoad'
Nenue@24 300 T.RegisterWidget = function(frame)
Nenue@13 301 local print = B.print('ObjectiveWidgets')
Nenue@13 302 local widgetType = frame.widgetType
Nenue@13 303 if not wr[frame.widgetType] then
Nenue@13 304 print('|cFFFF4400[[WidgetTemplate]]|r', widgetType)
Nenue@13 305 wr[widgetType] = { lastn = 1, free = {}, used = {}, usedIndex = {}, freeIndex = {} }
Nenue@13 306 else
Nenue@13 307 print('|cFF0088FF+ [[WidgetTemplate]]r', widgetType, wr[widgetType].lastn)
Nenue@13 308 wr[widgetType].lastn = wr[widgetType].lastn + 1
Nenue@13 309 end
Nenue@13 310 end
Nenue@13 311
Nenue@13 312 --- WidgetTemplate 'OnShow'
Nenue@24 313 T.InitializeWidget = setmetatable({}, {
Nenue@13 314 __call = function(t, frame)
Nenue@13 315 -- todo: config pull
Nenue@13 316
Nenue@24 317 frame:SetWidth(T.Conf.Wrapper.Width - T.Conf.Style.Format.status.Indent * 2)
Nenue@24 318 frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType])
Nenue@13 319 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
Nenue@13 320 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
Nenue@13 321 frame:RegisterEvent('CRITERIA_UPDATE')
Nenue@13 322 frame:RegisterEvent('CRITERIA_COMPLETE')
Nenue@13 323 frame:RegisterEvent('CRITERIA_EARNED')
Nenue@14 324 t[frame.widgetType](frame)
Nenue@24 325 T.UpdateWidget[frame.widgetType](frame)
Nenue@13 326 end,
Nenue@13 327 })
Nenue@13 328
Nenue@13 329 --- WidgetTemplate 'OnEvent'
Nenue@24 330 T.UpdateWidget = setmetatable({}, {
Nenue@13 331 __call = function(t, frame)
Nenue@13 332 if not frame.widgetType then
Nenue@13 333 error('Invalid widget template, needs .widgetType')
Nenue@13 334 return
Nenue@13 335 end
Nenue@13 336
Nenue@13 337 return t[frame.widgetType](frame)
Nenue@13 338 end
Nenue@13 339 })
Nenue@13 340
Nenue@13 341 --- WidgetTemplate 'OnHide'
Nenue@24 342 T.ReleaseWidget = function(frame)
Nenue@16 343 --[[
Nenue@13 344 local print = B.print('ObjectiveWidgets')
Nenue@13 345 local reg = wr[frame.widgetType]
Nenue@14 346 if reg and reg.used[frame.key] then
Nenue@14 347 reg.used[frame.key] = nil
Nenue@14 348 frame.line = nil
Nenue@13 349 frame.info = nil
Nenue@13 350 frame:UnregisterAllEvents()
Nenue@13 351 tinsert(reg.free, frame)
Nenue@13 352 print('|cFFBBBBBBreleased from service', frame:GetName())
Nenue@13 353 end
Nenue@16 354 ]]
Nenue@13 355 end
Nenue@13 356
Nenue@13 357 --- RemoveTrackedAchievement post-hook
Nenue@24 358 T.CleanWidgets = function()
Nenue@13 359 local print = B.print('ObjectiveWidgets')
Nenue@13 360 local tracked = {GetTrackedAchievements() }
Nenue@14 361 local tasks = GetTasksTable()
Nenue@24 362 for type, reg in pairs(T.WidgetRegistry) do
Nenue@13 363 print('collecting', type)
Nenue@14 364 for key, frame in pairs(reg.used) do
Nenue@21 365 if frame.objective.cheevID then
Nenue@21 366 local id = frame.objective.cheevID
Nenue@13 367
Nenue@14 368 if id and not tContains(tracked, id) then
Nenue@13 369
Nenue@14 370 print(' untracked achievement', id, 'associated with', key, frame:GetName())
Nenue@14 371 frame:Hide()
Nenue@14 372 end
Nenue@21 373 elseif frame.objective.questID then
Nenue@14 374 -- do something for quest task
Nenue@13 375 end
Nenue@13 376 end
Nenue@13 377 end
Nenue@13 378 end
Nenue@13 379
Nenue@13 380
Nenue@14 381
Nenue@24 382 T.defaults.WidgetStyle = {
Nenue@21 383
Nenue@13 384 }
Nenue@21 385
Nenue@21 386 local progressHeight = 16
Nenue@22 387 local progressBorder = 1
Nenue@21 388 local progressIndent = 3
Nenue@21 389 local progressFont = _G.VeneerCriteriaFontNormal
Nenue@21 390
Nenue@21 391
Nenue@24 392 T.InitializeWidget.ProgressBar = function(self)
Nenue@24 393 local c = T.Conf.Wrapper
Nenue@21 394 self.height = progressHeight + c.TextSpacing
Nenue@21 395 self.width = c.Width - c.TextSpacing
Nenue@21 396 self.indent = progressIndent
Nenue@21 397
Nenue@21 398 self:SetHeight(progressHeight)
Nenue@21 399 self.bg:SetHeight(progressHeight)
Nenue@21 400 self.bg:SetWidth(self.width)
Nenue@13 401 self.fg:ClearAllPoints()
Nenue@22 402 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', progressBorder, progressBorder)
Nenue@22 403 self.fg:SetHeight(progressHeight - progressBorder * 2)
Nenue@21 404 self.status:SetFontObject(progressFont)
Nenue@21 405 self.status:SetText(self.objective.quantityString)
Nenue@13 406 end
Nenue@13 407
Nenue@24 408 T.UpdateWidget.ProgressBar = function (self)
Nenue@21 409 local quantity, requiredQuantity = self.objective.value, self.objective.maxValue
Nenue@14 410 print('update vals:')
Nenue@14 411 for k,v in pairs(self.line) do
Nenue@14 412 print(k, v)
Nenue@14 413 end
Nenue@13 414
Nenue@14 415 if self.line.format then
Nenue@21 416 self.status:SetFormattedText(self.line.format, quantity, requiredQuantity)
Nenue@14 417 end
Nenue@14 418
Nenue@21 419 local progress = (quantity / requiredQuantity)
Nenue@21 420 if progress >= 1 then
Nenue@21 421 self.fg:Show()
Nenue@22 422 self.fg:SetWidth(self.width - progressBorder * 2)
Nenue@21 423 elseif progress > 0 then
Nenue@21 424 self.fg:Show()
Nenue@21 425 print('color:', 1-progress*2 , progress*2 - 1,0,1)
Nenue@22 426 print('width:', (self.width -progressBorder * 2) * progress)
Nenue@21 427 self.fg:SetTexture(1-progress*2 , progress*2,0,1)
Nenue@22 428 self.fg:SetWidth((self.width -progressBorder * 2) * progress)
Nenue@21 429 else
Nenue@15 430 self.fg:Hide()
Nenue@13 431 end
Nenue@13 432 end
Nenue@13 433
Nenue@13 434
Nenue@24 435 T.InitializeWidget.Hidden = function (self)
Nenue@13 436 self.height = 0
Nenue@13 437 end
Nenue@24 438 T.UpdateWidget.Hidden = function (self)
Nenue@13 439 self.height= 0
Nenue@13 440 end