vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1  
2 assert( oRA, "oRA not found!")
3  
4 ------------------------------
5 -- Are you local? --
6 ------------------------------
7  
8 local L = AceLibrary("AceLocale-2.2"):new("oRALResist")
9 local compost = AceLibrary:HasInstance("Compost-2.0") and AceLibrary("Compost-2.0")
10 local function getnewtable() return compost and compost:Acquire() or {} end
11 local function reclaimtable(t) if compost then compost:Reclaim(t) end end
12  
13 ----------------------------
14 -- Localization --
15 ----------------------------
16  
17 L:RegisterTranslations("enUS", function() return {
18 ["resist"] = true,
19 ["resistleader"] = true,
20 ["Options for resistance checks."] = true,
21 ["Leader/Resist"] = true,
22 ["Name"] = true,
23 ["Fire"] = true,
24 ["Nature"] = true,
25 ["Frost"] = true,
26 ["Shadow"] = true,
27 ["Arcane"] = true,
28 ["Resistance checks disabled."] = true,
29 ["Resistances"] = true,
30 ["Fr"] = true,
31 ["Ft"] = true,
32 ["N"] = true,
33 ["A"] = true,
34 ["S"] = true,
35 ["Refresh"] = true,
36 ["Close"] = true,
37 ["check"] = true,
38 ["Perform resistance check"] = true,
39 ["Check the raid's resistances."] = true,
40 } end )
41  
42 L:RegisterTranslations("koKR", function() return {
43  
44 ["Options for resistance checks."] = "공격대원 저항 확인 설정",
45 ["Leader/Resist"] = "공격대장/저항",
46 ["Name"] = "이름",
47 ["Fire"] = "화염",
48 ["Nature"] = "자연",
49 ["Frost"] = "냉기",
50 ["Shadow"] = "암흑",
51 ["Arcane"] = "비전",
52 ["Resistance checks disabled."] = "저항확인이 불가능합니다",
53 ["Resistances"] = "저항",
54 ["Fr"] = "화",
55 ["Ft"] = "냉",
56 ["N"] = "자",
57 ["A"] = "비",
58 ["S"] = "암",
59 ["Refresh"] = "갱신",
60 ["Close"] = "닫기",
61 ["Perform resistance check"] = "저항 확인 실시",
62 ["Check the raid's resistances."] = "공격대원의 저항을 확인합니다.",
63 } end )
64  
65 L:RegisterTranslations("zhCN", function() return {
66 ["resist"] = "抗性",
67 ["resistleader"] = "resistleader",
68 ["Options for resistance checks."] = "抗性助手选项",
69 ["Leader/Resist"] = "Leader/Resist",
70 ["Name"] = "姓名",
71 ["Fire"] = "火焰",
72 ["Nature"] = "自然",
73 ["Frost"] = "冰霜",
74 ["Shadow"] = "暗影",
75 ["Arcane"] = "奥术",
76 ["Resistance checks disabled."] = "禁止抗性检查",
77 ["Resistances"] = "抗性",
78 ["Fr"] = "火",
79 ["Ft"] = "冰",
80 ["N"] = "自",
81 ["A"] = "奥",
82 ["S"] = "暗",
83 ["Refresh"] = "刷新",
84 ["Close"] = "关闭",
85 ["check"] = "检查",
86 ["Perform resistance check"] = "进行抗性检查",
87 ["Check the raid's resistances."] = "检查团队抗性",
88 } end )
89  
90 L:RegisterTranslations("zhTW", function() return {
91 ["resist"] = "抗性",
92 ["resistleader"] = "resistleader",
93 ["Options for resistance checks."] = "抗性助手選項",
94 ["Leader/Resist"] = "領隊/抗性",
95 ["Name"] = "姓名",
96 ["Fire"] = "火焰",
97 ["Nature"] = "自然",
98 ["Frost"] = "冰霜",
99 ["Shadow"] = "陰影",
100 ["Arcane"] = "祕法",
101 ["Resistance checks disabled."] = "已停用抗性檢查",
102 ["Resistances"] = "抗性",
103 ["Fr"] = "火",
104 ["Ft"] = "冰",
105 ["N"] = "自",
106 ["A"] = "祕",
107 ["S"] = "陰",
108 ["Refresh"] = "更新",
109 ["Close"] = "關閉",
110 ["check"] = "檢查",
111 ["Perform resistance check"] = "進行抗性檢查",
112 ["Check the raid's resistances."] = "檢查團隊抗性",
113 } end )
114  
115 L:RegisterTranslations("frFR", function() return {
116 --["resist"] = true,
117 --["resistleader"] = true,
118 ["Options for resistance checks."] = "Options concernant les v\195\169rifications des r\195\169sistances.",
119 ["Leader/Resist"] = "Chef/R\195\169sistances",
120 ["Name"] = "Nom",
121 ["Fire"] = "Feu",
122 --["Nature"] = true,
123 ["Frost"] = "Givre",
124 ["Shadow"] = "Ombre",
125 ["Arcane"] = "Arcanes",
126 ["Resistance checks disabled."] = "V\195\169rifications des r\195\169sistances désactiv\195\169es.",
127 ["Resistances"] = "R\195\169sistances",
128 ["Fr"] = "F",
129 ["Ft"] = "G",
130 --["N"] = true,
131 --["A"] = true,
132 ["S"] = "O",
133 ["Refresh"] = "Rafra\195\174chir",
134 ["Close"] = "Fermer",
135 --["check"] = true,
136 ["Perform resistance check"] = "V\195\169rifier les r\195\169sistances",
137 ["Check the raid's resistances."] = "V\195\169rifie les r\195\169sistances du raid.",
138 } end )
139  
140 ----------------------------------
141 -- Module Declaration --
142 ----------------------------------
143  
144 oRALResist = oRA:NewModule(L["resistleader"])
145 oRALResist.defaults = {
146 }
147 oRALResist.participant = true
148 oRALResist.name = L["Leader/Resist"]
149 oRALResist.consoleCmd = L["resist"]
150 oRALResist.consoleOptions = {
151 type = "group",
152 desc = L["Options for resistance checks."],
153 name = L["Resistances"],
154 args = {
155 [L["check"]] = {
156 type="execute", name = L["Perform resistance check"],
157 desc = L["Check the raid's resistances."],
158 func = function()
159 oRALResist:PerformResistanceCheck()
160 end,
161 disabled = function() return not oRA:IsModuleActive(oRALResist) or not oRALResist:IsValidRequest() end,
162 },
163  
164 }
165 }
166  
167 ------------------------------
168 -- Initialization --
169 ------------------------------
170  
171 function oRALResist:OnEnable()
172 self.resists = getnewtable()
173 self.sorting = getnewtable()
174  
175 self.sorting[1] = L["Name"]
176 self.sorting[2] = L["Fire"]
177 self.sorting[3] = L["Nature"]
178 self.sorting[4] = L["Frost"]
179 self.sorting[5] = L["Shadow"]
180 self.sorting[6] = L["Arcane"]
181  
182 self:RegisterCheck("RST", "oRA_ResistanceResponse")
183 self:RegisterShorthand("raresist", function() self:PerformResistanceCheck() end )
184 self:SetupFrames()
185 end
186  
187 function oRALResist:OnDisable()
188 reclaimtable(self.resists)
189 self.resists = nil
190 reclaimtable(self.sorting)
191 self.sorting = nil
192 self:UnregisterAllEvents()
193 self:UnregisterCheck("RST")
194 self:UnregisterShorthand("raresist")
195 end
196  
197  
198 -------------------------
199 -- Event Handlers --
200 -------------------------
201  
202 function oRALResist:oRA_ResistanceResponse( msg, author)
203 msg = self:CleanMessage(msg)
204 local _,_,requestby = string.find(msg, "^RST %-1 ([^%s]+)$")
205 if requestby and requestby == UnitName("player") then
206 self:Print( author .. " " .. L["Resistance checks disabled."])
207 else
208 local _,_, fire, nature, frost, shadow, arcane, requestby = string.find(msg, "^RST (%d+) (%d+) (%d+) (%d+) (%d+) ([^%s]+)$")
209 if fire and requestby and requestby == UnitName("player") then
210 table.insert( self.resists, {author, tonumber(fire), tonumber(nature), tonumber(frost), tonumber(shadow), tonumber(arcane)})
211 self:UpdateScrollBar()
212 end
213 end
214 end
215  
216 -------------------------
217 -- Utility Functions --
218 -------------------------
219  
220 function oRALResist:SetupFrames()
221 local f, t, sframe, i, j
222  
223 f, _, _ = GameFontNormal:GetFont()
224  
225 self.frames = {}
226  
227 self.frames.main = CreateFrame("Frame", "oRAResistReportFrame", UIParent)
228 self.frames.main:Hide()
229 self.frames.main:SetWidth(325)
230 self.frames.main:SetHeight(350)
231 self.frames.main:EnableMouse(true)
232 self.frames.main:SetMovable(true)
233 self.frames.main:RegisterForDrag("LeftButton")
234 self.frames.main:SetScript("OnDragStart", function() this:StartMoving() end)
235 self.frames.main:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
236 self.frames.main:SetBackdrop({
237 bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
238 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16,
239 insets = {left = 4, right = 4, top = 4, bottom = 4},
240 })
241 self.frames.main:SetBackdropBorderColor(.5, .5, .5)
242 self.frames.main:SetBackdropColor(0,0,0)
243 self.frames.main:ClearAllPoints()
244 self.frames.main:SetPoint("CENTER", WorldFrame, "CENTER", 0, 0)
245  
246 self.frames.fade = self.frames.main:CreateTexture(nil, "BORDER")
247 self.frames.fade:SetWidth(319)
248 self.frames.fade:SetHeight(25)
249 self.frames.fade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
250 self.frames.fade:SetPoint("TOP", self.frames.main, "TOP", 0, -4)
251 self.frames.fade:SetBlendMode("ADD")
252 self.frames.fade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
253 self.frames.main.Fade = self.frames.fade
254  
255 self.frames.header = self.frames.main:CreateFontString(nil,"OVERLAY")
256 self.frames.header:SetFont(f, 14)
257 self.frames.header:SetWidth(300)
258 self.frames.header:SetText(L["Resistances"])
259 self.frames.header:SetTextColor(1, .8, 0)
260 self.frames.header:ClearAllPoints()
261 self.frames.header:SetPoint("TOP", self.frames.main, "TOP", 0, -10)
262  
263 self.frames.headername = CreateFrame("Button", nil, self.frames.main)
264 self.frames.headername.owner = self
265 self.frames.headername:SetWidth(130)
266 self.frames.headername:SetHeight(16)
267 self.frames.headername:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -35)
268 self.frames.headername:SetScript("OnClick",
269 function()
270 this.owner:Sort(self.resists, 1)
271 this.owner:UpdateScrollBar()
272 end)
273  
274 self.frames.headernamehigh = self.frames.headername:CreateTexture(nil, "BORDER")
275 self.frames.headernamehigh:SetWidth(130)
276 self.frames.headernamehigh:SetHeight(16)
277 self.frames.headernamehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
278 self.frames.headernamehigh:SetAllPoints(self.frames.headername)
279 self.frames.headernamehigh:SetBlendMode("ADD")
280 self.frames.headernamehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
281 self.frames.headername:SetHighlightTexture(self.frames.headernamehigh)
282  
283 self.frames.headernametext = self.frames.headername:CreateFontString(nil,"OVERLAY")
284 self.frames.headernametext.owner = self
285 self.frames.headernametext:SetFont(f, 14)
286 self.frames.headernametext:SetWidth(130)
287 self.frames.headernametext:SetText(L["Name"])
288 self.frames.headernametext:SetTextColor(1, .8, 0)
289 self.frames.headernametext:ClearAllPoints()
290 self.frames.headernametext:SetJustifyH("LEFT")
291 self.frames.headernametext:SetAllPoints(self.frames.headername)
292  
293 self.frames.headerfire = CreateFrame("Button", nil, self.frames.main)
294 self.frames.headerfire.owner = self
295 self.frames.headerfire:SetWidth(30)
296 self.frames.headerfire:SetHeight(16)
297 self.frames.headerfire:SetPoint("LEFT", self.frames.headername, "RIGHT")
298 self.frames.headerfire:SetScript("OnClick",
299 function()
300 this.owner:Sort(self.resists, 2)
301 this.owner:UpdateScrollBar()
302 end)
303  
304 self.frames.headerfirehigh = self.frames.headerfire:CreateTexture(nil, "BORDER")
305 self.frames.headerfirehigh:SetWidth(30)
306 self.frames.headerfirehigh:SetHeight(16)
307 self.frames.headerfirehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
308 self.frames.headerfirehigh:SetAllPoints(self.frames.headerfire)
309 self.frames.headerfirehigh:SetBlendMode("ADD")
310 self.frames.headerfirehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
311 self.frames.headerfire:SetHighlightTexture(self.frames.headerfirehigh)
312  
313  
314 self.frames.headerfiretext = self.frames.main:CreateFontString(nil,"OVERLAY")
315 self.frames.headerfiretext:SetFont(f, 14)
316 self.frames.headerfiretext:SetWidth(30)
317 self.frames.headerfiretext:SetText(L["Fr"])
318 self.frames.headerfiretext:SetTextColor(1, 0, 0)
319 self.frames.headerfiretext:ClearAllPoints()
320 self.frames.headerfiretext:SetJustifyH("RIGHT")
321 self.frames.headerfiretext:SetAllPoints(self.frames.headerfire)
322  
323 self.frames.headernature = CreateFrame("Button", nil, self.frames.main)
324 self.frames.headernature.owner = self
325 self.frames.headernature:SetWidth(30)
326 self.frames.headernature:SetHeight(16)
327 self.frames.headernature:SetPoint("LEFT", self.frames.headerfire, "RIGHT")
328 self.frames.headernature:SetScript("OnClick",
329 function()
330 this.owner:Sort(self.resists, 3)
331 this.owner:UpdateScrollBar()
332 end)
333  
334 self.frames.headernaturehigh = self.frames.headernature:CreateTexture(nil, "BORDER")
335 self.frames.headernaturehigh:SetWidth(30)
336 self.frames.headernaturehigh:SetHeight(16)
337 self.frames.headernaturehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
338 self.frames.headernaturehigh:SetAllPoints(self.frames.headernature)
339 self.frames.headernaturehigh:SetBlendMode("ADD")
340 self.frames.headernaturehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
341 self.frames.headernature:SetHighlightTexture(self.frames.headernaturehigh)
342  
343  
344 self.frames.headernaturetext = self.frames.main:CreateFontString(nil,"OVERLAY")
345 self.frames.headernaturetext.owner = self
346 self.frames.headernaturetext:SetFont(f, 14)
347 self.frames.headernaturetext:SetWidth(60)
348 self.frames.headernaturetext:SetText(L["N"])
349 self.frames.headernaturetext:SetTextColor(0, 1, 0)
350 self.frames.headernaturetext:ClearAllPoints()
351 self.frames.headernaturetext:SetJustifyH("RIGHT")
352 self.frames.headernaturetext:SetAllPoints(self.frames.headernature)
353  
354 self.frames.headerfrost = CreateFrame("Button", nil, self.frames.main)
355 self.frames.headerfrost.owner = self
356 self.frames.headerfrost:SetWidth(30)
357 self.frames.headerfrost:SetHeight(16)
358 self.frames.headerfrost:SetPoint("LEFT", self.frames.headernature, "RIGHT")
359 self.frames.headerfrost:SetScript("OnClick",
360 function()
361 this.owner:Sort(self.resists, 4)
362 this.owner:UpdateScrollBar()
363 end)
364  
365 self.frames.headerfrosthigh = self.frames.headerfrost:CreateTexture(nil, "BORDER")
366 self.frames.headerfrosthigh:SetWidth(30)
367 self.frames.headerfrosthigh:SetHeight(16)
368 self.frames.headerfrosthigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
369 self.frames.headerfrosthigh:SetAllPoints(self.frames.headerfrost)
370 self.frames.headerfrosthigh:SetBlendMode("ADD")
371 self.frames.headerfrosthigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
372 self.frames.headerfrost:SetHighlightTexture(self.frames.headerfrosthigh)
373  
374  
375 self.frames.headerfrosttext = self.frames.main:CreateFontString(nil,"OVERLAY")
376 self.frames.headerfrosttext.owner = self
377 self.frames.headerfrosttext:SetFont(f, 14)
378 self.frames.headerfrosttext:SetWidth(60)
379 self.frames.headerfrosttext:SetText(L["Ft"])
380 self.frames.headerfrosttext:SetTextColor(.5, .5, 1)
381 self.frames.headerfrosttext:ClearAllPoints()
382 self.frames.headerfrosttext:SetJustifyH("RIGHT")
383 self.frames.headerfrosttext:SetAllPoints(self.frames.headerfrost)
384  
385 self.frames.headershadow = CreateFrame("Button", nil, self.frames.main)
386 self.frames.headershadow.owner = self
387 self.frames.headershadow:SetWidth(30)
388 self.frames.headershadow:SetHeight(16)
389 self.frames.headershadow:SetPoint("LEFT", self.frames.headerfrost, "RIGHT")
390 self.frames.headershadow:SetScript("OnClick",
391 function()
392 this.owner:Sort(self.resists, 5)
393 this.owner:UpdateScrollBar()
394 end)
395  
396 self.frames.headershadowhigh = self.frames.headershadow:CreateTexture(nil, "BORDER")
397 self.frames.headershadowhigh:SetWidth(30)
398 self.frames.headershadowhigh:SetHeight(16)
399 self.frames.headershadowhigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
400 self.frames.headershadowhigh:SetAllPoints(self.frames.headershadow)
401 self.frames.headershadowhigh:SetBlendMode("ADD")
402 self.frames.headershadowhigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
403 self.frames.headershadow:SetHighlightTexture(self.frames.headershadowhigh)
404  
405  
406 self.frames.headershadowtext = self.frames.main:CreateFontString(nil,"OVERLAY")
407 self.frames.headershadowtext.owner = self
408 self.frames.headershadowtext:SetFont(f, 14)
409 self.frames.headershadowtext:SetWidth(60)
410 self.frames.headershadowtext:SetText(L["S"])
411 self.frames.headershadowtext:SetTextColor(.8, 0, 1)
412 self.frames.headershadowtext:ClearAllPoints()
413 self.frames.headershadowtext:SetJustifyH("RIGHT")
414 self.frames.headershadowtext:SetAllPoints(self.frames.headershadow)
415  
416 self.frames.headerarcane = CreateFrame("Button", nil, self.frames.main)
417 self.frames.headerarcane.owner = self
418 self.frames.headerarcane:SetWidth(30)
419 self.frames.headerarcane:SetHeight(16)
420 self.frames.headerarcane:SetPoint("LEFT", self.frames.headershadow, "RIGHT")
421 self.frames.headerarcane:SetScript("OnClick",
422 function()
423 this.owner:Sort(self.resists, 6)
424 this.owner:UpdateScrollBar()
425 end)
426  
427 self.frames.headerarcanehigh = self.frames.headerarcane:CreateTexture(nil, "BORDER")
428 self.frames.headerarcanehigh:SetWidth(30)
429 self.frames.headerarcanehigh:SetHeight(16)
430 self.frames.headerarcanehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
431 self.frames.headerarcanehigh:SetAllPoints(self.frames.headerarcane)
432 self.frames.headerarcanehigh:SetBlendMode("ADD")
433 self.frames.headerarcanehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
434 self.frames.headerarcane:SetHighlightTexture(self.frames.headerarcanehigh)
435  
436  
437 self.frames.headerarcanetext = self.frames.main:CreateFontString(nil,"OVERLAY")
438 self.frames.headerarcanetext.owner = self
439 self.frames.headerarcanetext:SetFont(f, 14)
440 self.frames.headerarcanetext:SetWidth(60)
441 self.frames.headerarcanetext:SetText(L["A"])
442 self.frames.headerarcanetext:SetTextColor(1, 1, 1)
443 self.frames.headerarcanetext:ClearAllPoints()
444 self.frames.headerarcanetext:SetJustifyH("RIGHT")
445 self.frames.headerarcanetext:SetAllPoints(self.frames.headerarcane)
446  
447  
448  
449  
450 self.frames.leftbutton = CreateFrame("Button", nil, self.frames.main)
451 self.frames.leftbutton.owner = self
452 self.frames.leftbutton:SetWidth(125)
453 self.frames.leftbutton:SetHeight(32)
454 self.frames.leftbutton:SetPoint("BOTTOMRIGHT", self.frames.main, "BOTTOM", -10, 10)
455  
456 t = self.frames.leftbutton:CreateTexture()
457 t:SetWidth(125)
458 t:SetHeight(32)
459 t:SetPoint("CENTER", self.frames.leftbutton, "CENTER")
460 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
461 t:SetTexCoord(0, 0.625, 0, 0.6875)
462 self.frames.leftbutton:SetNormalTexture(t)
463  
464 t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND")
465 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
466 t:SetTexCoord(0, 0.625, 0, 0.6875)
467 t:SetAllPoints(self.frames.leftbutton)
468 self.frames.leftbutton:SetPushedTexture(t)
469  
470 t = self.frames.leftbutton:CreateTexture()
471 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
472 t:SetTexCoord(0, 0.625, 0, 0.6875)
473 t:SetAllPoints(self.frames.leftbutton)
474 t:SetBlendMode("ADD")
475 self.frames.leftbutton:SetHighlightTexture(t)
476 self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY")
477 self.frames.leftbuttontext:SetFontObject(GameFontHighlight)
478 self.frames.leftbuttontext:SetText(L["Refresh"])
479 self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton)
480  
481 self.frames.leftbutton:SetScript("OnClick",
482 function()
483 this.owner:PerformResistanceCheck()
484 end)
485  
486  
487  
488 self.frames.rightbutton = CreateFrame("Button", nil, self.frames.main)
489 self.frames.rightbutton.owner = self
490 self.frames.rightbutton:SetWidth(125)
491 self.frames.rightbutton:SetHeight(32)
492 self.frames.rightbutton:SetPoint("BOTTOMLEFT", self.frames.main, "BOTTOM", 10, 10)
493  
494 t = self.frames.rightbutton:CreateTexture()
495 t:SetWidth(125)
496 t:SetHeight(32)
497 t:SetPoint("CENTER", self.frames.rightbutton, "CENTER")
498 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
499 t:SetTexCoord(0, 0.625, 0, 0.6875)
500 self.frames.rightbutton:SetNormalTexture(t)
501  
502 t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND")
503 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
504 t:SetTexCoord(0, 0.625, 0, 0.6875)
505 t:SetAllPoints(self.frames.rightbutton)
506 self.frames.rightbutton:SetPushedTexture(t)
507  
508 t = self.frames.rightbutton:CreateTexture()
509 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
510 t:SetTexCoord(0, 0.625, 0, 0.6875)
511 t:SetAllPoints(self.frames.rightbutton)
512 t:SetBlendMode("ADD")
513 self.frames.rightbutton:SetHighlightTexture(t)
514 self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY")
515 self.frames.rightbuttontext:SetFontObject(GameFontHighlight)
516 self.frames.rightbuttontext:SetText(L["Close"])
517 self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton)
518  
519 self.frames.rightbutton:SetScript("OnClick",
520 function()
521 this.owner.frames.main:Hide()
522 end)
523  
524  
525 self.frames.entry = {}
526 self.frames.entry[1] = self:ScrollEntryFrame(1)
527 self.frames.entry[1]:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -55 )
528  
529 for i=2, 15 do
530 j = i - 1
531 self.frames.entry[i] = self:ScrollEntryFrame()
532 self.frames.entry[i]:SetPoint("TOPLEFT", self.frames.entry[j], "BOTTOMLEFT")
533 end
534  
535  
536 self.frames.sframe = CreateFrame("ScrollFrame", "oRAResistScrollFrame", self.frames.main, "FauxScrollFrameTemplate")
537 self.frames.sframe.owner = self
538 self.frames.sframe:SetParent(self.frames.main)
539 self.frames.sframe:SetWidth(285)
540 self.frames.sframe:SetHeight(240)
541 self.frames.sframe:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 5, -55)
542  
543 self.frames.sframe:SetScript("OnVerticalScroll",
544 function()
545 FauxScrollFrame_OnVerticalScroll(16, function() this.owner:UpdateScrollBar() end)
546 end )
547  
548 end
549  
550 function oRALResist:ScrollEntryFrame()
551 local f = CreateFrame("Button", nil, self.frames.main )
552 f:SetWidth(240)
553 f:SetHeight(16)
554  
555 f.textname = f:CreateFontString(nil,"ARTWORK")
556 f.textname:SetFontObject(GameFontHighlight)
557 f.textname:SetWidth(130)
558 f.textname:SetHeight(16)
559 f.textname:SetJustifyH("LEFT")
560 f.textname:SetNonSpaceWrap(false)
561 f.textname:ClearAllPoints()
562 f.textname:SetPoint( "LEFT", f, "LEFT")
563 f.textname:SetTextColor(1,1,1)
564 f.textname:SetText("Name")
565  
566 f.textfire = f:CreateFontString(nil,"ARTWORK")
567 f.textfire:SetFontObject(GameFontHighlight)
568 f.textfire:SetWidth(30)
569 f.textfire:SetHeight(16)
570 f.textfire:SetJustifyH("RIGHT")
571 f.textfire:SetNonSpaceWrap(false)
572 f.textfire:ClearAllPoints()
573 f.textfire:SetPoint("LEFT", f.textname, "RIGHT")
574 f.textfire:SetTextColor(1,0,0)
575 f.textfire:SetText("12")
576  
577 f.textnature = f:CreateFontString(nil,"ARTWORK")
578 f.textnature:SetFontObject(GameFontHighlight)
579 f.textnature:SetWidth(30)
580 f.textnature:SetHeight(16)
581 f.textnature:SetJustifyH("RIGHT")
582 f.textnature:SetNonSpaceWrap(false)
583 f.textnature:ClearAllPoints()
584 f.textnature:SetPoint("LEFT", f.textfire, "RIGHT")
585 f.textnature:SetTextColor(0,1,0)
586 f.textnature:SetText("3")
587  
588 f.textfrost = f:CreateFontString(nil,"ARTWORK")
589 f.textfrost:SetFontObject(GameFontHighlight)
590 f.textfrost:SetWidth(30)
591 f.textfrost:SetHeight(16)
592 f.textfrost:SetJustifyH("RIGHT")
593 f.textfrost:SetNonSpaceWrap(false)
594 f.textfrost:ClearAllPoints()
595 f.textfrost:SetPoint("LEFT", f.textnature, "RIGHT")
596 f.textfrost:SetTextColor(.5,.5,1)
597 f.textfrost:SetText("3")
598  
599 f.textshadow = f:CreateFontString(nil,"ARTWORK")
600 f.textshadow:SetFontObject(GameFontHighlight)
601 f.textshadow:SetWidth(30)
602 f.textshadow:SetHeight(16)
603 f.textshadow:SetJustifyH("RIGHT")
604 f.textshadow:SetNonSpaceWrap(false)
605 f.textshadow:ClearAllPoints()
606 f.textshadow:SetPoint("LEFT", f.textfrost, "RIGHT")
607 f.textshadow:SetTextColor(.8,0,1)
608 f.textshadow:SetText("3")
609  
610 f.textarcane = f:CreateFontString(nil,"ARTWORK")
611 f.textarcane:SetFontObject(GameFontHighlight)
612 f.textarcane:SetWidth(30)
613 f.textarcane:SetHeight(16)
614 f.textarcane:SetJustifyH("RIGHT")
615 f.textarcane:SetNonSpaceWrap(false)
616 f.textarcane:ClearAllPoints()
617 f.textarcane:SetPoint("LEFT", f.textshadow, "RIGHT")
618 f.textarcane:SetTextColor(1,1,1)
619 f.textarcane:SetText("3")
620  
621 return f
622 end
623  
624 function oRALResist:UpdateScrollBar()
625 local i,j
626 local entries = table.getn(self.resists)
627 FauxScrollFrame_Update(self.frames.sframe, entries, 15, 16)
628  
629 for i = 1, 15 do
630 j = i + FauxScrollFrame_GetOffset(self.frames.sframe)
631  
632 if j <= entries then
633 self.frames.entry[i].textname:SetText(self.resists[j][1])
634 self.frames.entry[i].textfire:SetText(self.resists[j][2])
635 self.frames.entry[i].textnature:SetText(self.resists[j][3])
636 self.frames.entry[i].textfrost:SetText(self.resists[j][4])
637 self.frames.entry[i].textshadow:SetText(self.resists[j][5])
638 self.frames.entry[i].textarcane:SetText(self.resists[j][6])
639 self.frames.entry[i]:Show()
640 else
641 self.frames.entry[i]:Hide()
642 end
643 end
644  
645 end
646  
647 ----------------------
648 -- Command Handlers --
649 ----------------------
650  
651 function oRALResist:PerformResistanceCheck()
652 if not self:IsPromoted() then return end
653 reclaimtable(self.resists)
654 self.resists = nil
655 self.resists = getnewtable()
656 self:SendMessage("RSTC")
657 self.frames.main:Show()
658 self:UpdateScrollBar()
659 end
660  
661  
662 function oRALResist:Sort(tbl, sortBy)
663 table.sort(tbl,
664 function(t1, t2)
665 if (t1[sortBy] == t2[sortBy] ) then
666 return t1[1] < t2[1]
667 else
668 return t1[sortBy] > t2[sortBy]
669 end
670 end
671 )
672 end
673