WoWInterface SVN UrbanAchiever

[/] [trunk/] [Main.lua] - Blame information for rev 162

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 133 Tomate-202285
--SKINNER ADD
2 130 Tomate-202285
--categoryStatusBar15165
3 Tomate-202285
--categoryStatusBar15117
4 Tomate-202285
 
5 73 Syzgyn-40270
local DBG = false
6 16 Syzgyn-40270
UrbanAchiever = LibStub("AceAddon-3.0"):NewAddon("UrbanAchiever", "AceConsole-3.0", "AceEvent-3.0", "AceHook-3.0")
7 2 Syzgyn-40270
local self = UrbanAchiever
8 Syzgyn-40270
-------------------------------------------------------------
9 Syzgyn-40270
--Locals
10 Syzgyn-40270
-------------------------------------------------------------
11 Syzgyn-40270
--bindings
12 Syzgyn-40270
BINDING_HEADER_URBANACHIEVER = "Urban Achiever"
13 Syzgyn-40270
 
14 161 Tomate-202285
local MAX_ACHIEVEMENTS = 13930 --last 13931
15 70 Syzgyn-40270
local menuTypes = {"PLAYER", "PARTY", "RAID_PLAYER"}
16 43 Syzgyn-40270
local playerFaction = UnitFactionGroup("player") == "Alliance" and 1 or 2
17 2 Syzgyn-40270
 
18 59 Syzgyn-40270
local moneyValues = {
19 Syzgyn-40270
        ["G"] = 10000,
20 Syzgyn-40270
        ["S"] = 100,
21 Syzgyn-40270
        ["C"] = 1,
22 Syzgyn-40270
}
23 Syzgyn-40270
 
24 162 Tomate-202285
local hiddenAchievements = {
25 Tomate-202285
        "<Hidden>",
26 Tomate-202285
        "<DND>",
27 Tomate-202285
        "(DNT)",
28 Tomate-202285
        "(KMS)",
29 Tomate-202285
        "Hidden Tracking",
30 Tomate-202285
        "(Hidden Character Achievement)"
31 Tomate-202285
}
32 Tomate-202285
 
33 Tomate-202285
 
34 Tomate-202285
 
35 2 Syzgyn-40270
self.categories = {
36 Syzgyn-40270
        ["achievements"] = {},
37 Syzgyn-40270
        ["statistics"] = {},
38 107 Tomate-202285
        ["guild"] = {},
39 2 Syzgyn-40270
}
40 Syzgyn-40270
 
41 Syzgyn-40270
self.masterList = {}
42 Syzgyn-40270
self.seriesList = {}
43 Syzgyn-40270
self.expandList = {}
44 Syzgyn-40270
 
45 107 Tomate-202285
self.isAchList = {}     --Used to see if id's are achievements or statistics or guild
46 Tomate-202285
self.isGuildList = {}   --Used to see if id's are achievements or statistics or guild
47 38 Syzgyn-40270
 
48 120 Tomate-202285
self.achieveList = {}
49 Tomate-202285
 
50 2 Syzgyn-40270
self.currentTab = "achievements"
51 8 Syzgyn-40270
self.currentCat = -1
52 2 Syzgyn-40270
self.currentAch = 0
53 Syzgyn-40270
self.currentSort = "completed d"
54 Syzgyn-40270
 
55 Syzgyn-40270
self.displayTable = {}
56 Syzgyn-40270
 
57 Syzgyn-40270
self.catOffset = 0
58 Syzgyn-40270
self.achOffset = 0
59 Syzgyn-40270
self.criteriaOffset = 0
60 Syzgyn-40270
 
61 Syzgyn-40270
self.isComparing = false
62 Syzgyn-40270
self.comparisonUnit = ""
63 43 Syzgyn-40270
self.comparisonFaction = ""
64 2 Syzgyn-40270
 
65 51 Syzgyn-40270
self.moneyFormats = {   --[1] = color, [2] = texture
66 Syzgyn-40270
        gold =   {"|cffffd700%i|r", "%i|TInterface\\MoneyFrame\\UI-GoldIcon:14:14:2:0|t"},
67 Syzgyn-40270
        silver = {"|cffc7c7cf%i|r", "%i|TInterface\\MoneyFrame\\UI-SilverIcon:14:14:2:0|t"},
68 Syzgyn-40270
        copper = {"|cffeda55f%i|r", "%i|TInterface\\MoneyFrame\\UI-CopperIcon:14:14:2:0|t"},
69 Syzgyn-40270
}
70 Syzgyn-40270
 
71 2 Syzgyn-40270
self.sortFuncs = {
72 Syzgyn-40270
        ["name d"] = function(a, b)
73 135 Tomate-202285
                local _
74 2 Syzgyn-40270
                _,a = GetAchievementInfo(a)
75 Syzgyn-40270
                _,b = GetAchievementInfo(b)
76 Syzgyn-40270
                return a < b
77 Syzgyn-40270
        end,
78 109 Tomate-202285
 
79 2 Syzgyn-40270
        ["name a"] = function(a, b)
80 135 Tomate-202285
                local _, a1, b1
81 2 Syzgyn-40270
                _,a1 = GetAchievementInfo(a)
82 Syzgyn-40270
                _,b1 = GetAchievementInfo(b)
83 Syzgyn-40270
                assert(a1, "a "..a)
84 Syzgyn-40270
                assert(b1, "b "..b)
85 Syzgyn-40270
                return a1 > b1
86 Syzgyn-40270
        end,
87 109 Tomate-202285
 
88 2 Syzgyn-40270
        ["points d"] = function(a, b)
89 135 Tomate-202285
                local _, a, b
90 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(a)] or self.isGuildList[GetAchievementCategory(a)] then
91 133 Tomate-202285
                        _,_,a = GetAchievementInfo(a)
92 11 Syzgyn-40270
                else
93 Syzgyn-40270
                        a = GetStatistic(a)
94 Syzgyn-40270
                end
95 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(b)] or self.isGuildList[GetAchievementCategory(b)] then
96 133 Tomate-202285
                        _,_,b = GetAchievementInfo(b)
97 11 Syzgyn-40270
                else
98 Syzgyn-40270
                        b = GetStatistic(b)
99 Syzgyn-40270
                end
100 59 Syzgyn-40270
                return a < b
101 2 Syzgyn-40270
        end,
102 109 Tomate-202285
 
103 2 Syzgyn-40270
        ["points a"] = function(a, b)
104 135 Tomate-202285
                local _, a, b
105 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(a)] or self.isGuildList[GetAchievementCategory(a)] then
106 133 Tomate-202285
                        _,_,a = GetAchievementInfo(a)
107 11 Syzgyn-40270
                else
108 Syzgyn-40270
                        a = GetStatistic(a)
109 Syzgyn-40270
                end
110 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(b)] or self.isGuildList[GetAchievementCategory(b)] then
111 133 Tomate-202285
                        _,_,b = GetAchievementInfo(b)
112 11 Syzgyn-40270
                else
113 Syzgyn-40270
                        b = GetStatistic(b)
114 Syzgyn-40270
                end
115 59 Syzgyn-40270
                return a > b
116 2 Syzgyn-40270
        end,
117 109 Tomate-202285
 
118 2 Syzgyn-40270
        ["completed d"] = function(a, b)
119 Syzgyn-40270
                local _,_,_,_,a1,a2,a3 = GetAchievementInfo(a)
120 14 Syzgyn-40270
                a1, a2, a3 = a1 or 0, a2 or 0, a3 or 0
121 2 Syzgyn-40270
                local _,_,_,_,b1,b2,b3 = GetAchievementInfo(b)
122 14 Syzgyn-40270
                b1, b2, b3 = b1 or 0, b2 or 0, b3 or 0
123 Syzgyn-40270
                if a3 ~= b3 then return a3 < b3 end     --Years first
124 Syzgyn-40270
                if a1 ~= b1 then return a1 < b1 end     --Then Months
125 Syzgyn-40270
                if a2 ~= b2 then return a2 < b2 end     --Finally Days
126 Syzgyn-40270
                return false            --They're exactly the same, return false
127 2 Syzgyn-40270
        end,
128 109 Tomate-202285
 
129 2 Syzgyn-40270
        ["completed a"] = function(a, b)
130 Syzgyn-40270
                local _,_,_,_,a1,a2,a3 = GetAchievementInfo(a)
131 14 Syzgyn-40270
                a1, a2, a3 = a1 or 0, a2 or 0, a3 or 0
132 2 Syzgyn-40270
                local _,_,_,_,b1,b2,b3 = GetAchievementInfo(b)
133 14 Syzgyn-40270
                b1, b2, b3 = b1 or 0, b2 or 0, b3 or 0
134 Syzgyn-40270
                if a3 ~= b3 then return a3 > b3 end     --Years first
135 Syzgyn-40270
                if a1 ~= b1 then return a1 > b1 end     --Then Months
136 Syzgyn-40270
                if a2 ~= b2 then return a2 > b2 end     --Finally Days
137 Syzgyn-40270
                return false            --They're exactly the same, return false
138 2 Syzgyn-40270
        end,
139 109 Tomate-202285
 
140 2 Syzgyn-40270
        ["compare d"] = function(a, b)
141 Syzgyn-40270
                if not self.isComparing then return false end
142 14 Syzgyn-40270
                --They're both achievements, go by date
143 107 Tomate-202285
                if (self.isAchList[GetAchievementCategory(a)] and self.isAchList[GetAchievementCategory(b)]) or (self.isGuildList[GetAchievementCategory(a)] and self.isGuildList[GetAchievementCategory(b)]) then
144 14 Syzgyn-40270
                        local _,a1,a2,a3 = GetAchievementComparisonInfo(a,1)
145 Syzgyn-40270
                        a1, a2, a3 = a1 or 0, a2 or 0, a3 or 0
146 Syzgyn-40270
                        local _,b1,b2,b3 = GetAchievementComparisonInfo(b,1)
147 Syzgyn-40270
                        b1, b2, b3 = b1 or 0, b2 or 0, b3 or 0
148 Syzgyn-40270
                        if a3 ~= b3 then return a3 < b3 end     --Years first
149 Syzgyn-40270
                        if a1 ~= b1 then return a1 < b1 end     --Then Months
150 Syzgyn-40270
                        if a2 ~= b2 then return a2 < b2 end     --Finally Days
151 Syzgyn-40270
                        return false            --They're exactly the same, return false
152 11 Syzgyn-40270
                else
153 107 Tomate-202285
                        if self.isAchList[GetAchievementCategory(a)] or self.isGuildList[GetAchievementCategory(a)] then
154 38 Syzgyn-40270
                                local _,a1, a2, a3 = GetAchievementComparisonInfo(a,1)
155 Syzgyn-40270
                                a = (a1 or "") .. "/" .. (a2 or "") .. "/" .. (a3 or "")
156 Syzgyn-40270
                        else
157 Syzgyn-40270
                                a = GetStatistic(a)
158 Syzgyn-40270
                        end
159 109 Tomate-202285
 
160 107 Tomate-202285
                        if self.isAchList[GetAchievementCategory(b)] or self.isGuildList[GetAchievementCategory(b)] then
161 38 Syzgyn-40270
                                local _,b1, b2, b3 = GetAchievementComparisonInfo(b,1)
162 Syzgyn-40270
                                b = (b1 or "") .. "/" .. (b2 or "") .. "/" .. (b3 or "")
163 Syzgyn-40270
                        else
164 Syzgyn-40270
                                b = GetStatistic(b)
165 Syzgyn-40270
                        end
166 109 Tomate-202285
 
167 38 Syzgyn-40270
                        return a < b
168 11 Syzgyn-40270
                end
169 2 Syzgyn-40270
        end,
170 109 Tomate-202285
 
171 2 Syzgyn-40270
        ["compare a"] = function(a, b)
172 Syzgyn-40270
                if not self.isComparing then return false end
173 109 Tomate-202285
 
174 107 Tomate-202285
                if (self.isAchList[GetAchievementCategory(a)] and self.isAchList[GetAchievementCategory(b)]) or (self.isGuildList[GetAchievementCategory(a)] and self.isGuildList[GetAchievementCategory(b)])  then
175 14 Syzgyn-40270
                        local _,a1,a2,a3 = GetAchievementComparisonInfo(a,1)
176 Syzgyn-40270
                        a1, a2, a3 = a1 or 0, a2 or 0, a3 or 0
177 Syzgyn-40270
                        local _,b1,b2,b3 = GetAchievementComparisonInfo(b,1)
178 Syzgyn-40270
                        b1, b2, b3 = b1 or 0, b2 or 0, b3 or 0
179 Syzgyn-40270
                        if a3 ~= b3 then return a3 > b3 end     --Years first
180 Syzgyn-40270
                        if a1 ~= b1 then return a1 > b1 end     --Then Months
181 Syzgyn-40270
                        if a2 ~= b2 then return a2 > b2 end     --Finally Days
182 Syzgyn-40270
                        return false            --They're exactly the same, return false
183 Syzgyn-40270
                end
184 109 Tomate-202285
 
185 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(a)] or self.isGuildList[GetAchievementCategory(a)] then
186 11 Syzgyn-40270
                        local _,a1, a2, a3 = GetAchievementComparisonInfo(a,1)
187 Syzgyn-40270
                        a = (a1 or "") .. "/" .. (a2 or "") .. "/" .. (a3 or "")
188 Syzgyn-40270
                else
189 Syzgyn-40270
                        a = GetStatistic(a)
190 Syzgyn-40270
                end
191 109 Tomate-202285
 
192 107 Tomate-202285
                if self.isAchList[GetAchievementCategory(b)] or self.isGuildList[GetAchievementCategory(b)] then
193 11 Syzgyn-40270
                        local _,b1, b2, b3 = GetAchievementComparisonInfo(b,1)
194 Syzgyn-40270
                        b = (b1 or "") .. "/" .. (b2 or "") .. "/" .. (b3 or "")
195 Syzgyn-40270
                else
196 Syzgyn-40270
                        b = GetStatistic(b)
197 Syzgyn-40270
                end
198 109 Tomate-202285
 
199 2 Syzgyn-40270
                return a > b
200 Syzgyn-40270
        end
201 Syzgyn-40270
}
202 Syzgyn-40270
 
203 58 Syzgyn-40270
self.timers = {}
204 Syzgyn-40270
 
205 38 Syzgyn-40270
SLASH_URBANACHIEVER1 = "/urbanachiever"
206 Syzgyn-40270
SLASH_URBANACHIEVER2 = "/ua"
207 Syzgyn-40270
SlashCmdList["URBANACHIEVER"] = function(msg)
208 71 Syzgyn-40270
        if msg == "show" then
209 47 Syzgyn-40270
                self:ToggleFrame()
210 38 Syzgyn-40270
        else
211 47 Syzgyn-40270
                InterfaceOptionsFrame_OpenToCategory("Urban Achiever")
212 38 Syzgyn-40270
        end
213 Syzgyn-40270
end
214 Syzgyn-40270
 
215 56 Syzgyn-40270
--Saved Variable
216 38 Syzgyn-40270
UASVPC = {
217 Syzgyn-40270
        ["tracker"] = {
218 43 Syzgyn-40270
                ["x"] = UIParent:GetWidth()/2,
219 Syzgyn-40270
                ["y"] = UIParent:GetHeight()/2,
220 53 Syzgyn-40270
                ["scale"] = 1,
221 56 Syzgyn-40270
                ["list"] = {
222 Syzgyn-40270
                        [1] = 0,
223 Syzgyn-40270
                        [2] = 0,
224 Syzgyn-40270
                        [3] = 0,
225 Syzgyn-40270
                        [4] = 0,
226 62 Syzgyn-40270
                        [5] = 0,
227 56 Syzgyn-40270
                },
228 50 Syzgyn-40270
        },
229 Syzgyn-40270
        ["statCriteria"] = true,
230 51 Syzgyn-40270
        ["moneyAsColor"] = false,
231 58 Syzgyn-40270
        ["trackTimed"] = true,
232 38 Syzgyn-40270
}
233 2 Syzgyn-40270
-------------------------------------------------------------
234 109 Tomate-202285
--Local functions
235 73 Syzgyn-40270
-------------------------------------------------------------
236 Syzgyn-40270
local function debug(...)
237 Syzgyn-40270
        if DBG then print(...) end
238 Syzgyn-40270
        return
239 Syzgyn-40270
end
240 Syzgyn-40270
 
241 Syzgyn-40270
local GANC = GetAchievementNumCriteria
242 Syzgyn-40270
local function GetAchievementNumCriteria(...)
243 Syzgyn-40270
        return GANC(...) or 0
244 Syzgyn-40270
end
245 Syzgyn-40270
-------------------------------------------------------------
246 109 Tomate-202285
--Startup Stuff
247 2 Syzgyn-40270
-------------------------------------------------------------
248 73 Syzgyn-40270
function self:Initialize(event, name)
249 Syzgyn-40270
        self:UnregisterEvent("ADDON_LOADED")
250 Syzgyn-40270
        debug("Initializing")
251 2 Syzgyn-40270
        self:PopulateMasterList()
252 109 Tomate-202285
 
253 2 Syzgyn-40270
        self:PopulateCategories("achievements")
254 Syzgyn-40270
        self:PopulateCategories("statistics")
255 107 Tomate-202285
        self:PopulateCategories("guild")
256 109 Tomate-202285
 
257 2 Syzgyn-40270
        --self:PopulateAchievements("achievements")
258 Syzgyn-40270
        --self:PopulateAchievements("statistics")
259 109 Tomate-202285
 
260 2 Syzgyn-40270
        self:SetupFrames()
261 109 Tomate-202285
 
262 43 Syzgyn-40270
        UrbanAchiever:CreateOptions()
263 120 Tomate-202285
        self:PopulateAchieveList()
264 Tomate-202285
end
265 109 Tomate-202285
 
266 162 Tomate-202285
UrbanAchiever.hiddenAchievemen = {}
267 Tomate-202285
 
268 Tomate-202285
function self:PrintHidden()
269 Tomate-202285
        for k,v in pairs(UrbanAchiever.hiddenAchievemen) do
270 Tomate-202285
                print('["'..k..'"]   = 3,   --'.. v)
271 Tomate-202285
        end
272 Tomate-202285
end
273 Tomate-202285
 
274 Tomate-202285
function self:checkHidden(id)
275 Tomate-202285
        return true
276 Tomate-202285
        --[[local _, name, _, _, _, _, _, description = GetAchievementInfo(id)
277 Tomate-202285
        for k,v in pairs(hiddenAchievements) do
278 Tomate-202285
                local hidden = string.find(name, v)
279 Tomate-202285
                if hidden ~= nil then
280 Tomate-202285
                        table.insert(UrbanAchiever.hiddenAchievemen, id, name)
281 Tomate-202285
                        return false
282 Tomate-202285
                end
283 Tomate-202285
                hidden = string.find(description, v)
284 Tomate-202285
                if hidden ~= nil then
285 Tomate-202285
                        table.insert(UrbanAchiever.hiddenAchievemen, id, name)
286 Tomate-202285
                        return false
287 Tomate-202285
                end
288 Tomate-202285
        end
289 Tomate-202285
        return true]]
290 Tomate-202285
end
291 Tomate-202285
 
292 120 Tomate-202285
function self:PopulateAchieveList()
293 Tomate-202285
        for id = 1, MAX_ACHIEVEMENTS do
294 135 Tomate-202285
                local category = GetAchievementCategory(id)
295 120 Tomate-202285
                if category and category ~= nil then
296 135 Tomate-202285
                        local _, _, _, completed = GetAchievementInfo(id)
297 162 Tomate-202285
                        if not (UrbanAchiever.factionAchs[tostring(id)] and UrbanAchiever.factionAchs[tostring(id)] ~= playerFaction) and self:checkHidden(id) then
298 121 Tomate-202285
                                if(type(self.achieveList[category]) == "table") then
299 Tomate-202285
                                        table.insert(self.achieveList[category], id, completed)
300 Tomate-202285
                                else
301 Tomate-202285
                                        self.achieveList[category] = {[id] = completed}
302 Tomate-202285
                                end
303 120 Tomate-202285
                        end
304 Tomate-202285
                end
305 Tomate-202285
        end
306 2 Syzgyn-40270
end
307 Syzgyn-40270
 
308 Syzgyn-40270
function self:OnEnable()
309 Syzgyn-40270
        self:RegisterEvent("ADDON_LOADED", "Initialize")
310 83 Tomate-202285
        self:RegisterEvent("ACHIEVEMENT_EARNED", function(self1,arg1)
311 20 Syzgyn-40270
                self:SetDisplayAchievement()
312 135 Tomate-202285
                local searchString = self:GetSearchString(arg1)
313 83 Tomate-202285
                self.masterList[arg1] = {
314 Tomate-202285
                        ["searchString"] = searchString:lower(),
315 Tomate-202285
                }
316 72 Syzgyn-40270
                RemoveTrackedAchievement(arg1)
317 20 Syzgyn-40270
        end)
318 21 Syzgyn-40270
        self:RegisterEvent("CRITERIA_UPDATE", function()
319 Syzgyn-40270
                self:RefreshCriteriaButtons()
320 Syzgyn-40270
        end)
321 109 Tomate-202285
 
322 7 Syzgyn-40270
        self:RegisterEvent("INSPECT_ACHIEVEMENT_READY", function()
323 40 Syzgyn-40270
                if self.isComparing then
324 Syzgyn-40270
                        self:ComparisonUpdate()
325 58 Syzgyn-40270
                        self:RefreshAchievementButtons(false)
326 40 Syzgyn-40270
                        self.frame:Show()
327 Syzgyn-40270
                end
328 7 Syzgyn-40270
        end)
329 109 Tomate-202285
 
330 58 Syzgyn-40270
        --I loooooove that this event gets called for any achievement, not just when you're tracking it.
331 147 Tomate-202285
        --I loooove it too because it's wireldy return 0 at idAchievement for 5.4 cooking daily...
332 58 Syzgyn-40270
        self:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE", function(event, ...)
