From ac302cdf98f6cf55cf29451f6e124d98c5d6d3f4 Mon Sep 17 00:00:00 2001 From: torhal Date: Sat, 21 Nov 2009 04:20:35 +0000 Subject: [PATCH] Moved DisplayStrings to MainPanel.scroll_frame.entries, and changed expandEntry() to MainPanel.scroll_frame:ExpandEntry() --- ARLFrame.lua | 674 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 336 insertions(+), 338 deletions(-) diff --git a/ARLFrame.lua b/ARLFrame.lua index 069662d..a636b8b 100644 --- a/ARLFrame.lua +++ b/ARLFrame.lua @@ -76,7 +76,6 @@ local QTip = LibStub("LibQTip-1.0") local Player = addon.Player local MainPanel = CreateFrame("Frame", "AckisRecipeList.Frame", UIParent) -MainPanel.scroll_frame = CreateFrame("ScrollFrame", "ARL_MainPanelScrollFrame", MainPanel, "FauxScrollFrameTemplate") ------------------------------------------------------------------------------- -- Constants @@ -103,7 +102,6 @@ local SEASONAL_CATEGORY = GetCategoryInfo(155) -- Localized string - "World Even -- Variables ------------------------------------------------------------------------------- local FilterValueMap -- Assigned in addon:InitializeFrame() -local DisplayStrings = {} ------------------------------------------------------------------------------- -- TODO: This should not be a "local global", as it encourages thoughtless @@ -672,270 +670,6 @@ do end end -- do block -------------------------------------------------------------------------------- --- DisplayString methods. -------------------------------------------------------------------------------- -local expandEntry -do - local faction_strings -- This is populated in expandEntry() - - local function CheckDisplayFaction(faction) - if addon.db.profile.filters.general.faction then - return true - end - return (not faction or faction == BFAC[Player["Faction"]] or faction == factionNeutral) - end - - function expandEntry(string_index) - local obtainDB = addon.db.profile.filters.obtain - local recipe_index = DisplayStrings[string_index].recipe_id - local pad = " " - - -- string_index is the position in DisplayStrings that we want - -- to expand. Since we are expanding the current entry, the return - -- value should be the index of the next button after the expansion - -- occurs - string_index = string_index + 1 - - -- Need to loop through the available acquires and put them all in - for k, v in pairs(recipeDB[recipe_index]["Acquire"]) do - -- Initialize the first line here, since every type below will have one. - local acquire_type = v["Type"] - local t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - - if acquire_type == A_TRAINER and obtainDB.trainer then - local trainer = addon.trainer_list[v["ID"]] - - if CheckDisplayFaction(trainer["Faction"]) then - local nStr = "" - - if trainer["Faction"] == factionHorde then - nStr = addon:Horde(trainer["Name"]) - elseif (trainer["Faction"] == factionAlliance) then - nStr = addon:Alliance(trainer["Name"]) - else - nStr = addon:Neutral(trainer["Name"]) - end - t.text = pad .. addon:Trainer(L["Trainer"] .. " : ") .. nStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - local cStr = "" - - if (trainer["Coordx"] ~= 0) and (trainer["Coordy"] ~= 0) then - cStr = addon:Coords("(" .. trainer["Coordx"] .. ", " .. trainer["Coordy"] .. ")") - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. trainer["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - end - -- Right now PVP obtained items are located on vendors so they have the vendor and pvp flag. - -- We need to display the vendor in the drop down if we want to see vendors or if we want to see PVP - -- This allows us to select PVP only and to see just the PVP recipes - elseif acquire_type == A_VENDOR and (obtainDB.vendor or obtainDB.pvp) then - local vendor = addon.vendor_list[v["ID"]] - - if CheckDisplayFaction(vendor["Faction"]) then - local nStr = "" - - if (vendor["Faction"] == factionHorde) then - nStr = addon:Horde(vendor["Name"]) - elseif (vendor["Faction"] == factionAlliance) then - nStr = addon:Alliance(vendor["Name"]) - else - nStr = addon:Neutral(vendor["Name"]) - end - t.text = pad .. addon:Vendor(L["Vendor"] .. " : ") .. nStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - local cStr = "" - - if (vendor["Coordx"] ~= 0) and (vendor["Coordy"] ~= 0) then - cStr = addon:Coords("(" .. vendor["Coordx"] .. ", " .. vendor["Coordy"] .. ")") - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. vendor["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - end - -- Mobs can be in instances, raids, or specific mob related drops. - elseif acquire_type == A_MOB and (obtainDB.mobdrop or obtainDB.instance or obtainDB.raid) then - local mob = addon.mob_list[v["ID"]] - t.text = pad .. addon:MobDrop(L["Mob Drop"] .. " : ") .. addon:Red(mob["Name"]) - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - local cStr = "" - - if (mob["Coordx"] ~= 0) and (mob["Coordy"] ~= 0) then - cStr = addon:Coords("(" .. mob["Coordx"] .. ", " .. mob["Coordy"] .. ")") - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. mob["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - elseif acquire_type == A_QUEST and obtainDB.quest then - local quest = addon.quest_list[v["ID"]] - - if CheckDisplayFaction(quest["Faction"]) then - local nStr = "" - - if (quest["Faction"] == factionHorde) then - nStr = addon:Horde(quest["Name"]) - elseif (quest["Faction"] == factionAlliance) then - nStr = addon:Alliance(quest["Name"]) - else - nStr = addon:Neutral(quest["Name"]) - end - t.text = pad .. addon:Quest(L["Quest"] .. " : ") .. nStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - local cStr = "" - - if (quest["Coordx"] ~= 0) and (quest["Coordy"] ~= 0) then - cStr = addon:Coords("(" .. quest["Coordx"] .. ", " .. quest["Coordy"] .. ")") - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. quest["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - end - elseif acquire_type == A_SEASONAL and obtainDB.seasonal then - t.text = pad .. addon:Season(SEASONAL_CATEGORY .. " : " .. addon.seasonal_list[v["ID"]]["Name"]) - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - elseif acquire_type == A_REPUTATION then -- Need to check if we're displaying the currently id'd rep or not as well - -- Reputation Obtain - -- Rep: ID, Faction - -- RepLevel = 0 (Neutral), 1 (Friendly), 2 (Honored), 3 (Revered), 4 (Exalted) - -- RepVendor - VendorID - local rep_vendor = addon.vendor_list[v["RepVendor"]] - - if CheckDisplayFaction(rep_vendor["Faction"]) then - t.text = pad .. addon:Rep(L["Reputation"] .. " : ") .. addon.reputation_list[v["ID"]]["Name"] - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - if not faction_strings then - faction_strings = { - [0] = addon:Neutral(factionNeutral .. " : "), - [1] = addon:Friendly(BFAC["Friendly"] .. " : "), - [2] = addon:Honored(BFAC["Honored"] .. " : "), - [3] = addon:Revered(BFAC["Revered"] .. " : "), - [4] = addon:Exalted(BFAC["Exalted"] .. " : ") - } - end - local nStr = "" - - if rep_vendor["Faction"] == factionHorde then - nStr = addon:Horde(rep_vendor["Name"]) - elseif rep_vendor["Faction"] == factionAlliance then - nStr = addon:Alliance(rep_vendor["Name"]) - else - nStr = addon:Neutral(rep_vendor["Name"]) - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - - t.text = pad .. pad .. faction_strings[v["RepLevel"]] .. nStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - local cStr = "" - - if rep_vendor["Coordx"] ~= 0 and rep_vendor["Coordy"] ~= 0 then - cStr = addon:Coords("(" .. rep_vendor["Coordx"] .. ", " .. rep_vendor["Coordy"] .. ")") - end - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. pad .. rep_vendor["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - end - elseif acquire_type == A_WORLD_DROP and obtainDB.worlddrop then - t.text = pad .. addon:RarityColor(v["ID"] + 1, L["World Drop"]) - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - elseif acquire_type == A_CUSTOM then - t.text = pad .. addon:Normal(addon.custom_list[v["ID"]]["Name"]) - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - elseif acquire_type == A_PVP and obtainDB.pvp then - local vendor = addon.vendor_list[v["ID"]] - - if CheckDisplayFaction(vendor["Faction"]) then - local cStr = "" - - if vendor["Coordx"] ~= 0 and vendor["Coordy"] ~= 0 then - cStr = addon:Coords("(" .. vendor["Coordx"] .. ", " .. vendor["Coordy"] .. ")") - end - local nStr = "" - - if vendor["Faction"] == factionHorde then - nStr = addon:Horde(vendor["Name"]) - elseif vendor["Faction"] == factionAlliance then - nStr = addon:Alliance(vendor["Name"]) - else - nStr = addon:Neutral(vendor["Name"]) - end - t.text = pad .. addon:Vendor(L["Vendor"] .. " : ") .. nStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - - t = AcquireTable() - t.IsRecipe = false - t.recipe_id = recipe_index - t.IsExpanded = true - t.text = pad .. pad .. vendor["Location"] .. " " .. cStr - - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - end - --@alpha@ - elseif acquire_type > A_MAX then -- We have an acquire type we aren't sure how to deal with. - t.text = "Unhandled Acquire Case - Type: " .. acquire_type - tinsert(DisplayStrings, string_index, t) - string_index = string_index + 1 - --@end-alpha@ - end - end - return string_index - end -end -- do - -- Description: Converting from hex to rgb (Thanks Maldivia) local function toRGB(hex) local r, g, b = hex:match("(..)(..)(..)") @@ -943,7 +677,6 @@ local function toRGB(hex) return (tonumber(r, 16) / 256), (tonumber(g,16) / 256), (tonumber(b, 16) / 256) end - -- Font Objects needed for arlTooltip local narrowFontObj = CreateFont(MODNAME.."narrowFontObj") local normalFontObj = CreateFont(MODNAME.."normalFontObj") @@ -2834,10 +2567,8 @@ function addon:InitializeFrame() -- The main recipe list buttons and scrollframe ------------------------------------------------------------------------------- do - local scroll_frame = MainPanel.scroll_frame - - scroll_frame.state_buttons = {} - scroll_frame.recipe_buttons = {} + MainPanel.scroll_frame.state_buttons = {} + MainPanel.scroll_frame.recipe_buttons = {} local function RecipeItem_OnClick(self, button) local clickedIndex = self.string_index @@ -2846,7 +2577,7 @@ function addon:InitializeFrame() if not clickedIndex or clickedIndex == 0 then return end - local clicked_line = DisplayStrings[clickedIndex] + local clicked_line = MainPanel.scroll_frame.entries[clickedIndex] local traverseIndex = 0 -- First, check if this is a "modified" click, and react appropriately @@ -2854,7 +2585,7 @@ function addon:InitializeFrame() if IsControlKeyDown() and IsShiftKeyDown() then addon:SetupMap(clicked_line.recipe_id) elseif IsShiftKeyDown() then - local itemID = recipeDB[clicked_line.recipe_id]["ItemID"] + local itemID = addon.recipe_list[clicked_line.recipe_id]["ItemID"] if itemID then local _, itemLink = GetItemInfo(itemID) @@ -2868,13 +2599,13 @@ function addon:InitializeFrame() addon:Print(L["NoItemLink"]) end elseif IsControlKeyDown() then - ChatFrameEditBox:Insert(recipeDB[clicked_line.recipe_id]["RecipeLink"]) + ChatFrameEditBox:Insert(addon.recipe_list[clicked_line.recipe_id]["RecipeLink"]) elseif IsAltKeyDown() then -- Code needed here to insert this item into the "Ignore List" addon:ToggleExcludeRecipe(clicked_line.recipe_id) ReDisplay() end - elseif clicked_line.IsRecipe then + elseif clicked_line.is_header then -- three possibilities here (all with no modifiers) -- 1) We clicked on the recipe button on a closed recipe -- 2) We clicked on the recipe button of an open recipe @@ -2883,67 +2614,69 @@ function addon:InitializeFrame() traverseIndex = clickedIndex + 1 -- get rid of our expanded lines - while (DisplayStrings[traverseIndex] and DisplayStrings[traverseIndex].IsRecipe == false) do - ReleaseTable(tremove(DisplayStrings, traverseIndex)) - -- if this is the last entry in the whole list, we should break out - if not DisplayStrings[traverseIndex] then + while (MainPanel.scroll_frame.entries[traverseIndex] and not MainPanel.scroll_frame.entries[traverseIndex].is_header) do + ReleaseTable(tremove(MainPanel.scroll_frame.entries, traverseIndex)) + + if not MainPanel.scroll_frame.entries[traverseIndex] then break end end clicked_line.IsExpanded = false else - expandEntry(clickedIndex) + MainPanel.scroll_frame:ExpandEntry(clickedIndex) clicked_line.IsExpanded = true end else -- this inherently implies that we're on an expanded recipe -- first, back up in the list of buttons until we find our recipe line + local entries = MainPanel.scroll_frame.entries + traverseIndex = clickedIndex - 1 - while (DisplayStrings[traverseIndex] and DisplayStrings[traverseIndex].IsRecipe == false) do + while (entries[traverseIndex] and not entries[traverseIndex].is_header) do traverseIndex = traverseIndex - 1 end - DisplayStrings[traverseIndex].IsExpanded = false -- unexpand it + entries[traverseIndex].IsExpanded = false -- unexpand it traverseIndex = traverseIndex + 1 -- now remove the expanded lines until we get to a recipe again - while (DisplayStrings[traverseIndex] and DisplayStrings[traverseIndex].IsRecipe == false) do - ReleaseTable(tremove(DisplayStrings, traverseIndex)) + while (entries[traverseIndex] and not entries[traverseIndex].is_header) do + ReleaseTable(tremove(entries, traverseIndex)) -- if this is the last entry in the whole list, we should break out - if not DisplayStrings[traverseIndex] then + if not entries[traverseIndex] then break end end end - MainPanel.scroll_frame:Update(false) + MainPanel.scroll_frame:Update(false, true) end for i = 1, NUM_RECIPE_LINES do - local temp_state = GenericCreateButton("ARL_StateButton" .. i, scroll_frame, + local temp_state = GenericCreateButton("ARL_StateButton" .. i, MainPanel.scroll_frame, 16, 16, "TOPLEFT", MainPanel, "TOPLEFT", 20, -100, "GameFontNormalSmall", "GameFontHighlightSmall", "", "LEFT", "", 2) - local temp_recipe = GenericCreateButton("ARL_RecipeButton" .. i, scroll_frame, + local temp_recipe = GenericCreateButton("ARL_RecipeButton" .. i, MainPanel.scroll_frame, 16, 224, "TOPLEFT", MainPanel, "TOPLEFT", 37, -100, "GameFontNormalSmall", "GameFontHighlightSmall", "Blort", "LEFT", "", 0) if i ~= 1 then - temp_state:SetPoint("TOPLEFT", scroll_frame.state_buttons[i - 1], "BOTTOMLEFT", 0, 3) - temp_recipe:SetPoint("TOPLEFT", scroll_frame.recipe_buttons[i - 1], "BOTTOMLEFT", 0, 3) + temp_state:SetPoint("TOPLEFT", MainPanel.scroll_frame.state_buttons[i - 1], "BOTTOMLEFT", 0, 3) + temp_recipe:SetPoint("TOPLEFT", MainPanel.scroll_frame.recipe_buttons[i - 1], "BOTTOMLEFT", 0, 3) end temp_state:SetScript("OnClick", RecipeItem_OnClick) temp_recipe:SetScript("OnClick", RecipeItem_OnClick) - scroll_frame.state_buttons[i] = temp_state - scroll_frame.recipe_buttons[i] = temp_recipe + MainPanel.scroll_frame.state_buttons[i] = temp_state + MainPanel.scroll_frame.recipe_buttons[i] = temp_recipe end - scroll_frame:SetHeight(322) - scroll_frame:SetWidth(243) - scroll_frame:SetPoint("TOPLEFT", MainPanel, "TOPLEFT", 20, -97) - scroll_frame:SetScript("OnVerticalScroll", - function(self, arg1) - FauxScrollFrame_OnVerticalScroll(self, arg1, 16, self.Update) - end) + MainPanel.scroll_frame:SetHeight(322) + MainPanel.scroll_frame:SetWidth(243) + MainPanel.scroll_frame:SetPoint("TOPLEFT", MainPanel, "TOPLEFT", 20, -97) + MainPanel.scroll_frame:SetScript("OnVerticalScroll", + function(self, arg1) + FauxScrollFrame_OnVerticalScroll(self, arg1, 16, self.Update) + end) end -- do ------------------------------------------------------------------------------- @@ -4295,8 +4028,15 @@ function MainPanel:ResetTitle() self.HeadingText:SetText(addon:Normal(new_title)) end --- Scrollframe update stuff +------------------------------------------------------------------------------- +-- MainPanel.scrollframe methods and data +------------------------------------------------------------------------------- do + MainPanel.scroll_frame = CreateFrame("ScrollFrame", "ARL_MainPanelScrollFrame", MainPanel, "FauxScrollFrameTemplate") + MainPanel.scroll_frame.entries = {} + + local ScrollFrame = MainPanel.scroll_frame + local highlight = CreateFrame("Frame", nil, UIParent) highlight:SetFrameStrata("TOOLTIP") highlight:Hide() @@ -4307,7 +4047,7 @@ do highlight._texture:SetAllPoints(highlight) local function Button_OnEnter(self) - GenerateTooltipContent(self, DisplayStrings[self.string_index].recipe_id) + GenerateTooltipContent(self, ScrollFrame.entries[self.string_index].recipe_id) end local function Button_OnLeave() @@ -4319,7 +4059,7 @@ do highlight:SetParent(self) highlight:SetAllPoints(self) highlight:Show() - GenerateTooltipContent(self, DisplayStrings[self.string_index].recipe_id) + GenerateTooltipContent(self, ScrollFrame.entries[self.string_index].recipe_id) end local function Bar_OnLeave() @@ -4330,7 +4070,7 @@ do arlSpellTooltip:Hide() end - function MainPanel.scroll_frame:Update(expand_acquires) + function ScrollFrame:Update(expand_acquires, refresh) local sorted_recipes = addon.sorted_recipes local recipe_list = addon.recipe_list local exclusions = addon.db.profile.exclusionlist @@ -4338,42 +4078,43 @@ do local skill_sort = (sort_type == "SkillAsc" or sort_type == "SkillDesc") local insert_index = 1 - for i = 1, #DisplayStrings do - ReleaseTable(DisplayStrings[i]) - end - twipe(DisplayStrings) - - -- Initialize the DisplayStrings - for i = 1, #sorted_recipes do - local recipe_index = sorted_recipes[i] - local recipe_entry = recipe_list[recipe_index] + if not refresh then + for i = 1, #self.entries do + ReleaseTable(self.entries[i]) + end + twipe(self.entries) - if recipe_entry["Display"] and recipe_entry["Search"] then - local recipe_string = recipe_entry["Name"] + for i = 1, #sorted_recipes do + local recipe_index = sorted_recipes[i] + local recipe_entry = recipe_list[recipe_index] - if exclusions[recipe_index] then - recipe_string = "** " .. recipe_string .. " **" - end - local recipe_level = recipe_entry["Level"] + if recipe_entry["Display"] and recipe_entry["Search"] then + local recipe_string = recipe_entry["Name"] - recipe_string = skill_sort and ("[" .. recipe_level .. "] - " .. recipe_string) or (recipe_string .. " - [" .. recipe_level .. "]") + if exclusions[recipe_index] then + recipe_string = "** " .. recipe_string .. " **" + end + local recipe_level = recipe_entry["Level"] - local t = AcquireTable() - t.text = ColourSkillLevel(recipe_entry, Player:HasProperRepLevel(recipe_index), recipe_string) + recipe_string = skill_sort and ("[" .. recipe_level .. "] - " .. recipe_string) or (recipe_string .. " - [" .. recipe_level .. "]") - t.recipe_id = recipe_index - t.IsRecipe = true + local t = AcquireTable() + t.text = ColourSkillLevel(recipe_entry, Player:HasProperRepLevel(recipe_index), recipe_string) - if expand_acquires and recipe_entry["Acquire"] then - -- we have acquire information for this. push the title entry into the strings - -- and start processing the acquires - t.IsExpanded = true - tinsert(DisplayStrings, insert_index, t) - insert_index = expandEntry(insert_index) - else - t.IsExpanded = false - tinsert(DisplayStrings, insert_index, t) - insert_index = insert_index + 1 + t.recipe_id = recipe_index + t.is_header = true + + if expand_acquires and recipe_entry["Acquire"] then + -- we have acquire information for this. push the title entry into the strings + -- and start processing the acquires + t.IsExpanded = true + tinsert(self.entries, insert_index, t) + insert_index = self:ExpandEntry(insert_index) + else + t.IsExpanded = false + tinsert(self.entries, insert_index, t) + insert_index = insert_index + 1 + end end end end @@ -4393,7 +4134,7 @@ do state:SetScript("OnEnter", nil) state:SetScript("OnLeave", nil) end - local num_entries = #DisplayStrings + local num_entries = #self.entries FauxScrollFrame_Update(self, num_entries, NUM_RECIPE_LINES, 16) addon:ClosePopups() @@ -4409,12 +4150,12 @@ do while stayInLoop do local cur_state = self.state_buttons[button_index] - local cur_string = DisplayStrings[string_index] + local cur_entry = self.entries[string_index] - if cur_string.IsRecipe then + if cur_entry.is_header then cur_state:Show() - if cur_string.IsExpanded then + if cur_entry.IsExpanded then cur_state:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up") cur_state:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down") cur_state:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") @@ -4434,7 +4175,7 @@ do local cur_recipe = self.recipe_buttons[button_index] cur_recipe.string_index = string_index - cur_recipe:SetText(cur_string.text) + cur_recipe:SetText(cur_entry.text) cur_recipe:SetScript("OnEnter", Bar_OnEnter) cur_recipe:SetScript("OnLeave", Bar_OnLeave) @@ -4500,6 +4241,263 @@ do end end end + local faction_strings + + local function CheckDisplayFaction(faction) + if addon.db.profile.filters.general.faction then + return true + end + return (not faction or faction == BFAC[Player["Faction"]] or faction == factionNeutral) + end + + function ScrollFrame:ExpandEntry(entry_index) + local obtain_filters = addon.db.profile.filters.obtain + local recipe_id = self.entries[entry_index].recipe_id + local pad = " " + + -- entry_index is the position in self.entries that we want + -- to expand. Since we are expanding the current entry, the return + -- value should be the index of the next button after the expansion + -- occurs + entry_index = entry_index + 1 + + -- Need to loop through the available acquires and put them all in + for k, v in pairs(addon.recipe_list[recipe_id]["Acquire"]) do + -- Initialize the first line here, since every type below will have one. + local acquire_type = v["Type"] + local t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + + if acquire_type == A_TRAINER and obtain_filters.trainer then + local trainer = addon.trainer_list[v["ID"]] + + if CheckDisplayFaction(trainer["Faction"]) then + local nStr = "" + + if trainer["Faction"] == factionHorde then + nStr = addon:Horde(trainer["Name"]) + elseif (trainer["Faction"] == factionAlliance) then + nStr = addon:Alliance(trainer["Name"]) + else + nStr = addon:Neutral(trainer["Name"]) + end + t.text = pad .. addon:Trainer(L["Trainer"] .. " : ") .. nStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + local cStr = "" + + if (trainer["Coordx"] ~= 0) and (trainer["Coordy"] ~= 0) then + cStr = addon:Coords("(" .. trainer["Coordx"] .. ", " .. trainer["Coordy"] .. ")") + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. trainer["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + end + -- Right now PVP obtained items are located on vendors so they have the vendor and pvp flag. + -- We need to display the vendor in the drop down if we want to see vendors or if we want to see PVP + -- This allows us to select PVP only and to see just the PVP recipes + elseif acquire_type == A_VENDOR and (obtain_filters.vendor or obtain_filters.pvp) then + local vendor = addon.vendor_list[v["ID"]] + + if CheckDisplayFaction(vendor["Faction"]) then + local nStr = "" + + if (vendor["Faction"] == factionHorde) then + nStr = addon:Horde(vendor["Name"]) + elseif (vendor["Faction"] == factionAlliance) then + nStr = addon:Alliance(vendor["Name"]) + else + nStr = addon:Neutral(vendor["Name"]) + end + t.text = pad .. addon:Vendor(L["Vendor"] .. " : ") .. nStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + local cStr = "" + + if (vendor["Coordx"] ~= 0) and (vendor["Coordy"] ~= 0) then + cStr = addon:Coords("(" .. vendor["Coordx"] .. ", " .. vendor["Coordy"] .. ")") + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. vendor["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + end + -- Mobs can be in instances, raids, or specific mob related drops. + elseif acquire_type == A_MOB and (obtain_filters.mobdrop or obtain_filters.instance or obtain_filters.raid) then + local mob = addon.mob_list[v["ID"]] + t.text = pad .. addon:MobDrop(L["Mob Drop"] .. " : ") .. addon:Red(mob["Name"]) + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + local cStr = "" + + if (mob["Coordx"] ~= 0) and (mob["Coordy"] ~= 0) then + cStr = addon:Coords("(" .. mob["Coordx"] .. ", " .. mob["Coordy"] .. ")") + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. mob["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + elseif acquire_type == A_QUEST and obtain_filters.quest then + local quest = addon.quest_list[v["ID"]] + + if CheckDisplayFaction(quest["Faction"]) then + local nStr = "" + + if (quest["Faction"] == factionHorde) then + nStr = addon:Horde(quest["Name"]) + elseif (quest["Faction"] == factionAlliance) then + nStr = addon:Alliance(quest["Name"]) + else + nStr = addon:Neutral(quest["Name"]) + end + t.text = pad .. addon:Quest(L["Quest"] .. " : ") .. nStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + local cStr = "" + + if (quest["Coordx"] ~= 0) and (quest["Coordy"] ~= 0) then + cStr = addon:Coords("(" .. quest["Coordx"] .. ", " .. quest["Coordy"] .. ")") + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. quest["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + end + elseif acquire_type == A_SEASONAL and obtain_filters.seasonal then + t.text = pad .. addon:Season(SEASONAL_CATEGORY .. " : " .. addon.seasonal_list[v["ID"]]["Name"]) + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + elseif acquire_type == A_REPUTATION then -- Need to check if we're displaying the currently id'd rep or not as well + -- Reputation Obtain + -- Rep: ID, Faction + -- RepLevel = 0 (Neutral), 1 (Friendly), 2 (Honored), 3 (Revered), 4 (Exalted) + -- RepVendor - VendorID + local rep_vendor = addon.vendor_list[v["RepVendor"]] + + if CheckDisplayFaction(rep_vendor["Faction"]) then + t.text = pad .. addon:Rep(L["Reputation"] .. " : ") .. addon.reputation_list[v["ID"]]["Name"] + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + if not faction_strings then + faction_strings = { + [0] = addon:Neutral(factionNeutral .. " : "), + [1] = addon:Friendly(BFAC["Friendly"] .. " : "), + [2] = addon:Honored(BFAC["Honored"] .. " : "), + [3] = addon:Revered(BFAC["Revered"] .. " : "), + [4] = addon:Exalted(BFAC["Exalted"] .. " : ") + } + end + local nStr = "" + + if rep_vendor["Faction"] == factionHorde then + nStr = addon:Horde(rep_vendor["Name"]) + elseif rep_vendor["Faction"] == factionAlliance then + nStr = addon:Alliance(rep_vendor["Name"]) + else + nStr = addon:Neutral(rep_vendor["Name"]) + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + + t.text = pad .. pad .. faction_strings[v["RepLevel"]] .. nStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + local cStr = "" + + if rep_vendor["Coordx"] ~= 0 and rep_vendor["Coordy"] ~= 0 then + cStr = addon:Coords("(" .. rep_vendor["Coordx"] .. ", " .. rep_vendor["Coordy"] .. ")") + end + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. pad .. rep_vendor["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + end + elseif acquire_type == A_WORLD_DROP and obtain_filters.worlddrop then + t.text = pad .. addon:RarityColor(v["ID"] + 1, L["World Drop"]) + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + elseif acquire_type == A_CUSTOM then + t.text = pad .. addon:Normal(addon.custom_list[v["ID"]]["Name"]) + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + elseif acquire_type == A_PVP and obtain_filters.pvp then + local vendor = addon.vendor_list[v["ID"]] + + if CheckDisplayFaction(vendor["Faction"]) then + local cStr = "" + + if vendor["Coordx"] ~= 0 and vendor["Coordy"] ~= 0 then + cStr = addon:Coords("(" .. vendor["Coordx"] .. ", " .. vendor["Coordy"] .. ")") + end + local nStr = "" + + if vendor["Faction"] == factionHorde then + nStr = addon:Horde(vendor["Name"]) + elseif vendor["Faction"] == factionAlliance then + nStr = addon:Alliance(vendor["Name"]) + else + nStr = addon:Neutral(vendor["Name"]) + end + t.text = pad .. addon:Vendor(L["Vendor"] .. " : ") .. nStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + + t = AcquireTable() + t.is_header = false + t.recipe_id = recipe_id + t.IsExpanded = true + t.text = pad .. pad .. vendor["Location"] .. " " .. cStr + + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + end + --@alpha@ + elseif acquire_type > A_MAX then + t.text = "Unhandled Acquire Case - Type: " .. acquire_type + tinsert(self.entries, entry_index, t) + entry_index = entry_index + 1 + --@end-alpha@ + end + end + return entry_index + end end -- do ------------------------------------------------------------------------------- -- 1.7.9.5