From d49fd014e314ce1b03ca3d1b304da073005cffe0 Mon Sep 17 00:00:00 2001 From: Paul Schifferer Date: Sat, 11 Dec 2010 10:15:00 -0800 Subject: [PATCH] Added items to filter menu and made them work. Tweaks to the layout of skill items. Made the filter status bar work. Major performance improvement in window drawing (Cauldron is much smarter about when it needs to scan the skill list and draw the items). --- CauldronMain.lua | 3 +- CauldronMain.xml | 294 ++--------------------------------- CauldronMainUI.lua | 397 +++++++++++++++++++++++++++++++++++++++++++----- CauldronTradeskill.lua | 11 +- CauldronUtil.lua | 2 +- 5 files changed, 381 insertions(+), 326 deletions(-) diff --git a/CauldronMain.lua b/CauldronMain.lua index 3a3957d..b99141b 100644 --- a/CauldronMain.lua +++ b/CauldronMain.lua @@ -24,6 +24,7 @@ Cauldron.vars = { enabled = true, showQueue = true, inventory = {}, + filterVersion = 300, -- TODO: @project-revision@, }; Cauldron.libs = {}; @@ -601,7 +602,7 @@ function Cauldron:OnAchievementEarned() -- update the achievement skill map Cauldron:CreateAchievementSkillMap(); - Cauldron:UpdateSkillList(); +-- TODO Cauldron:UpdateSkillList(); end diff --git a/CauldronMain.xml b/CauldronMain.xml index d1462be..f55da0f 100755 --- a/CauldronMain.xml +++ b/CauldronMain.xml @@ -116,7 +116,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cauldron:SkillItem_OnEnter(self); - - - Cauldron:SkillItem_OnLeave(self); - - - PlaySound("igMainMenuOptionCheckBoxOn"); - HandleModifiedItemClick(GetTradeSkillRecipeLink(self.skillIndex)); - Cauldron:SkillItem_OnClick(self, button, down); - - - - - - - - diff --git a/CauldronMainUI.lua b/CauldronMainUI.lua index f705669..d103610 100644 --- a/CauldronMainUI.lua +++ b/CauldronMainUI.lua @@ -1,6 +1,11 @@ -- $Revision: 213 $ -- Cauldron main user interface logic +CAULDRON_SKILLITEM_COLLAPSED_HEIGHT = 37; +CAULDRON_SKILLITEM_EXPANDED_HEIGHT = 100; + +CAULDRON_TRADESKILL_NAME = CURRENT_TRADESKILL; + local L = LibStub("AceLocale-3.0"):GetLocale("Cauldron") -- CauldronUI = LibStub("AceAddon-3.0"):NewAddon("CauldronUI", "AceEvent-3.0", "AceConsole-3.0", "LibDebugLog-1.0") @@ -52,36 +57,42 @@ function CauldronFilterDropDown_Initialize(self, level) if level == 1 then - if not IsTradeSkillLinked() then + if not IsTradeSkillLinked() and not IsTradeSkillGuild() then -- favorites - info.text = L["Favorites"]; - info.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites or false; - info.isNotRadio = true; - info.keepShownOnClick = true; + local favorites = UIDropDownMenu_CreateInfo(); + favorites.text = L["Favorites"]; + favorites.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites or false; + favorites.isNotRadio = true; + favorites.keepShownOnClick = true; -- tooltipTitle = L["Favorites"], -- tooltipText = L["Display only favorite skills"], - info.func = function() + favorites.func = function() Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites; + Cauldron:info("updating skill list from favorites filter"); Cauldron:UpdateSkillList(); + Cauldron:UpdateStatus(); end; -- arg1 = "favorite", -- arg2 = "", - UIDropDownMenu_AddButton(info); + UIDropDownMenu_AddButton(favorites, level); -- achievements - info.text = L["Achievements"]; - info.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements or false; - info.isNotRadio = true; - info.keepShownOnClick = true; + local achievements = UIDropDownMenu_CreateInfo(); + achievements.text = L["Achievements"]; + achievements.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements or false; + achievements.isNotRadio = true; + achievements.keepShownOnClick = true; -- tooltipTitle = L["Achievements"], -- tooltipText = L["Display only skills for achievements"], - info.func = function() + achievements.func = function() Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements; + Cauldron:info("updating skill list from achievements filter"); Cauldron:UpdateSkillList(); + Cauldron:UpdateStatus(); end; -- arg1 = "achievement", -- arg2 = "", - UIDropDownMenu_AddButton(info); + UIDropDownMenu_AddButton(achievements, level); end --[==[ @@ -128,6 +139,211 @@ function CauldronFilterDropDown_Initialize(self, level) info.hasArrow = true; info.value = 2; UIDropDownMenu_AddButton(info, level) + + -- spacer + UIDropDownMenu_AddButton({ + text = "", + notClickable = true, + isNotRadio = nil, + notCheckable = true, + }, level); + + -- skill difficulty + + local difficultyTitle = UIDropDownMenu_CreateInfo(); + difficultyTitle.text = L["Difficulty"]; + difficultyTitle.isTitle = true; + difficultyTitle.isNotRadio = nil; + difficultyTitle.notCheckable = true; + difficultyTitle.tooltipTitle = ""; + difficultyTitle.tooltipText = ""; + UIDropDownMenu_AddButton(difficultyTitle, level); + + local difficultyOptimal = UIDropDownMenu_CreateInfo(); + difficultyOptimal.text = L["Optimal"]; +-- textR = 1.0, +-- textG = 1.0, +-- textB = 1.0, + difficultyOptimal.isNotRadio = true; + difficultyOptimal.notCheckable = false; + difficultyOptimal.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.optimal; + difficultyOptimal.keepShownOnClick = false; + difficultyOptimal.tooltipTitle = L["Optimal"]; + difficultyOptimal.tooltipText = L["Set whether items of this difficulty level should be shown"]; + difficultyOptimal.func = function(arg1, arg2) + Cauldron:FilterDropDown_ToggleDifficulty(arg1); + Cauldron:UpdateStatus(); + end; + difficultyOptimal.arg1 = "optimal"; + difficultyOptimal.arg2 = ""; + UIDropDownMenu_AddButton(difficultyOptimal, level); + + local difficultyMedium = UIDropDownMenu_CreateInfo(); + difficultyMedium.text = L["Medium"]; +-- textR = 1.0, +-- textG = 1.0, +-- textB = 1.0, + difficultyMedium.isNotRadio = true; + difficultyMedium.notCheckable = false; + difficultyMedium.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.medium; + difficultyMedium.keepShownOnClick = false; + difficultyMedium.tooltipTitle = L["Medium"]; + difficultyMedium.tooltipText = L["Set whether items of this difficulty level should be shown"]; + difficultyMedium.func = function(arg1, arg2) + Cauldron:FilterDropDown_ToggleDifficulty(arg1); + Cauldron:UpdateStatus(); + end; + difficultyMedium.arg1 = "medium"; + difficultyMedium.arg2 = ""; + UIDropDownMenu_AddButton(difficultyMedium, level); + + local difficultyEasy = UIDropDownMenu_CreateInfo(); + difficultyEasy.text = L["Easy"]; +-- textR = 1.0, +-- textG = 1.0, +-- textB = 1.0, + difficultyEasy.isNotRadio = true; + difficultyEasy.notCheckable = false; + difficultyEasy.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.easy; + difficultyEasy.keepShownOnClick = false; + difficultyEasy.tooltipTitle = L["Easy"]; + difficultyEasy.tooltipText = L["Set whether items of this difficulty level should be shown"]; + difficultyEasy.func = function(arg1, arg2) + Cauldron:FilterDropDown_ToggleDifficulty(arg1); + Cauldron:UpdateStatus(); + end; + difficultyEasy.arg1 = "easy"; + difficultyEasy.arg2 = ""; + UIDropDownMenu_AddButton(difficultyEasy, level); + + local difficultyTrivial = UIDropDownMenu_CreateInfo(); + difficultyTrivial.text = L["Trivial"]; +-- textR = 1.0, +-- textG = 1.0, +-- textB = 1.0, + difficultyTrivial.isNotRadio = true; + difficultyTrivial.notCheckable = false; + difficultyTrivial.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.trivial; + difficultyTrivial.keepShownOnClick = false; + difficultyTrivial.tooltipTitle = L["Trivial"]; + difficultyTrivial.tooltipText = L["Set whether items of this difficulty level should be shown"]; + difficultyTrivial.func = function(arg1, arg2) + Cauldron:FilterDropDown_ToggleDifficulty(arg1); + Cauldron:UpdateStatus(); + end; + difficultyTrivial.arg1 = "trivial"; + difficultyTrivial.arg2 = ""; + UIDropDownMenu_AddButton(difficultyTrivial, level); + + -- spacer + UIDropDownMenu_AddButton({ + text = "", + notClickable = true, + isNotRadio = nil, + notCheckable = true, + }, level); + + -- reagents availability + + local reagentsTitle = UIDropDownMenu_CreateInfo(); + reagentsTitle.text = L["Reagents"]; + reagentsTitle.isTitle = true; + reagentsTitle.isNotRadio = nil; + reagentsTitle.notCheckable = true; + reagentsTitle.tooltipTitle = ""; + reagentsTitle.tooltipText = ""; + UIDropDownMenu_AddButton(reagentsTitle, level); + + -- force check "normal" if the list is linked + if IsTradeSkillLinked() then + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAllReagents = false; + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveKeyReagents = false; + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAnyReagents = false; + end + + local normal = UIDropDownMenu_CreateInfo(); + normal.text = L["Normal"]; + normal.checked = Cauldron:ReagentsFilterNormalCheck(); + normal.tooltipTitle = L["Reagents"]; + normal.tooltipText = L["Display the normal list of skills"]; + normal.func = function(arg1, arg2) + Cauldron:FilterDropDown_SetReagentFilter(arg1) + Cauldron:UpdateStatus(); + end; + normal.arg1 = "normal"; + normal.arg2 = ""; + UIDropDownMenu_AddButton(normal, level); + + if not IsTradeSkillLinked() then + + local haveAllReagents = UIDropDownMenu_CreateInfo(); + haveAllReagents.text = L["Have all"]; + haveAllReagents.isNotRadio = nil; + haveAllReagents.notCheckable = false; + haveAllReagents.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAllReagents; + haveAllReagents.tooltipTitle = L["Reagents"]; + haveAllReagents.tooltipText = L["Set whether skills for which you have all the required reagents are shown in the list"]; + haveAllReagents.func = function(arg1, arg2) + Cauldron:FilterDropDown_SetReagentFilter(arg1); + Cauldron:UpdateStatus(); + end; + haveAllReagents.arg1 = "all"; + haveAllReagents.arg2 = ""; + UIDropDownMenu_AddButton(haveAllReagents, level); + + local haveKeyReagents = UIDropDownMenu_CreateInfo(); + haveKeyReagents.text = L["Have key"]; + haveKeyReagents.isNotRadio = nil; + haveKeyReagents.notCheckable = false; + haveKeyReagents.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveKeyReagents; + haveKeyReagents.tooltipTitle = L["Reagents"]; + haveKeyReagents.tooltipText = L["Set whether skills for which you have all key reagents (non-vendor available) are shown in the list"]; + haveKeyReagents.func = function(arg1, arg2) + Cauldron:FilterDropDown_SetReagentFilter(arg1); + Cauldron:UpdateStatus(); + end; + haveKeyReagents.arg1 = "key"; + haveKeyReagents.arg2 = ""; + UIDropDownMenu_AddButton(haveKeyReagents, level); + + local haveAnyReagents = UIDropDownMenu_CreateInfo(); + haveAnyReagents.text = L["Have any"]; + haveAnyReagents.isNotRadio = nil; + haveAnyReagents.notCheckable = false; + haveAnyReagents.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAnyReagents; + haveAnyReagents.tooltipTitle = L["Reagents"]; + haveAnyReagents.tooltipText = L["Set whether skills for which you have any reagents are shown in the list"]; + haveAnyReagents.func = function(arg1, arg2) + Cauldron:FilterDropDown_SetReagentFilter(arg1); + Cauldron:UpdateStatus(); + end; + haveAnyReagents.arg1 = "any"; + haveAnyReagents.arg2 = ""; + UIDropDownMenu_AddButton(haveAnyReagents, level); + + end + + -- spacer + UIDropDownMenu_AddButton({ + text = "", + notClickable = true, + isNotRadio = nil, + notCheckable = true, + }, level); + + -- reset item + local resetFilters = UIDropDownMenu_CreateInfo(); + resetFilters.text = L["Reset filters"]; + resetFilters.checked = false; + resetFilters.isNotRadio = nil; + resetFilters.notCheckable = true; + resetFilters.tooltipTitle = L["Reset filters"]; + resetFilters.tooltipText = L["Reset all filters on the skills list"]; + resetFilters.func = function(arg1, arg2) + Cauldron:FilterDropDown_Reset(); + Cauldron:UpdateStatus(); + end; + UIDropDownMenu_AddButton(resetFilters, level); elseif level == 2 then if UIDROPDOWNMENU_MENU_VALUE == 1 then @@ -135,7 +351,9 @@ function CauldronFilterDropDown_Initialize(self, level) local subslots = {}; for i,slot in pairs(slots) do info.text = slot; - info.func = function() --[[ TradeSkillSetFilter(0, i, "", slots[i]); --]] end; + info.func = function() + -- TradeSkillSetFilter(0, i, "", slots[i]); + end; info.notCheckable = true; info.hasArrow = false; UIDropDownMenu_AddButton(info, level); @@ -145,7 +363,9 @@ function CauldronFilterDropDown_Initialize(self, level) local subslots = {}; for i,subClass in pairs(subClasses) do info.text = subClass; - info.func = function() --[[ TradeSkillSetFilter(i, 0, subClasses[i], ""); --]] end + info.func = function() + -- TradeSkillSetFilter(i, 0, subClasses[i], ""); + end info.notCheckable = true; subslots = { GetTradeSkillSubClassFilteredSlots(i) }; info.hasArrow = #subslots > 1; @@ -158,7 +378,11 @@ function CauldronFilterDropDown_Initialize(self, level) local subslots = { GetTradeSkillSubClassFilteredSlots(UIDROPDOWNMENU_MENU_VALUE) }; for i,slot in pairs(subslots) do info.text = slot; - info.func = function() --[[ TradeSkillSetFilter(UIDROPDOWNMENU_MENU_VALUE, i, subClasses[UIDROPDOWNMENU_MENU_VALUE], subslots[i]); --]] end + info.func = function() + --[[ + TradeSkillSetFilter(UIDROPDOWNMENU_MENU_VALUE, i, subClasses[UIDROPDOWNMENU_MENU_VALUE], subslots[i]); + --]] + end; info.notCheckable = true; info.value = {UIDROPDOWNMENU_MENU_VALUE, i}; UIDropDownMenu_AddButton(info, level); @@ -244,6 +468,7 @@ self:debug("frame show: "..tostring(CauldronQueueWindowFrame)); -- show main UI ShowUIPanel(CauldronFrame); SetPortraitToTexture(CauldronFramePortrait, GetTradeSkillTexture()); + CauldronInputBox:SetNumber(1); CauldronFrameTitleText:SetText(L["Cauldron"].." "..Cauldron.version); -- show queue UI @@ -252,6 +477,35 @@ self:debug("frame show: "..tostring(CauldronQueueWindowFrame)); SetPortraitToTexture(CauldronQueueWindowFramePortrait, GetTradeSkillTexture()); CauldronQueueWindowFrameTitleText:SetText(L["Queue"]); end + + -- check if the filter structure is out of date + --[[ + if not Cauldron.db.global.version or (tonumber(Cauldron.db.global.version) < tonumber(Cauldron.vars.filterVersion)) then + Cauldron.db.global.version = tonumber(Cauldron.vars.filterVersion); + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter = { + -- sorting + sortDefault = true, + sortAlpha = false, + sortDifficulty = false, + sortBenefit = false, + + -- difficulty + optimal = true, + medium = true, + easy = true, + trivial = true, + + -- favorites + favorites = false, + favoritesAtTop = false, + + -- availability + haveAllReagents = false, + haveKeyReagents = false, + haveAnyReagents = false, + }; + end + --]] self:RegisterMessage("Cauldron_Update", "OnCauldronUpdate"); @@ -322,14 +576,18 @@ function Cauldron:Frame_Update() -- update search text box self:UpdateSearchText(); ---[==[ - -- TODO: update filter information + -- update filter information self:UpdateStatus(); +--[==[ self:UpdateFilterDropDowns(); --]==] -- display list of matching skills - self:UpdateSkillList(); +-- Cauldron:info("updating skill list from frame update"); + if CAULDRON_TRADESKILL_NAME ~= CURRENT_TRADESKILL then + CAULDRON_TRADESKILL_NAME = CURRENT_TRADESKILL; + self:UpdateSkillList(); + end -- display queue self:UpdateQueue(); @@ -389,8 +647,12 @@ end function Cauldron:UpdateStatus() - local filters = {}; + local skillName = CURRENT_TRADESKILL; + if IsTradeSkillLinked() then + skillName = "Linked-"..skillName; + end + local filters = {}; local filterTable = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter; --[[ ["sortAlpha"] = false, -- should the list be sorted alphabetically (mutually-exclusive to "sortDifficulty" and "sortBenefit") @@ -406,40 +668,43 @@ function Cauldron:UpdateStatus() ["favorites"] = false, -- should only favorite skills be shown? --]] if filterTable.haveAllReagents then - table.insert(filters, "All reagents"); + table.insert(filters, L["Have all"]); elseif filterTable.haveKeyReagents then - table.insert(filters, "Key reagents"); + table.insert(filters, L["Have key"]); elseif filterTable.haveAnyReagents then - table.insert(filters, "Any reagents"); + table.insert(filters, L["Have any"]); end local difficulties = {}; - if filterTable.optimal then - table.insert(difficulties, "optimal"); + if not filterTable.optimal then + table.insert(difficulties, "!"..L["Optimal"]); end - if filterTable.medium then - table.insert(difficulties, "medium"); + if not filterTable.medium then + table.insert(difficulties, "!"..L["Medium"]); end - if filterTable.easy then - table.insert(difficulties, "easy"); + if not filterTable.easy then + table.insert(difficulties, "!"..L["Easy"]); end - if filterTable.trivial then - table.insert(difficulties, "trivial"); + if not filterTable.trivial then + table.insert(difficulties, "!"..L["Trivial"]); end if #difficulties > 0 then - table.insert(filters, Cauldron:JoinStrings(difficulties, ",")); + table.insert(filters, L["Difficulty"]..": "..Cauldron:JoinStrings(difficulties, ",")); end if filterTable.favorites then - table.insert(filters, "Favorites"); + table.insert(filters, L["Favorites"]); + end + if filterTable.achievements then + table.insert(filters, L["Achievements"]); end if #filters > 0 then local statusText = Cauldron:JoinStrings(filters, "; "); - CauldronStatusText:SetText(statusText); - CauldronStatusText:Show(); + CauldronStatusText:SetText(L["Filters"]..": "..statusText); + CauldronStatusFrame:Show(); else - CauldronStatusText:Hide(); + CauldronStatusFrame:Hide(); end end @@ -451,6 +716,11 @@ end function Cauldron:UpdateSkillList() + if Cauldron.updatingSkillList then + Cauldron:info("already updating skill list"); + return; + end + local skillName = CURRENT_TRADESKILL; if IsTradeSkillLinked() then skillName = "Linked-"..skillName; @@ -463,10 +733,14 @@ function Cauldron:UpdateSkillList() local height = 0; + Cauldron.updatingSkillList = true; + -- iterate over the list of skills +-- Cauldron:info("iterate over skill list of "..#skillList.." items"); for i, skillInfo in ipairs(skillList) do local skillFrame = _G["CauldronSkillItem"..i]; +-- Cauldron:info("asked for skill item frame "..i.."; frame: "..tostring(skillFrame)); -- check if we have a frame for this position if not skillFrame then @@ -479,7 +753,8 @@ function Cauldron:UpdateSkillList() skillFrame = CreateFrame("Button", "CauldronSkillItem"..i, CauldronSkillListScrollFrameScrollChild, - "CauldronSkillItemNormalCollapsedFrameTemplate"); + "CauldronSkillItemFrameTemplate"); +-- Cauldron:info("created new skill item frame for "..i.."; frame: "..tostring(skillFrame)); end --[[ @@ -498,8 +773,11 @@ function Cauldron:UpdateSkillList() -- hide the category info _G["CauldronSkillItem"..i.."SkillCategory"]:Hide(); else + --]] -- set the height of frame - skillFrame:SetHeight(50); + skillFrame:SetHeight(CAULDRON_SKILLITEM_COLLAPSED_HEIGHT); + -- TODO: set height if expanded + --[[ _G["CauldronSkillItem"..i.."SkillCooldown"]:SetHeight(50); -- rescale the icon frame @@ -723,8 +1001,16 @@ function Cauldron:UpdateSkillList() -- special skill-ups frame = _G["CauldronSkillItem"..i.."MiscInfoNumSkillUpsIcon"]; + Cauldron:info("skill ups icon frame: "..tostring(frame)); if frame then - -- TODO + if IsTradeSkillGuild() or (skillInfo.difficulty ~= "optimal") or (not skillInfo.numSkillUps or (skillInfo.numSkillUps < 1)) then + frame:Hide(); + _G["CauldronSkillItem"..i.."MiscInfoNumSkillUps"]:Hide(); + else + frame:Show(); + _G["CauldronSkillItem"..i.."MiscInfoNumSkillUps"]:Show(); + _G["CauldronSkillItem"..i.."MiscInfoNumSkillUps"]:SetText(skillInfo.numSkillUps); + end end -- achievement indicator @@ -757,9 +1043,12 @@ function Cauldron:UpdateSkillList() -- hide any remaining frames local j = #skillList + 1; +-- Cauldron:info("looking to hide remaining skill item frames: starting at "..j); while true do local frame = _G["CauldronSkillItem"..j]; +-- Cauldron:info("hiding skill item frame "..j.."; frame: "..tostring(frame)); if not frame then +-- Cauldron:info("no frames left"); break; end @@ -769,6 +1058,8 @@ function Cauldron:UpdateSkillList() j = j + 1; end + Cauldron.updatingSkillList = false; + end function Cauldron:UpdateButtons() @@ -947,7 +1238,11 @@ function Cauldron:FilterDropDown_Initialize(level) checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].options.compactView, tooltipTitle = L["Compact"], tooltipText = L["Display a compacted view of the skill list"], - func = function(arg1, arg2) Cauldron.db.realm.userdata[Cauldron.vars.playername].options.compactView = not Cauldron.db.realm.userdata[Cauldron.vars.playername].options.compactView; Cauldron:UpdateSkillList(); end, + func = function(arg1, arg2) + Cauldron.db.realm.userdata[Cauldron.vars.playername].options.compactView = not Cauldron.db.realm.userdata[Cauldron.vars.playername].options.compactView; + Cauldron:info("updating skill list from compact view filter (old)"); + Cauldron:UpdateSkillList(); + end, arg1 = "compact", arg2 = "", }; @@ -960,7 +1255,11 @@ function Cauldron:FilterDropDown_Initialize(level) checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites, tooltipTitle = L["Favorites"], tooltipText = L["Display only favorite skills"], - func = function(arg1, arg2) Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites; Cauldron:UpdateSkillList(); end, + func = function(arg1, arg2) + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites; + Cauldron:info("updating skill list from favorites filter (old)"); + Cauldron:UpdateSkillList(); + end, arg1 = "favorite", arg2 = "", }; @@ -972,7 +1271,11 @@ function Cauldron:FilterDropDown_Initialize(level) checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements, tooltipTitle = L["Achievements"], tooltipText = L["Display only skills for achievements"], - func = function(arg1, arg2) Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements; Cauldron:UpdateSkillList(); end, + func = function(arg1, arg2) + Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements; + Cauldron:info("updating skill list from achievements filter (old)"); + Cauldron:UpdateSkillList(); + end, arg1 = "achievement", arg2 = "", }; @@ -1254,6 +1557,7 @@ function Cauldron:FilterDropDown_Reset() Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAnyReagents = false; -- update the UI + Cauldron:info("updating skill list from filter dropdown reset"); Cauldron:UpdateSkillList(); end @@ -1326,6 +1630,7 @@ function Cauldron:FilterDropDown_SetSort(info) end -- update the UI + Cauldron:info("updating skill list from sort change"); Cauldron:UpdateSkillList(); end @@ -1376,6 +1681,7 @@ function Cauldron:FilterDropDown_SetReagentFilter(info) end -- update the UI + Cauldron:info("updating skill list from reagent filter change"); Cauldron:UpdateSkillList(); end @@ -1390,6 +1696,7 @@ function Cauldron:FilterDropDown_ToggleDifficulty(info) Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter[info.arg1] = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[CURRENT_TRADESKILL].window.filter[info.arg1]; -- update the UI + Cauldron:info("updating skill list from difficulty filter change"); Cauldron:UpdateSkillList(); end @@ -1507,6 +1814,7 @@ function Cauldron:InvSlotDropDown_SetSlot(info) -- end end + Cauldron:info("updating skill list from slot filter change"); Cauldron:UpdateSkillList(); Cauldron:debug("InvSlotDropDown_SetSlot exit"); @@ -1622,6 +1930,7 @@ function Cauldron:CategoryDropDown_SetCategory(info) end -- update the UI + Cauldron:info("updating skill list from category filter change"); Cauldron:UpdateSkillList(); end @@ -1663,6 +1972,7 @@ function Cauldron:CollapseAllButton_OnClick(button) -- Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.selected = 0; -- update the UI + Cauldron:info("updating skill list from collapse all button click"); Cauldron:UpdateSkillList(); end @@ -1680,6 +1990,7 @@ function Cauldron:CollapseItemButton_OnClick(button) Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.selected = skillInfo.index; -- update the UI + Cauldron:info("updating skill list from collapse item button click"); Cauldron:UpdateSkillList(); end @@ -1717,6 +2028,7 @@ function Cauldron:SkillItem_OnClick(frame, button, down) end -- update the UI + Cauldron:info("updating skill list from skill item selection"); Cauldron:UpdateSkillList(); Cauldron:UpdateButtons(); @@ -1744,6 +2056,7 @@ function Cauldron:TradeSkillFilter_OnTextChanged(frame) Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.search = text; -- update the UI + Cauldron:info("updating skill list from tradeskill filter text change"); Cauldron:UpdateSkillList(); end diff --git a/CauldronTradeskill.lua b/CauldronTradeskill.lua index a73beec..0569b25 100644 --- a/CauldronTradeskill.lua +++ b/CauldronTradeskill.lua @@ -76,6 +76,7 @@ function Cauldron:UpdateSkills() if not Cauldron.scanningSkills then Cauldron.scanningSkills = true; + Cauldron:Print("Scanning recipes..."); if IsTradeSkillLinked() then skillName = "Linked-"..skillName; @@ -150,10 +151,11 @@ function Cauldron:UpdateSkills() --]] local category = ""; + local rescanCount = 0; for i=1,GetNumTradeSkills() do -- self:info("i="..tostring(i)); - local name, difficulty, avail, expanded, verb = GetTradeSkillInfo(i); + local name, difficulty, avail, expanded, verb, numSkillUps = GetTradeSkillInfo(i); -- self:debug("UpdateSkills: name="..name.."; difficulty="..difficulty.."; avail="..avail); if name and difficulty ~= "header" then @@ -178,6 +180,7 @@ function Cauldron:UpdateSkills() skillDB.recipes[name].available = avail; skillDB.recipes[name].minMade = minMade; skillDB.recipes[name].maxMade = maxMade; + skillDB.recipes[name].numSkillUps = numSkillUps; -- update reagent skill index for _,r in ipairs(skillDB.recipes[name].reagents) do @@ -211,6 +214,7 @@ function Cauldron:UpdateSkills() ['available'] = avail, ['minMade'] = minMade, ['maxMade'] = maxMade, + ['numSkillUps'] = numSkillUps, -- filter information ['slot'] = slot, @@ -268,6 +272,7 @@ function Cauldron:UpdateSkills() if not rescan then -- Cauldron:error("Failed to retrieve reagent info; marking recipe for rescan: "..name); Cauldron:MarkRecipeForRescan(skillDB, name); + rescanCount = rescanCount + 1; end --[[ @@ -326,6 +331,10 @@ function Cauldron:UpdateSkills() end Cauldron.scanningSkills = false; + + if rescanCount > 0 then + Cauldron:Print(rescanCount.." recipes marked for rescan."); + end end --[[ diff --git a/CauldronUtil.lua b/CauldronUtil.lua index d953fc0..b1cfe0b 100644 --- a/CauldronUtil.lua +++ b/CauldronUtil.lua @@ -334,7 +334,7 @@ function Cauldron:JoinStrings(strings, sep) local joinedStr = ""; for i,str in ipairs(strings) do - if i > 0 then + if i > 1 then joinedStr = joinedStr..sep; end -- 1.7.9.5