333 147 Tomate-202285
                local idAchievement, criteriaID, elapsed, duration = ...
334 Tomate-202285
                if idAchievement == 0 or idAchievement == "0" or not elapsed or not duration or not UASVPC.trackTimed then return end
335 Tomate-202285
 
336 69 Syzgyn-40270
                if elapsed < duration then
337 147 Tomate-202285
                        AddTrackedAchievement(idAchievement)
338 Tomate-202285
                elseif IsTrackedAchievement(idAchievement) and elapsed >= duration then
339 Tomate-202285
                        RemoveTrackedAchievement(idAchievement)
340 58 Syzgyn-40270
                end
341 Syzgyn-40270
        end)
342 109 Tomate-202285
 
343 16 Syzgyn-40270
        --Use a different button so InspectAchievements() doesnt get called.  Easier hooking.
344 Syzgyn-40270
        UnitPopupButtons["UA_ACHIEVEMENTS"] = { text = COMPARE_ACHIEVEMENTS, dist = 1 };
345 135 Tomate-202285
        --Replace their Achievement Button with mine.
346 16 Syzgyn-40270
        for j = 1, #menuTypes do
347 Syzgyn-40270
                local t = menuTypes[j]
348 Syzgyn-40270
                for i = 1, #UnitPopupMenus[t] do
349 Syzgyn-40270
                        if UnitPopupMenus[t][i] == "ACHIEVEMENTS" then
350 Syzgyn-40270
                                UnitPopupMenus[t][i] = "UA_ACHIEVEMENTS"
351 Syzgyn-40270
                                break
352 Syzgyn-40270
                        end
353 Syzgyn-40270
                end
354 Syzgyn-40270
        end
355 109 Tomate-202285
 
356 33 Syzgyn-40270
        SlashCmdList["ACHIEVEMENTUI"] = function(msg)
357 Syzgyn-40270
                self:ToggleFrame()
358 Syzgyn-40270
        end
359 109 Tomate-202285
 
360 48 Syzgyn-40270
        self:HookAlertFrames()
361 Syzgyn-40270
        self:HookMicroMenu()
362 69 Syzgyn-40270
        self:HookWatchFrame()
363 109 Tomate-202285
 
364 16 Syzgyn-40270
        self:SecureHook("UnitPopup_ShowMenu")
365 2 Syzgyn-40270
end
366 Syzgyn-40270
 
367 Syzgyn-40270
function self:OnDisable()
368 133 Tomate-202285
        self:UnregisterEvent("ADDON_LOADED")
369 2 Syzgyn-40270
        self:UnregisterEvent("ACHIEVEMENT_EARNED")
370 Syzgyn-40270
        self:UnregisterEvent("CRITERIA_UPDATE")
371 109 Tomate-202285
 
372 16 Syzgyn-40270
        --Go back to the original button.
373 Syzgyn-40270
        for j = 1, #menuTypes do
374 Syzgyn-40270
                local t = menuTypes[j]
375 Syzgyn-40270
                for i = 1, #UnitPopupMenus[t] do
376 Syzgyn-40270
                        if UnitPopupMenus[t][i] == "UA_ACHIEVEMENTS" then
377 Syzgyn-40270
                                UnitPopupMenus[t][i] = "ACHIEVEMENTS"
378 Syzgyn-40270
                                break
379 Syzgyn-40270
                        end
380 Syzgyn-40270
                end
381 Syzgyn-40270
        end
382 2 Syzgyn-40270
end
383 Syzgyn-40270
-------------------------------------------------------------
384 16 Syzgyn-40270
--Hooking Stuff
385 Syzgyn-40270
-------------------------------------------------------------
386 Syzgyn-40270
function self:UnitPopup_ShowMenu(dropdownMenu, which, unit, name, userData, ...)
387 Syzgyn-40270
        for i=1, UIDROPDOWNMENU_MAXBUTTONS do
388 135 Tomate-202285
                local button = _G["DropDownList"..UIDROPDOWNMENU_MENU_LEVEL.."Button"..i];
389 16 Syzgyn-40270
                if button.value == "UA_ACHIEVEMENTS" then
390 133 Tomate-202285
                        button.func = function()
391 16 Syzgyn-40270
                                self:SetComparisonUnit(unit)
392 Syzgyn-40270
                        end
393 Syzgyn-40270
                end
394 Syzgyn-40270
        end
395 109 Tomate-202285
end
396 19 Syzgyn-40270
 
397 Syzgyn-40270
function self:HookAlertFrames()
398 Syzgyn-40270
        if not AchievementFrame then
399 Syzgyn-40270
                AchievementFrame_LoadUI()
400 Syzgyn-40270
        end
401 109 Tomate-202285
 
402 69 Syzgyn-40270
        CreateFrame("Button", "AchievementAlertFrame1", UIParent, "AchievementAlertFrameTemplate")
403 19 Syzgyn-40270
        AchievementAlertFrame1:SetPoint("BOTTOM", UIParent, "BOTTOM", 0, 128)
404 69 Syzgyn-40270
        CreateFrame("Button", "AchievementAlertFrame2", UIParent, "AchievementAlertFrameTemplate")
405 19 Syzgyn-40270
        AchievementAlertFrame2:SetPoint("BOTTOM", AchievementAlertFrame1, "TOP", 0, -10)
406 109 Tomate-202285
 
407 69 Syzgyn-40270
        AchievementAlertFrame1:SetScript("OnClick", function(button)
408 72 Syzgyn-40270
                local id = button.id
409 19 Syzgyn-40270
                self.frame:Show()
410 72 Syzgyn-40270
                self:SetDisplayAchievement(id, true)
411 19 Syzgyn-40270
                self:SetCategory(id)
412 Syzgyn-40270
        end)
413 109 Tomate-202285
 
414 69 Syzgyn-40270
        AchievementAlertFrame2:SetScript("OnClick", function(button)
415 72 Syzgyn-40270
                local id = button.id
416 19 Syzgyn-40270
                self.frame:Show()
417 72 Syzgyn-40270
                self:SetDisplayAchievement(id, true)
418 19 Syzgyn-40270
                self:SetCategory(id)
419 Syzgyn-40270
        end)
420 Syzgyn-40270
end
421 48 Syzgyn-40270
 
422 Syzgyn-40270
function self:HookMicroMenu()
423 Syzgyn-40270
        AchievementMicroButton:SetScript("OnClick", function()
424 Syzgyn-40270
                self:ToggleFrame()
425 Syzgyn-40270
        end)
426 109 Tomate-202285
 
427 48 Syzgyn-40270
        AchievementMicroButton:SetScript("OnEnter", function(frame)
428 Syzgyn-40270
                frame.tooltipText = MicroButtonTooltipText(ACHIEVEMENT_BUTTON, "URBANACHIEVER_TOGGLE")
429 Syzgyn-40270
                GameTooltip_AddNewbieTip(frame, frame.tooltipText, 1.0, 1.0, 1.0, NEWBIE_TOOLTIP_ACHIEVEMENT);
430 Syzgyn-40270
        end)
431 Syzgyn-40270
end
432 69 Syzgyn-40270
 
433 Syzgyn-40270
function self:HookWatchFrame()
434 Syzgyn-40270
        local oldWatchFrameLinkButtonTemplate_OnLeftClick = WatchFrameLinkButtonTemplate_OnLeftClick
435 Syzgyn-40270
 
436 Syzgyn-40270
        WatchFrameLinkButtonTemplate_OnLeftClick = function(this)
437 Syzgyn-40270
                CloseDropDownMenus()
438 Syzgyn-40270
                if ( this.type == "QUEST" ) then
439 119 Tomate-202285
                        if IsModifiedClick("SELFCAST") then
440 73 Syzgyn-40270
                                RemoveQuestWatch(GetQuestIndexForWatch(this.index))
441 69 Syzgyn-40270
                                WatchFrame_Update()
442 Syzgyn-40270
                        else
443 79 Tomate-202285
                                QuestLog_SetSelection(GetQuestIndexForWatch(this.index))
444 69 Syzgyn-40270
                        end
445 Syzgyn-40270
                elseif ( this.type == "ACHIEVEMENT" ) then
446 119 Tomate-202285
                        if IsModifiedClick("SELFCAST") then
447 69 Syzgyn-40270
                                RemoveTrackedAchievement(this.index)
448 Syzgyn-40270
                        else
449 Syzgyn-40270
                                if not self.frame:IsShown() then
450 Syzgyn-40270
                                        self.frame:Show()
451 Syzgyn-40270
                                end
452 Syzgyn-40270
                                self:SetDisplayAchievement(this.index, true)
453 Syzgyn-40270
                        end
454 Syzgyn-40270
                end
455 Syzgyn-40270
        end
456 Syzgyn-40270
end
457 16 Syzgyn-40270
-------------------------------------------------------------
458 109 Tomate-202285
--Utilities
459 2 Syzgyn-40270
-------------------------------------------------------------
460 Syzgyn-40270
function self:InsertIntoChat(id)
461 Syzgyn-40270
        --Taken from Historian, thanks Ixchael!
462 120 Tomate-202285
        if (GetCurrentKeyBoardFocus() == nil) then
463 109 Tomate-202285
                return;
464 2 Syzgyn-40270
        end;
465 109 Tomate-202285
 
466 120 Tomate-202285
        if not GetCurrentKeyBoardFocus():IsVisible() then
467 Tomate-202285
                GetCurrentKeyBoardFocus():Show();
468 2 Syzgyn-40270
        end;
469 109 Tomate-202285
 
470 120 Tomate-202285
        GetCurrentKeyBoardFocus():Insert(GetAchievementLink(id));
471 2 Syzgyn-40270
end
472 Syzgyn-40270
 
473 Syzgyn-40270
function self:SortDisplayTable(sortStr)
474 Syzgyn-40270
        local dir = "d"
475 Syzgyn-40270
        if self.currentSort == sortStr .. " d" then
476 Syzgyn-40270
                dir = "a"
477 Syzgyn-40270
        end
478 Syzgyn-40270
        sortStr = sortStr .. " " .. dir
479 Syzgyn-40270
        self:RefreshAchievementButtons(sortStr)
480 Syzgyn-40270
        self.currentSort = sortStr
481 Syzgyn-40270
end
482 Syzgyn-40270
 
483 Syzgyn-40270
function preserveSort(t, f)     --table.sort sucks!
484 Syzgyn-40270
        local temp
485 Syzgyn-40270
        for a = 1, #t, 1 do
486 Syzgyn-40270
                for b = #t, a + 1, -1 do
487 Syzgyn-40270
                        if f(t[b-1], t[b]) then
488 Syzgyn-40270
                                temp = t[b-1]
489 Syzgyn-40270
                                t[b-1] = t[b]
490 Syzgyn-40270
                                t[b] = temp
491 Syzgyn-40270
                        end
492 Syzgyn-40270
                end
493 Syzgyn-40270
        end
494 Syzgyn-40270
end
495 Syzgyn-40270
 
496 Syzgyn-40270
function self:Search(searchStr)
497 Syzgyn-40270
        if searchStr == "" then return end --no point in returning everything
498 Syzgyn-40270
        searchStr = searchStr:lower()
499 Syzgyn-40270
        local searchTable = {strsplit(" ", searchStr)}
500 Syzgyn-40270
        local result = true
501 Syzgyn-40270
        self.displayTable = {}
502 156 Tomate-202285
 
503 Tomate-202285
        if type(searchStr) == "number" and self.masterList[searchStr] ~= nil then
504 Tomate-202285
                tinsert(self.displayTable, searchStr)
505 Tomate-202285
        else
506 Tomate-202285
                for a = 1, MAX_ACHIEVEMENTS do
507 Tomate-202285
                        if self.masterList[a] then
508 Tomate-202285
                                result = true
509 Tomate-202285
                                for _, v in next, searchTable do
510 Tomate-202285
                                        if not self.masterList[a].searchString:find(v) then result = false break end
511 Tomate-202285
                                end
512 Tomate-202285
                                if result then
513 Tomate-202285
                                        tinsert(self.displayTable, a)
514 Tomate-202285
                                end
515 2 Syzgyn-40270
                        end
516 Syzgyn-40270
                end
517 Syzgyn-40270
        end
518 156 Tomate-202285
 
519 2 Syzgyn-40270
        self.currentCat = -2
520 Syzgyn-40270
        self:RefreshAchievementButtons("name a")
521 Syzgyn-40270
end
522 Syzgyn-40270
 
523 Syzgyn-40270
function self:GetSearchString(id)
524 Syzgyn-40270
        if not type(id) == "number" then return end
525 82 Tomate-202285
        local retok, id, name, points, completed, month, day, year, description, _,_, reward = pcall (GetAchievementInfo,id)
526 133 Tomate-202285
        if not retok or not id then return nil end
527 2 Syzgyn-40270
        if not id then return nil end
528 81 Tomate-202285
        if completed then
529 Tomate-202285
                if year < 10 then
530 109 Tomate-202285
                        year = "0" .. year;
531 81 Tomate-202285
                end
532 104 Tomate-202285
                if (GetLocale() == "frFR" or GetLocale() == "ruRU") then
533 81 Tomate-202285
                        completed = day .. "/" .. month .. "/" .. year;
534 Tomate-202285
                else
535 106 Tomate-202285
                        if (GetLocale() == "deDE") then
536 Tomate-202285
                                completed = day .. "." .. month .. "." .. year;
537 Tomate-202285
                        else
538 Tomate-202285
                                completed = month .. "/" .. day .. "/" .. year;
539 Tomate-202285
                        end
540 81 Tomate-202285
                end
541 Tomate-202285
        else
542 Tomate-202285
                completed = "";
543 Tomate-202285
        end
544 2 Syzgyn-40270
        --searchString will be used as a basis of the searching, instead of looping through all the sub-arrays
545 135 Tomate-202285
        local searchStr = name .. "; " .. points .. "; " .. completed  .. "; " .. description .. "; " .. reward .. "; "
546 2 Syzgyn-40270
 
547 Syzgyn-40270
        --Add the criteria info
548 Syzgyn-40270
        for a=1, GetAchievementNumCriteria(id) do
549 135 Tomate-202285
                local _, criteriaName = pcall(GetAchievementCriteriaInfo, id, a)
550 130 Tomate-202285
                searchStr = searchStr .. (criteriaName or "") .. "; "
551 2 Syzgyn-40270
        end
552 Syzgyn-40270
        --Add all the info to the master list
553 Syzgyn-40270
        return searchStr:lower()
554 Syzgyn-40270
end
555 Syzgyn-40270
 
556 82 Tomate-202285
function UrbanAchiever_CatButtonScroll(self1, arg1)
557 2 Syzgyn-40270
        --arg1 = 1 for up, -1 for down
558 82 Tomate-202285
        if IsShiftKeyDown() then arg1 = arg1 * 5 end    --Shift = longer scroll
559 Tomate-202285
        local sMin, sMax = self.frame.catScroll:GetMinMaxValues()
560 Tomate-202285
        self.catOffset = math.min(sMax, math.max(sMin, self.catOffset+ (arg1 * -1)))
561 Tomate-202285
        self.frame.catScroll:SetValue(self.catOffset)
562 2 Syzgyn-40270
end
563 Syzgyn-40270
 
564 82 Tomate-202285
function UrbanAchiever_AchButtonScroll(self1, arg1)
565 Tomate-202285
        --arg1 = 1 for up, -1 for down
566 Tomate-202285
        if IsShiftKeyDown() then arg1 = arg1 * 5 end    --Shift = longer scroll
567 Tomate-202285
        local sMin, sMax = self.frame.achScroll:GetMinMaxValues()
568 Tomate-202285
        self.achOffset = math.min(sMax, math.max(sMin, self.achOffset+ (arg1 * -1)))
569 Tomate-202285
        self.frame.achScroll:SetValue(self.achOffset)
570 Tomate-202285
end
571 Tomate-202285
 
572 Tomate-202285
function UrbanAchiever_CriteriaButtonScroll(self1, arg1)
573 Tomate-202285
        --arg1 = 1 for up, -1 for down
574 Tomate-202285
        if IsShiftKeyDown() then arg1 = arg1 * 5 end    --Shift = longer scroll
575 Tomate-202285
        local sMin, sMax = self.frame.criteriaScroll:GetMinMaxValues()
576 Tomate-202285
        self.criteriaOffset = math.min(sMax, math.max(sMin, self.criteriaOffset+ (arg1 * -1)))
577 Tomate-202285
        self.frame.criteriaScroll:SetValue(self.criteriaOffset)
578 133 Tomate-202285
end
579 82 Tomate-202285
 
580 2 Syzgyn-40270
function self:ToggleFrame()
581 79 Tomate-202285
        if self.frame == nil then self:Initialize("","") end
582 Tomate-202285
        if self.frame == nil then return end
583 2 Syzgyn-40270
        if self.frame:IsShown() then
584 Syzgyn-40270
                self.frame:Hide()
585 Syzgyn-40270
        else
586 Syzgyn-40270
                self.frame:Show()
587 Syzgyn-40270
        end
588 Syzgyn-40270
end
589 8 Syzgyn-40270
 
590 Syzgyn-40270
function self:SetCategory(id)
591 Syzgyn-40270
        if id == nil then id = self.currentAch end
592 Syzgyn-40270
        if not self.masterList[id] then return end
593 109 Tomate-202285
 
594 38 Syzgyn-40270
        local category = GetAchievementCategory(id)
595 Syzgyn-40270
        if self.isAchList[category] then
596 9 Syzgyn-40270
                self.currentTab = "achievements"
597 Syzgyn-40270
        else
598 107 Tomate-202285
                if self.isGuildList[category] then
599 Tomate-202285
                        self.currentTab = "guild"
600 Tomate-202285
                else
601 Tomate-202285
                        self.currentTab = "statistics"
602 Tomate-202285
                end
603 9 Syzgyn-40270
        end
604 109 Tomate-202285
 
605 8 Syzgyn-40270
        self.currentCat = category
606 Syzgyn-40270
        local _, catParent = GetCategoryInfo(category)
607 9 Syzgyn-40270
        if catParent ~= -1 then --It's a child category, expand the parent
608 Syzgyn-40270
                for k, v in next, self.categories[self.currentTab] do
609 Syzgyn-40270
                        if v.id == catParent then
610 Syzgyn-40270
                                v.collapsed = false
611 Syzgyn-40270
                                break
612 8 Syzgyn-40270
                        end
613 Syzgyn-40270
                end
614 Syzgyn-40270
        end
615 9 Syzgyn-40270
        self:RefreshCategoryButtons()
616 20 Syzgyn-40270
        self:RefreshAchievementButtons(nil, id)
617 8 Syzgyn-40270
end
618 9 Syzgyn-40270
 
619 51 Syzgyn-40270
function self:FormatMoney(compMin, compMax)
620 Syzgyn-40270
        local fIndex = UASVPC.moneyAsColor and 1 or 2
621 Syzgyn-40270
        local fSpace = UASVPC.moneyAsColor and "." or " "
622 35 Syzgyn-40270
        --compMin =  1368980
623 Syzgyn-40270
        --compMax = 10000000
624 Syzgyn-40270
        compMin = tostring(compMin)
625 Syzgyn-40270
        compMax = tostring(compMax)
626 Syzgyn-40270
        local length = compMin:len()
627 37 Syzgyn-40270
        local gold, silver, copper = "","",""
628 35 Syzgyn-40270
        if length <= 2 then             --      1-2
629 51 Syzgyn-40270
                copper = compMin
630 109 Tomate-202285
        elseif length <= 4 then --      3-4
631 35 Syzgyn-40270
                silver = compMin:sub(1, length - 2)
632 Syzgyn-40270
                copper = compMin:sub(length-1)
633 Syzgyn-40270
        else                                    --      5+
634 Syzgyn-40270
                gold =   compMin:sub(1, length-4)
635 Syzgyn-40270
                silver = compMin:sub(length-3, length-2)
636 Syzgyn-40270
                copper = compMin:sub(length-1)
637 Syzgyn-40270
        end
638 51 Syzgyn-40270
        gold   = tonumber(gold)   or 0
639 Syzgyn-40270
        silver = tonumber(silver) or 0
640 Syzgyn-40270
        copper = tonumber(copper) or 0
641 109 Tomate-202285
 
642 51 Syzgyn-40270
        if gold >   0 then gold   = format(self.moneyFormats.gold[fIndex],   gold)       else gold   = "" end
643 Syzgyn-40270
        if silver > 0 then silver = format(self.moneyFormats.silver[fIndex], silver) else silver = "" end
644 Syzgyn-40270
        if copper > 0 then copper = format(self.moneyFormats.copper[fIndex], copper) else copper = "" end
645 109 Tomate-202285
 
646 Tomate-202285
        compMin = gold .. (gold:len() > 0 and silver:len() > 0 and fSpace or "") ..
647 133 Tomate-202285
                        silver .. (silver:len() > 0 and copper:len() > 0 and fSpace or "") .. copper
648 55 Syzgyn-40270
        if compMin == "" then compMin = format(self.moneyFormats.copper[fIndex], 0) end
649 51 Syzgyn-40270
        compMax = format(self.moneyFormats.gold[fIndex], compMax:sub(1, compMax:len() - 4))
650 109 Tomate-202285
 
651 35 Syzgyn-40270
        return compMin, compMax
652 33 Syzgyn-40270
end
653 51 Syzgyn-40270
 
654 Syzgyn-40270
function self:StrToMoney(str)
655 59 Syzgyn-40270
        str = tostring(str)
656 Syzgyn-40270
        if not str:find("|T") then return str end
657 Syzgyn-40270
        local result = 0
658 Syzgyn-40270
        for num, value in str:gmatch("(%d+)|T.-UI%-(.)") do
659 Syzgyn-40270
                result = result + (num * moneyValues[value])
660 51 Syzgyn-40270
        end
661 Syzgyn-40270
        return tostring(result)
662 Syzgyn-40270
end
663 Syzgyn-40270
 
664 Syzgyn-40270
function self:FormatString(str)
665 Syzgyn-40270
        if not str:find("|T") then return str end
