annotate ui/Ui.lua @ 179:eec8032ba9df v84

addon should close automatically when entering combat now
author yellowfive
date Thu, 13 Feb 2020 13:21:44 -0800
parents 35612aee8e15
children 5c586ff5fee5
rev   line source
yellowfive@57 1 local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot")
yellowfive@57 2 local L = LibStub("AceLocale-3.0"):GetLocale("AskMrRobot", true)
yellowfive@57 3 local AceGUI = LibStub("AceGUI-3.0")
yellowfive@57 4
yellowfive@57 5 -- used to make some stuff layer correctly
yellowfive@57 6 Amr.FrameLevels = {
yellowfive@57 7 High = 100,
yellowfive@57 8 Highest = 125
yellowfive@57 9 }
yellowfive@57 10
yellowfive@57 11 -- standard colors used throughout the UI (in standard 0-255 RGB format, game uses 0-1 decimals, but we auto-convert it below)
yellowfive@57 12 Amr.Colors = {
yellowfive@57 13 White = { R = 255, G = 255, B = 255 },
yellowfive@57 14 Black = { R = 0, G = 0, B = 0 },
yellowfive@57 15 Gray = { R = 153, G = 153, B = 153 },
yellowfive@57 16 Orange = { R = 201, G = 87, B = 1 },
yellowfive@57 17 Green = { R = 77, G = 134, B = 45 },
yellowfive@57 18 Blue = { R = 54, G = 172, B = 204 },
yellowfive@57 19 Red = { R = 204, G = 38, B = 38 },
yellowfive@57 20 Gold = { R = 255, G = 215, B = 0 },
yellowfive@57 21 BrightGreen = { R = 0, G = 255, B = 0 },
yellowfive@57 22 Text = { R = 255, G = 255, B = 255 },
yellowfive@57 23 TextHover = { R = 255, G = 255, B = 0 },
yellowfive@57 24 TextGray = { R = 120, G = 120, B = 120 },
yellowfive@57 25 TextHeaderActive = { R = 223, G = 134, B = 61 },
yellowfive@57 26 TextHeaderDisabled = { R = 188, G = 188, B = 188 },
yellowfive@57 27 TextTan = { R = 223, G = 192, B = 159 },
yellowfive@57 28 BorderBlue = { R = 26, G = 83, B = 98 },
yellowfive@57 29 BorderGray = { R = 96, G = 96, B = 96 },
yellowfive@57 30 Bg = { R = 41, G = 41, B = 41 },
yellowfive@57 31 BgInput = { R = 17, G = 17, B = 17 },
yellowfive@57 32 BarHigh = { R = 114, G = 197, B = 66 },
yellowfive@57 33 BarMed = { R = 255, G = 196, B = 36 },
yellowfive@57 34 BarLow = { R = 201, G = 87, B = 1 }
yellowfive@57 35 }
yellowfive@57 36
yellowfive@57 37 -- convert from common RGB to 0-1 RGB values
yellowfive@57 38 for k,v in pairs(Amr.Colors) do
yellowfive@57 39 v.R = v.R / 255
yellowfive@57 40 v.G = v.G / 255
yellowfive@57 41 v.B = v.B / 255
yellowfive@57 42 end
yellowfive@57 43
yellowfive@57 44 -- get colors for classes from WoW's constants
yellowfive@57 45 Amr.Colors.Classes = {}
yellowfive@57 46 for k,v in pairs(RAID_CLASS_COLORS) do
yellowfive@57 47 Amr.Colors.Classes[k] = { R = v.r, G = v.g, B = v.b }
yellowfive@57 48 end
yellowfive@57 49
yellowfive@133 50 -- get colors for item qualities from WoW's constants
yellowfive@133 51 Amr.Colors.Qualities = {}
yellowfive@133 52 for k,v in pairs(ITEM_QUALITY_COLORS) do
yellowfive@133 53 Amr.Colors.Qualities[k] = { R = v.r, G = v.g, B = v.b }
yellowfive@133 54 end
yellowfive@133 55
yellowfive@57 56 -- helper to take 0-1 value and turn into 2-digit hex value
yellowfive@57 57 local function decToHex(num)
yellowfive@57 58 num = math.ceil(num * 255)
yellowfive@57 59 num = string.format("%X", num)
yellowfive@57 60 if string.len(num) == 1 then num = "0" .. num end
yellowfive@57 61 return num
yellowfive@57 62 end
yellowfive@57 63
yellowfive@57 64 function Amr.ColorToHex(color, alpha)
yellowfive@57 65 return decToHex(alpha) .. decToHex(color.R) .. decToHex(color.G) .. decToHex(color.B)
yellowfive@57 66 end
yellowfive@57 67
yellowfive@57 68 local function getFontPath(style)
yellowfive@73 69 local locale = GetLocale()
yellowfive@73 70 if locale == "koKR" then
yellowfive@73 71 return "Fonts\\2002.TTF"
yellowfive@73 72 elseif locale == "zhCN" then
yellowfive@73 73 return "Fonts\\ARKai_T.ttf"
yellowfive@73 74 elseif locale == "zhTW" then
yellowfive@73 75 return "Fonts\\bLEI00D.ttf"
yellowfive@73 76 elseif locale == "ruRU" then
yellowfive@73 77 return "Fonts\\FRIZQT___CYR.TTF"
yellowfive@67 78 else
yellowfive@67 79 return "Interface\\AddOns\\" .. Amr.ADDON_NAME .. "\\Media\\Ubuntu-" .. style .. ".ttf"
yellowfive@67 80 end
yellowfive@57 81 end
yellowfive@57 82
yellowfive@57 83 -- create a font with the specified style (Regular, Bold, Italic), size (pixels, max of 32), color (object with R, G, B), and alpha (if not specified, defaults to 1)
yellowfive@57 84 function Amr.CreateFont(style, size, color, a)
yellowfive@57 85 local alpha = a or 1
yellowfive@57 86 local id = string.format("%s_%d_%f_%f_%f_%f", style, size, color.R, color.G, color.B, alpha)
yellowfive@57 87 local font = CreateFont(id)
yellowfive@57 88 font:SetFont(getFontPath(style), size)
yellowfive@57 89 font:SetTextColor(color.R, color.G, color.B, alpha)
yellowfive@57 90 return font
yellowfive@57 91 end
yellowfive@57 92
yellowfive@57 93 -- helper to create a solid texture from a color with R,G,B properties
yellowfive@57 94 function Amr.CreateTexture(parent, color, alpha, layer)
yellowfive@57 95 local t = parent:CreateTexture(nil, layer or "ARTWORK")
yellowfive@81 96 t:SetColorTexture(color.R, color.G, color.B, alpha or 1)
yellowfive@57 97 return t
yellowfive@57 98 end
yellowfive@57 99
yellowfive@57 100 -- helper to create a cheater shadow without having to create custom images
yellowfive@57 101 function Amr.DropShadow(frame)
yellowfive@57 102 local shadow = frame:CreateTexture(nil, "BACKGROUND")
yellowfive@81 103 shadow:SetColorTexture(0, 0, 0, 0.4)
yellowfive@57 104 shadow:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2)
yellowfive@57 105 shadow:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 1, -1)
yellowfive@57 106
yellowfive@57 107 shadow = frame:CreateTexture(nil, "BACKGROUND")
yellowfive@81 108 shadow:SetColorTexture(0, 0, 0, 0.3)
yellowfive@57 109 shadow:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2)
yellowfive@57 110 shadow:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 2, -2)
yellowfive@57 111
yellowfive@57 112 shadow = frame:CreateTexture(nil, "BACKGROUND")
yellowfive@81 113 shadow:SetColorTexture(0, 0, 0, 0.1)
yellowfive@57 114 shadow:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2)
yellowfive@57 115 shadow:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 3, -3)
yellowfive@57 116 end
yellowfive@57 117
yellowfive@57 118
yellowfive@57 119 -- a layout that does nothing, just lets the children position themselves how they prefer
yellowfive@57 120 AceGUI:RegisterLayout("None", function(content, children)
yellowfive@57 121 if content.obj.LayoutFinished then
yellowfive@57 122 content.obj:LayoutFinished(nil, nil)
yellowfive@57 123 end
yellowfive@57 124 end)
yellowfive@57 125
yellowfive@161 126
yellowfive@57 127 local _mainFrame = nil
yellowfive@57 128 local _mainTabs = nil
yellowfive@57 129 local _mainCover = nil
yellowfive@57 130 local _activeTab = "Export"
yellowfive@57 131
yellowfive@57 132 -- release everything when the UI is closed
yellowfive@57 133 local function onMainFrameClose(widget)
yellowfive@57 134 AceGUI:Release(widget)
yellowfive@57 135 Amr["ReleaseTab" .. _activeTab](Amr)
yellowfive@57 136 _mainFrame = nil
yellowfive@57 137 _mainTabs = nil
yellowfive@57 138 _mainCover = nil
yellowfive@57 139 end
yellowfive@57 140
yellowfive@57 141 local function onMainTabSelected(container, event, group)
yellowfive@57 142 container:ReleaseChildren()
yellowfive@57 143 Amr["ReleaseTab" .. _activeTab](Amr)
yellowfive@57 144
yellowfive@57 145 _activeTab = group
yellowfive@57 146
yellowfive@57 147 -- each section defines its own render method in a separate file (options tab is defined in Core.lua, uses standard Ace config stuff to auto-generate)
yellowfive@57 148 Amr["RenderTab" .. group](Amr, container)
yellowfive@57 149 end
yellowfive@57 150
yellowfive@57 151 -- refresh the currently displayed tab
yellowfive@57 152 function Amr:RefreshTab()
yellowfive@57 153 if not _mainTabs then return end
yellowfive@57 154
yellowfive@57 155 _mainTabs:ReleaseChildren()
yellowfive@57 156 Amr["ReleaseTab" .. _activeTab](Amr)
yellowfive@57 157 Amr["RenderTab" .. _activeTab](Amr, container)
yellowfive@57 158 end
yellowfive@57 159
yellowfive@57 160 local function createMainWindow()
yellowfive@57 161
yellowfive@57 162 local f = AceGUI:Create("AmrUiFrame")
yellowfive@57 163 f:SetStatusTable(Amr.db.profile.window) -- window position is remembered in db
yellowfive@57 164 f:SetCallback("OnClose", onMainFrameClose)
yellowfive@57 165 f:SetLayout("None")
yellowfive@57 166 f:SetWidth(1000)
yellowfive@57 167 f:SetHeight(700)
yellowfive@57 168 f:SetBorderColor(Amr.Colors.BorderBlue)
yellowfive@57 169 f:SetBackgroundColor(Amr.Colors.Bg)
yellowfive@61 170
yellowfive@61 171 if Amr.db.profile.options.uiScale ~= 1 then
yellowfive@61 172 local scale = tonumber(Amr.db.profile.options.uiScale)
yellowfive@61 173 f:SetScale(scale)
yellowfive@61 174 end
yellowfive@57 175
yellowfive@57 176 -- some status text
yellowfive@57 177 local lblStatus = AceGUI:Create("AmrUiLabel")
yellowfive@124 178 f:AddChild(lblStatus)
yellowfive@57 179 lblStatus:SetWidth(900)
yellowfive@57 180 lblStatus:SetFont(Amr.CreateFont("Italic", 12, Amr.Colors.TextTan))
yellowfive@133 181 lblStatus:SetText("Ask Mr. Robot " .. L.MainStatusText("v" .. GetAddOnMetadata(Amr.ADDON_NAME, "Version"), "https://www.askmrrobot.com/addon"))
yellowfive@57 182 lblStatus:SetJustifyH("CENTER")
yellowfive@57 183 lblStatus:SetWordWrap(false)
yellowfive@57 184 lblStatus:SetPoint("TOP", f.content, "BOTTOM")
yellowfive@57 185
yellowfive@57 186 -- create the main UI container
yellowfive@57 187 local c = AceGUI:Create("AmrUiPanel")
yellowfive@57 188 c:SetLayout("Fill")
yellowfive@57 189 c:SetBackgroundColor(Amr.Colors.Black, 0)
yellowfive@124 190 f:AddChild(c)
yellowfive@57 191 c:SetPoint("TOPLEFT", f.content, "TOPLEFT")
yellowfive@57 192 c:SetPoint("BOTTOMRIGHT", f.content, "BOTTOMRIGHT")
yellowfive@57 193
yellowfive@57 194 -- create the main tab strip
yellowfive@57 195 local t = AceGUI:Create("AmrUiTabGroup")
yellowfive@124 196 c:AddChild(t)
yellowfive@57 197 t:SetLayout("None")
yellowfive@57 198 t:SetTabs({
yellowfive@57 199 {text=L.TabExportText, value="Export"},
yellowfive@57 200 {text=L.TabGearText, value="Gear"},
yellowfive@93 201 {text=L.TabLogText, value="Log"},
yellowfive@122 202 --{text=L.TabTeamText, value="Team"},
yellowfive@57 203 {text=L.TabOptionsText, value="Options"}
yellowfive@57 204 })
yellowfive@57 205 t:SetCallback("OnGroupSelected", onMainTabSelected)
yellowfive@57 206
yellowfive@57 207 -- create the cover/overlay container
yellowfive@57 208 c = AceGUI:Create("AmrUiPanel")
yellowfive@57 209 c:SetLayout("None")
yellowfive@57 210 c:EnableMouse(true)
yellowfive@57 211 c:SetBackgroundColor(Amr.Colors.Black, 0.75)
yellowfive@124 212 f:AddChild(c)
yellowfive@57 213 c:SetPoint("TOPLEFT", f.frame, "TOPLEFT")
yellowfive@57 214 c:SetPoint("BOTTOMRIGHT", f.frame, "BOTTOMRIGHT")
yellowfive@57 215
yellowfive@57 216 -- after adding, set cover to sit on top of everything, then hide it
yellowfive@57 217 c:SetStrata("FULLSCREEN_DIALOG")
yellowfive@57 218 c:SetLevel(Amr.FrameLevels.High)
yellowfive@57 219 c:SetVisible(false)
yellowfive@57 220
yellowfive@57 221 -- put standard cover ui elements (label, cancel button)
yellowfive@57 222 local coverMsg = AceGUI:Create("AmrUiLabel")
yellowfive@124 223 c:AddChild(coverMsg)
yellowfive@57 224 coverMsg:SetWidth(600)
yellowfive@57 225 coverMsg:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.TextTan))
yellowfive@57 226 coverMsg:SetJustifyH("MIDDLE")
yellowfive@57 227 coverMsg:SetJustifyV("MIDDLE")
yellowfive@57 228 coverMsg:SetText("")
yellowfive@57 229 coverMsg:SetPoint("CENTER", c.frame, "CENTER", 0, 20)
yellowfive@57 230
yellowfive@57 231 local coverCancel = AceGUI:Create("AmrUiTextButton")
yellowfive@57 232 coverCancel:SetWidth(200)
yellowfive@57 233 coverCancel:SetHeight(20)
yellowfive@57 234 coverCancel:SetText(L.CoverCancel)
yellowfive@57 235 coverCancel:SetFont(Amr.CreateFont("Italic", 14, Amr.Colors.TextHeaderDisabled))
yellowfive@57 236 coverCancel:SetHoverFont(Amr.CreateFont("Italic", 14, Amr.Colors.TextHeaderActive))
yellowfive@124 237 c:AddChild(coverCancel)
yellowfive@57 238 coverCancel:SetPoint("CENTER", c.frame, "CENTER", 0, -20)
yellowfive@57 239
yellowfive@57 240 coverCancel:SetCallback("OnClick", function(widget)
yellowfive@57 241 Amr:HideCover()
yellowfive@57 242 end)
yellowfive@57 243
yellowfive@57 244 -- create cover content area for custom cover ui (sort of like a modal dialog)
yellowfive@57 245 local coverContent = AceGUI:Create("AmrUiPanel")
yellowfive@57 246 coverContent:SetLayout("None")
yellowfive@57 247 coverContent:SetBackgroundColor(Amr.Colors.Black, 0)
yellowfive@124 248 c:AddChild(coverContent)
yellowfive@57 249 coverContent:SetPoint("TOPLEFT", c.frame, "TOPLEFT")
yellowfive@57 250 coverContent:SetPoint("BOTTOMRIGHT", c.frame, "BOTTOMRIGHT")
yellowfive@57 251
yellowfive@57 252 _mainFrame = f
yellowfive@57 253 _mainTabs = t
yellowfive@57 254 _mainCover = {
yellowfive@57 255 panel = c,
yellowfive@57 256 content = coverContent,
yellowfive@57 257 label = coverMsg,
yellowfive@57 258 cancel = coverCancel
yellowfive@57 259 }
yellowfive@57 260 end
yellowfive@57 261
yellowfive@57 262 function Amr:ShowCover(msgOrRenderFunc, disableCancel)
yellowfive@57 263 if _mainCover then
yellowfive@57 264 _mainCover.panel:SetVisible(true)
yellowfive@57 265
yellowfive@57 266 if type(msgOrRenderFunc) == "function" then
yellowfive@57 267 _mainCover.label:SetText("")
yellowfive@57 268 _mainCover.cancel:SetVisible(false)
yellowfive@57 269
yellowfive@57 270 -- render custom content into the cover
yellowfive@57 271 msgOrRenderFunc(_mainCover.content)
yellowfive@57 272 else
yellowfive@57 273 -- standard loading/waiting message with optional cancel button
yellowfive@57 274 _mainCover.label:SetText(msgOrRenderFunc or "")
yellowfive@57 275 _mainCover.cancel:SetVisible(not disableCancel)
yellowfive@57 276 end
yellowfive@57 277 end
yellowfive@57 278 end
yellowfive@57 279
yellowfive@57 280 function Amr:HideCover()
yellowfive@57 281 if _mainCover then
yellowfive@57 282 _mainCover.panel:SetVisible(false)
yellowfive@57 283
yellowfive@57 284 -- release any custom content rendered into the cover
yellowfive@57 285 _mainCover.content:ReleaseChildren()
yellowfive@57 286 end
yellowfive@57 287 end
yellowfive@57 288
yellowfive@57 289 -- shows a "modal" alert over the main UI
yellowfive@57 290 function Amr:ShowAlert(message, btnText)
yellowfive@57 291
yellowfive@57 292 Amr:ShowCover(function(container)
yellowfive@57 293 local border = AceGUI:Create("AmrUiPanel")
yellowfive@57 294 border:SetLayout("None")
yellowfive@57 295 border:SetBackgroundColor(Amr.Colors.BorderBlue)
yellowfive@57 296 border:SetWidth(400)
yellowfive@57 297 border:SetHeight(150)
yellowfive@124 298 container:AddChild(border)
yellowfive@57 299 border:SetPoint("CENTER", container.frame, "CENTER")
yellowfive@57 300
yellowfive@57 301 local bg = AceGUI:Create("AmrUiPanel")
yellowfive@57 302 bg:SetLayout("None")
yellowfive@57 303 bg:SetBackgroundColor(Amr.Colors.Bg)
yellowfive@124 304 border:AddChild(bg)
yellowfive@57 305 bg:SetPoint("TOPLEFT", border.frame, "TOPLEFT", 1, -1)
yellowfive@57 306 bg:SetPoint("BOTTOMRIGHT", border.frame, "BOTTOMRIGHT", -1, 1)
yellowfive@57 307
yellowfive@57 308 local lbl = AceGUI:Create("AmrUiLabel")
yellowfive@124 309 bg:AddChild(lbl)
yellowfive@57 310 lbl:SetWidth(360)
yellowfive@57 311 lbl:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.Text))
yellowfive@57 312 lbl:SetJustifyH("CENTER")
yellowfive@57 313 lbl:SetText(message)
yellowfive@57 314 lbl:SetPoint("TOP", bg.content, "TOP", 0, -20)
yellowfive@57 315
yellowfive@57 316 local btn = AceGUI:Create("AmrUiButton")
yellowfive@57 317 btn:SetBackgroundColor(Amr.Colors.Orange)
yellowfive@57 318 btn:SetFont(Amr.CreateFont("Bold", 16, Amr.Colors.White))
yellowfive@57 319 btn:SetWidth(120)
yellowfive@57 320 btn:SetHeight(26)
yellowfive@57 321 btn:SetText(btnText)
yellowfive@124 322 bg:AddChild(btn)
yellowfive@57 323 btn:SetPoint("BOTTOM", bg.content, "BOTTOM", 0, 20)
yellowfive@57 324
yellowfive@57 325 btn:SetCallback("OnClick", function(widget)
yellowfive@57 326 Amr:HideCover()
yellowfive@57 327 end)
yellowfive@57 328 end)
yellowfive@57 329 end
yellowfive@57 330
yellowfive@57 331 -- toggle visibility of the UI
yellowfive@57 332 function Amr:Toggle()
yellowfive@57 333 if not self:IsEnabled() then return end
yellowfive@57 334
yellowfive@57 335 if not _mainFrame then
yellowfive@57 336 self:Show()
yellowfive@57 337 else
yellowfive@57 338 self:Hide()
yellowfive@57 339 end
yellowfive@57 340 end
yellowfive@57 341
yellowfive@57 342 -- hide the UI if not already hidden
yellowfive@57 343 function Amr:Hide()
yellowfive@57 344 if not self:IsEnabled() then return end
yellowfive@57 345 if not _mainFrame then return end
yellowfive@57 346
yellowfive@57 347 _mainFrame:Hide()
yellowfive@57 348 end
yellowfive@57 349
yellowfive@57 350 -- show the UI if not shown already, and display the last active tab
yellowfive@57 351 function Amr:Show()
yellowfive@57 352 if not self:IsEnabled() then return end
yellowfive@57 353
yellowfive@179 354 if InCombatLockdown() then return end
yellowfive@179 355
yellowfive@57 356 if _mainFrame then
yellowfive@57 357 _mainFrame:Show()
yellowfive@57 358 else
yellowfive@57 359 createMainWindow()
yellowfive@57 360 end
yellowfive@57 361
yellowfive@57 362 -- show the active tab
yellowfive@57 363 _mainTabs:SelectTab(_activeTab)
yellowfive@57 364 end
yellowfive@57 365
yellowfive@61 366 function Amr:Reset()
yellowfive@61 367 if not self:IsEnabled() then return end
yellowfive@61 368
yellowfive@61 369 Amr:Hide()
yellowfive@135 370 --Amr:HideLootWindow()
yellowfive@61 371 Amr:HideShopWindow()
yellowfive@179 372 Amr:HideJunkWindow()
yellowfive@61 373 Amr.db.profile.options.uiScale = 1
yellowfive@61 374 Amr.db.profile.window = {}
yellowfive@61 375 Amr.db.profile.lootWindow = {}
yellowfive@61 376 Amr.db.profile.shopWindow = {}
yellowfive@161 377 Amr.db.profile.junkWindow = {}
yellowfive@61 378 end
yellowfive@61 379
yellowfive@57 380 -- show the UI if not shown already, and select the specified tab
yellowfive@57 381 function Amr:ShowTab(tab)
yellowfive@57 382 if not self:IsEnabled() then return end
yellowfive@57 383
yellowfive@57 384 _activeTab = tab
yellowfive@57 385 self:Show()
yellowfive@57 386 end
yellowfive@57 387
yellowfive@57 388 ----------------------------------------------------------------------------------------
yellowfive@57 389 -- Tooltips
yellowfive@57 390 ----------------------------------------------------------------------------------------
yellowfive@57 391
yellowfive@57 392 -- set an item tooltip on any AceGUI widget with OnEnter and OnLeave events
yellowfive@57 393 function Amr:SetItemTooltip(obj, itemLink, anchor, x, y)
yellowfive@57 394 obj:SetUserData("ttItemLink", itemLink)
yellowfive@57 395 obj:SetCallback("OnEnter", function(widget)
yellowfive@57 396 local tooltipLink = widget:GetUserData("ttItemLink")
yellowfive@135 397 if tooltipLink then
yellowfive@135 398 GameTooltip:SetOwner(widget.frame, anchor and anchor or "ANCHOR_CURSOR", x, y)
yellowfive@135 399 GameTooltip:SetHyperlink(tooltipLink)
yellowfive@135 400 end
yellowfive@57 401 end)
yellowfive@57 402 obj:SetCallback("OnLeave", function(widget)
yellowfive@57 403 GameTooltip:Hide()
yellowfive@57 404 end)
yellowfive@57 405 end
yellowfive@57 406
yellowfive@57 407 function Amr:SetSpellTooltip(obj, spellId, anchor, x, y)
yellowfive@57 408 obj:SetUserData("ttSpellId", spellId)
yellowfive@57 409 obj:SetCallback("OnEnter", function(widget)
yellowfive@57 410 local ttSpellId = widget:GetUserData("ttSpellId")
yellowfive@135 411 if ttSpellId then
yellowfive@135 412 GameTooltip:SetOwner(widget.frame, anchor and anchor or "ANCHOR_CURSOR", x, y)
yellowfive@135 413 GameTooltip:SetSpellByID(ttSpellId)
yellowfive@135 414 end
yellowfive@57 415 end)
yellowfive@57 416 obj:SetCallback("OnLeave", function(widget)
yellowfive@57 417 GameTooltip:Hide()
yellowfive@57 418 end)
yellowfive@57 419 end
yellowfive@57 420
yellowfive@57 421 function Amr:RenderCoverChrome(container, width, height)
yellowfive@57 422
yellowfive@57 423 local border = AceGUI:Create("AmrUiPanel")
yellowfive@57 424 border:SetLayout("None")
yellowfive@57 425 border:SetBackgroundColor(Amr.Colors.BorderBlue)
yellowfive@57 426 border:SetWidth(width + 2)
yellowfive@57 427 border:SetHeight(height + 2)
yellowfive@124 428 container:AddChild(border)
yellowfive@57 429 border:SetPoint("CENTER", container.frame, "CENTER")
yellowfive@57 430
yellowfive@57 431 local bg = AceGUI:Create("AmrUiPanel")
yellowfive@57 432 bg:SetLayout("None")
yellowfive@57 433 bg:SetBackgroundColor(Amr.Colors.Bg)
yellowfive@124 434 border:AddChild(bg)
yellowfive@57 435 bg:SetPoint("TOPLEFT", border.frame, "TOPLEFT", 1, -1)
yellowfive@57 436 bg:SetPoint("BOTTOMRIGHT", border.frame, "BOTTOMRIGHT", -1, 1)
yellowfive@57 437
yellowfive@57 438 return bg, border
yellowfive@57 439 end