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
|