666 Syzgyn-40270
        local cur, max
667 Syzgyn-40270
        local t = {string.split("/", str)}
668 Syzgyn-40270
        if t[2] then    --There is a max string
669 Syzgyn-40270
                cur, max = self:FormatMoney(self:StrToMoney(t[1]), self:StrToMoney(t[2]))
670 Syzgyn-40270
                return cur .. " / " .. max
671 Syzgyn-40270
        else                    --No max string, fake one and ignore it.
672 Syzgyn-40270
                cur = self:FormatMoney(self:StrToMoney(t[1]), 10000)
673 Syzgyn-40270
                return cur
674 Syzgyn-40270
        end
675 Syzgyn-40270
end
676 2 Syzgyn-40270
-------------------------------------------------------------
677 109 Tomate-202285
--Frame Stuff
678 2 Syzgyn-40270
-------------------------------------------------------------
679 109 Tomate-202285
 
680 Tomate-202285
function self:HideCategorySum()
681 148 Tomate-202285
        self.categoryFrame:Hide()
682 109 Tomate-202285
end
683 Tomate-202285
function self:ShowCategorySum()
684 148 Tomate-202285
        self.categoryFrame:Show()
685 109 Tomate-202285
end
686 Tomate-202285
function self:HideCategorySumGuild()
687 148 Tomate-202285
        self.categoryFrameGuilde:Hide()
688 109 Tomate-202285
end
689 Tomate-202285
function self:ShowCategorySumGuild()
690 148 Tomate-202285
        self.categoryFrameGuilde:Show()
691 109 Tomate-202285
end
692 Tomate-202285
 
693 2 Syzgyn-40270
function self:SetupFrames()
694 Syzgyn-40270
        if self.frame then self.frame:Show() return end
695 Syzgyn-40270
        --Start with the frame and backdrop
696 Syzgyn-40270
        self.frame = CreateFrame("Frame", "UrbanAchieverFrame", UIParent)
697 Syzgyn-40270
        self.frame:SetBackdrop({
698 Syzgyn-40270
                edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
699 Syzgyn-40270
                insets = {left = 11, right = 12, top = 12, bottom = 11}
700 Syzgyn-40270
        })
701 Syzgyn-40270
        self.frame.backdrop = self.frame:CreateTexture("$parentBG", "BACKGROUND")
702 Syzgyn-40270
        self.frame.backdrop:SetPoint("TOPLEFT", 6, -6)
703 Syzgyn-40270
        self.frame.backdrop:SetPoint("BOTTOMRIGHT", -6, 6)
704 Syzgyn-40270
        self.frame.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-StatsBackground")
705 Syzgyn-40270
 
706 Syzgyn-40270
        self.frame:SetWidth(632)
707 Syzgyn-40270
        self.frame:SetHeight(535)
708 Syzgyn-40270
        self.frame:SetPoint("CENTER")
709 Syzgyn-40270
        self.frame:SetFrameStrata("DIALOG")
710 Syzgyn-40270
        self.frame:EnableMouse(true)
711 Syzgyn-40270
        self.frame:SetMovable(true)
712 109 Tomate-202285
 
713 83 Tomate-202285
        self.frame:SetScript("OnMouseDown",function(self1,arg1)
714 133 Tomate-202285
                if ( arg1 == "LeftButton" ) then
715 2 Syzgyn-40270
                        self.frame:StartMoving()
716 Syzgyn-40270
                end
717 133 Tomate-202285
        end)
718 Tomate-202285
        self.frame:SetScript("OnMouseUp",function(self1,arg1)
719 Tomate-202285
                if ( arg1 == "LeftButton" ) then
720 2 Syzgyn-40270
                        self.frame:StopMovingOrSizing()
721 Syzgyn-40270
                end
722 133 Tomate-202285
        end)
723 109 Tomate-202285
 
724 148 Tomate-202285
        self.categoryFrame = CreateFrame("Frame", "UrbanAchieverFrame", self.frame)
725 Tomate-202285
        self.categoryFrame:SetBackdrop({
726 Tomate-202285
                edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
727 Tomate-202285
                insets = {left = 11, right = 12, top = 12, bottom = 11}
728 Tomate-202285
        })
729 Tomate-202285
        self.categoryFrame.backdrop = self.categoryFrame:CreateTexture("$parentBG", "BACKGROUND")
730 Tomate-202285
        self.categoryFrame.backdrop:SetPoint("TOPLEFT", 6, -6)
731 Tomate-202285
        self.categoryFrame.backdrop:SetPoint("BOTTOMRIGHT", -6, 6)
732 Tomate-202285
        self.categoryFrame.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment")
733 Tomate-202285
        self.categoryFrame.backdrop:SetTexCoord(0,.5,0,1)
734 Tomate-202285
        self.categoryFrame:SetWidth(260)
735 154 Tomate-202285
        self.categoryFrame:SetHeight(470)
736 148 Tomate-202285
        self.categoryFrame:SetPoint("LEFT", self.frame, "RIGHT", -12, 0)
737 Tomate-202285
 
738 Tomate-202285
        self.categoryFrameGuilde = CreateFrame("Frame", "UrbanAchieverFrame", self.frame)
739 Tomate-202285
        self.categoryFrameGuilde:SetBackdrop({
740 Tomate-202285
                edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
741 Tomate-202285
                insets = {left = 11, right = 12, top = 12, bottom = 11}
742 Tomate-202285
        })
743 Tomate-202285
        self.categoryFrameGuilde.backdrop = self.categoryFrameGuilde:CreateTexture("$parentBG", "BACKGROUND")
744 Tomate-202285
        self.categoryFrameGuilde.backdrop:SetPoint("TOPLEFT", 6, -6)
745 Tomate-202285
        self.categoryFrameGuilde.backdrop:SetPoint("BOTTOMRIGHT", -6, 6)
746 Tomate-202285
        self.categoryFrameGuilde.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment")
747 Tomate-202285
        self.categoryFrameGuilde.backdrop:SetTexCoord(0,.5,0,1)
748 Tomate-202285
        self.categoryFrameGuilde:SetWidth(260)
749 Tomate-202285
        self.categoryFrameGuilde:SetHeight(240)
750 Tomate-202285
        self.categoryFrameGuilde:SetPoint("LEFT", self.frame, "RIGHT", -12, 0)
751 Tomate-202285
 
752 2 Syzgyn-40270
        --Initialize arrays
753 Syzgyn-40270
        self.frame.catButtons = {}
754 Syzgyn-40270
        self.frame.achButtons = {}
755 Syzgyn-40270
        self.frame.tabButtons = {}
756 Syzgyn-40270
        self.frame.achSort = {}
757 109 Tomate-202285
 
758 2 Syzgyn-40270
        --Header
759 Syzgyn-40270
        local header = self.frame:CreateTexture("$parentHeader", "ARTWORK")
760 Syzgyn-40270
        header:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
761 Syzgyn-40270
        header:SetWidth(256)
762 Syzgyn-40270
        header:SetHeight(64)
763 Syzgyn-40270
        header:SetPoint("TOP")
764 109 Tomate-202285
 
765 2 Syzgyn-40270
        --Points Display Shield
766 Syzgyn-40270
        local shield = self.frame:CreateTexture("$parentPointShield", "ARTWORK")
767 Syzgyn-40270
        shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-TinyShield")
768 Syzgyn-40270
        shield:SetWidth(20)
769 Syzgyn-40270
        shield:SetHeight(20)
770 Syzgyn-40270
        shield:SetPoint("TOP", 76, -14)
771 Syzgyn-40270
        shield:SetTexCoord(0, 0.6, 0, 0.6)
772 109 Tomate-202285
 
773 2 Syzgyn-40270
        --Header Text
774 Syzgyn-40270
        local headerText = self.frame:CreateFontString("$parentHeaderText", "ARTWORK", "GameFontNormal")
775 Syzgyn-40270
        headerText:SetText("Urban Achiever")
776 Syzgyn-40270
        headerText:SetPoint("CENTER", header, 0, 12)
777 109 Tomate-202285
 
778 2 Syzgyn-40270
        --Points Text
779 Syzgyn-40270
        self.pointsText = self.frame:CreateFontString("$parentPointText", "ARTWORK", "GameFontNormal")
780 Syzgyn-40270
        self.pointsText:SetPoint("LEFT", shield, "RIGHT", 0, 2)
781 109 Tomate-202285
 
782 2 Syzgyn-40270
        --Comparison parent frame
783 Syzgyn-40270
        self.comparison = CreateFrame("Frame", nil, self.frame)
784 109 Tomate-202285
 
785 2 Syzgyn-40270
        --Comparison Points Text
786 Syzgyn-40270
        self.compPointsText = self.comparison:CreateFontString("$parentCompPointText", "ARTWORK", "GameFontNormal")
787 Syzgyn-40270
        self.compPointsText:SetText("12345")
788 Syzgyn-40270
        self.compPointsText:SetPoint("TOPRIGHT", self.frame, "TOP", -67, -14)
789 109 Tomate-202285
 
790 2 Syzgyn-40270
        --Comparison Points Display Shield
791 Syzgyn-40270
        self.compShield = self.comparison:CreateTexture("$parentCompPointShield", "ARTWORK")
792 Syzgyn-40270
        self.compShield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-TinyShield")
793 Syzgyn-40270
        self.compShield:SetWidth(20)
794 Syzgyn-40270
        self.compShield:SetHeight(20)
795 Syzgyn-40270
        self.compShield:SetPoint("RIGHT", self.compPointsText, "LEFT", 0, -2)
796 Syzgyn-40270
        self.compShield:SetTexCoord(0, 0.6, 0, 0.6)
797 109 Tomate-202285
 
798 2 Syzgyn-40270
        --Comparison Header Text
799 Syzgyn-40270
        self.compHeaderText = self.comparison:CreateFontString("$parentCompHeaderText", "ARTWORK", "GameFontNormal")
800 86 Tomate-202285
        self.compHeaderText:SetText(UAComparing .. " [Name here]")
801 2 Syzgyn-40270
        self.compHeaderText:SetPoint("RIGHT", self.compShield, "LEFT", -5, 2)
802 109 Tomate-202285
 
803 2 Syzgyn-40270
        --Category Frame
804 Syzgyn-40270
        self.frame.category = CreateFrame("Frame", "$parentCategoryFrame", self.frame)
805 Syzgyn-40270
        self.frame.category:SetWidth(190)
806 Syzgyn-40270
        self.frame.category:SetHeight(470)
807 Syzgyn-40270
        self.frame.category:SetBackdrop({
808 Syzgyn-40270
                edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
809 Syzgyn-40270
                insets = {left = 11, right = 12, top = 12, bottom = 11}
810 Syzgyn-40270
        })
811 Syzgyn-40270
        self.frame.category.backdrop = self.frame.category:CreateTexture("$parentBG", "BACKGROUND")
812 Syzgyn-40270
        self.frame.category.backdrop:SetPoint("TOPLEFT", 6, -6)
813 Syzgyn-40270
        self.frame.category.backdrop:SetPoint("BOTTOMRIGHT", -6, 6)
814 Syzgyn-40270
        self.frame.category.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment")
815 87 Tomate-202285
        self.frame.category.backdrop:SetTexCoord(0,.5,0,1)
816 2 Syzgyn-40270
        self.frame.category:SetPoint("RIGHT", self.frame, "LEFT", 12, 0)
817 109 Tomate-202285
 
818 2 Syzgyn-40270
        --Tab Buttons
819 86 Tomate-202285
        self.frame.tabButtons[1] = self:CreateTab("$parentTab1", self.frame, UAAchievement, "achievements")
820 2 Syzgyn-40270
        self.frame.tabButtons[1]:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 20, 6)
821 109 Tomate-202285
 
822 86 Tomate-202285
        self.frame.tabButtons[2] = self:CreateTab("$parentTab1", self.frame, UAStatistic, "statistics")
823 2 Syzgyn-40270
        self.frame.tabButtons[2]:SetPoint("TOPLEFT", self.frame.tabButtons[1], "TOPRIGHT", 5, 0)
824 109 Tomate-202285
 
825 107 Tomate-202285
        self.frame.tabButtons[3] = self:CreateTab("$parentTab1", self.frame, UAGuild, "guild")
826 Tomate-202285
        self.frame.tabButtons[3]:SetPoint("TOPLEFT", self.frame.tabButtons[2], "TOPRIGHT", 5, 0)
827 109 Tomate-202285
 
828 2 Syzgyn-40270
        --Category Buttons
829 Syzgyn-40270
        self.frame.catButtons[1] = self:CreateCategoryButton("$parentCatButton1", self.frame.category)
830 133 Tomate-202285
        self.frame.catButtons[1]:SetPoint("TOPLEFT", self.frame.category, 17, -17)
831 Tomate-202285
        for i=2, 21 do
832 2 Syzgyn-40270
                self.frame.catButtons[i] = self:CreateCategoryButton("$parentCatButton"..i, self.frame.category)
833 133 Tomate-202285
                self.frame.catButtons[i]:SetPoint("TOPLEFT", self.frame.catButtons[i-1], "BOTTOMLEFT", 0, -5)
834 2 Syzgyn-40270
        end
835 109 Tomate-202285
 
836 2 Syzgyn-40270
        --Achievement Buttons
837 Syzgyn-40270
        self.frame.achButtons[1] = self:CreateAchievementButton("$parentAchButton1", self.frame, 1)
838 Syzgyn-40270
        self.frame.achButtons[1]:SetPoint("TOPLEFT", 12, -90)
839 114 Tomate-202285
        self.frame.achButtons[1]:SetScript("OnEnter", function(self)
840 133 Tomate-202285
                if UrbanAchiever.currentTab == "guild" then
841 114 Tomate-202285
                        GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
842 Tomate-202285
                        UrbanAchiever:CheckGuildMembersTooltip(self);
843 Tomate-202285
                        GameTooltip:Show();
844 133 Tomate-202285
                else
845 Tomate-202285
                        if UrbanAchiever.currentTab == "achievements" then
846 Tomate-202285
                                GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
847 Tomate-202285
                                UrbanAchiever:CheckCharOwnerTooltip(self);
848 Tomate-202285
                                GameTooltip:Show();
849 Tomate-202285
                        end
850 114 Tomate-202285
                end
851 Tomate-202285
        end)
852 Tomate-202285
        self.frame.achButtons[1]:SetScript("OnLeave", function(self)
853 Tomate-202285
                GameTooltip:Hide();
854 Tomate-202285
                guildMemberRequestFrame = nil;
855 Tomate-202285
        end)
856 2 Syzgyn-40270
        for i=2, 27 do
857 Syzgyn-40270
                self.frame.achButtons[i] = self:CreateAchievementButton("$parentAchButton" .. i, self.frame)
858 Syzgyn-40270
                self.frame.achButtons[i]:SetPoint("TOPLEFT", self.frame.achButtons[i-1], "BOTTOMLEFT")
859 114 Tomate-202285
                self.frame.achButtons[i]:SetScript("OnEnter", function(self)
860 133 Tomate-202285
                        if UrbanAchiever.currentTab == "guild" then
861 114 Tomate-202285
                                GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
862 Tomate-202285
                                UrbanAchiever:CheckGuildMembersTooltip(self);
863 Tomate-202285
                                GameTooltip:Show();
864 133 Tomate-202285
                        else
865 Tomate-202285
                                if UrbanAchiever.currentTab == "achievements" then
866 Tomate-202285
                                        GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
867 Tomate-202285
                                        UrbanAchiever:CheckCharOwnerTooltip(self);
868 Tomate-202285
                                        GameTooltip:Show();
869 Tomate-202285
                                end
870 114 Tomate-202285
                        end
871 Tomate-202285
                end)
872 Tomate-202285
                self.frame.achButtons[i]:SetScript("OnLeave", function(self)
873 Tomate-202285
                        GameTooltip:Hide();
874 Tomate-202285
                        guildMemberRequestFrame = nil;
875 Tomate-202285
                end)
876 2 Syzgyn-40270
        end
877 109 Tomate-202285
 
878 2 Syzgyn-40270
        --Achievement Sort Buttons
879 104 Tomate-202285
        self.frame.achSort.name = self:CreateAchievementSortButton("$parentSortNameButton", 190, self.frame, UASORT_Name, "name")
880 2 Syzgyn-40270
        self.frame.achSort.name:SetPoint("BOTTOMLEFT", self.frame.achButtons[1], "TOPLEFT", 10, 1)
881 109 Tomate-202285
 
882 151 Tomate-202285
        self.frame.achSort.points = self:CreateAchievementSortButton("$parentSortPointsButton", 36, self.frame, UASORT_Points, "points")
883 2 Syzgyn-40270
        self.frame.achSort.points:SetPoint("LEFT", self.frame.achSort.name, "RIGHT", 1, 0)
884 109 Tomate-202285
 
885 151 Tomate-202285
        self.frame.achSort.completed = self:CreateAchievementSortButton("$parentSortCompletedButton", 62, self.frame, UASORT_Date, "completed")
886 2 Syzgyn-40270
        self.frame.achSort.completed:SetPoint("LEFT", self.frame.achSort.points, "RIGHT", 1, 0)
887 109 Tomate-202285
 
888 104 Tomate-202285
        self.frame.achSort.comparison = self:CreateAchievementSortButton("$parentSortComparisonButton", 70, self.frame, UASORT_Compare, "compare")
889 2 Syzgyn-40270
        self.frame.achSort.comparison:SetPoint("LEFT", self.frame.achSort.completed, "RIGHT", 1, 0)
890 Syzgyn-40270
        self.frame.achSort.comparison:Hide()
891 109 Tomate-202285
 
892 2 Syzgyn-40270
        --Close Button
893 Syzgyn-40270
        self.frame.close = CreateFrame("Button", "$parentCloseButton", self.frame, "UIPanelCloseButton")
894 Syzgyn-40270
        self.frame.close:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -4, -5)
895 109 Tomate-202285
 
896 2 Syzgyn-40270
        --Category Toggle Button
897 Syzgyn-40270
        self.frame.catToggle = CreateFrame("Button", "$parentCategoryToggleButton", self.frame)
898 Syzgyn-40270
        self.frame.catToggle:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up")
899 Syzgyn-40270
        self.frame.catToggle:SetPushedTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Down")
900 Syzgyn-40270
        self.frame.catToggle:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Round", "ADD")
901 Syzgyn-40270
        self.frame.catToggle:SetWidth(32)
902 Syzgyn-40270
        self.frame.catToggle:SetHeight(32)
903 Syzgyn-40270
        self.frame.catToggle:SetPoint("BOTTOMLEFT", self.frame.achButtons[1], "TOPLEFT", 5, 21)
904 Syzgyn-40270
        self.frame.catToggle:SetScript("OnClick", function()
905 Syzgyn-40270
                if self.frame.category:IsShown() then
906 Syzgyn-40270
                        self.frame.category:Hide()
907 Syzgyn-40270
                else
908 Syzgyn-40270
                        self.frame.category:Show()
909 Syzgyn-40270
                end
910 Syzgyn-40270
        end)
911 109 Tomate-202285
 
912 2 Syzgyn-40270
        --Search Editbox
913 Syzgyn-40270
        self.frame.editbox = self:CreateEditbox(self.frame)
914 Syzgyn-40270
        self.frame.editbox:SetWidth(200)
915 Syzgyn-40270
        self.frame.editbox:SetPoint("TOPLEFT", self.frame.catToggle, "TOPRIGHT", 10, 0)
916 109 Tomate-202285
 
917 32 Syzgyn-40270
        --Achievements Earned Progress Bar
918 135 Tomate-202285
 
919 Tomate-202285
        self.frame.summaryBar = CreateFrame("StatusBar", "$parentBar", self.frame, "AchievementFrameSummaryCategoryTemplate")
920 Tomate-202285
        self.frame.summaryBar:SetPoint("LEFT", self.frame.editbox, "RIGHT", 10, -5)
921 Tomate-202285
        self.frame.summaryBar:SetScript("OnShow", function(self)
922 Tomate-202285
                if self:GetID() ~= nil then
923 Tomate-202285
                        local totalAchievements, totalCompleted
924 Tomate-202285
                        local titleCategory = GetCategoryInfo(self:GetID())
925 Tomate-202285
                        if UrbanAchiever.isComparing or self:GetID() == -1 then
926 Tomate-202285
                                if self:GetID() ~= -1 then
927 Tomate-202285
                                        totalAchievements, totalCompleted = GetCategoryNumAchievements(self:GetID());
928 Tomate-202285
                                else
929 Tomate-202285
                                        local inGuild
930 Tomate-202285
                                        if UrbanAchiever.currentTab == "guild" then
931 Tomate-202285
                                                inGuild = true
932 Tomate-202285
                                        else
933 Tomate-202285
                                                inGuild = false
934 Tomate-202285
                                        end
935 Tomate-202285
                                        titleCategory = UAAchievEarned
936 Tomate-202285
                                        totalAchievements, totalCompleted = GetNumCompletedAchievements(inGuild);
937 Tomate-202285
                                end
938 Tomate-202285
                        else
939 Tomate-202285
                                totalAchievements, totalCompleted = AchievementFrame_GetCategoryTotalNumAchievements(self:GetID(), true);
940 Tomate-202285
                        end
941 Tomate-202285
                        self.text:SetText(string.format("%d/%d", totalCompleted, totalAchievements));
942 Tomate-202285
                        self:SetMinMaxValues(0, totalAchievements);
943 Tomate-202285
                        self:SetValue(totalCompleted);
944 Tomate-202285
                        self:RegisterEvent("ACHIEVEMENT_EARNED");
945 Tomate-202285
                        self.name:SetText(titleCategory)
946 Tomate-202285
                end
947 Tomate-202285
        end)
948 Tomate-202285
        self.frame.summaryBar:SetScript("OnHide", function(self)
949 Tomate-202285
                AchievementFrameSummaryCategory_OnHide(self)
950 Tomate-202285
        end)
