end |
|
-- ----------------------------- |
-- --------Data Browser |
function self:SetupFrames() --Rabbitbunny |
if self.frame then self.frame:Show() self:out("quitting") return end |
--Start with the frame and backdrop |
self:out("first checkpoint") |
self.frame = CreateFrame("Frame", "FarmFuBrowser", UIParent) |
self.frame:SetBackdrop({ |
--bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", |
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32, |
insets = {left = 11, right = 12, top = 12, bottom = 11} |
}) |
self.frame.backdrop = self.frame:CreateTexture("$parentBG", "BACKGROUND") |
self.frame.backdrop:SetPoint("TOPLEFT", 6, -6) |
self.frame.backdrop:SetPoint("BOTTOMRIGHT", -6, 6) |
self.frame.backdrop:SetTexture(0,0,0,1) |
|
self.frame:SetWidth(632) |
self.frame:SetHeight(535) |
self.frame:SetPoint("CENTER") |
self.frame:SetFrameStrata("DIALOG") |
self.frame:EnableMouse(true) |
self.frame:SetMovable(true) |
|
self.frame:SetScript("OnMouseDown",function() |
if ( arg1 == "LeftButton" ) then |
self.frame:StartMoving() |
end |
end) |
self.frame:SetScript("OnMouseUp",function() |
if ( arg1 == "LeftButton" ) then |
self.frame:StopMovingOrSizing() |
end |
end) |
self.frame:SetScript("OnShow",function() |
self:UpdateFunction() |
end) |
|
--Initialize arrays |
self.frame.textures = {} |
self.frame.fontstrings = {} |
self.frame.catButtons = {} |
self.frame.achButtons = {} |
self.frame.tabButtons = {} |
self.frame.achSort = {} |
|
--Header |
local header = self.frame:CreateTexture("$parentHeader", "ARTWORK") |
header:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") |
header:SetWidth(256) |
header:SetHeight(64) |
header:SetPoint("TOP") |
|
--Points Display Shield |
local shield = self.frame:CreateTexture("$parentPointShield", "ARTWORK") |
shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-TinyShield") |
shield:SetWidth(20) |
shield:SetHeight(20) |
shield:SetPoint("TOP", 76, -14) |
shield:SetTexCoord(0, 0.6, 0, 0.6) |
|
--Iterate through the textures |
--[[for _, t in next, frameElements.textures do |
local texture = self.frame:CreateTexture("$parent"..t.name, t.layer) |
texture:SetTexture(t.path) |
texture:SetWidth(t.width) |
texture:SetHeight(t.height) |
for _,p in next, t.points do |
texture:SetPoint(p.point, self.frame, p.relativePoint, p.xOff, p.yOff) |
end |
if t.texCoord then |
texture:SetTexCoord(t.texCoord.left, t.texCoord.right, t.texCoord.top, t.texCoord.bottom) |
end |
self.frame.textures[t.name] = texture |
end]]-- |
|
--Header Text |
local headerText = self.frame:CreateFontString("$parentHeaderText", "ARTWORK", "GameFontNormal") |
headerText:SetText("Urban Achiever") |
headerText:SetPoint("CENTER", header, 0, 12) |
|
--Points Text |
self.pointsText = self.frame:CreateFontString("$parentPointText", "ARTWORK", "GameFontNormal") |
self.pointsText:SetText("12345") |
self.pointsText:SetPoint("LEFT", shield, "RIGHT", 0, 2) |
|
--Iterate through the fontstrings |
--[[ |
for _, t in next, frameElements.fontstrings do |
local font = self.frame:CreateFontString("$parent"..t.name, t.layer, "GameFontNormal") |
font:SetText(t.text) |
for _,p in next, t.points do |
font:SetPoint(p.point, p.anchor, p.relativePoint, p.xOff, p.yOff) |
end |
self.frame.fontstrings[t.name] = font |
end |
]]-- |
|
--Category Frame |
self.frame.category = CreateFrame("Frame", "$parentCategoryFrame", self.frame) |
self.frame.category:SetWidth(190) |
self.frame.category:SetHeight(470) |
self.frame.category:SetBackdrop({ |
--bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", |
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32, |
insets = {left = 11, right = 12, top = 12, bottom = 11} |
}) |
self.frame.category.backdrop = self.frame.category:CreateTexture("$parentBG", "BACKGROUND") |
self.frame.category.backdrop:SetPoint("TOPLEFT", 6, -6) |
self.frame.category.backdrop:SetPoint("BOTTOMRIGHT", -6, 6) |
self.frame.category.backdrop:SetTexture(0,0,0,1) |
self.frame.category:SetPoint("RIGHT", self.frame, "LEFT", 12, 0) |
|
--Tab Buttons |
self.frame.tabButtons[1] = self:CreateTab("$parentTab1", self.frame, "Achievements", "achievements") |
self.frame.tabButtons[1]:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 20, 6) |
|
self.frame.tabButtons[2] = self:CreateTab("$parentTab1", self.frame, "Statistics", "statistics") |
self.frame.tabButtons[2]:SetPoint("TOPLEFT", self.frame.tabButtons[1], "TOPRIGHT", 5, 0) |
|
--self.frame.tabButtons[3] = self:CreateTab("$parentTab1", self.frame, "Search", "search") |
--self.frame.tabButtons[3]:SetPoint("TOPLEFT", self.frame.tabButtons[2], "TOPRIGHT", 5, 0) |
|
--Category Buttons |
self.frame.catButtons[1] = self:CreateCategoryButton("$parentCatButton1", self.frame.category) |
self.frame.catButtons[1]:SetPoint("TOPLEFT", self.frame.category, 12, -12) |
for i=2, 28 do |
self.frame.catButtons[i] = self:CreateCategoryButton("$parentCatButton"..i, self.frame.category) |
self.frame.catButtons[i]:SetPoint("TOPLEFT", self.frame.catButtons[i-1], "BOTTOMLEFT") |
end |
|
--Achievement Buttons |
self.frame.achButtons[1] = self:CreateAchievementButton("$parentAchButton1", self.frame) |
self.frame.achButtons[1]:SetPoint("TOPLEFT", 12, -90) |
for i=2, 27 do |
self.frame.achButtons[i] = self:CreateAchievementButton("$parentAchButton" .. i, self.frame) |
self.frame.achButtons[i]:SetPoint("TOPLEFT", self.frame.achButtons[i-1], "BOTTOMLEFT") |
end |
|
--Achievement Sort Buttons |
self.frame.achSort.name = self:CreateAchievementSortButton("$parentSortNameButton", 190, self.frame, "Name", "name") |
self.frame.achSort.name:SetPoint("BOTTOMLEFT", self.frame.achButtons[1], "TOPLEFT", 10, 1) |
|
self.frame.achSort.points = self:CreateAchievementSortButton("$parentSortPointsButton", 48, self.frame, "Points", "points") |
self.frame.achSort.points:SetPoint("LEFT", self.frame.achSort.name, "RIGHT", 1, 0) |
|
self.frame.achSort.completed = self:CreateAchievementSortButton("$parentSortCompletedButton", 50, self.frame, "Date", "completed") |
self.frame.achSort.completed:SetPoint("LEFT", self.frame.achSort.points, "RIGHT", 1, 0) |
|
--Close Button |
self.frame.close = CreateFrame("Button", "$parentCloseButton", self.frame, "UIPanelCloseButton") |
self.frame.close:SetPoint("TOPRIGHT", self.frame, "TOPRIGHT", -4, -5) |
|
--Category Toggle Button |
self.frame.catToggle = CreateFrame("Button", "$parentCategoryToggleButton", self.frame) |
self.frame.catToggle:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up") |
self.frame.catToggle:SetPushedTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Down") |
self.frame.catToggle:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Round", "ADD") |
self.frame.catToggle:SetWidth(32) |
self.frame.catToggle:SetHeight(32) |
self.frame.catToggle:SetPoint("BOTTOMLEFT", self.frame.achButtons[1], "TOPLEFT", 5, 21) |
self.frame.catToggle:SetScript("OnClick", function() |
if self.frame.category:IsShown() then |
self.frame.category:Hide() |
else |
self.frame.category:Show() |
end |
end) |
|
--Search Editbox |
self.frame.editbox = self:CreateEditbox(self.frame) |
self.frame.editbox:SetWidth(200) |
self.frame.editbox:SetPoint("TOPLEFT", self.frame.catToggle, "TOPRIGHT", 10, 0) |
|
--Category Scroll Bar |
self.frame.catScroll = CreateFrame("Slider", "$parentCatSlider", self.frame, "UIPanelScrollBarTemplate") |
self.frame.catScroll:SetPoint("TOPLEFT", self.frame.catButtons[2], "TOPRIGHT") |
self.frame.catScroll:SetPoint("BOTTOMLEFT", self.frame.catButtons[#self.frame.catButtons - 1], "BOTTOMRIGHT") |
self.frame.catScroll:SetWidth(16) |
self.frame.catScroll:SetMinMaxValues(0,0) |
self.frame.catScroll:SetValueStep(1) |
self.frame.catScroll:SetScript("OnValueChanged", function() |
self:OnCatScroll() |
end) |
self.frame.catScroll:SetValue(1) |
|
--Achievement Button Scroll Bar |
self.frame.achScroll = CreateFrame("Slider", "$parentAchSlider", self.frame, "UIPanelScrollBarTemplate") |
self.frame.achScroll:SetPoint("TOPLEFT", self.frame.achButtons[2], "TOPRIGHT") |
self.frame.achScroll:SetPoint("BOTTOMLEFT", self.frame.achButtons[#self.frame.achButtons - 1], "BOTTOMRIGHT") |
self.frame.achScroll:SetWidth(16) |
self.frame.achScroll:SetMinMaxValues(0,0) |
self.frame.achScroll:SetValueStep(1) |
self.frame.achScroll:SetScript("OnValueChanged", function() |
self:OnAchScroll() |
end) |
self.frame.achScroll:SetValue(1) |
|
--Achievement Display Frame |
self.frame.display = CreateFrame("Frame", "$parentDisplayFrame", self.frame) |
self.frame.display.backdrop = self.frame.display:CreateTexture("$parentBG", "BACKGROUND") |
self.frame.display.backdrop:SetPoint("TOPLEFT") |
self.frame.display.backdrop:SetPoint("BOTTOMRIGHT") |
--self.frame.display.backdrop:SetTexture(1,0,0,1) |
|
|
self.frame.display:SetWidth(290) |
self.frame.display:SetHeight(448) |
self.frame.display:SetPoint("TOPLEFT", self.frame.achButtons[1], "TOPRIGHT", 19, 0) |
self.frame.display:Hide() |
|
--Display Icon |
self.frame.display.icon = CreateFrame("Button", "$parentIcon", self.frame.display) |
self.frame.display.icon:SetWidth(64) |
self.frame.display.icon:SetHeight(64) |
self.frame.display.icon:SetPoint("TOPLEFT") |
self.frame.display.icon:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Round", "ADD") |
self.frame.display.icon:SetScript("OnClick", function() |
self:InsertIntoChat(self.currentAch) |
end) |
|
--Display Name |
self.frame.display.name = self.frame.display:CreateFontString("$parentName", "ARTWORK", "AchievementPointsFont") |
self.frame.display.name:SetPoint("TOPLEFT", self.frame.display.icon, "TOPRIGHT", 5, 0) |
--self.frame.display.name:SetPoint("TOPRIGHT", -15,-15) |
self.frame.display.name:SetWidth(220) |
self.frame.display.name:SetHeight(70) |
self.frame.display.name:SetJustifyH("CENTER") |
self.frame.display.name:SetJustifyV("TOP") |
|
--Display Shield Icon |
self.frame.display.shield = self.frame.display:CreateTexture("$parentShield", "ARTWORK") |
self.frame.display.shield:SetPoint("TOPLEFT", self.frame.display.icon, "BOTTOMLEFT", 0, -5) |
self.frame.display.shield:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Shields") |
self.frame.display.shield:SetTexCoord(0, .5, 0, 1); |
self.frame.display.shield:SetWidth(64) |
self.frame.display.shield:SetHeight(64) |
|
--Display Points |
self.frame.display.points = self.frame.display:CreateFontString("$parentPoints", "ARTWORK", "AchievementPointsFont") |
self.frame.display.points:SetPoint("CENTER", self.frame.display.shield, "CENTER", -2, 3) |
|
--Display Description |
self.frame.display.desc = self.frame.display:CreateFontString("$parentDescription", "ARTWORK", "GameFontNormal") |
self.frame.display.desc:SetPoint("TOPLEFT", self.frame.display.shield, "TOPRIGHT", 5, 0) |
--self.frame.display.desc:SetPoint("BOTTOMRIGHT", self.frame.display, "TOPRIGHT", -15,-109) |
self.frame.display.desc:SetWidth(220) |
self.frame.display.desc:SetHeight(65) |
|
--Display Reward |
self.frame.display.reward = self.frame.display:CreateFontString("$parentReward", "ARTWORK", "GameFontNormal") |
self.frame.display.reward:SetPoint("TOP", self.frame.display, "TOP", 0, -127) |
self.frame.display.reward:SetTextColor(1,1,1) |
|
self.frame.display.criteriaButtons = {} |
|
--Criteria Buttons |
self.frame.display.criteriaButtons[1] = self:CreateCriteriaButton("$parentCriteriaButton1", self.frame.display) |
self.frame.display.criteriaButtons[1]:SetPoint("TOPLEFT", 0, -145) |
for i=2, 18 do |
self.frame.display.criteriaButtons[i] = self:CreateCriteriaButton("$parentCriteriaButton" .. i, self.frame.display) |
self.frame.display.criteriaButtons[i]:SetPoint("TOPLEFT", self.frame.display.criteriaButtons[i-1], "BOTTOMLEFT") |
end |
|
--Display Scroll Bar |
self.frame.criteriaScroll = CreateFrame("Slider", "$parentSlider", self.frame.display, "UIPanelScrollBarTemplate") |
self.frame.criteriaScroll:SetPoint("TOPLEFT", self.frame.display.criteriaButtons[2], "TOPRIGHT") |
self.frame.criteriaScroll:SetPoint("BOTTOMLEFT", self.frame.display.criteriaButtons[#self.frame.display.criteriaButtons - 1], "BOTTOMRIGHT") |
self.frame.criteriaScroll:SetWidth(16) |
self.frame.criteriaScroll:SetMinMaxValues(0,0) |
self.frame.criteriaScroll:SetValueStep(1) |
self.frame.criteriaScroll:SetScript("OnValueChanged", function() |
self:OnCriteriaScroll() |
end) |
self.frame.criteriaScroll:SetValue(1) |
self.frame.criteriaScroll:Show() |
|
self.frame.display.criteria = self.frame.display:CreateFontString("$parentCriteria", "ARTWORK", "GameFontNormal") |
self.frame.display.criteria:SetPoint("TOPLEFT", 0, -135) |
self.frame.display.criteria:SetJustifyH("LEFT") |
self.frame.display.criteria:SetJustifyV("TOP") |
|
tinsert(UISpecialFrames,self.frame:GetName()) |
self.frame:SetScript("OnShow", function() |
if self.masterList[self.currentAch] then |
self.masterList[self.currentAch].searchString = self:GetSearchString(self.currentAch) |
end |
PlaySound("AchievementMenuOpen"); |
end) |
self.frame:SetScript("OnHide", function() |
PlaySound("AchievementMenuClose"); |
end) |
|
self:RefreshCategoryButtons() |
self:RefreshAchievementButtons() |
self:UpdateFunction() |
|
self.frame:Hide() |
end |
|
function self:CreateCategoryButton(name, parent) --Rabbitbunny |
local button = CreateFrame("Button", name, parent) |
button:EnableMouseWheel(true) |
button:SetWidth(150) |
button:SetHeight(16) |
|
button.text = button:CreateFontString("$parentText", "BORDER", "GameFontNormal") |
button.text:SetPoint("LEFT") |
|
--button:SetNormalTexture("Interface/FriendsFrame/UI-FriendsFrame-HighlightBar") |
button:SetHighlightTexture("Interface/FriendsFrame/UI-FriendsFrame-HighlightBar", "ADD") |
|
button:SetScript("OnClick", function() |
local id = button:GetID() |
self.currentCat = id |
for _,v in next, self.categories[self.currentTab] do |
if v.id == id then |
v.collapsed = not v.collapsed |
break |
end |
end |
self:RefreshCategoryButtons() |
self:RefreshAchievementButtons() |
end) |
button:SetScript("OnMouseWheel", function() |
self:ButtonScroll(arg1, "catScroll", "catOffset") |
--[[--arg1 = 1 for up, -1 for down |
local sMin, sMax = self.frame.catScroll:GetMinMaxValues() |
self.catOffset = math.min(sMax, math.max(sMin, self.catOffset + (arg1 * -1))) |
self.frame.catScroll:SetValue(self.catOffset) |
--self:RefreshCategoryButtons()]]-- |
|
end) |
|
return button |
end |
|
function self:CreateAchievementButton(name, parent) --Rabbitbunny |
local button = CreateFrame("Button", name, parent) |
button:EnableMouseWheel(true) |
button:SetWidth(300) |
button:SetHeight(16) |
|
button.expand = button:CreateFontString("$parentExpand", "BORDER", "GameFontNormal") |
button.expand:SetText("+") |
button.expand:SetWidth(10) |
button.expand:SetHeight(10) |
button.expand:SetPoint("TOPLEFT") |
|
button.offset = CreateFrame("Frame", nil, button) |
button.offset:SetWidth(10) |
button.offset:SetHeight(1) |
button.offset:SetPoint("TOPLEFT", 9, 0) |
|
button.background = button:CreateTexture("$parentBackground", "BACKGROUND") |
button.background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal") |
button.background:SetPoint("TOPLEFT", button.offset, "TOPRIGHT") |
button.background:SetPoint("BOTTOMRIGHT", button) |
--button.background:SetWidth(190) |
--button.background:SetHeight(30) |
|
button.name = button:CreateFontString("$parentNameText","BORDER", "GameFontNormal") |
button.name:SetPoint("TOPLEFT", button.background) |
--button.text:SetPoint("TOPRIGHT", button, "TOPRIGHT") |
button.name:SetWidth(200) |
button.name:SetHeight(16) |
button.name:SetJustifyH("LEFT") |
button.name:SetJustifyV("TOP") |
button.name:SetTextColor(1,1,1) |
|
button.points = button:CreateFontString("$parentPointsText","BORDER", "GameFontNormal") |
button.points:SetPoint("TOPLEFT", button, "TOPLEFT", 217, 0) |
--button.text:SetPoint("TOPRIGHT", button, "TOPRIGHT") |
button.points:SetWidth(20) |
button.points:SetJustifyH("LEFT") |
button.points:SetJustifyV("TOP") |
button.points:SetTextColor(1,1,1) |
|
button.completed = button:CreateFontString("$parentCompletedText","BORDER", "GameFontNormal") |
button.completed:SetPoint("TOPLEFT", button.points, "TOPRIGHT", 3, 0) |
--button.text:SetPoint("TOPRIGHT", button, "TOPRIGHT") |
button.completed:SetWidth(60) |
button.completed:SetJustifyH("LEFT") |
button.completed:SetJustifyV("TOP") |
button.completed:SetTextColor(1,1,1) |
|
|
button:SetHighlightTexture("Interface/FriendsFrame/UI-FriendsFrame-HighlightBar", "ADD") |
|
button:SetScript("OnClick", function() |
local id = button:GetID() |
if GetPreviousAchievement(id) and (not GetNextAchievement(id)) then |
self.expandList[id] = not self.expandList[id] |
self:RefreshAchievementButtons(false) |
end |
self:SetDisplayAchievement(id) |
end) |
button:SetScript("OnMouseWheel", function() |
self:ButtonScroll(arg1, "achScroll", "achOffset") |
--[[--arg1 = 1 for up, -1 for down |
local sMin, sMax = self.frame.achScroll:GetMinMaxValues() |
self.achOffset = math.min(sMax, math.max(sMin, self.achOffset + (arg1 * -1))) |
self.frame.achScroll:SetValue(self.achOffset) |
--self:RefreshAchievementButtons() |
]]-- |
end) |
|
return button |
end |
|
function self:UpdateFunction() |
if (not self.frame) or (not self.frame:IsShown()) then return end |
self:RefreshCategoryButtons() |
self:RefreshAchievementButtons() |
self.pointsText:SetText(GetTotalAchievementPoints()) |
end |
|
-- ----------------------------- |
-- --------Event Hooks |
function FarmFu:PLAYER_LOGOUT() -- Save partial zones, Not sure if it works |
function self:PLAYER_LOGOUT() -- Save partial zones, Not sure if it works |
self:ZoneMoney("PLAYER_LOGOUT") |
end |
|
function FarmFu:ZONE_CHANGED() |
function self:ZONE_CHANGED() |
self:ZoneMoney("ZONE_CHANGED") |
end |
|
function FarmFu:ZONE_CHANGED_NEW_AREA() |
function self:ZONE_CHANGED_NEW_AREA() |
self:ZoneMoney("ZONE_CHANGED_NEW_AREA") |
end |
|
function FarmFu:ZONE_CHANGED_INDOORS() |
function self:ZONE_CHANGED_INDOORS() |
self:ZoneMoney("ZONE_CHANGED_INDOORS") |
end |
|
function self:CHAT_MSG_ADDON() |
self:GetData() |
end |
|
-- ----------------------------- |
-- ------------Resets |
function FarmFu:setDefaults() |
function self:setDefaults() |
self.db.profile.minInZone = 60 |
self.db.profile.showDebug = false |
self.db.profile.showTotalValue = true |