951 Tomate-202285
        self.frame.summaryBar:SetWidth(200)
952 Tomate-202285
        self.frame.summaryBar:SetHeight(21)
953 32 Syzgyn-40270
        self.frame.summaryBar.text:ClearAllPoints()
954 Syzgyn-40270
        self.frame.summaryBar.text:SetPoint("RIGHT", -5, 0)
955 Syzgyn-40270
        self.frame.summaryBar.text:SetJustifyH("RIGHT")
956 Syzgyn-40270
        self.frame.summaryBar.name = self.frame.summaryBar:CreateFontString("$parentName", "OVERLAY", "GameFontHighlightSmall")
957 Syzgyn-40270
        self.frame.summaryBar.name:SetPoint("LEFT", 5, 0)
958 Syzgyn-40270
        self.frame.summaryBar.name:SetJustifyH("LEFT")
959 Syzgyn-40270
        self.frame.summaryBar.name:SetWidth(300)
960 109 Tomate-202285
 
961 135 Tomate-202285
        --Create Each Category Progress Bar
962 133 Tomate-202285
        local lastFrame
963 78 Tomate-202285
        local idxCat = 0
964 Tomate-202285
        for i,id in ipairs(GetCategoryList()) do
965 135 Tomate-202285
                local tittleCat, parentCatID = GetCategoryInfo(id)
966 148 Tomate-202285
                --15234 = Héritage
967 Tomate-202285
                --81 = Tours de force
968 Tomate-202285
                if ( parentCatID == -1 ) and id ~= 15234 and id ~= 81 then
969 Tomate-202285
                        idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, self.categoryFrame)
970 78 Tomate-202285
                end
971 Tomate-202285
        end
972 109 Tomate-202285
 
973 133 Tomate-202285
        local lastFrame
974 109 Tomate-202285
        local idxCat = 0
975 Tomate-202285
        for i,id in ipairs(GetGuildCategoryList()) do
976 135 Tomate-202285
                local tittleCat, parentCatID = GetCategoryInfo(id)
977 148 Tomate-202285
                --15093 = Tours de force de guilde
978 Tomate-202285
                if (parentCatID == -1 or parentCatID == 15076) and id ~= 15093 then
979 Tomate-202285
                        idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, self.categoryFrameGuilde)
980 109 Tomate-202285
                end
981 Tomate-202285
        end
982 Tomate-202285
 
983 Tomate-202285
 
984 36 Syzgyn-40270
        --Achievements Earned Comparison Progress Bar
985 135 Tomate-202285
        self.frame.comparisonSummaryBar = CreateFrame("StatusBar", "$parentComparisonBar", self.frame, "AchievementFrameSummaryCategoryTemplate")
986 Tomate-202285
        self.frame.comparisonSummaryBar:SetPoint("LEFT", self.frame.summaryBar, "RIGHT", 10, 0)
987 Tomate-202285
        self.frame.comparisonSummaryBar:SetScript("OnShow", function(self)
988 Tomate-202285
                if self:GetID() ~= nil then
989 Tomate-202285
                        if UrbanAchiever.isComparing then
990 Tomate-202285
                                local totalAchievements, totalCompleted
991 Tomate-202285
                                if self:GetID() ~= -1 then
992 Tomate-202285
                                        totalAchievements = GetCategoryNumAchievements(self:GetID());
993 Tomate-202285
                                        totalCompleted = GetComparisonCategoryNumAchievements(self:GetID())
994 Tomate-202285
                                else
995 Tomate-202285
                                        local inGuild
996 Tomate-202285
                                        if UrbanAchiever.currentTab == "guild" then
997 Tomate-202285
                                                inGuild = true
998 Tomate-202285
                                        else
999 Tomate-202285
                                                inGuild = false
1000 Tomate-202285
                                        end
1001 Tomate-202285
                                        totalAchievements, totalCompleted = GetNumComparisonCompletedAchievements(inGuild)
1002 Tomate-202285
                                end
1003 Tomate-202285
                                self.text:SetText(string.format("%d/%d", totalCompleted, totalAchievements));
1004 Tomate-202285
                                self:SetMinMaxValues(0, totalAchievements);
1005 Tomate-202285
                                self:SetValue(totalCompleted);
1006 Tomate-202285
                                self:RegisterEvent("ACHIEVEMENT_EARNED");
1007 Tomate-202285
                        end
1008 Tomate-202285
                end
1009 Tomate-202285
        end)
1010 Tomate-202285
        self.frame.comparisonSummaryBar:SetScript("OnHide", function(self)
1011 Tomate-202285
                AchievementFrameSummaryCategory_OnHide(self)
1012 Tomate-202285
        end)
1013 Tomate-202285
        self.frame.comparisonSummaryBar:SetWidth(200)
1014 Tomate-202285
        self.frame.comparisonSummaryBar:SetHeight(21)
1015 36 Syzgyn-40270
        self.frame.comparisonSummaryBar.text:ClearAllPoints()
1016 Syzgyn-40270
        self.frame.comparisonSummaryBar.text:SetPoint("RIGHT", -5, 0)
1017 Syzgyn-40270
        self.frame.comparisonSummaryBar.text:SetJustifyH("RIGHT")
1018 Syzgyn-40270
        self.frame.comparisonSummaryBar.name = self.frame.comparisonSummaryBar:CreateFontString("$parentName", "OVERLAY", "GameFontHighlightSmall")
1019 Syzgyn-40270
        self.frame.comparisonSummaryBar.name:SetPoint("LEFT", 5, 0)
1020 Syzgyn-40270
        self.frame.comparisonSummaryBar.name:SetJustifyH("LEFT")
1021 Syzgyn-40270
        self.frame.comparisonSummaryBar.name:SetWidth(300)
1022 135 Tomate-202285
        self.frame.comparisonSummaryBar:Hide()
1023 109 Tomate-202285
 
1024 2 Syzgyn-40270
        --Category Scroll Bar
1025 58 Syzgyn-40270
        self.frame.catScroll = CreateFrame("Slider", "$parentCatSlider", self.frame.category, "UIPanelScrollBarTemplate")
1026 2 Syzgyn-40270
        self.frame.catScroll:SetPoint("TOPLEFT", self.frame.catButtons[2], "TOPRIGHT")
1027 Syzgyn-40270
        self.frame.catScroll:SetPoint("BOTTOMLEFT", self.frame.catButtons[#self.frame.catButtons - 1], "BOTTOMRIGHT")
1028 Syzgyn-40270
        self.frame.catScroll:SetWidth(16)
1029 Syzgyn-40270
        self.frame.catScroll:SetMinMaxValues(0,0)
1030 Syzgyn-40270
        self.frame.catScroll:SetValueStep(1)
1031 82 Tomate-202285
        self.frame.catScroll:SetScript("OnValueChanged", UrbanAchiever_OnCatScroll)
1032 2 Syzgyn-40270
        self.frame.catScroll:SetValue(1)
1033 109 Tomate-202285
 
1034 2 Syzgyn-40270
        --Achievement Button Scroll Bar
1035 Syzgyn-40270
        self.frame.achScroll = CreateFrame("Slider", "$parentAchSlider", self.frame, "UIPanelScrollBarTemplate")
1036 Syzgyn-40270
        self.frame.achScroll:SetPoint("TOPLEFT", self.frame.achButtons[2], "TOPRIGHT")
1037 Syzgyn-40270
        self.frame.achScroll:SetPoint("BOTTOMLEFT", self.frame.achButtons[#self.frame.achButtons - 1], "BOTTOMRIGHT")
1038 Syzgyn-40270
        self.frame.achScroll:SetWidth(16)
1039 Syzgyn-40270
        self.frame.achScroll:SetMinMaxValues(0,0)
1040 Syzgyn-40270
        self.frame.achScroll:SetValueStep(1)
1041 82 Tomate-202285
        self.frame.achScroll:SetScript("OnValueChanged",UrbanAchiever_OnAchScroll)
1042 2 Syzgyn-40270
        self.frame.achScroll:SetValue(1)
1043 109 Tomate-202285
 
1044 2 Syzgyn-40270
        --Achievement Display Frame
1045 Syzgyn-40270
        self.frame.display = CreateFrame("Frame", "$parentDisplayFrame", self.frame)
1046 Syzgyn-40270
        self.frame.display.backdrop = self.frame.display:CreateTexture("$parentBG", "BACKGROUND")
1047 Syzgyn-40270
        self.frame.display.backdrop:SetPoint("TOPLEFT")
1048 Syzgyn-40270
        self.frame.display.backdrop:SetPoint("BOTTOMRIGHT")
1049 Syzgyn-40270
        self.frame.display:SetWidth(290)
1050 148 Tomate-202285
        self.frame.display:SetHeight(500)
1051 2 Syzgyn-40270
        self.frame.display:SetPoint("TOPRIGHT", -13, -75) -- , self.frame.achButtons[1], "TOPRIGHT", 19, 0)
1052 Syzgyn-40270
        self.frame.display:Hide()
1053 109 Tomate-202285
 
1054 2 Syzgyn-40270
        --Display Icon
1055 28 Syzgyn-40270
        self.frame.display.icon = self.frame.display:CreateTexture(nil, "ARTWORK")
1056 2 Syzgyn-40270
        self.frame.display.icon:SetWidth(64)
1057 Syzgyn-40270
        self.frame.display.icon:SetHeight(64)
1058 Syzgyn-40270
        self.frame.display.icon:SetPoint("TOPLEFT")
1059 28 Syzgyn-40270
        --self.frame.display.icon:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square", "ADD")
1060 Syzgyn-40270
        --self.frame.display.icon:SetScript("OnClick", function()
1061 Syzgyn-40270
        --      self:InsertIntoChat(self.currentAch)
1062 Syzgyn-40270
        --end)
1063 109 Tomate-202285
 
1064 2 Syzgyn-40270
        --Display Name
1065 Syzgyn-40270
        self.frame.display.name = self.frame.display:CreateFontString("$parentName", "ARTWORK", "AchievementPointsFont")
1066 Syzgyn-40270
        self.frame.display.name:SetPoint("TOPLEFT", self.frame.display.icon, "TOPRIGHT", 5, 0)
1067 Syzgyn-40270
        --self.frame.display.name:SetPoint("TOPRIGHT", -15,-15)
1068 Syzgyn-40270
        self.frame.display.name:SetWidth(220)
1069 Syzgyn-40270
        self.frame.display.name:SetHeight(70)
1070 Syzgyn-40270
        self.frame.display.name:SetJustifyH("CENTER")
1071 Syzgyn-40270
        self.frame.display.name:SetJustifyV("TOP")
1072 109 Tomate-202285
 
1073 2 Syzgyn-40270
        --Display Shield Icon
1074 Syzgyn-40270
        self.frame.display.shield = self.frame.display:CreateTexture("$parentShield", "ARTWORK")
1075 Syzgyn-40270
        self.frame.display.shield:SetPoint("TOPLEFT", self.frame.display.icon, "BOTTOMLEFT", 0, -5)
1076 Syzgyn-40270
        self.frame.display.shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Shields")
1077 84 Tomate-202285
        self.frame.display.shield:SetTexCoord(0, 0.5, 0.5, 1);
1078 2 Syzgyn-40270
        self.frame.display.shield:SetWidth(64)
1079 Syzgyn-40270
        self.frame.display.shield:SetHeight(64)
1080 109 Tomate-202285
 
1081 2 Syzgyn-40270
        --Display Points
1082 Syzgyn-40270
        self.frame.display.points = self.frame.display:CreateFontString("$parentPoints", "ARTWORK", "AchievementPointsFont")
1083 84 Tomate-202285
        self.frame.display.points:SetPoint("CENTER", self.frame.display.shield, "CENTER", 0, 3)
1084 109 Tomate-202285
 
1085 2 Syzgyn-40270
        --Display Description
1086 Syzgyn-40270
        self.frame.display.desc = self.frame.display:CreateFontString("$parentDescription", "ARTWORK", "GameFontNormal")
1087 Syzgyn-40270
        self.frame.display.desc:SetPoint("TOPLEFT", self.frame.display.shield, "TOPRIGHT", 5, 0)
1088 Syzgyn-40270
        --self.frame.display.desc:SetPoint("BOTTOMRIGHT", self.frame.display, "TOPRIGHT", -15,-109)
1089 Syzgyn-40270
        self.frame.display.desc:SetWidth(220)
1090 Syzgyn-40270
        self.frame.display.desc:SetHeight(65)
1091 Syzgyn-40270
        self.frame.display.desc:SetTextColor(1,1,1)
1092 109 Tomate-202285
 
1093 2 Syzgyn-40270
        --Display Reward
1094 Syzgyn-40270
        self.frame.display.reward = self.frame.display:CreateFontString("$parentReward", "ARTWORK", "GameFontNormal")
1095 151 Tomate-202285
        self.frame.display.reward:SetWidth(270)
1096 2 Syzgyn-40270
        self.frame.display.reward:SetPoint("TOP", self.frame.display, "TOP", 0, -127)
1097 Syzgyn-40270
        self.frame.display.reward:SetTextColor(1,1,1)
1098 133 Tomate-202285
 
1099 113 Tomate-202285
        --Display completed
1100 Tomate-202285
        self.frame.display.completed = self.frame.display:CreateFontString("$parentReward", "ARTWORK", "GameFontNormal")
1101 Tomate-202285
        self.frame.display.completed:SetPoint("TOP", self.frame.display, "TOP", 0, -60)
1102 Tomate-202285
        self.frame.display.completed:SetTextColor(0,1,0)
1103 133 Tomate-202285
 
1104 113 Tomate-202285
        --Display repCriteria
1105 Tomate-202285
        self.frame.display.repCriteria = self.frame.display:CreateFontString("$parentReward", "ARTWORK", "GameFontNormal")
1106 Tomate-202285
        self.frame.display.repCriteria:SetPoint("BOTTOM", self.frame.display, "TOP", 0, 3)
1107 109 Tomate-202285
 
1108 2 Syzgyn-40270
        --Display Compare Completed
1109 Syzgyn-40270
        self.frame.display.compareDate = self.frame.display:CreateFontString("$parentReward", "ARTWORK", "GameFontNormal")
1110 Syzgyn-40270
        self.frame.display.compareDate:SetPoint("TOP", self.frame.display.reward, "BOTTOM", 0, -1)
1111 Syzgyn-40270
        self.frame.display.compareDate:SetTextColor(0,1,0)
1112 87 Tomate-202285
        self.frame.display.compareDate:SetText("Tomate " .. UACompleted .. ": 12/12/12")
1113 2 Syzgyn-40270
        self.frame.display.compareDate:Hide()
1114 109 Tomate-202285
 
1115 31 Syzgyn-40270
        --Display Bar
1116 Syzgyn-40270
        self.frame.display.bar = CreateFrame("StatusBar", "$parentBar", self.frame.display, "AchievementProgressBarTemplate")
1117 57 Syzgyn-40270
        --self.frame.display.bar.text:SetFontObject("GameFontHighlight")
1118 31 Syzgyn-40270
        self.frame.display.bar.text:SetWidth(200)
1119 Syzgyn-40270
        self.frame.display.bar:SetPoint("CENTER", self.frame.display, 0, 60)
1120 109 Tomate-202285
 
1121 31 Syzgyn-40270
        --Display Comparison Bar
1122 Syzgyn-40270
        self.frame.display.compareBar = CreateFrame("StatusBar", "$parentCompareBar", self.frame.display, "AchievementProgressBarTemplate")
1123 57 Syzgyn-40270
        --self.frame.display.compareBar.text:SetFontObject("GameFontHighlight")
1124 31 Syzgyn-40270
        self.frame.display.compareBar.text:SetWidth(200)
1125 Syzgyn-40270
        self.frame.display.compareBar:ClearAllPoints()
1126 Syzgyn-40270
        self.frame.display.compareBar:SetPoint("TOP", self.frame.display.bar, "BOTTOM", 0, -25)
1127 109 Tomate-202285
 
1128 31 Syzgyn-40270
        --Display Comparison Bar Name Text
1129 Syzgyn-40270
        self.frame.display.compareBar.nameText = self.frame.display.compareBar:CreateFontString("$parentNameText", "ARTWORK", "GameFontNormal")
1130 Syzgyn-40270
        self.frame.display.compareBar.nameText:SetTextColor(1,1,1)
1131 Syzgyn-40270
        self.frame.display.compareBar.nameText:SetPoint("BOTTOM", self.frame.display.compareBar, "TOP", 0, 5)
1132 109 Tomate-202285
 
1133 2 Syzgyn-40270
        self.frame.display.criteriaButtons = {}
1134 109 Tomate-202285
 
1135 2 Syzgyn-40270
        --Criteria Buttons
1136 Syzgyn-40270
        self.frame.display.criteriaButtons[1] = self:CreateCriteriaButton("$parentCriteriaButton1", self.frame.display)
1137 Syzgyn-40270
        self.frame.display.criteriaButtons[1]:SetPoint("TOPLEFT", 0, -160)
1138 113 Tomate-202285
        self.frame.display.criteriaButtons[1]:SetScript("OnEnter", function(self)
1139 114 Tomate-202285
                if ( self.date ) then
1140 Tomate-202285
                        GameTooltip:SetOwner(self, "ANCHOR_RIGHT",-50,0);
1141 Tomate-202285
                        GameTooltip:AddLine(self.date, 1, 1, 1);
1142 Tomate-202285
                        UrbanAchiever:CheckGuildMembersTooltip(self);
1143 133 Tomate-202285
                        UrbanAchiever:CheckCharOwnerTooltip(self);
1144 114 Tomate-202285
                        GameTooltip:Show();
1145 Tomate-202285
                end
1146 Tomate-202285
        end)
1147 Tomate-202285
        self.frame.display.criteriaButtons[1]:SetScript("OnLeave", function(self)
1148 Tomate-202285
                GameTooltip:Hide();
1149 Tomate-202285
                guildMemberRequestFrame = nil;
1150 Tomate-202285
        end)
1151 148 Tomate-202285
        for i=2, 18 do
1152 2 Syzgyn-40270
                self.frame.display.criteriaButtons[i] = self:CreateCriteriaButton("$parentCriteriaButton" .. i, self.frame.display)
1153 Syzgyn-40270
                self.frame.display.criteriaButtons[i]:SetPoint("TOPLEFT", self.frame.display.criteriaButtons[i-1], "BOTTOMLEFT")
1154 113 Tomate-202285
                self.frame.display.criteriaButtons[i]:SetScript("OnEnter", function(self)
1155 Tomate-202285
                        if ( self.date ) then
1156 Tomate-202285
                                GameTooltip:SetOwner(self, "ANCHOR_RIGHT",-50,0);
1157 Tomate-202285
                                GameTooltip:AddLine(self.date, 1, 1, 1);
1158 Tomate-202285
                                UrbanAchiever:CheckGuildMembersTooltip(self);
1159 133 Tomate-202285
                                UrbanAchiever:CheckCharOwnerTooltip(self);
1160 113 Tomate-202285
                                GameTooltip:Show();
1161 Tomate-202285
                        end
1162 Tomate-202285
                end)
1163 Tomate-202285
                self.frame.display.criteriaButtons[i]:SetScript("OnLeave", function(self)
1164 Tomate-202285
                        GameTooltip:Hide();
1165 Tomate-202285
                        guildMemberRequestFrame = nil;
1166 Tomate-202285
                end)
1167 2 Syzgyn-40270
        end
1168 109 Tomate-202285
 
1169 2 Syzgyn-40270
        --Display Scroll Bar
1170 Syzgyn-40270
        self.frame.criteriaScroll = CreateFrame("Slider", "$parentSlider", self.frame.display, "UIPanelScrollBarTemplate")
1171 Syzgyn-40270
        self.frame.criteriaScroll:SetPoint("TOPLEFT", self.frame.display.criteriaButtons[2], "TOPRIGHT", 1,0)
1172 Syzgyn-40270
        self.frame.criteriaScroll:SetPoint("BOTTOMLEFT", self.frame.display.criteriaButtons[#self.frame.display.criteriaButtons - 1], "BOTTOMRIGHT", 1,0)
1173 Syzgyn-40270
        self.frame.criteriaScroll:SetWidth(16)
1174 Syzgyn-40270
        self.frame.criteriaScroll:SetMinMaxValues(0,0)
1175 Syzgyn-40270
        self.frame.criteriaScroll:SetValueStep(1)
1176 82 Tomate-202285
        self.frame.criteriaScroll:SetScript("OnValueChanged", UrbanAchiever_OnCriteriaScroll)
1177 2 Syzgyn-40270
        self.frame.criteriaScroll:SetValue(1)
1178 Syzgyn-40270
        self.frame.criteriaScroll:Show()
1179 109 Tomate-202285
 
1180 2 Syzgyn-40270
        self.frame.display.criteria = self.frame.display:CreateFontString("$parentCriteria", "ARTWORK", "GameFontNormal")
1181 Syzgyn-40270
        self.frame.display.criteria:SetPoint("TOPLEFT", 0, -135)
1182 Syzgyn-40270
        self.frame.display.criteria:SetJustifyH("LEFT")
1183 Syzgyn-40270
        self.frame.display.criteria:SetJustifyV("TOP")
1184 109 Tomate-202285
 
1185 2 Syzgyn-40270
        tinsert(UISpecialFrames,self.frame:GetName())
1186 Syzgyn-40270
        self.frame:SetScript("OnShow", function()
1187 52 Syzgyn-40270
                self:UpdateFunction()
1188 109 Tomate-202285
 
1189 2 Syzgyn-40270
                if self.masterList[self.currentAch] then
1190 Syzgyn-40270
                        self:SetDisplayAchievement(self.currentAch)
1191 Syzgyn-40270
                end
1192 160 Tomate-202285
                PlaySound(13832);--ACHIEVEMENT_MENU_OPEN
1193 2 Syzgyn-40270
        end)
1194 Syzgyn-40270
        self.frame:SetScript("OnHide", function()
1195 160 Tomate-202285
                PlaySound(13833);--ACHIEVEMENT_MENU_CLOSE
1196 2 Syzgyn-40270
                self.isComparing = false
1197 Syzgyn-40270
        end)
1198 Syzgyn-40270
 
1199 Syzgyn-40270
        self:UpdateFunction()
1200 109 Tomate-202285
 
1201 2 Syzgyn-40270
        self.frame:Hide()
1202 Syzgyn-40270
end
1203 Syzgyn-40270
 
1204 148 Tomate-202285
function self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, parent)
1205 133 Tomate-202285
        idxCat = idxCat + 1
1206 148 Tomate-202285
        local categoryFrame = CreateFrame("StatusBar","categoryStatusBar"..id, parent, "AchievementFrameSummaryCategoryTemplate")
1207 133 Tomate-202285
        if idxCat == 1 then
1208 Tomate-202285
                lastFrame = "categoryStatusBar"..id
1209 148 Tomate-202285
                categoryFrame:SetPoint("TOP", parent, "TOP", 0, -30)
1210 133 Tomate-202285
        else
1211 148 Tomate-202285
                categoryFrame:SetPoint("TOP", lastFrame, "BOTTOM", 0, -12)
1212 Tomate-202285
                lastFrame = "categoryStatusBar"..id
1213 133 Tomate-202285
        end
1214 Tomate-202285
        categoryFrame:SetID(id)
1215 Tomate-202285
        categoryFrame:SetScript("OnShow", function(self)
1216 Tomate-202285
                if self:GetID() ~= nil then
1217 Tomate-202285
                        AchievementFrameSummaryCategory_OnShow (self)
1218 Tomate-202285
                end
1219 Tomate-202285
        end)
1220 Tomate-202285
        categoryFrame:SetScript("OnHide", function(self)
1221 Tomate-202285
                AchievementFrameSummaryCategory_OnHide(self)
1222 Tomate-202285
        end)
1223 151 Tomate-202285
        local button = loadstring("return categoryStatusBar" .. id .. "Button")()
1224 Tomate-202285
        button:SetScript("OnClick", function(self)
1225 Tomate-202285
                local id = self:GetParent():GetID();
1226 Tomate-202285
                UrbanAchiever.currentCat = id
1227 Tomate-202285
                for _,v in next, UrbanAchiever.categories[UrbanAchiever.currentTab] do
1228 Tomate-202285
                        if v.id == id then
1229 Tomate-202285
                                v.collapsed = not v.collapsed
1230 Tomate-202285
                                break
1231 Tomate-202285
                        end
1232 Tomate-202285
                end
1233 Tomate-202285
                UrbanAchiever.achOffset = 0
1234 Tomate-202285
                UrbanAchiever:RefreshCategoryButtons()
1235 Tomate-202285
                UrbanAchiever:RefreshAchievementButtons()
1236 Tomate-202285
        end)
1237 148 Tomate-202285
        categoryFrame:SetWidth(200)
1238 133 Tomate-202285
        categoryFrame:SetHeight(21)
1239 Tomate-202285
        categoryFrame.text:ClearAllPoints()
1240 Tomate-202285
        categoryFrame.text:SetPoint("RIGHT", -5, 0)
1241 Tomate-202285
        categoryFrame.text:SetJustifyH("RIGHT")
1242 Tomate-202285
        categoryFrame.name = categoryFrame:CreateFontString("$parentName", "OVERLAY", "GameFontHighlightSmall")
1243 Tomate-202285
        categoryFrame.name:SetPoint("LEFT", 5, 0)
1244 Tomate-202285
        categoryFrame.name:SetJustifyH("LEFT")
1245 148 Tomate-202285
        categoryFrame.name:SetWidth(200)
1246 133 Tomate-202285
        categoryFrame.name:SetText(tittleCat)
1247 148 Tomate-202285
        --categoryFrame:Hide()
1248 133 Tomate-202285
 
1249 Tomate-202285
        return idxCat, lastFrame
1250 Tomate-202285
end
1251 Tomate-202285
 
1252 113 Tomate-202285
function self:CheckGuildMembersTooltip(requestFrame)
1253 Tomate-202285
        if ( self.currentTab == "guild" ) then
1254 Tomate-202285
                local achievementId = requestFrame.id;
1255 114 Tomate-202285
                if achievementId == nil then
1256 Tomate-202285
                        achievementId = requestFrame:GetID();
1257 Tomate-202285
                end
1258 113 Tomate-202285
                local _, achievementName, points, achievementCompleted, month, day, year, description, flags, iconpath = GetAchievementInfo(achievementId);
1259 Tomate-202285
                -- check if achievement has names, only if completed
1260 Tomate-202285
                if ( achievementCompleted and bit.band(flags, ACHIEVEMENT_FLAGS_SHOW_GUILD_MEMBERS) == ACHIEVEMENT_FLAGS_SHOW_GUILD_MEMBERS ) then
1261 Tomate-202285
                        local numMembers = GetGuildAchievementNumMembers(achievementId);
1262 Tomate-202285
                        if ( numMembers == 0 ) then
1263 Tomate-202285
                                -- we may not have the members from the server yet
1264 Tomate-202285
                                guildMemberRequestFrame = requestFrame;
1265 Tomate-202285
                                GetGuildAchievementMembers(achievementId);
1266 Tomate-202285
                        else
1267 Tomate-202285
                                -- add a line break if the tooltip shows completed date (meta tooltip)
1268 Tomate-202285
                                if ( GameTooltip:NumLines() > 0 ) then
1269 Tomate-202285
                                        GameTooltip:AddLine(" ");
1270 133 Tomate-202285
                                end
1271 113 Tomate-202285
                                GameTooltip:AddLine(GUILD_ACHIEVEMENT_EARNED_BY, 1, 1, 1);
1272 Tomate-202285
                                local leftMemberName;
1273 Tomate-202285
                                for i = 1, numMembers do
1274 Tomate-202285
                                        if ( leftMemberName ) then
1275 Tomate-202285
                                                GameTooltip:AddDoubleLine(leftMemberName, GetGuildAchievementMemberInfo(achievementId, i));
1276 Tomate-202285
                                                leftMemberName = nil;
1277 Tomate-202285
                                        else
1278 Tomate-202285
                                                leftMemberName = GetGuildAchievementMemberInfo(achievementId, i);
1279 133 Tomate-202285
                                        end
1280 113 Tomate-202285
                                end
1281 Tomate-202285
                                -- check for leftover name
1282 Tomate-202285
                                if ( leftMemberName ) then
1283 Tomate-202285
                                        GameTooltip:AddLine(leftMemberName);
1284 Tomate-202285
                                end
1285 Tomate-202285
                        end
1286 133 Tomate-202285
                        -- otherwise check if criteria has names
1287 114 Tomate-202285
                elseif ( flags ~= nil ) then
1288 Tomate-202285
                        if ( bit.band(flags, ACHIEVEMENT_FLAGS_SHOW_CRITERIA_MEMBERS) == ACHIEVEMENT_FLAGS_SHOW_CRITERIA_MEMBERS ) then
1289 Tomate-202285
                                local numCriteria = GetAchievementNumCriteria(achievementId);
1290 Tomate-202285
                                local firstName = true;
1291 Tomate-202285
                                for i = 1, numCriteria do
1292 Tomate-202285
                                        local criteriaString, _, completed, _, _, charName = GetAchievementCriteriaInfo(achievementId, i);
1293 Tomate-202285
                                        if ( completed and charName ) then
1294 Tomate-202285
                                                if ( firstName ) then
1295 Tomate-202285
                                                        if ( achievementCompleted ) then
1296 Tomate-202285
                                                                GameTooltip:AddLine(GUILD_ACHIEVEMENT_EARNED_BY, 1, 1, 1);
1297 Tomate-202285
                                                        else
1298 Tomate-202285
                                                                GameTooltip:AddLine(INCOMPLETE, 1, 1, 1);
1299 Tomate-202285
                                                        end
1300 Tomate-202285
                                                        firstName = false;
1301 113 Tomate-202285
                                                end
1302 114 Tomate-202285
                                                GameTooltip:AddDoubleLine(criteriaString, charName, 0, 1, 0);
1303 113 Tomate-202285
                                        end
1304 Tomate-202285
                                end
1305 Tomate-202285
                        end
1306 Tomate-202285
                end
1307 Tomate-202285
        end
1308 Tomate-202285
end
1309 Tomate-202285
 
1310 133 Tomate-202285
function self:CheckCharOwnerTooltip(requestFrame)
1311 Tomate-202285
        if ( self.currentTab == "achievements" ) then
1312 Tomate-202285
                local accountWide = false
1313 Tomate-202285
                local achievementId = requestFrame.id;
1314 Tomate-202285
                if achievementId == nil then
1315 Tomate-202285
                        achievementId = requestFrame:GetID();
1316 Tomate-202285
                end
1317 Tomate-202285
                local _, _, _, achievementCompleted, _, _, _, _, flags, _, _, isGuild, wasEarnedByMe, earnedBy = GetAchievementInfo(achievementId);
1318 Tomate-202285
                if isGuild then
1319 Tomate-202285
                        return;
1320 Tomate-202285
                end
1321 Tomate-202285
                if flags ~= nil  then
1322 Tomate-202285
                        if ( bit.band(flags, ACHIEVEMENT_FLAGS_ACCOUNT) == ACHIEVEMENT_FLAGS_ACCOUNT ) then
1323 Tomate-202285
                                accountWide = true
1324 Tomate-202285
                        end
1325 Tomate-202285
                end
1326 Tomate-202285
                if accountWide then
1327 Tomate-202285
                        if achievementCompleted then
1328 Tomate-202285
                                GameTooltip:AddLine(ACCOUNT_WIDE_ACHIEVEMENT_COMPLETED);
1329 Tomate-202285
                        else
1330 Tomate-202285
                                GameTooltip:AddLine(ACCOUNT_WIDE_ACHIEVEMENT);
1331 Tomate-202285
                        end
1332 Tomate-202285
                        return;
1333 Tomate-202285
                end
1334 Tomate-202285
                if earnedBy then
1335 Tomate-202285
                        GameTooltip:AddLine(format(ACHIEVEMENT_EARNED_BY,earnedBy));
1336 Tomate-202285
                        local me = UnitName("player")
1337 Tomate-202285
                        if ( not wasEarnedByMe ) then
1338 Tomate-202285
                                GameTooltip:AddLine(format(ACHIEVEMENT_NOT_COMPLETED_BY, me));
1339 Tomate-202285
                        elseif ( me ~= earnedBy ) then
1340 Tomate-202285
                                GameTooltip:AddLine(format(ACHIEVEMENT_COMPLETED_BY, me));
1341 Tomate-202285
                        end
1342 Tomate-202285
                        return;
1343 Tomate-202285
                end
1344 Tomate-202285
        end
1345 Tomate-202285
end
1346 Tomate-202285
 
1347 2 Syzgyn-40270
function self:CreateCategoryButton(name, parent)
1348 Syzgyn-40270
        local button = CreateFrame("Button", name, parent)
1349 Syzgyn-40270
        button:EnableMouseWheel(true)
1350 133 Tomate-202285
        button:SetWidth(160)
1351 2 Syzgyn-40270
        button:SetHeight(16)
1352 109 Tomate-202285
 
1353 30 Syzgyn-40270
        button.offset = CreateFrame("Frame","$parentOffset", button)
1354 Syzgyn-40270
        button.offset:SetPoint("TOPLEFT")
1355 Syzgyn-40270
        button.offset:SetWidth(1)
1356 Syzgyn-40270
        button.offset:SetHeight(16)
1357 109 Tomate-202285
 
1358 2 Syzgyn-40270
        button.text = button:CreateFontString("$parentText", "BORDER", "GameFontNormal")
1359 69 Syzgyn-40270
        button.text:SetJustifyH("LEFT")
1360 30 Syzgyn-40270
        button.text:SetFont(GameFontNormal:GetFont(), 12)
1361 Syzgyn-40270
        button.text:SetPoint("LEFT", button.offset, "RIGHT", 7, 0)
1362 69 Syzgyn-40270
        button.text:SetPoint("RIGHT")
1363 Syzgyn-40270
        --button.text:SetWidth(150)
1364 30 Syzgyn-40270
        --button.text:SetTextColor(1,1,1)
1365 109 Tomate-202285
 
1366 2 Syzgyn-40270
        button.bg = button:CreateTexture(nil, "BACKGROUND")
1367 30 Syzgyn-40270
        --button.bg:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-FilterBg")
1368 Syzgyn-40270
        button.bg:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Category-Background")
1369 Syzgyn-40270
        button.bg:SetTexCoord(0.025, 0.64, 0.1, 0.75)
1370 Syzgyn-40270
        button.bg:SetPoint("TOPLEFT", button.offset, "TOPRIGHT")
1371 43 Syzgyn-40270
        --button.bg:SetPoint("BOTTOMRIGHT")
1372 133 Tomate-202285
        button.bg:SetWidth(150)
1373 43 Syzgyn-40270
        button.bg:SetHeight(16)
1374 109 Tomate-202285
 
1375 2 Syzgyn-40270
        local highlightTexture = button:CreateTexture()
1376 30 Syzgyn-40270
        highlightTexture:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Category-Highlight")
1377 Syzgyn-40270
        highlightTexture:SetTexCoord(0.02, 0.65, 0, 0.91)
1378 Syzgyn-40270
        highlightTexture:SetPoint("TOPLEFT", button.bg, -1, 0)
1379 Syzgyn-40270
        highlightTexture:SetPoint("BOTTOMRIGHT", button.bg, 1, -2)
1380 109 Tomate-202285
 
1381 30 Syzgyn-40270
        --button:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar", "ADD")
1382 Syzgyn-40270
        button:SetHighlightTexture(highlightTexture, "ADD")
1383 109 Tomate-202285
 
1384 2 Syzgyn-40270
        button:SetScript("OnClick", function()
1385 Syzgyn-40270
                local id = button:GetID()
1386 Syzgyn-40270
                self.currentCat = id
1387 Syzgyn-40270
                for _,v in next, self.categories[self.currentTab] do
1388 Syzgyn-40270
                        if v.id == id then
1389 Syzgyn-40270
                                v.collapsed = not v.collapsed
1390 Syzgyn-40270
                                break
1391 Syzgyn-40270
                        end
1392 Syzgyn-40270
                end
1393 66 Syzgyn-40270
                self.achOffset = 0
1394 2 Syzgyn-40270
                self:RefreshCategoryButtons()
1395 Syzgyn-40270
                self:RefreshAchievementButtons()
1396 Syzgyn-40270
        end)
1397 82 Tomate-202285
        button:SetScript("OnMouseWheel",UrbanAchiever_CatButtonScroll)
1398 109 Tomate-202285
 
1399 2 Syzgyn-40270
        return button
1400 Syzgyn-40270
end
1401 Syzgyn-40270
 
1402 Syzgyn-40270
function self:CreateAchievementButton(name, parent)
1403 Syzgyn-40270
        local button = CreateFrame("Button", name, parent)
1404 Syzgyn-40270
        button:EnableMouseWheel(true)
1405 Syzgyn-40270
        button:SetWidth(300)
1406 Syzgyn-40270
        button:SetHeight(16)
1407 109 Tomate-202285
 
1408 2 Syzgyn-40270
        button.expand = button:CreateFontString("$parentExpand", "BORDER", "GameFontNormal")
1409 Syzgyn-40270
        button.expand:SetText("+")
1410 Syzgyn-40270
        button.expand:SetWidth(10)
1411 Syzgyn-40270
        button.expand:SetHeight(10)
1412 Syzgyn-40270
        button.expand:SetPoint("TOPLEFT")
1413 Syzgyn-40270
 
1414 Syzgyn-40270
        button.offset = CreateFrame("Frame", nil, button)
1415 Syzgyn-40270
        button.offset:SetWidth(10)
1416 Syzgyn-40270
        button.offset:SetHeight(1)
1417 Syzgyn-40270
        button.offset:SetPoint("TOPLEFT", 9, 0)
1418 109 Tomate-202285
 
1419 2 Syzgyn-40270
        button.bgframe = CreateFrame("Frame", nil, button)
1420 Syzgyn-40270
        button.bgframe:SetWidth(300)
1421 Syzgyn-40270
        button.bgframe:SetHeight(16)
1422 Syzgyn-40270
        button.bgframe:SetPoint("TOPLEFT")
1423 109 Tomate-202285
 
1424 2 Syzgyn-40270
        button.background = button:CreateTexture("$parentBackground", "BACKGROUND")
1425 Syzgyn-40270
        button.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Stat-Buttons")
1426 Syzgyn-40270
        button.background:SetAlpha(0.5)
1427 Syzgyn-40270
 
1428 Syzgyn-40270
        button.background:SetPoint("TOPLEFT", button.offset, "TOPRIGHT")
1429 Syzgyn-40270
        button.background:SetPoint("BOTTOMRIGHT", button.bgframe)
1430 109 Tomate-202285
 
1431 2 Syzgyn-40270
        button.name = button:CreateFontString("$parentNameText","BORDER", "GameFontNormal")
1432 Syzgyn-40270
        button.name:SetPoint("TOPLEFT", button.background)
1433 151 Tomate-202285
        button.name:SetWidth(190)
1434 2 Syzgyn-40270
        button.name:SetHeight(16)
1435 Syzgyn-40270
        button.name:SetJustifyH("LEFT")
1436 Syzgyn-40270
        button.name:SetJustifyV("TOP")
1437 Syzgyn-40270
        button.name:SetTextColor(1,1,1)
1438 109 Tomate-202285
 
1439 2 Syzgyn-40270
        button.points = button:CreateFontString("$parentPointsText","BORDER", "GameFontNormal")
1440 151 Tomate-202285
        button.points:SetPoint("LEFT", button.name, "RIGHT", 2, 0)
1441 Tomate-202285
        button.points:SetWidth(36)
1442 Tomate-202285
        button.points:SetHeight(16)
1443 Tomate-202285
        button.points:SetJustifyH("CENTER")
1444 2 Syzgyn-40270
        button.points:SetJustifyV("TOP")
1445 Syzgyn-40270
        button.points:SetTextColor(1,1,1)
1446 109 Tomate-202285
 
1447 2 Syzgyn-40270
        button.completed = button:CreateFontString("$parentCompletedText","BORDER", "GameFontNormal")
1448 151 Tomate-202285
        button.completed:SetPoint("LEFT", button.points, "RIGHT", 2, 0)
1449 Tomate-202285
        button.completed:SetWidth(62)
1450 43 Syzgyn-40270
        button.completed:SetHeight(16)
1451 151 Tomate-202285
        button.completed:SetJustifyH("CENTER")
1452 2 Syzgyn-40270
        button.completed:SetJustifyV("TOP")
1453 Syzgyn-40270
        button.completed:SetTextColor(1,1,1)
1454 109 Tomate-202285
 
1455 2 Syzgyn-40270
        button.stat = button:CreateFontString("$parentStatText","BORDER", "GameFontNormal")
1456 151 Tomate-202285
        button.stat:SetPoint("LEFT", button.name, "RIGHT", 2, 0)
1457 Tomate-202285
        --button.stat:SetPoint("TOPRIGHT", button.background, "TOPRIGHT")
1458 2 Syzgyn-40270
        button.stat:SetJustifyH("LEFT")
1459 Syzgyn-40270
        button.stat:SetJustifyV("TOP")
1460 Syzgyn-40270
        button.stat:SetTextColor(1,1,1)
1461 109 Tomate-202285
 
1462 2 Syzgyn-40270
        button.comparison = CreateFrame("Frame", "$parentComparison", button)
1463 Syzgyn-40270
        button.comparison:SetPoint("RIGHT")
1464 Syzgyn-40270
        button.comparison:SetWidth(70)
1465 Syzgyn-40270
        button.comparison:SetHeight(16)
1466 Syzgyn-40270
        button.comparison:Hide()
1467 Syzgyn-40270
        button.comparison:SetFrameLevel(button.comparison:GetFrameLevel() - 1)
1468 109 Tomate-202285
 
1469 2 Syzgyn-40270
        button.comparison.background = button.comparison:CreateTexture("$parentBackground", "BACKGROUND")
1470 Syzgyn-40270
        button.comparison.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal")
1471 Syzgyn-40270
        button.comparison.background:SetAlpha(0.5)
1472 Syzgyn-40270
        button.comparison.background:SetAllPoints(button.comparison)
1473 109 Tomate-202285
 
1474 2 Syzgyn-40270
        button.compare = button.comparison:CreateFontString("$parentText", "BORDER", "GameFontNormal")
1475 Syzgyn-40270
        button.compare:SetPoint("LEFT", button.comparison, 5, 0)
1476 Syzgyn-40270
        button.compare:SetPoint("RIGHT", button.comparison)
1477 Syzgyn-40270
        button.compare:SetTextColor(1,1,1)
1478 109 Tomate-202285
 
1479 2 Syzgyn-40270
        button.comparison:SetScript("OnShow", function()
1480 Syzgyn-40270
                if self.isComparing then
1481 Syzgyn-40270
                        button:SetWidth(370)
1482 Syzgyn-40270
                        self.frame:SetWidth(702)
1483 Syzgyn-40270
                end
1484 Syzgyn-40270
        end)
1485 109 Tomate-202285
 
1486 2 Syzgyn-40270
        button.comparison:SetScript("OnHide", function()
1487 Syzgyn-40270
                if not self.isComparing then
1488 Syzgyn-40270
                        button:SetWidth(300)
1489 Syzgyn-40270
                        self.frame:SetWidth(632)
1490 Syzgyn-40270
                end
1491 Syzgyn-40270
        end)
1492 109 Tomate-202285
 
1493 2 Syzgyn-40270
        local highlightTexture = button:CreateTexture()
1494 Syzgyn-40270
        highlightTexture:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Stat-Buttons")
1495 Syzgyn-40270
        highlightTexture:SetTexCoord(0, 1, 0.56, 0.73)
1496 Syzgyn-40270
        highlightTexture:SetPoint("TOPLEFT", button.background)
1497 Syzgyn-40270
        highlightTexture:SetPoint("BOTTOMRIGHT", button)
1498 109 Tomate-202285
 
1499 2 Syzgyn-40270
        button:SetHighlightTexture(highlightTexture, "ADD")
1500 109 Tomate-202285
 
1501 2 Syzgyn-40270
        button:SetScript("OnClick", function()
1502 Syzgyn-40270
                local id = button:GetID()
1503 8 Syzgyn-40270
                if self.masterList[id] then
1504 120 Tomate-202285
                        SetFocusedAchievement(id)
1505 Tomate-202285
                        if GetCurrentKeyBoardFocus() ~= nil and IsModifiedClick("CHATLINK") then
1506 28 Syzgyn-40270
                                self:InsertIntoChat(id)
1507 Syzgyn-40270
                        elseif IsShiftKeyDown() then
1508 69 Syzgyn-40270
                                if IsTrackedAchievement(id) then
1509 Syzgyn-40270
                                        RemoveTrackedAchievement(id)
1510 Syzgyn-40270
                                else
1511 85 Tomate-202285
                                        local retok, _, _, _, completed = pcall (GetAchievementInfo,id)
1512 Tomate-202285
                                        if not retok or not id then return nil end
1513 Tomate-202285
                                        if completed == true then
1514 95 Tomate-202285
                                                DEFAULT_CHAT_FRAME:AddMessage(UAAchievementDone);
1515 85 Tomate-202285
                                        else
1516 Tomate-202285
                                                AddTrackedAchievement(id)
1517 Tomate-202285
                                        end
1518 69 Syzgyn-40270
                                end
1519 49 Syzgyn-40270
                                self:RefreshAchievementButtons(false)
1520 17 Syzgyn-40270
                        else
1521 Syzgyn-40270
                                self.currentAch = id
1522 Syzgyn-40270
                                if GetPreviousAchievement(id) and (not GetNextAchievement(id)) then
1523 109 Tomate-202285
                                        self.expandList[id] = not self.expandList[id]
1524 17 Syzgyn-40270
                                end
1525 109 Tomate-202285
 
1526 17 Syzgyn-40270
                                self:RefreshAchievementButtons(false)
1527 Syzgyn-40270
                                self:SetDisplayAchievement(id)
1528 8 Syzgyn-40270
                        end
1529 2 Syzgyn-40270
                end
1530 Syzgyn-40270
        end)
1531 82 Tomate-202285
        button:SetScript("OnMouseWheel", UrbanAchiever_AchButtonScroll)
1532 109 Tomate-202285
 
1533 2 Syzgyn-40270
        return button
1534 Syzgyn-40270
end
1535 Syzgyn-40270
 
1536 Syzgyn-40270
function self:CreateCriteriaButton(name, parent)
1537 Syzgyn-40270
        local button = CreateFrame("Button", name, parent)
1538 Syzgyn-40270
        button:EnableMouseWheel(true)
1539 Syzgyn-40270
        button:SetWidth(273)
1540 Syzgyn-40270
        button:SetHeight(16)
1541 109 Tomate-202285
 
1542 2 Syzgyn-40270
        --Offset used to move text when an icon is present
1543 Syzgyn-40270
        button.offset = CreateFrame("Frame", nil, button)
1544 Syzgyn-40270
        button.offset:SetWidth(1)
1545 Syzgyn-40270
        button.offset:SetHeight(16)
1546 Syzgyn-40270
        button.offset:SetPoint("LEFT")
1547 109 Tomate-202285
 
1548 2 Syzgyn-40270
        button.text = button:CreateFontString("$parentText", "BORDER", "GameFontHighlight")
1549 Syzgyn-40270
        button.text:SetPoint("LEFT", button.offset, "RIGHT")
1550 Syzgyn-40270
        button.text:SetPoint("RIGHT", button)
1551 Syzgyn-40270
        button.text:SetJustifyH("LEFT")
1552 Syzgyn-40270
        button.text:SetTextColor(1,1,1)
1553 109 Tomate-202285
 
1554 2 Syzgyn-40270
        button.icon = button:CreateTexture(nil, "ARTWORK")
1555 Syzgyn-40270
        button.icon:SetWidth(16)
1556 Syzgyn-40270
        button.icon:SetHeight(16)
1557 Syzgyn-40270
        button.icon:SetPoint("RIGHT", button.text, "LEFT")
1558 109 Tomate-202285
 
1559 2 Syzgyn-40270
        button.comparison = button:CreateTexture(nil, "ARTWORK")
1560 Syzgyn-40270
        button.comparison:SetWidth(16)
1561 Syzgyn-40270
        button.comparison:SetHeight(16)
1562 Syzgyn-40270
        button.comparison:SetPoint("LEFT", button.offset)
1563 109 Tomate-202285
 
1564 2 Syzgyn-40270
        local highlightTexture = button:CreateTexture()
1565 Syzgyn-40270
        highlightTexture:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Stat-Buttons")
1566 Syzgyn-40270
        highlightTexture:SetTexCoord(0, 1, 0.56, 0.73)
1567 109 Tomate-202285
 
1568 2 Syzgyn-40270
        button:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar", "ADD")
1569 109 Tomate-202285
 
1570 82 Tomate-202285
        button:SetScript("OnMouseWheel", UrbanAchiever_CriteriaButtonScroll)
1571 109 Tomate-202285
 
1572 2 Syzgyn-40270
        button:SetScript("OnClick", function()
1573 Syzgyn-40270
                local id = button:GetID()
1574 Syzgyn-40270
                if button.icon:IsShown() then
1575 Syzgyn-40270
                        self:SetDisplayAchievement(id)
1576 Syzgyn-40270
                end
1577 Syzgyn-40270
        end)
1578 109 Tomate-202285
 
1579 2 Syzgyn-40270
        return button
1580 Syzgyn-40270
end
1581 Syzgyn-40270
 
1582 Syzgyn-40270
function self:CreateAchievementSortButton(name, width, parent, text, sortStr)
1583 Syzgyn-40270
        local button = CreateFrame("Button", name, parent)
1584 Syzgyn-40270
        button:SetHeight(16)
1585 Syzgyn-40270
        button:SetWidth(width)
1586 Syzgyn-40270
        button:SetNormalTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
1587 Syzgyn-40270
        button:SetHighlightTexture("Interface/FriendsFrame/UI-FriendsFrame-HighlightBar", "ADD")
1588 109 Tomate-202285
 
1589 2 Syzgyn-40270
        button.text = button:CreateFontString("$parentText", "ARTWORK", "GameFontNormal")
1590 Syzgyn-40270
        button.text:SetPoint("CENTER", 0, 2)
1591 Syzgyn-40270
        button.text:SetTextColor(1,1,1)
1592 Syzgyn-40270
        button.text:SetText(text)
1593 109 Tomate-202285
 
1594 55 Syzgyn-40270
        button:SetScript("OnClick", function() self:SortDisplayTable(sortStr) end)
1595 109 Tomate-202285
 
1596 2 Syzgyn-40270
        return button
1597 Syzgyn-40270
end
1598 Syzgyn-40270
 
1599 Syzgyn-40270
function self:CreateTab(name, parent, text, tab)
1600 Syzgyn-40270
        local button = CreateFrame("Button", name, parent)
1601 Syzgyn-40270
        button:SetHeight(30)
1602 Syzgyn-40270
        button:SetWidth(100)
1603 8 Syzgyn-40270
 
1604 2 Syzgyn-40270
        button:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD")
1605 Syzgyn-40270
 
1606 Syzgyn-40270
        button:SetBackdrop({
1607 Syzgyn-40270
                edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, edgeSize = 16,
1608 Syzgyn-40270
                insets = {left = -5, right = -5, top = -5, bottom = -5}
1609 Syzgyn-40270
        })
1610 Syzgyn-40270
        button.backdrop = button:CreateTexture("$parentBG", "BACKGROUND")
1611 Syzgyn-40270
        button.backdrop:SetPoint("TOPLEFT", 2, -2)
1612 Syzgyn-40270
        button.backdrop:SetPoint("BOTTOMRIGHT", -2, 2)
1613 109 Tomate-202285
        button.backdrop:SetTexture(0,0,0,1)
1614 Tomate-202285
 
1615 2 Syzgyn-40270
        button.text = button:CreateFontString("$parentText", "ARTWORK", "GameFontNormal")
1616 Syzgyn-40270
        button.text:SetPoint("CENTER")
1617 Syzgyn-40270
        button.text:SetTextColor(1,1,1)
1618 Syzgyn-40270
        button.text:SetText(text)
1619 109 Tomate-202285
 
1620 2 Syzgyn-40270
        button:SetScript("OnClick", function()
1621 Syzgyn-40270
                self.currentTab = tab
1622 Syzgyn-40270
                self:RefreshCategoryButtons()
1623 Syzgyn-40270
        end)
1624 109 Tomate-202285
 
1625 2 Syzgyn-40270
        return button
1626 Syzgyn-40270
end
1627 Syzgyn-40270
 
1628 Syzgyn-40270
function self:CreateEditbox(parent)
1629 41 Syzgyn-40270
        --Shamelessly yoinked from MSBT. Much <3
1630 2 Syzgyn-40270
        -- Create container frame.
1631 Syzgyn-40270
        local editbox = CreateFrame("Frame", nil, parent)
1632 Syzgyn-40270
        editbox:SetHeight(32)
1633 Syzgyn-40270
 
1634 Syzgyn-40270
        -- Create editbox frame.
1635 Syzgyn-40270
        local editboxFrame = CreateFrame("Editbox", nil, editbox)
1636 Syzgyn-40270
        editboxFrame:SetHeight(20)
1637 Syzgyn-40270
        editboxFrame:SetPoint("BOTTOMLEFT", editbox, "BOTTOMLEFT", 5, 0)
1638 Syzgyn-40270
        editboxFrame:SetPoint("BOTTOMRIGHT")
1639 Syzgyn-40270
        editboxFrame:SetAutoFocus(false)
1640 Syzgyn-40270
        editboxFrame:SetFontObject(ChatFontNormal)
1641 Syzgyn-40270
        editboxFrame:SetScript("OnEscapePressed",       function() editboxFrame:ClearFocus() end)
1642 Syzgyn-40270
        editboxFrame:SetScript("OnEditFocusLost",       function() editboxFrame:HighlightText(0, 0) end)
1643 Syzgyn-40270
        editboxFrame:SetScript("OnEditFocusGained",     function() editboxFrame:HighlightText() end)
1644 41 Syzgyn-40270
        editboxFrame:SetScript("OnEnterPressed",        function() self:Search(editboxFrame:GetText()) editboxFrame:ClearFocus() end)
1645 2 Syzgyn-40270
 
1646 Syzgyn-40270
        -- Left border.
1647 Syzgyn-40270
        local left = editboxFrame:CreateTexture(nil, "BACKGROUND")
1648 Syzgyn-40270
        left:SetTexture("Interface\\Common\\Common-Input-Border")
1649 Syzgyn-40270
        left:SetWidth(8)
1650 Syzgyn-40270
        left:SetHeight(22)
1651 Syzgyn-40270
        left:SetPoint("LEFT", editboxFrame, "LEFT", -5, 0)
1652 Syzgyn-40270
        left:SetTexCoord(0, 0.0625, 0, 0.625)
1653 Syzgyn-40270
 
1654 109 Tomate-202285
        -- Right border.
1655 2 Syzgyn-40270
        local right = editboxFrame:CreateTexture(nil, "BACKGROUND")
1656 Syzgyn-40270
        right:SetTexture("Interface\\Common\\Common-Input-Border")
1657 Syzgyn-40270
        right:SetWidth(8)
1658 Syzgyn-40270
        right:SetHeight(22)
1659 Syzgyn-40270
        right:SetPoint("RIGHT")
1660 Syzgyn-40270
        right:SetTexCoord(0.9375, 1, 0, 0.625)
1661 Syzgyn-40270
 
1662 109 Tomate-202285
        -- Middle border.
1663 2 Syzgyn-40270
        local middle = editboxFrame:CreateTexture(nil, "BACKGROUND")
1664 Syzgyn-40270
        middle:SetTexture("Interface\\Common\\Common-Input-Border")
1665 Syzgyn-40270
        middle:SetWidth(10)
1666 Syzgyn-40270
        middle:SetHeight(22)
1667 Syzgyn-40270
        middle:SetPoint("LEFT", left, "RIGHT", 0, 0)
1668 Syzgyn-40270
        middle:SetPoint("RIGHT", right, "LEFT", 0, 0)
1669 Syzgyn-40270
        middle:SetTexCoord(0.0625, 0.9375, 0, 0.625)
1670 Syzgyn-40270
 
1671 Syzgyn-40270
 
1672 Syzgyn-40270
        -- Label.
1673 Syzgyn-40270
        local label = editbox:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
1674 Syzgyn-40270
        label:SetPoint("TOPLEFT")
1675 Syzgyn-40270
        label:SetPoint("TOPRIGHT")
1676 Syzgyn-40270
        label:SetJustifyH("LEFT")
1677 Syzgyn-40270
 
1678 Syzgyn-40270
        return editbox
1679 Syzgyn-40270
end
1680 Syzgyn-40270
 
1681 Syzgyn-40270
-------------------------------------------------------------
1682 109 Tomate-202285
--Scroll Stuff
1683 2 Syzgyn-40270
-------------------------------------------------------------
1684 82 Tomate-202285
function UrbanAchiever_OnCatScroll(self1)
1685 Tomate-202285
        self.catOffset = self1:GetValue()
1686 2 Syzgyn-40270
        self:RefreshCategoryButtons()
1687 Syzgyn-40270
end
1688 Syzgyn-40270
 
1689 82 Tomate-202285
function UrbanAchiever_OnAchScroll(self1)
1690 Tomate-202285
        self.achOffset = self1:GetValue()
1691 2 Syzgyn-40270
        self:RefreshAchievementButtons(false)
1692 Syzgyn-40270
end
1693 Syzgyn-40270
 
1694 82 Tomate-202285
function UrbanAchiever_OnCriteriaScroll(self1)
1695 Tomate-202285
        self.criteriaOffset = self1:GetValue()
1696 2 Syzgyn-40270
        self:RefreshCriteriaButtons()
1697 Syzgyn-40270
end
1698 Syzgyn-40270
 
1699 Syzgyn-40270
-------------------------------------------------------------
1700 109 Tomate-202285
--Core Stuff
1701 2 Syzgyn-40270
-------------------------------------------------------------
1702 Syzgyn-40270
function self:UpdateFunction()
1703 Syzgyn-40270
        if (not self.frame) or (not self.frame:IsShown()) then return end
1704 Syzgyn-40270
        self:RefreshCategoryButtons()
1705 52 Syzgyn-40270
        self:RefreshAchievementButtons(false)
1706 2 Syzgyn-40270
        self:ComparisonUpdate()
1707 Syzgyn-40270
end
1708 Syzgyn-40270
 
1709 Syzgyn-40270
function self:PopulateMasterList()
1710 Syzgyn-40270
        local id, name, points, completed, month, day, year, description, icon, reward, searchString
1711 Syzgyn-40270
        local criteriaName
1712 Syzgyn-40270
        local catList, numAchievements, nextId
1713 Syzgyn-40270
        local tempTable = {}
1714 Syzgyn-40270
        local category
1715 109 Tomate-202285
 
1716 2 Syzgyn-40270
        --Get Every achievement
1717 Syzgyn-40270
        for i=1, MAX_ACHIEVEMENTS do
1718 Syzgyn-40270
                searchString = self:GetSearchString(i)
1719 162 Tomate-202285
 
1720 Tomate-202285
                if searchString and hidden == nil then
1721 2 Syzgyn-40270
                        self.masterList[i] = {
1722 Syzgyn-40270
                                ["searchString"] = searchString:lower(),
1723 Syzgyn-40270
                        }
1724 109 Tomate-202285
 
1725 2 Syzgyn-40270
                        if not GetNextAchievement(i) then
1726 133 Tomate-202285
                                --If this isnt in the middle of a chain, add it to the category listing
1727 162 Tomate-202285
                                if self:checkHidden(i) then
1728 Tomate-202285
                                        category = GetAchievementCategory(i)
1729 Tomate-202285
                                        if not self.seriesList[category] then
1730 Tomate-202285
                                                self.seriesList[category] = {}
1731 Tomate-202285
                                        end
1732 Tomate-202285
 
1733 Tomate-202285
                                        tinsert(self.seriesList[category], i)
1734 2 Syzgyn-40270
                                end
1735 Syzgyn-40270
                        end
1736 Syzgyn-40270
                end
1737 Syzgyn-40270
        end
1738 Syzgyn-40270
end
1739 Syzgyn-40270
 
1740 Syzgyn-40270
function self:PopulateCategories(tab)
1741 Syzgyn-40270
        local list, name, parent
1742 38 Syzgyn-40270
        local isAch = false
1743 107 Tomate-202285
        local isGuild = false
1744 2 Syzgyn-40270
        --Populate the list from API
1745 Syzgyn-40270
        if tab == "achievements" then
1746 Syzgyn-40270
                list = GetCategoryList()
1747 38 Syzgyn-40270
                isAch = true
1748 2 Syzgyn-40270
        else
1749 107 Tomate-202285
                if tab == "guild" then
1750 Tomate-202285
                        list = GetGuildCategoryList()
1751 Tomate-202285
                        isGuild = true
1752 Tomate-202285
                else
1753 Tomate-202285
                        list = GetStatisticsCategoryList()
1754 Tomate-202285
                end
1755 2 Syzgyn-40270
        end
1756 109 Tomate-202285
 
1757 2 Syzgyn-40270
        --Insert summary Category
1758 Syzgyn-40270
        tinsert(self.categories[tab], {
1759 109 Tomate-202285
                ["id"] = "-1",
1760 86 Tomate-202285
                ["name"] = UASummary,
1761 2 Syzgyn-40270
                ["collapsed"] = true,
1762 Syzgyn-40270
                ["children"] = {}
1763 Syzgyn-40270
        })
1764 109 Tomate-202285
 
1765 2 Syzgyn-40270
        --Add top level Categories
1766 Syzgyn-40270
        for _,id in next, list do
1767 Syzgyn-40270
                name, parent = GetCategoryInfo(id)
1768 38 Syzgyn-40270
                self.isAchList[id] = isAch
1769 107 Tomate-202285
                self.isGuildList[id] = isGuild
1770 Tomate-202285
                if parent == 15076 then
1771 Tomate-202285
                        parent = -1
1772 Tomate-202285
                end
1773 2 Syzgyn-40270
                if parent == -1 then
1774 Syzgyn-40270
                        tinsert(self.categories[tab], {
1775 109 Tomate-202285
                                ["id"] = id,
1776 2 Syzgyn-40270
                                ["name"] = name,
1777 Syzgyn-40270
                                ["collapsed"] = true,
1778 Syzgyn-40270
                                ["children"] = {}
1779 Syzgyn-40270
                        })
1780 Syzgyn-40270
                end
1781 Syzgyn-40270
        end
1782 109 Tomate-202285
 
1783 2 Syzgyn-40270
        --Add child Categories
1784 Syzgyn-40270
        for _,childId in next, list do
1785 135 Tomate-202285
                local childName, childParent = GetCategoryInfo(childId)
1786 2 Syzgyn-40270
                for parentKey, parentCat in next, self.categories[tab] do
1787 Syzgyn-40270
                        if childParent == parentCat.id then
1788 Syzgyn-40270
                                tinsert(parentCat.children,{
1789 133 Tomate-202285
                                        ["id"] = childId,
1790 Tomate-202285
                                        ["name"] = childName
1791 2 Syzgyn-40270
                                })
1792 Syzgyn-40270
                        end
1793 Syzgyn-40270
                end
1794 Syzgyn-40270
        end
1795 Syzgyn-40270
end
1796 Syzgyn-40270
 
1797 Syzgyn-40270
function self:SetAchievementButton(button, id, offset)
1798 133 Tomate-202285
        local retok, id, name, points, completed, month, day, year, description, flags,icon, reward = pcall(GetAchievementInfo,id)
1799 82 Tomate-202285
        if not retok then return nil end
1800 109 Tomate-202285
 
1801 81 Tomate-202285
        if completed then
1802 Tomate-202285
                if year < 10 then
1803 109 Tomate-202285
                        year = "0" .. year;
1804 81 Tomate-202285
                end
1805 104 Tomate-202285
                if (GetLocale() == "frFR" or GetLocale() == "ruRU") then
1806 81 Tomate-202285
                        completed = day .. "/" .. month .. "/" .. year;
1807 Tomate-202285
                else
1808 105 Tomate-202285
                        if (GetLocale() == "deDE") then
1809 Tomate-202285
                                completed = day .. "." .. month .. "." .. year;
1810 Tomate-202285
                        else
1811 Tomate-202285
                                completed = month .. "/" .. day .. "/" .. year;
1812 Tomate-202285
                        end
1813 81 Tomate-202285
                end
1814 Tomate-202285
        else
1815 Tomate-202285
                completed = "";
1816 Tomate-202285
        end
1817 8 Syzgyn-40270
        if not offset then offset = 1 end
1818 109 Tomate-202285
 
1819 8 Syzgyn-40270
        self.frame.achButtons[button]:SetWidth(300)
1820 2 Syzgyn-40270
        self.frame.achButtons[button].name:SetText(name)
1821 Syzgyn-40270
        self.frame.achButtons[button].completed:SetText(completed)
1822 Syzgyn-40270
        self.frame.achButtons[button]:SetID(id)
1823 Syzgyn-40270
        self.frame.achButtons[button].expand:Hide()
1824 Syzgyn-40270
        self.frame.achButtons[button].compare:SetText("")
1825 Syzgyn-40270
        self.frame.achButtons[button].comparison:Hide()
1826 109 Tomate-202285
 
1827 133 Tomate-202285
        self.frame.achButtons[button].background:SetVertexColor(1, 1, 1)
1828 Tomate-202285
        if flags ~= nil  then
1829 Tomate-202285
                if ( bit.band(flags, ACHIEVEMENT_FLAGS_ACCOUNT) == ACHIEVEMENT_FLAGS_ACCOUNT ) then
1830 149 Tomate-202285
                        self.frame.achButtons[button].background:SetVertexColor(.4, .4, 1)
1831 133 Tomate-202285
                end
1832 Tomate-202285
        end
1833 Tomate-202285
 
1834 Tomate-202285
 
1835 2 Syzgyn-40270
        self.frame.achButtons[button].background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal")
1836 Syzgyn-40270
        self.frame.achButtons[button].comparison.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal")
1837 109 Tomate-202285
 
1838 107 Tomate-202285
        if self.isAchList[GetAchievementCategory(id)] == false and self.isGuildList[GetAchievementCategory(id)] == false then
1839 133 Tomate-202285
                --Its a statistic, no date, no points
1840 51 Syzgyn-40270
                self.frame.achButtons[button].stat:SetText(self:FormatString(GetStatistic(id)))
1841 2 Syzgyn-40270
                self.frame.achButtons[button].points:SetText("")
1842 109 Tomate-202285
 
1843 2 Syzgyn-40270
                if self.isComparing then
1844 Syzgyn-40270
                        self.frame.achButtons[button].comparison:Show()
1845 51 Syzgyn-40270
                        self.frame.achButtons[button].compare:SetText(self:FormatString(GetComparisonStatistic(id)))
1846 2 Syzgyn-40270
                end
1847 Syzgyn-40270
        else
1848 Syzgyn-40270
                self.frame.achButtons[button].points:SetText(points)
1849 Syzgyn-40270
                self.frame.achButtons[button].stat:SetText("")
1850 Syzgyn-40270
 
1851 109 Tomate-202285
                if completed == "" then
1852 2 Syzgyn-40270
                        self.frame.achButtons[button].background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
1853 Syzgyn-40270
                end
1854 109 Tomate-202285
 
1855 69 Syzgyn-40270
                if IsTrackedAchievement(id) then
1856 49 Syzgyn-40270
                        self.frame.achButtons[button].expand:SetTextColor(0,1,0)
1857 Syzgyn-40270
                        self.frame.achButtons[button].expand:SetText("T")
1858 Syzgyn-40270
                        self.frame.achButtons[button].expand:Show()
1859 Syzgyn-40270
                elseif reward ~= "" then        --Theres a reward, it takes precidence
1860 2 Syzgyn-40270
                        self.frame.achButtons[button].expand:SetTextColor(1,0,0)
1861 Syzgyn-40270
                        self.frame.achButtons[button].expand:SetText("!")
1862 Syzgyn-40270
                        self.frame.achButtons[button].expand:Show()
1863 8 Syzgyn-40270
                elseif self.currentCat > 0 then --If we're searching or at the summary, we dont want to see the + or -
1864 2 Syzgyn-40270
                        self.frame.achButtons[button].expand:SetTextColor(1,1,1)
1865 Syzgyn-40270
                        if GetPreviousAchievement(id) and (not GetNextAchievement(id)) then     --There's a sub achievement
1866 Syzgyn-40270
                                self.frame.achButtons[button].expand:Show()
1867 Syzgyn-40270
                                if self.expandList[id] then
1868 Syzgyn-40270
                                        self.frame.achButtons[button].expand:SetText("-")
1869 Syzgyn-40270
                                else
1870 Syzgyn-40270
                                        self.frame.achButtons[button].expand:SetText("+")
1871 Syzgyn-40270
                                end
1872 Syzgyn-40270
                        end
1873 Syzgyn-40270
                end
1874 109 Tomate-202285
 
1875 2 Syzgyn-40270
                if self.isComparing then
1876 Syzgyn-40270
                        self.frame.achButtons[button].comparison:Show()
1877 Syzgyn-40270
                        local compDone, compM, compD, compY = GetAchievementComparisonInfo(id, 1)
1878 109 Tomate-202285
 
1879 Tomate-202285
                        if compDone then
1880 2 Syzgyn-40270
                                self.frame.achButtons[button].compare:SetText(string.format("%d/%d/0%d", compM, compD, compY))
1881 Syzgyn-40270
                        else
1882 Syzgyn-40270
                                self.frame.achButtons[button].comparison.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
1883 Syzgyn-40270
                        end
1884 Syzgyn-40270
                end
1885 Syzgyn-40270
        end
1886 109 Tomate-202285
 
1887 2 Syzgyn-40270
        if self.currentAch == id then
1888 Syzgyn-40270
                self.frame.achButtons[button]:LockHighlight()
1889 Syzgyn-40270
        else
1890 Syzgyn-40270
                self.frame.achButtons[button]:UnlockHighlight()
1891 Syzgyn-40270
        end
1892 109 Tomate-202285
 
1893 2 Syzgyn-40270
        self.frame.achButtons[button].offset:SetWidth(offset)
1894 Syzgyn-40270
        self.frame.achButtons[button]:Show()
1895 Syzgyn-40270
end
1896 Syzgyn-40270
 
1897 69 Syzgyn-40270
function self:SetDisplayAchievement(id, forceCat)
1898 2 Syzgyn-40270
        if id == nil then id = self.currentAch end
1899 Syzgyn-40270
        if not self.masterList[id] then return end
1900 109 Tomate-202285
 
1901 2 Syzgyn-40270
        self.currentAch = id
1902 109 Tomate-202285
 
1903 2 Syzgyn-40270
        --Update the category list
1904 Syzgyn-40270
        --On second thought, I dont want it doing this.
1905 8 Syzgyn-40270
        --On third thought, I only want to do it if we're coming from the summary frame.
1906 69 Syzgyn-40270
        if self.currentCat == -1 or forceCat then
1907 8 Syzgyn-40270
                self:SetCategory(self.currentAch)
1908 2 Syzgyn-40270
        end
1909 109 Tomate-202285
 
1910 2 Syzgyn-40270
        --Update this achievement
1911 Syzgyn-40270
        self.masterList[id].searchString = self:GetSearchString(id)
1912 109 Tomate-202285
 
1913 82 Tomate-202285
        local retok, id, name, points, completed, month, day, year, description, _,icon, reward = pcall (GetAchievementInfo,id)
1914 109 Tomate-202285
 
1915 2 Syzgyn-40270
        self.frame.display:Show()
1916 28 Syzgyn-40270
        self.frame.display.icon:SetTexture(icon)
1917 2 Syzgyn-40270
        self.frame.display.name:SetText(name)
1918 Syzgyn-40270
        self.frame.display.desc:SetText(description)
1919 Syzgyn-40270
        self.frame.display.compareDate:Hide()
1920 109 Tomate-202285
 
1921 107 Tomate-202285
        if self.isAchList[GetAchievementCategory(id)] == false and self.isGuildList[GetAchievementCategory(id)] == false then
1922 2 Syzgyn-40270
                --Statistic
1923 25 Syzgyn-40270
                self.frame.display.icon:Hide()
1924 Syzgyn-40270
                self.frame.display.icon:SetWidth(1)
1925 2 Syzgyn-40270
                self.frame.display.shield:Hide()
1926 Syzgyn-40270
                self.frame.display.reward:SetText("")
1927 Syzgyn-40270
                self.frame.display.points:SetText("")
1928 Syzgyn-40270
                self.frame.display.desc:SetText("")
1929 25 Syzgyn-40270
                self.frame.display.name:SetJustifyH("MIDDLE")
1930 29 Syzgyn-40270
                self.frame.display.name:SetWidth(280)
1931 109 Tomate-202285
 
1932 2 Syzgyn-40270
                for a = 1, #self.frame.display.criteriaButtons do
1933 Syzgyn-40270
                        self.frame.display.criteriaButtons[a]:Hide()
1934 Syzgyn-40270
                        self.frame.display.criteriaButtons[a].icon:Hide()
1935 Syzgyn-40270
                end
1936 109 Tomate-202285
 
1937 51 Syzgyn-40270
                self.frame.display.reward:SetText("|cffffffff" .. self:FormatString(GetStatistic(id)))
1938 2 Syzgyn-40270
                if self.isComparing then
1939 26 Syzgyn-40270
                        self.frame.display.compareDate:Show()
1940 51 Syzgyn-40270
                        self.frame.display.compareDate:SetText("|cffffffff" .. self.comparisonUnitName .. ": " .. self:FormatString(GetComparisonStatistic(id)))
1941 Syzgyn-40270
                        self.frame.display.reward:SetText("|cffffffff" .. UnitName("player") .. ": " .. self:FormatString(GetStatistic(id)))
1942 2 Syzgyn-40270
                end
1943 50 Syzgyn-40270
                if UASVPC.statCriteria then
1944 29 Syzgyn-40270
                        self:RefreshCriteriaButtons()
1945 Syzgyn-40270
                else
1946 Syzgyn-40270
                        for i=1, #self.frame.display.criteriaButtons do
1947 Syzgyn-40270
                                self.frame.display.criteriaButtons[i]:Hide()
1948 50 Syzgyn-40270
                                self.frame.criteriaScroll:Hide()
1949 29 Syzgyn-40270
                        end
1950 Syzgyn-40270
                end
1951 2 Syzgyn-40270
        else
1952 Syzgyn-40270
                --Achievement
1953 Syzgyn-40270
                self.frame.display.icon:Show()
1954 25 Syzgyn-40270
                self.frame.display.icon:SetWidth(64)
1955 2 Syzgyn-40270
                self.frame.display.shield:Show()
1956 25 Syzgyn-40270
                self.frame.display.name:SetJustifyH("LEFT")
1957 29 Syzgyn-40270
                self.frame.display.name:SetWidth(220)
1958 81 Tomate-202285
                if completed then
1959 Tomate-202285
                        if year < 10 then
1960 109 Tomate-202285
                                year = "0" .. year;
1961 81 Tomate-202285
                        end
1962 104 Tomate-202285
                        if (GetLocale() == "frFR" or GetLocale() == "ruRU") then
1963 81 Tomate-202285
                                completed = day .. "/" .. month .. "/" .. year;
1964 Tomate-202285
                        else
1965 106 Tomate-202285
                                if (GetLocale() == "deDE") then
1966 Tomate-202285
                                        completed = day .. "." .. month .. "." .. year;
1967 Tomate-202285
                                else
1968 Tomate-202285
                                        completed = month .. "/" .. day .. "/" .. year;
1969 Tomate-202285
                                end
1970 81 Tomate-202285
                        end
1971 Tomate-202285
                else
1972 Tomate-202285
                        completed = "";
1973 Tomate-202285
                end
1974 109 Tomate-202285
 
1975 Tomate-202285
                if points == 0 then
1976 93 Tomate-202285
                        self.frame.display.shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Shields-NoPoints")
1977 2 Syzgyn-40270
                        self.frame.display.points:SetText("")
1978 Syzgyn-40270
                else
1979 Syzgyn-40270
                        self.frame.display.points:SetText(points)
1980 93 Tomate-202285
                        self.frame.display.shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Shields")
1981 2 Syzgyn-40270
                end
1982 133 Tomate-202285
 
1983 Tomate-202285
 
1984 113 Tomate-202285
                if self.currentTab == "guild" then
1985 135 Tomate-202285
                        local requiresRep, hasRep, repLevel = GetAchievementGuildRep(self.currentAch);
1986 113 Tomate-202285
                        if ( requiresRep ) then
1987 Tomate-202285
                                local gender = UnitSex("player");
1988 Tomate-202285
                                local factionStandingtext = GetText("FACTION_STANDING_LABEL"..repLevel, gender);
1989 Tomate-202285
                                self.frame.display.repCriteria:SetFormattedText(ACHIEVEMENT_REQUIRES_GUILD_REPUTATION, factionStandingtext);
1990 Tomate-202285
                                if ( hasRep ) then
1991 Tomate-202285
                                        self.frame.display.repCriteria:SetTextColor(0, 1, 0);
1992 Tomate-202285
                                else
1993 Tomate-202285
                                        self.frame.display.repCriteria:SetTextColor(1, 0, 0);
1994 Tomate-202285
                                end
1995 Tomate-202285
                                self.frame.display.repCriteria:Show();
1996 Tomate-202285
                        else
1997 Tomate-202285
                                self.frame.display.repCriteria:Hide();
1998 Tomate-202285
                        end
1999 Tomate-202285
                else
2000 Tomate-202285
                        self.frame.display.repCriteria:Hide();
2001 Tomate-202285
                end
2002 133 Tomate-202285
 
2003 2 Syzgyn-40270
                if completed == "" then
2004 84 Tomate-202285
                        self.frame.display.shield:SetTexCoord(.5, 1, 0, .5)
2005 2 Syzgyn-40270
                        self.frame.display.points:SetVertexColor(.65, .65, .65)
2006 Syzgyn-40270
                        self.frame.display.reward:SetText(reward)
2007 113 Tomate-202285
                        self.frame.display.completed:SetText("")
2008 2 Syzgyn-40270
                else
2009 84 Tomate-202285
                        self.frame.display.shield:SetTexCoord(0 , .5, 0, .5)
2010 2 Syzgyn-40270
                        self.frame.display.points:SetVertexColor(1, 1, 1)
2011 113 Tomate-202285
                        self.frame.display.reward:SetText(reward)
2012 Tomate-202285
                        self.frame.display.completed:SetText(UACompleted .. ": " .. completed)
2013 2 Syzgyn-40270
                end
2014 109 Tomate-202285
 
2015 2 Syzgyn-40270
                if self.isComparing then
2016 Syzgyn-40270
                        local compDone, m, d, y = GetAchievementComparisonInfo(id,1)
2017 Syzgyn-40270
                        if compDone then
2018 109 Tomate-202285
                                self.frame.display.compareDate:Show()
2019 86 Tomate-202285
                                self.frame.display.compareDate:SetText(string.format("%s " .. UACompleted .. ":" .." %d/%d/0%d", self.comparisonUnitName, m or -1, d or -1, y or -1))
2020 2 Syzgyn-40270
                        end
2021 Syzgyn-40270
                end
2022 29 Syzgyn-40270
                self:RefreshCriteriaButtons()
2023 2 Syzgyn-40270
        end
2024 Syzgyn-40270
end
2025 8 Syzgyn-40270
-------------------------------------------------------------
2026 109 Tomate-202285
--Refresh Stuff
2027 8 Syzgyn-40270
-------------------------------------------------------------
2028 2 Syzgyn-40270
function self:RefreshCriteriaButtons()
2029 79 Tomate-202285
        if self.frame == nil then self:Initialize("","") end
2030 Tomate-202285
        if self.frame == nil then return end
2031 42 Syzgyn-40270
        if not self.frame:IsShown() then return end
2032 135 Tomate-202285
        local id, month, day, year, criteriaName, criteriaType, criteriaCompleted, criteriaQuantity, criteriaReqQuantity, _ ,criteriaFlags, criteriaAssetID, icon, quantityStr, charName
2033 2 Syzgyn-40270
        local buttonNum = 1
2034 Syzgyn-40270
        local str = ""
2035 Syzgyn-40270
        local offset = 1
2036 Syzgyn-40270
        local compDone, comparisonComplete, compCriteriaText
2037 109 Tomate-202285
 
2038 2 Syzgyn-40270
        if self.isComparing then
2039 Syzgyn-40270
                compDone = GetAchievementComparisonInfo(self.currentAch,1)
2040 Syzgyn-40270
        end
2041 109 Tomate-202285
 
2042 150 Tomate-202285
        local numStatusBar = 0
2043 109 Tomate-202285
 
2044 31 Syzgyn-40270
        self.frame.display.bar:Hide()
2045 Syzgyn-40270
        self.frame.display.compareBar:Hide()
2046 109 Tomate-202285
 
2047 66 Syzgyn-40270
        for a = self.criteriaOffset + 1, min(#self.frame.display.criteriaButtons + self.criteriaOffset, GetAchievementNumCriteria(self.currentAch)) do
2048 151 Tomate-202285
                self.frame.display.criteriaButtons[buttonNum]:Hide()
2049 66 Syzgyn-40270
                self.frame.display.criteriaButtons[buttonNum].icon:Hide()
2050 Syzgyn-40270
                self.frame.display.criteriaButtons[buttonNum].comparison:Hide()
2051 Syzgyn-40270
                offset = 1
2052 133 Tomate-202285
 
2053 113 Tomate-202285
                criteriaName, criteriaType, criteriaCompleted, criteriaQuantity, criteriaReqQuantity, charName, criteriaFlags, criteriaAssetID, quantityStr =
2054 133 Tomate-202285
                GetAchievementCriteriaInfo(self.currentAch, a)
2055 66 Syzgyn-40270
                if criteriaType then    --Some Achievements seem to throw out the wrong number of criteria, causing errors.
2056 113 Tomate-202285
                        if criteriaType == CRITERIA_TYPE_ACHIEVEMENT and criteriaAssetID then
2057 Tomate-202285
                                id, criteriaName, _, criteriaCompleted, month, day, year, _, _, icon = GetAchievementInfo(criteriaAssetID);
2058 Tomate-202285
                        end
2059 133 Tomate-202285
 
2060 66 Syzgyn-40270
                        if criteriaCompleted then
2061 Syzgyn-40270
                                str = "|CFF00FF00"
2062 Syzgyn-40270
                        else
2063 Syzgyn-40270
                                str = "|CFF808080"
2064 Syzgyn-40270
                        end
2065 Syzgyn-40270
                        str = str .. criteriaName -- .. "= " .. criteriaQuantity .. " (" .. criteriaAssetID .. ")"
2066 Syzgyn-40270
                        if UASVPC.specificCriteria and criteriaReqQuantity > 1 then
2067 Syzgyn-40270
                                str = string.format("%s (%d/%d)", str, criteriaQuantity, criteriaReqQuantity)
2068 Syzgyn-40270
                        end
2069 109 Tomate-202285
 
2070 113 Tomate-202285
                        if criteriaType == CRITERIA_TYPE_ACHIEVEMENT and criteriaAssetID then
2071 66 Syzgyn-40270
                                --Its a meta achievement
2072 113 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum].icon:SetTexture(icon)
2073 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum].icon:Show()
2074 Tomate-202285
                                offset = offset + 16
2075 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum]:SetID(criteriaAssetID)
2076 150 Tomate-202285
                        end
2077 Tomate-202285
                        if (bit.band(criteriaFlags, 1) == 1) then
2078 66 Syzgyn-40270
                                --Its a progress bar
2079 Syzgyn-40270
                                offset = 1
2080 Syzgyn-40270
                                str = ""
2081 150 Tomate-202285
                                numStatusBar = numStatusBar+1
2082 109 Tomate-202285
 
2083 151 Tomate-202285
                                self.frame.display.bar:ClearAllPoints()
2084 Tomate-202285
                                self.frame.display.bar:SetPoint("CENTER", self.frame.display, 0, 60)
2085 Tomate-202285
 
2086 66 Syzgyn-40270
                                self.frame.display.bar:Show()
2087 Syzgyn-40270
                                self.frame.display.bar:SetMinMaxValues(0,criteriaReqQuantity)
2088 Syzgyn-40270
                                self.frame.display.bar:SetValue(criteriaQuantity)
2089 Syzgyn-40270
                                local cQ, cRQ = criteriaQuantity, criteriaReqQuantity
2090 Syzgyn-40270
                                if quantityStr:find("|T") then
2091 Syzgyn-40270
                                        cQ, cRQ = self:FormatMoney(criteriaQuantity, criteriaReqQuantity)
2092 58 Syzgyn-40270
                                end
2093 66 Syzgyn-40270
                                self.frame.display.bar.text:SetText(cQ .. " / " .. cRQ)
2094 109 Tomate-202285
 
2095 66 Syzgyn-40270
                                if self.isComparing  and compCriteriaText then
2096 Syzgyn-40270
                                        self.frame.display.compareBar:Show()
2097 Syzgyn-40270
                                        self.frame.display.compareBar:SetMinMaxValues(0, criteriaReqQuantity)
2098 Syzgyn-40270
                                        local _,_,min, max = string.find(compCriteriaText, "(%d+)/(%d+)")
2099 Syzgyn-40270
                                        self.frame.display.compareBar:SetValue(min)
2100 Syzgyn-40270
                                        --If theres money textures in the string, we're gonna need to format it.
2101 51 Syzgyn-40270
                                        if quantityStr:find("|T") then
2102 66 Syzgyn-40270
                                                min, criteriaReqQuantity = self:FormatMoney(min, criteriaReqQuantity)
2103 51 Syzgyn-40270
                                        end
2104 66 Syzgyn-40270
                                        self.frame.display.compareBar.text:SetText(min .. " / " .. criteriaReqQuantity)
2105 Syzgyn-40270
                                        self.frame.display.compareBar.nameText:SetText(self.comparisonUnitName .. ":")
2106 109 Tomate-202285
 
2107 2 Syzgyn-40270
                                end
2108 66 Syzgyn-40270
                                --If theres a progress bar, theres no other achievements
2109 150 Tomate-202285
                                --break
2110 Tomate-202285
                                local buttonNumCurrent
2111 Tomate-202285
                                local buttonNumEnd = buttonNum+2
2112 Tomate-202285
                                for buttonNumCurrent=buttonNum, buttonNumEnd, 1 do
2113 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNumCurrent].icon:Hide()
2114 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNumCurrent].date = nil
2115 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNumCurrent].id = nil
2116 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNumCurrent].text:SetText('')
2117 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNumCurrent].offset:SetWidth(1)
2118 Tomate-202285
                                end
2119 113 Tomate-202285
                        else
2120 151 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum]:Show()
2121 150 Tomate-202285
                                if month then
2122 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNum].date = string.format(SHORTDATE, day, month, year);
2123 Tomate-202285
                                else
2124 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNum].date = nil;
2125 Tomate-202285
                                end
2126 Tomate-202285
                                if id then
2127 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNum].id = id;
2128 Tomate-202285
                                else
2129 Tomate-202285
                                        self.frame.display.criteriaButtons[buttonNum].id = nil;
2130 Tomate-202285
                                end
2131 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum].text:SetText(str)
2132 Tomate-202285
                                self.frame.display.criteriaButtons[buttonNum].offset:SetWidth(offset)
2133 Tomate-202285
                                buttonNum = buttonNum + 1
2134 113 Tomate-202285
                        end
2135 2 Syzgyn-40270
                end
2136 Syzgyn-40270
        end
2137 Syzgyn-40270
        self.frame.criteriaScroll:SetMinMaxValues(0,math.max(GetAchievementNumCriteria(self.currentAch)-#self.frame.display.criteriaButtons, 0))
2138 109 Tomate-202285
 
2139 151 Tomate-202285
        if numStatusBar and buttonNum > 1 then
2140 Tomate-202285
                self.frame.display.compareBar:ClearAllPoints()
2141 Tomate-202285
                self.frame.display.bar:SetPoint("TOP", self.frame.display.criteriaButtons[buttonNum-1],"BOTTOM", 0, -15)
2142 Tomate-202285
        end
2143 Tomate-202285
 
2144 2 Syzgyn-40270
        if GetAchievementNumCriteria(self.currentAch)-#self.frame.display.criteriaButtons > 0 then
2145 Syzgyn-40270
                self.frame.criteriaScroll:Show()
2146 Syzgyn-40270
        else
2147 Syzgyn-40270
                self.frame.criteriaScroll:Hide()
2148 Syzgyn-40270
        end
2149 109 Tomate-202285
 
2150 151 Tomate-202285
        for a = GetAchievementNumCriteria(self.currentAch) + 1, #self.frame.display.criteriaButtons do
2151 2 Syzgyn-40270
                self.frame.display.criteriaButtons[a]:Hide()
2152 Syzgyn-40270
        end
2153 Syzgyn-40270
end
2154 Syzgyn-40270
 
2155 8 Syzgyn-40270
function self:RefreshCategoryButtons()
2156 Syzgyn-40270
        local count = 0
2157 Syzgyn-40270
        local buttonNum = 1
2158 Syzgyn-40270
        for k, v in next, self.categories[self.currentTab] do
2159 Syzgyn-40270
                count = count + 1
2160 Syzgyn-40270
                if buttonNum <= #self.frame.catButtons and count > self.catOffset then
2161 Syzgyn-40270
                        self.frame.catButtons[buttonNum].text:SetText(v.name)
2162 30 Syzgyn-40270
                        self.frame.catButtons[buttonNum].offset:SetWidth(1)
2163 8 Syzgyn-40270
                        self.frame.catButtons[buttonNum]:SetID(v.id)
2164 Syzgyn-40270
                        if v.id == self.currentCat then
2165 Syzgyn-40270
                                self.frame.catButtons[buttonNum]:LockHighlight()
2166 Syzgyn-40270
                        else
2167 Syzgyn-40270
                                self.frame.catButtons[buttonNum]:UnlockHighlight()
2168 Syzgyn-40270
                        end
2169 Syzgyn-40270
                        self.frame.catButtons[buttonNum]:Show()
2170 Syzgyn-40270
                        buttonNum = buttonNum + 1
2171 Syzgyn-40270
                end
2172 109 Tomate-202285
 
2173 8 Syzgyn-40270
                if v.collapsed == false then
2174 Syzgyn-40270
                        for subK, subV in next, v.children do
2175 Syzgyn-40270
                                count = count + 1
2176 Syzgyn-40270
                                if buttonNum <= #self.frame.catButtons and count > self.catOffset then
2177 30 Syzgyn-40270
                                        self.frame.catButtons[buttonNum].text:SetText(subV.name)
2178 Syzgyn-40270
                                        self.frame.catButtons[buttonNum].offset:SetWidth(10)
2179 8 Syzgyn-40270
                                        self.frame.catButtons[buttonNum]:SetID(subV.id)
2180 Syzgyn-40270
                                        if subV.id == self.currentCat then
2181 Syzgyn-40270
                                                self.frame.catButtons[buttonNum]:LockHighlight()
2182 Syzgyn-40270
                                        else
2183 Syzgyn-40270
                                                self.frame.catButtons[buttonNum]:UnlockHighlight()
2184 Syzgyn-40270
                                        end
2185 Syzgyn-40270
                                        self.frame.catButtons[buttonNum]:Show()
2186 Syzgyn-40270
                                        buttonNum = buttonNum + 1
2187 Syzgyn-40270
                                end
2188 Syzgyn-40270
                        end
2189 Syzgyn-40270
                end
2190 Syzgyn-40270
        end
2191 109 Tomate-202285
 
2192 8 Syzgyn-40270
        self.frame.catScroll:SetMinMaxValues(0,math.max(count-#self.frame.catButtons, 0))
2193 Syzgyn-40270
        if count-#self.frame.catButtons > 0 then
2194 Syzgyn-40270
                self.frame.catScroll:Show()
2195 Syzgyn-40270
        else
2196 Syzgyn-40270
                self.frame.catScroll:Hide()
2197 109 Tomate-202285
        end
2198 Tomate-202285
 
2199 8 Syzgyn-40270
        for i = buttonNum, #self.frame.catButtons do
2200 Syzgyn-40270
                self.frame.catButtons[i]:Hide()
2201 Syzgyn-40270
        end
2202 32 Syzgyn-40270
        self:RefreshSummaryBar()
2203 109 Tomate-202285
 
2204 Tomate-202285
        if self.currentTab == "guild" then
2205 Tomate-202285
                self.pointsText:SetTextColor(0,1,0);
2206 113 Tomate-202285
                self.pointsText:SetText(GetTotalAchievementPoints(true));
2207 109 Tomate-202285
        else
2208 Tomate-202285
                self.pointsText:SetTextColor(1,1,1);
2209 Tomate-202285
                self.pointsText:SetText(GetTotalAchievementPoints());
2210 Tomate-202285
        end
2211 135 Tomate-202285
        self:RefreshSummaryBar()
2212 109 Tomate-202285
 
2213 34 Syzgyn-40270
        --Stuff for tab highlights
2214 Syzgyn-40270
        --Not happy with this, but it works till I find some better textures.
2215 Syzgyn-40270
        if self.currentTab == "achievements" then
2216 Syzgyn-40270
                self.frame.tabButtons[1]:LockHighlight()
2217 Syzgyn-40270
                self.frame.tabButtons[2]:UnlockHighlight()
2218 107 Tomate-202285
                self.frame.tabButtons[3]:UnlockHighlight()
2219 34 Syzgyn-40270
        else
2220 107 Tomate-202285
                if self.currentTab == "guild" then
2221 Tomate-202285
                        self.frame.tabButtons[1]:UnlockHighlight()
2222 Tomate-202285
                        self.frame.tabButtons[2]:UnlockHighlight()
2223 Tomate-202285
                        self.frame.tabButtons[3]:LockHighlight()
2224 Tomate-202285
                else
2225 Tomate-202285
                        self.frame.tabButtons[1]:UnlockHighlight()
2226 Tomate-202285
                        self.frame.tabButtons[2]:LockHighlight()
2227 Tomate-202285
                        self.frame.tabButtons[3]:UnlockHighlight()
2228 Tomate-202285
                end
2229 34 Syzgyn-40270
        end
2230 8 Syzgyn-40270
end
2231 Syzgyn-40270
 
2232 20 Syzgyn-40270
function self:RefreshAchievementButtons(sortStr, shownID)
2233 8 Syzgyn-40270
        local count = 0
2234 Syzgyn-40270
        local buttonNum = 1
2235 Syzgyn-40270
        local prevId
2236 Syzgyn-40270
        --sortStr = true        dont change the table, sort it
2237 Syzgyn-40270
        --                      false   dont change the table, dont sort it
2238 Syzgyn-40270
        --                      nil             reset the table, sort it by name then completed
2239 Syzgyn-40270
        if sortStr then
2240 Syzgyn-40270
                preserveSort(self.displayTable, self.sortFuncs[sortStr])
2241 Syzgyn-40270
        elseif sortStr == nil then
2242 Syzgyn-40270
                self.displayTable = {}
2243 Syzgyn-40270
                for _, id in next, (self.seriesList[self.currentCat] or {}) do
2244 43 Syzgyn-40270
                        --If we're searching, or comparing with the opposite faction, or its not in the list, or its the right faction, show
2245 Syzgyn-40270
                        if self.currentCat == -2 or (self.isComparing and self.comparisonFaction ~= playerFaction) or (not UrbanAchiever.factionAchs[tostring(id)]) or UrbanAchiever.factionAchs[tostring(id)] == playerFaction then
2246 Syzgyn-40270
                                tinsert(self.displayTable, id)
2247 Syzgyn-40270
                        end
2248 8 Syzgyn-40270
                end
2249 Syzgyn-40270
                preserveSort(self.displayTable, self.sortFuncs["name a"])
2250 Syzgyn-40270
                preserveSort(self.displayTable, self.sortFuncs["completed d"])
2251 Syzgyn-40270
        end
2252 109 Tomate-202285
 
2253 20 Syzgyn-40270
        --Used to move the achievement scroll to show the ID we want.
2254 Syzgyn-40270
        if shownID then
2255 Syzgyn-40270
                --Make sure we're looking for the top achievement of the series.
2256 Syzgyn-40270
                local nextId = GetNextAchievement(shownID)
2257 Syzgyn-40270
                if nextId then
2258 Syzgyn-40270
                        while nextId do
2259 Syzgyn-40270
                                shownID = nextId
2260 Syzgyn-40270
                                nextId = GetNextAchievement(nextId)
2261 Syzgyn-40270
                        end
2262 Syzgyn-40270
                        if GetPreviousAchievement(shownID) and (not GetNextAchievement(shownID)) then
2263 Syzgyn-40270
                                self.expandList[shownID] = true
2264 Syzgyn-40270
                        end
2265 Syzgyn-40270
                end
2266 Syzgyn-40270
                for count, id in next, self.displayTable do
2267 Syzgyn-40270
                        if id == shownID then
2268 Syzgyn-40270
                                if count > #self.frame.achButtons then
2269 Syzgyn-40270
                                        self.frame.achScroll:SetValue(count - #self.frame.achButtons)
2270 Syzgyn-40270
                                end
2271 Syzgyn-40270
                                break
2272 Syzgyn-40270
                        end
2273 Syzgyn-40270
                end
2274 Syzgyn-40270
        end
2275 109 Tomate-202285
 
2276 8 Syzgyn-40270
        for _, id in next, self.displayTable do
2277 Syzgyn-40270
                count = count + 1
2278 Syzgyn-40270
                if buttonNum <= #self.frame.achButtons and count > self.achOffset then
2279 Syzgyn-40270
                        self:SetAchievementButton(buttonNum, id, 1)
2280 Syzgyn-40270
                        buttonNum = buttonNum + 1
2281 Syzgyn-40270
                end
2282 Syzgyn-40270
                prevId = GetPreviousAchievement(id)
2283 Syzgyn-40270
                if prevId and (not GetNextAchievement(id)) then
2284 Syzgyn-40270
                        if (self.currentCat ~= -2) and (self.expandList[id]) then
2285 Syzgyn-40270
                                while prevId do
2286 Syzgyn-40270
                                        count = count + 1
2287 Syzgyn-40270
                                        if buttonNum <= #self.frame.achButtons and count > self.achOffset then
2288 Syzgyn-40270
                                                self:SetAchievementButton(buttonNum, prevId, 10)
2289 Syzgyn-40270
                                                buttonNum = buttonNum + 1
2290 Syzgyn-40270
                                        end
2291 Syzgyn-40270
                                        prevId = GetPreviousAchievement(prevId)
2292 Syzgyn-40270
                                end
2293 Syzgyn-40270
                        end
2294 Syzgyn-40270
                end
2295 Syzgyn-40270
        end
2296 109 Tomate-202285
 
2297 8 Syzgyn-40270
        --Start summary category stuff.  We assume all the above stuff has done nothing.
2298 Syzgyn-40270
        if self.currentCat == -1 then   --Summary category
2299 109 Tomate-202285
                --Incredibly hackish on my part :\
2300 8 Syzgyn-40270
                self.frame.achButtons[buttonNum]:SetWidth(300)
2301 86 Tomate-202285
                self.frame.achButtons[buttonNum].name:SetText(UARecentAchiev .. ":")
2302 8 Syzgyn-40270
                self.frame.achButtons[buttonNum].completed:SetText("")
2303 Syzgyn-40270
                self.frame.achButtons[buttonNum].compare:SetText("")
2304 Syzgyn-40270
                self.frame.achButtons[buttonNum].points:SetText("")
2305 10 Syzgyn-40270
                self.frame.achButtons[buttonNum].stat:SetText("")
2306 8 Syzgyn-40270
                self.frame.achButtons[buttonNum]:SetID(-1)
2307 Syzgyn-40270
                self.frame.achButtons[buttonNum].expand:Hide()
2308 Syzgyn-40270
                self.frame.achButtons[buttonNum].comparison:Hide()
2309 Syzgyn-40270
                self.frame.achButtons[buttonNum].background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
2310 12 Syzgyn-40270
                self.frame.achButtons[buttonNum].comparison.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
2311 8 Syzgyn-40270
                self.frame.achButtons[buttonNum].offset:SetWidth(1)
2312 10 Syzgyn-40270
                self.frame.achButtons[buttonNum]:UnlockHighlight()
2313 133 Tomate-202285
                self.frame.achButtons[buttonNum].background:SetVertexColor(1, 1, 1)
2314 109 Tomate-202285
                if self.isComparing then
2315 12 Syzgyn-40270
                        self.frame.achButtons[buttonNum]:SetWidth(370)
2316 Syzgyn-40270
                        self.frame.achButtons[buttonNum].comparison:Show()
2317 Syzgyn-40270
                end
2318 8 Syzgyn-40270
                self.frame.achButtons[buttonNum]:Show()
2319 Syzgyn-40270
                buttonNum = buttonNum + 1
2320 109 Tomate-202285
 
2321 8 Syzgyn-40270
                for k,id in next, {GetLatestCompletedAchievements()} do
2322 Syzgyn-40270
                        self:SetAchievementButton(buttonNum, id)
2323 Syzgyn-40270
                        buttonNum = buttonNum + 1
2324 Syzgyn-40270
                end
2325 109 Tomate-202285
 
2326 116 Tomate-202285
                self.frame.achButtons[buttonNum]:Hide()
2327 Tomate-202285
                buttonNum = buttonNum + 1
2328 133 Tomate-202285
 
2329 8 Syzgyn-40270
                self.frame.achButtons[buttonNum]:SetWidth(300)
2330 109 Tomate-202285
                self.frame.achButtons[buttonNum].name:SetText(UARecentGuildAchiev .. ":")
2331 Tomate-202285
                self.frame.achButtons[buttonNum].completed:SetText("")
2332 Tomate-202285
                self.frame.achButtons[buttonNum].compare:SetText("")
2333 Tomate-202285
                self.frame.achButtons[buttonNum].points:SetText("")
2334 Tomate-202285
                self.frame.achButtons[buttonNum].stat:SetText("")
2335 Tomate-202285
                self.frame.achButtons[buttonNum]:SetID(-1)
2336 Tomate-202285
                self.frame.achButtons[buttonNum].expand:Hide()
2337 Tomate-202285
                self.frame.achButtons[buttonNum].comparison:Hide()
2338 Tomate-202285
                self.frame.achButtons[buttonNum].background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
2339 Tomate-202285
                self.frame.achButtons[buttonNum].comparison.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated")
2340 Tomate-202285
                self.frame.achButtons[buttonNum].offset:SetWidth(1)
2341 Tomate-202285
                self.frame.achButtons[buttonNum]:UnlockHighlight()
2342 133 Tomate-202285
                self.frame.achButtons[buttonNum].background:SetVertexColor(1, 1, 1)
2343 109 Tomate-202285
                if self.isComparing then
2344 Tomate-202285
                        self.frame.achButtons[buttonNum]:SetWidth(370)
2345 Tomate-202285
                        self.frame.achButtons[buttonNum].comparison:Show()
2346 Tomate-202285
                end
2347 Tomate-202285
                self.frame.achButtons[buttonNum]:Show()
2348 Tomate-202285
                buttonNum = buttonNum + 1
2349 Tomate-202285
 
2350 Tomate-202285
                for k,id in next, {GetLatestCompletedAchievements(true)} do
2351 Tomate-202285
                        self:SetAchievementButton(buttonNum, id)
2352 Tomate-202285
                        buttonNum = buttonNum + 1
2353 Tomate-202285
                end
2354 Tomate-202285
 
2355 Tomate-202285
                if self.currentTab == "guild" then
2356 Tomate-202285
                        self:HideCategorySum()
2357 Tomate-202285
                        self:ShowCategorySumGuild()
2358 Tomate-202285
                else
2359 Tomate-202285
                        self:HideCategorySumGuild()
2360 Tomate-202285
                        self:ShowCategorySum()
2361 Tomate-202285
                end
2362 Tomate-202285
        else
2363 Tomate-202285
                self:HideCategorySumGuild()
2364 Tomate-202285
                self:HideCategorySum()
2365 Tomate-202285
        end
2366 8 Syzgyn-40270
        --End summary category stuff.
2367 109 Tomate-202285
 
2368 8 Syzgyn-40270
        --Scroll bar Stuff
2369 Syzgyn-40270
        self.frame.achScroll:SetMinMaxValues(0,math.max(count-#self.frame.achButtons, 0))
2370 Syzgyn-40270
        if count-#self.frame.achButtons > 0 then
2371 Syzgyn-40270
                self.frame.achScroll:Show()
2372 Syzgyn-40270
        else
2373 Syzgyn-40270
                self.frame.achScroll:Hide()
2374 Syzgyn-40270
        end
2375 Syzgyn-40270
        for i = buttonNum, #self.frame.achButtons do
2376 Syzgyn-40270
                self.frame.achButtons[i]:Hide()
2377 Syzgyn-40270
                self.frame.achButtons[i].offset:SetWidth(1)
2378 Syzgyn-40270
        end
2379 Syzgyn-40270
end
2380 Syzgyn-40270
 
2381 120 Tomate-202285
function self:GetRealCategoryNumAchievements(id)
2382 Tomate-202285
        local numItems, numCompleted = 0, 0
2383 Tomate-202285
        if self.achieveList[id] ~= nil then
2384 Tomate-202285
                for k,v in pairs(self.achieveList[id]) do
2385 Tomate-202285
                        numItems = numItems+1
2386 Tomate-202285
                        if v then
2387 Tomate-202285
                                numCompleted = numCompleted+1
2388 Tomate-202285
                        end
2389 Tomate-202285
                end
2390 Tomate-202285
        end
2391 Tomate-202285
        return numItems, numCompleted
2392 Tomate-202285
end
2393 Tomate-202285
 
2394 32 Syzgyn-40270
function self:RefreshSummaryBar()
2395 135 Tomate-202285
        self.frame.summaryBar:Hide()
2396 Tomate-202285
        self.frame.summaryBar:SetID(self.currentCat)
2397 Tomate-202285
        self.frame.summaryBar:Show()
2398 109 Tomate-202285
 
2399 135 Tomate-202285
        if self.isComparing then
2400 Tomate-202285
                self.frame.summaryBar:SetWidth(200)
2401 Tomate-202285
                self.frame.comparisonSummaryBar:Hide()
2402 Tomate-202285
                self.frame.comparisonSummaryBar.name:SetText('('..self.comparisonUnitName..')')
2403 Tomate-202285
                self.frame.comparisonSummaryBar:SetID(self.currentCat)
2404 Tomate-202285
                self.frame.comparisonSummaryBar:Show()
2405 32 Syzgyn-40270
        else
2406 135 Tomate-202285
                self.frame.summaryBar:SetWidth(330)
2407 Tomate-202285
                self.frame.comparisonSummaryBar:Hide()
2408 32 Syzgyn-40270
        end
2409 Syzgyn-40270
end
2410 2 Syzgyn-40270
-------------------------------------------------------------
2411 109 Tomate-202285
--Comparison Stuff
2412 2 Syzgyn-40270
-------------------------------------------------------------
2413 Syzgyn-40270
function self:ComparisonUpdate()
2414 Syzgyn-40270
        if self.isComparing and (self.comparisonUnit ~= "") then
2415 Syzgyn-40270
                self.comparison:Show()
2416 Syzgyn-40270
                self.frame.achSort.comparison:Show()
2417 Syzgyn-40270
                self.compPointsText:SetText(GetComparisonAchievementPoints())
2418 Syzgyn-40270
                if UnitExists(self.comparisonUnit) then
2419 86 Tomate-202285
                        self.compHeaderText:SetText(string.format(UAComparing .. " %s", self.comparisonUnitName))
2420 2 Syzgyn-40270
                end
2421 Syzgyn-40270
        else
2422 Syzgyn-40270
                self.comparison:Hide()
2423 Syzgyn-40270
                self.frame.achSort.comparison:Hide()
2424 Syzgyn-40270
                self.comparisonUnit = ""
2425 Syzgyn-40270
        end
2426 36 Syzgyn-40270
        self:RefreshSummaryBar()
2427 2 Syzgyn-40270
end
2428 Syzgyn-40270
 
2429 Syzgyn-40270
function self:SetComparisonUnit(unit)
2430 Syzgyn-40270
        if not UnitExists(unit) then return end
2431 109 Tomate-202285
 
2432 43 Syzgyn-40270
        self.isComparing = true
2433 Syzgyn-40270
        self.comparisonUnit = unit
2434 Syzgyn-40270
        self.comparisonUnitName = UnitName(unit)
2435 Syzgyn-40270
        self.comparisonFaction = UnitFactionGroup(unit) == "Alliance" and 1 or 2
2436 109 Tomate-202285
 
2437 2 Syzgyn-40270
        ClearAchievementComparisonUnit()
2438 Syzgyn-40270
        SetAchievementComparisonUnit(unit)
2439 135 Tomate-202285
end