-- $Revision: 213 $
-- Cauldron main user interface logic
CAULDRON_SKILLITEM_COLLAPSED_HEIGHT = 37;
CAULDRON_SKILLITEM_EXPANDED_HEIGHT = 100;
CAULDRON_SKILL_LIST_MAX = 50;
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")
local SLOT_NONE = "none";
function Cauldron:Frame_Show()
if Cauldron.vars.enabled and not(IsShiftKeyDown() and IsControlKeyDown()) then
-- show main UI
ShowUIPanel(CauldronFrame);
SetPortraitToTexture(CauldronFramePortrait, GetTradeSkillTexture());
CauldronInputBox:SetNumber(1);
CauldronFrameTitleText:SetText(L["Cauldron"] --[[.." "..Cauldron.version--]]);
-- show queue UI
if Cauldron.vars.showQueue and not(IsTradeSkillLinked() or IsTradeSkillGuild()) then
ShowUIPanel(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");
Cauldron.needsRedraw = true;
self:Frame_Update();
self:RegisterEvent("TRADE_SKILL_UPDATE", "OnSkillUpdate");
self:RegisterEvent("SKILL_LINES_CHANGED", "OnSkillUpdate");
self:RegisterEvent("UNIT_PORTRAIT_UPDATE", "OnEvent");
self:RegisterEvent("BAG_UPDATE", "OnBagUpdate");
else
-- show the Blizzard frame
Cauldron.blizzTradeSkillShow();
end
end
function Cauldron:Frame_Hide()
-- self:UnregisterEvent("Cauldron_Update");
HideUIPanel(CauldronQueueWindowFrame);
HideUIPanel(CauldronFrame);
--[[
if TradeSkillFrame then
TradeSkillFrame:SetAlpha(1.0);
TradeSkillFrame:SetFrameStrata(Cauldron.vars.origFrameStrata or "MEDIUM");
TradeSkillFrame:SetFrameLevel(Cauldron.vars.origFrameLevel or 5);
end
--]]
-- CloseTradeSkill();
self:UnregisterEvent("TRADE_SKILL_UPDATE");
self:UnregisterEvent("SKILL_LINES_CHANGED");
self:UnregisterEvent("UNIT_PORTRAIT_UPDATE");
self:UnregisterEvent("BAG_UPDATE");
end
function Cauldron:Frame_Toggle()
if CauldronQueueWindowFrame:IsVisible() then
Cauldron:Frame_Hide();
else
Cauldron:Frame_Show();
end
end
function CauldronFrame_Update()
Cauldron.needsRedraw = true;
Cauldron:Frame_Update();
end
function Cauldron:Frame_Update()
local numTradeSkills = GetNumTradeSkills();
local name, rank, maxRank = GetTradeSkillLine();
if name == "UNKNOWN" then
return;
end
-- Cauldron:UpdateSkills();
if CURRENT_TRADESKILL ~= name then
StopTradeSkillRepeat();
CURRENT_TRADESKILL = name;
end
-- display skill name, level/progress
self:UpdateSkillInfo(name, rank, maxRank);
-- update search text box
self:UpdateSearchText();
-- update filter information
self:UpdateStatus();
-- display list of matching skills
-- if CAULDRON_TRADESKILL_NAME ~= CURRENT_TRADESKILL then
-- CAULDRON_TRADESKILL_NAME = CURRENT_TRADESKILL;
self:UpdateSkillList();
-- end
-- display queue
self:UpdateQueue();
-- update buttons
self:UpdateButtons();
-- update page info
self:UpdatePageInfo();
end
function Cauldron:UpdateSkillInfo(skillName, rank, maxRank)
if IsTradeSkillGuild() then
CauldronRankFrame:Hide();
CauldronLinkFrame:Hide();
else
CauldronRankFrame:Show();
CauldronLinkFrame:Show();
end
local skillCount = Cauldron:GetSkillCount(skillName);
CauldronSkillNameText:SetText(skillName);
local prof_title = "";
if IsTradeSkillGuild() then
prof_title = L["Guild"];
else
for i=1,#PROFESSION_RANKS do
local value,title = PROFESSION_RANKS[i][1], PROFESSION_RANKS[i][2];
if maxRank < value then break end
prof_title = title;
end
end
local linked, linkedName = IsTradeSkillLinked();
if linked then
linkedName = "["..linkedName.."] ";
else
linkedName = "";
end
CauldronRankInfoText:SetText(linkedName..prof_title..", "..skillCount.." "..L["skills"]);
CauldronRankFrame:SetStatusBarColor(0.0, 0.0, 1.0, 0.5);
CauldronRankFrameBackground:SetVertexColor(0.0, 0.0, 0.75, 0.5);
CauldronRankFrame:SetMinMaxValues(0, maxRank);
CauldronRankFrame:SetValue(rank);
CauldronRankFrameText:SetText(rank.."/"..maxRank);
end
function Cauldron:UpdateSearchText()
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
if (not skillName or skillName == "UNKNOWN") or
(not self.vars.playername) or
(not self.db.realm.userdata[self.vars.playername]) or
(not self.db.realm.userdata[self.vars.playername].skills[skillName]) then
return;
end
local searchText = self.db.realm.userdata[self.vars.playername].skills[skillName].window.search or "";
if searchText == "" then
searchText = SEARCH;
end
CauldronSearchBox:SetText(searchText);
end
function Cauldron:UpdateStatus()
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local filters = {};
local filterTable = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter;
if filterTable.haveAllReagents then
table.insert(filters, L["Have all"]);
elseif filterTable.haveKeyReagents then
table.insert(filters, L["Have key"]);
elseif filterTable.haveAnyReagents then
table.insert(filters, L["Have any"]);
end
local difficulties = {};
if not filterTable.optimal then
table.insert(difficulties, "!"..L["Optimal"]);
end
if not filterTable.medium then
table.insert(difficulties, "!"..L["Medium"]);
end
if not filterTable.easy then
table.insert(difficulties, "!"..L["Easy"]);
end
if not filterTable.trivial then
table.insert(difficulties, "!"..L["Trivial"]);
end
if #difficulties > 0 then
table.insert(filters, L["Difficulty"]..": "..Cauldron:JoinStrings(difficulties, ","));
end
if filterTable.favorites then
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(L["Filters"]..": "..statusText);
CauldronStatusFrame:Show();
else
CauldronStatusFrame:Hide();
end
end
function Cauldron:UpdateFilterDropDowns()
-- TODO
end
function Cauldron:UpdateSkillList()
if Cauldron.updatingSkillList then
return;
end
skillName = Cauldron:GetTradeSkillName(skillName);
if not skillName then
return;
end
local skillList = Cauldron:GetSkillList(self.vars.playername, skillName);
if not skillList then
return;
end
local height = 0;
Cauldron.updatingSkillList = true;
local startTime = GetTime();
local offset = self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset or 0;
local lastFrameIndex = 0;
-- iterate over the list of skills
-- for i, skillInfo in ipairs(skillList) do
for i=1,CAULDRON_SKILL_LIST_MAX do
local skillInfo = skillList[i + offset];
if not skillInfo then
break;
end
if not self.db.realm.userdata[self.vars.playername].skills[skillName].window.skills[skillInfo.name] then
self.db.realm.userdata[self.vars.playername].skills[skillName].window.skills[skillInfo.name] = {
favorite = false,
expanded = false,
};
end
local skillFrame = _G["CauldronSkillItem"..i];
-- check if we have a frame for this position
if not skillFrame then
-- create a new frame for the skill information
if self.db.realm.userdata[self.vars.playername].options.compactView then
-- TODO
else
-- TODO
end
skillFrame = CreateFrame("Button",
"CauldronSkillItem"..i,
CauldronSkillListScrollFrameScrollChild,
"CauldronSkillItemFrameTemplate");
end
-- set the height of frame
skillFrame:SetHeight(CAULDRON_SKILLITEM_COLLAPSED_HEIGHT);
skillFrame:SetID(i);
skillFrame.skillIndex = skillInfo.index;
-- set selection
if self.db.realm.userdata[self.vars.playername].skills[skillName].window.selected == skillInfo.index then
_G["CauldronSkillItem"..i.."Selection"]:Show();
else
_G["CauldronSkillItem"..i.."Selection"]:Hide();
end
-- populate the frame
local frame = nil;
-- set name and difficulty color
frame = _G["CauldronSkillItem"..i.."SkillName"];
if frame then
local nameText = skillInfo.name;
local skillNamePrefix = "";
if ( ENABLE_COLORBLIND_MODE == "1" ) then
skillNamePrefix = TradeSkillTypePrefix[skillType].." " or "";
end
frame:SetText(skillNamePrefix..nameText);
if TradeSkillTypeColor then
local color = TradeSkillTypeColor[skillInfo.difficulty];
if color then
frame:SetFontObject(color.font);
frame.r = color.r;
frame.g = color.g;
frame.b = color.b;
end
end
end
-- set category
frame = _G["CauldronSkillItem"..i.."SkillCategory"];
if frame then
frame:SetText(skillInfo.defaultCategory);
if TradeSkillTypeColor then
frame:SetFontObject(TradeSkillTypeColor.header.font);
frame.r = TradeSkillTypeColor.header.r;
frame.g = TradeSkillTypeColor.header.g;
frame.b = TradeSkillTypeColor.header.b;
end
end
-- set favorite check button
frame = _G["CauldronSkillItem"..i.."FavoriteButton"];
if frame then
frame:SetChecked(self.db.realm.userdata[self.vars.playername].skills[skillName].window.skills[skillInfo.name].favorite);
frame.skillInfo = skillInfo;
-- set cooldown
--[[
frame = _G["CauldronSkillItem"..i.."SkillCooldown"];
local cooldown = GetTradeSkillCooldown(skillInfo.index);
if cooldown then
if not frame:IsVisible() then
frame:Show();
end
frame:SetText(SecondsToTime(cooldown));
else
if frame:IsVisible() then
frame:Hide();
end
end
--]]
end
-- set the icon
frame = _G["CauldronSkillItem"..i.."SkillIcon"];
if frame then
frame:SetNormalTexture(skillInfo.icon);
frame.itemLink = skillInfo.link;
frame.skillIndex = skillInfo.index;
end
-- set the craft count
frame = _G["CauldronSkillItem"..i.."SkillIconCount"];
if frame then
local minMade, maxMade = skillInfo.minMade, skillInfo.maxMade;
if maxMade > 1 then
if minMade == maxMade then
frame:SetText(minMade);
else
frame:SetText(minMade.."-"..maxMade);
end
if frame:GetWidth() > 39 then
frame:SetText("~"..floor((minMade + maxMade)/2));
end
else
frame:SetText("");
end
end
-- set the disclosure button texture
frame = _G["CauldronSkillItem"..i.."DiscloseButton"];
if frame then
frame.skillInfo = skillInfo;
local reagentsExpanded = self.db.realm.userdata[self.vars.playername].skills[skillName].window.skills[skillInfo.name].expanded;
if reagentsExpanded then
frame:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
else
frame:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
end
-- _G["CauldronSkillItem"..i.."Reagents"]:Show();
-- fill in the tools info
--[[
local spellFocus = BuildColoredListString(GetTradeSkillTools(skillInfo.index));
local toolsFrame = _G["CauldronSkillItem"..i.."ReagentsToolsInfo"];
if spellFocus then
toolsFrame:Show();
toolsFrame:SetText(L["Requires"]..": "..spellFocus);
toolsFrame:SetHeight(15);
else
toolsFrame:Hide();
toolsFrame:SetText("");
toolsFrame:SetHeight(0);
end
--]]
-- fill in the reagents
-- _G["CauldronSkillItem"..i.."Reagents"]:SetScale(0.86);
-- learn reagents
Cauldron:LearnSkillReagents(skillInfo);
-- get reagents table
local reagents = skillInfo.reagents;
local reagentCount = #reagents;
local smallReagentsFrame = _G["CauldronSkillItem"..i.."Reagents"];
local reagentDetailsFrame = _G["CauldronSkillItem"..i.."ItemDetails"];
if reagentsExpanded then
reagentDetailsFrame:Show();
smallReagentsFrame:Hide();
local reqsLabelFrame = _G["CauldronSkillItem"..i.."ItemDetailsRequirementLabel"];
local reqsFrame = _G["CauldronSkillItem"..i.."ItemDetailsRequirementText"];
local spellFocus = BuildColoredListString(GetTradeSkillTools(skillInfo.index));
if ( spellFocus ) then
reqsLabelFrame:Show();
reqsFrame:SetText(spellFocus);
else
reqsLabelFrame:Hide();
reqsFrame:SetText("");
end
local cdFrame = _G["CauldronSkillItem"..i.."ItemDetailsSkillCooldown"];
local cooldown = GetTradeSkillCooldown(skillInfo.index);
if cooldown then
cdFrame:SetText(COOLDOWN_REMAINING.." "..SecondsToTime(cooldown));
else
cdFrame:SetText("");
end
local descFrame = _G["CauldronSkillItem"..i.."ItemDetailsDescription"];
-- local reagentLabel = _G["CauldronSkillItem"..i.."ItemDetailsReagentLabel"];
local desc = GetTradeSkillDescription(skillInfo.index);
if desc then
descFrame:SetText(desc);
-- reagentLabel:SetPoint("TOPLEFT", "CauldronSkillItem"..i.."ItemDetailsDescription", "BOTTOMLEFT", 0, -10);
else
descFrame:SetText(" ");
-- reagentLabel:SetPoint("TOPLEFT", "CauldronSkillItem"..i.."ItemDetailsDescription", "TOPLEFT", 0, 0);
end
else
reagentDetailsFrame:Hide();
smallReagentsFrame:Show();
end
for j=1,8 do
local reagentFrame = _G["CauldronSkillItem"..i.."ReagentsItemDetail"..j];
local reagentDetailFrame = _G["CauldronSkillItem"..i.."ItemDetailsReagent"..j];
if reagentFrame or reagentDetailFrame then
if j > reagentCount then
reagentFrame:Hide();
reagentDetailFrame:Hide();
else
local reagentInfo = reagents[j];
reagentFrame.skillIndex = skillInfo.index;
reagentFrame.reagentIndex = reagentInfo.index;
reagentFrame.link = reagentInfo.link;
reagentDetailFrame.skillIndex = skillInfo.index;
reagentDetailFrame.reagentIndex = reagentInfo.index;
reagentDetailFrame.link = reagentInfo.link;
local reagentNameFrame = _G["CauldronSkillItem"..i.."ReagentsItemDetail"..j.."Name"];
local reagentDetailsNameFrame = _G["CauldronSkillItem"..i.."ItemDetailsReagent"..j.."Name"];
local reagentIconFrame = _G["CauldronSkillItem"..i.."ReagentsItemDetail"..j.."IconTexture"];
local reagentDetailsIconFrame = _G["CauldronSkillItem"..i.."ItemDetailsReagent"..j.."IconTexture"];
local reagentCountFrame = _G["CauldronSkillItem"..i.."ReagentsItemDetail"..j.."Count"];
local reagentDetailsCountFrame = _G["CauldronSkillItem"..i.."ItemDetailsReagent"..j.."Count"];
-- PARANOIA: check if the reagent name, icon, or link are missing
if not reagentInfo.name or not reagentInfo.icon or not reagentInfo.link then
-- Cauldron:error("Reagent info missing; marking recipe for rescan: "..skillInfo.name);
Cauldron:MarkRecipeForRescan(self.db.realm.userdata[self.vars.playername].skills[skillName], skillInfo.name);
end
reagentFrame:Show();
reagentDetailFrame:Show();
SetItemButtonTexture(reagentFrame, reagentInfo.icon);
SetItemButtonTexture(reagentDetailFrame, reagentInfo.icon);
if reagentNameFrame then
reagentNameFrame:SetText(reagentInfo.name);
end
if reagentDetailsNameFrame then
reagentDetailsNameFrame:SetText(reagentInfo.name);
end
local playerReagentCount = GetItemCount(reagentInfo.name);
if playerReagentCount < reagentInfo.numRequired then
-- Gray out items
SetItemButtonTextureVertexColor(reagentFrame, 0.5, 0.5, 0.5);
SetItemButtonTextureVertexColor(reagentDetailFrame, 0.5, 0.5, 0.5);
if reagentNameFrame then
reagentNameFrame:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end
if reagentDetailsNameFrame then
reagentDetailsNameFrame:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end
else
SetItemButtonTextureVertexColor(reagentFrame, 1.0, 1.0, 1.0);
SetItemButtonTextureVertexColor(reagentDetailFrame, 1.0, 1.0, 1.0);
if reagentNameFrame then
reagentNameFrame:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
end
if reagentDetailsNameFrame then
reagentDetailsNameFrame:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
end
end
if playerReagentCount >= 100 then
playerReagentCount = "*";
end
if reagentCountFrame then
reagentCountFrame:SetText(playerReagentCount.."/"..reagentInfo.numRequired);
end
if reagentDetailsCountFrame then
reagentDetailsCountFrame:SetText(playerReagentCount.."/"..reagentInfo.numRequired);
end
end
end
end
-- only adjust height for expanded views
if reagentsExpanded then
local reagentRows = math.floor((reagentCount - 1) / 4);
local reqHeight = _G["CauldronSkillItem"..i.."ItemDetailsRequirementText"]:GetHeight();
local cooldownHeight = _G["CauldronSkillItem"..i.."ItemDetailsSkillCooldown"]:GetHeight();
local descHeight = _G["CauldronSkillItem"..i.."ItemDetailsDescription"]:GetHeight();
local detail1Frame = _G["CauldronSkillItem"..i.."ItemDetailsReagent1"];
local detailHeight = detail1Frame:GetHeight();
detail1Frame:SetPoint("TOPLEFT", _G["CauldronSkillItem"..i.."ItemDetailsDescription"], "BOTTOMLEFT", 0, -5);
reagentDetailsFrame:SetHeight(40 + (reqHeight + cooldownHeight + descHeight) + (detailHeight * reagentRows));
skillFrame:SetHeight(reagentDetailsFrame:GetHeight() + CAULDRON_SKILLITEM_COLLAPSED_HEIGHT + 2);
else
skillFrame:SetHeight(CAULDRON_SKILLITEM_COLLAPSED_HEIGHT);
end
--[[
_G["CauldronSkillItem"..i.."Reagents"]:SetHeight(toolsFrame:GetHeight() + (reagentRows * _G["CauldronSkillItem"..i.."ItemDetailsReagent1"]:GetHeight()));
_G["CauldronSkillItem"..i]:SetHeight(_G["CauldronSkillItem"..i.."SkillIcon"]:GetHeight() + _G["CauldronSkillItem"..i.."Reagents"]:GetHeight());
--]]
--[[
else
_G["CauldronSkillItem"..i.."Reagents"]:Hide();
frame:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
_G["CauldronSkillItem"..i]:SetHeight(_G["CauldronSkillItem"..i.."SkillIcon"]:GetHeight());
end
--]]
end
-- craft count
frame = _G["CauldronSkillItem"..i.."MiscInfoCount"];
if frame then
local potentialCount = Cauldron:GetPotentialCraftCount(skillInfo);
local text = "";
if (potentialCount > 0) and (potentialCount > skillInfo.available) then
text = skillInfo.available.."/"..potentialCount;
elseif skillInfo.available > 0 then
text = skillInfo.available;
end
frame:SetText(text);
end
-- special skill-ups
frame = _G["CauldronSkillItem"..i.."MiscInfoNumSkillUpsIcon"];
-- Cauldron:info("skill ups icon frame: "..tostring(frame));
if frame then
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
frame = _G["CauldronSkillItem"..i.."MiscInfoAchievement"];
if frame then
local achievements = Cauldron:GetAchievementsForSkill(skillInfo);
local text = "";
if achievements and #achievements > 0 then
text = "A";
end
frame:SetText(text);
end
-- place the frame in the scroll view
if i > 1 then
-- anchor to the frame above
skillFrame:SetPoint("TOPLEFT", _G["CauldronSkillItem"..(i-1)], "BOTTOMLEFT", 0, -2);
else
-- anchor to the parent
skillFrame:SetPoint("TOPLEFT", 0, 0);
end
-- adjust the scroll child size
height = height + skillFrame:GetHeight();
CauldronSkillListScrollFrameScrollChild:SetHeight(height);
-- show the frame
skillFrame:Show();
lastFrameIndex = i;
end
-- hide any remaining frames
-- local j = lastFrameIndex + 1;
for j=lastFrameIndex+1,CAULDRON_SKILL_LIST_MAX do
local frame = _G["CauldronSkillItem"..j];
if not frame then
break;
end
frame:Hide();
frame:SetHeight(0);
-- j = j + 1;
end
local endTime = GetTime();
if Cauldron.vars.displayTimers then
Cauldron:info("draw skill list: "..tostring(endTime-startTime).."ms");
end
Cauldron.updatingSkillList = false;
end
function Cauldron:UpdateButtons()
if IsTradeSkillLinked() or IsTradeSkillGuild() then
CauldronQueueAllButton:Hide();
CauldronQueueButton:Hide();
CauldronDecrementButton:Hide();
CauldronInputBox:Hide();
CauldronIncrementButton:Hide();
CauldronCreateAllButton:Hide();
CauldronCreateButton:Hide();
-- CauldronProcessButton:Disable();
-- CauldronClearQueueButton:();
CauldronShowQueueButton:Hide();
CauldronShowGuildCraftersButton:Show();
return;
end
CauldronQueueAllButton:Show();
CauldronQueueButton:Show();
CauldronDecrementButton:Show();
CauldronInputBox:Show();
CauldronIncrementButton:Show();
CauldronCreateAllButton:Show();
CauldronCreateButton:Show();
CauldronShowGuildCraftersButton:Hide();
local skillInfo = Cauldron:GetSelectedSkill();
if skillInfo then
CauldronCreateButton:SetText(skillInfo.verb or CREATE);
if skillInfo.verb then
CauldronCreateAllButton:Hide();
end
CauldronQueueAllButton:Enable();
CauldronQueueButton:Enable();
if skillInfo.available > 0 then
CauldronCreateAllButton:Enable();
CauldronCreateButton:Enable();
else
CauldronCreateAllButton:Disable();
CauldronCreateButton:Disable();
end
else
CauldronQueueAllButton:Disable();
CauldronQueueButton:Disable();
CauldronCreateAllButton:Disable();
CauldronCreateButton:Disable();
end
--[[
if not IsTradeSkillLinked() then
if #CauldronQueue:GetItems(self.db.realm.userdata[self.vars.playername].queue, CURRENT_TRADESKILL) > 0 then
CauldronProcessButton:Enable();
CauldronClearQueueButton:Enable();
else
CauldronProcessButton:Disable();
CauldronClearQueueButton:Disable();
end
end
--]]
if CauldronQueueWindowFrame:IsShown() then
CauldronShowQueueButton:Hide();
local queue = CauldronQueue:GetItems(Cauldron.db.realm.userdata[Cauldron.vars.playername].queue);
if #queue > 0 then
CauldronProcessButton:Enable();
CauldronClearQueueButton:Enable();
else
CauldronProcessButton:Disable();
CauldronClearQueueButton:Disable();
end
else
CauldronShowQueueButton:Show();
end
end
function Cauldron:UpdatePageInfo()
local skillName = CURRENT_TRADESKILL;
if skillName == "UNKNOWN" then
return;
end
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local offset = self.db.realm.userdata[self.vars.playername].skills[skillName].window.offset or 0;
local firstIndex = 1 + offset;
local numSkills = table.getn(Cauldron:GetSkillList(self.vars.playername, skillName));
-- local numSkills = self.db.realm.userdata[self.vars.playername].skills[skillName].skillCount or 0;
local lastIndex = math.min(50 + offset, numSkills);
local pageInfo = "";
if numSkills > 0 then
pageInfo = string.format(L["Showing %1$d - %2$d of %3$d items."], firstIndex, lastIndex, numSkills);
else
pageInfo = L["No items."];
end
CauldronPageInfoText:SetText(pageInfo);
-- enable/disable navigation buttons
-- TODO
end
function Cauldron:OnCauldronUpdate()
--[[
-- self:Search();
local selectionIndex
if self.vars.selectionIndex == 0 then
selectionIndex = self:GetFirstTradeSkill();
else
selectionIndex = self.vars.selectionIndex;
end
--]]
end
function CauldronFrame_OnLoad()
-- ButtonFrameTemplate_HideButtonBar(CauldronFrame);
ButtonFrameTemplate_HideAttic(CauldronFrame);
-- CauldronFrameInsetBg:Hide();
end
function CauldronFrame_OnEvent()
end
function CauldronFrame_OnShow()
end
function CauldronFrame_OnHide()
CloseTradeSkill();
end
function CauldronSearch_OnTextChanged()
Cauldron:TradeSkillFilter_OnTextChanged(CauldronSearchBox);
end
function CauldronFrame_Update()
end
function CauldronFrame_Show()
Cauldron:Frame_Show();
end
function CauldronFrameIncrement_OnClick()
if ( CauldronInputBox:GetNumber() < 100 ) then
CauldronInputBox:SetNumber(CauldronInputBox:GetNumber() + 1);
end
end
function CauldronFrameDecrement_OnClick()
if ( CauldronInputBox:GetNumber() > 0 ) then
CauldronInputBox:SetNumber(CauldronInputBox:GetNumber() - 1);
end
end
function CauldronFilterDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, CauldronFilterDropDown_Initialize, "MENU");
CauldronFilterDropDownText:SetJustifyH("CENTER");
CauldronFilterDropDownButton:Show();
end
function CauldronFilterDropDown_Initialize(self, level)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local info = UIDropDownMenu_CreateInfo();
if level == 1 then
if not IsTradeSkillLinked() and not IsTradeSkillGuild() then
-- favorites
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"],
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
-- arg1 = "favorite",
-- arg2 = "",
UIDropDownMenu_AddButton(favorites, level);
-- achievements
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"],
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
-- arg1 = "achievement",
-- arg2 = "",
UIDropDownMenu_AddButton(achievements, level);
end
--[==[
info.text = CRAFT_IS_MAKEABLE
info.func = function()
TradeSkillFrame.filterTbl.hasMaterials = not TradeSkillFrame.filterTbl.hasMaterials;
TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials);
TradeSkillUpdateFilterBar();
end
info.keepShownOnClick = true;
info.checked = TradeSkillFrame.filterTbl.hasMaterials
info.isNotRadio = true;
UIDropDownMenu_AddButton(info, level)
if ( not IsTradeSkillGuild() ) then
info.text = TRADESKILL_FILTER_HAS_SKILL_UP;
info.func = function()
TradeSkillFrame.filterTbl.hasSkillUp = not TradeSkillFrame.filterTbl.hasSkillUp;
TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp);
TradeSkillUpdateFilterBar();
end
info.keepShownOnClick = true;
info.checked = TradeSkillFrame.filterTbl.hasSkillUp;
info.isNotRadio = true;
UIDropDownMenu_AddButton(info, level);
end
--]==]
info.checked = nil;
info.isNotRadio = nil;
info.text = TRADESKILL_FILTER_SLOTS
info.func = nil;
info.notCheckable = true;
info.keepShownOnClick = false;
info.hasArrow = true;
info.value = 1;
UIDropDownMenu_AddButton(info, level)
info.text = TRADESKILL_FILTER_SUBCLASS
info.func = nil;
info.notCheckable = true;
info.keepShownOnClick = false;
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 = true;
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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 = true;
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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 = true;
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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 = true;
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
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.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
UIDropDownMenu_AddButton(resetFilters, level);
elseif level == 2 then
if UIDROPDOWNMENU_MENU_VALUE == 1 then
local slots = { GetTradeSkillSubClassFilteredSlots(0) };
local subslots = {};
for i,slot in pairs(slots) do
local slotInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.slots[slot];
if not slotInfo then
slotInfo = {
checked = true,
};
end
info.text = slot;
info.func = function()
Cauldron:FilterDropDown_SetSlot(slots[i]);
-- TradeSkillSetFilter(0, i, "", slots[i]);
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
info.notCheckable = false;
info.checked = slotInfo.checked;
info.hasArrow = false;
info.isNotRadio = true;
info.keepShownOnClick = true;
UIDropDownMenu_AddButton(info, level);
end
elseif UIDROPDOWNMENU_MENU_VALUE == 2 then
-- "all" sub-class
info.text = L["All"];
info.func = function()
Cauldron:FilterDropDown_SetSubclass("all", "");
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
info.notCheckable = true;
info.hasArrow = false;
info.isNotRadio = true;
info.keepShownOnClick = false;
info.value = -1;
UIDropDownMenu_AddButton(info, level);
-- "none" sub-class
info.text = L["None"];
info.func = function()
Cauldron:FilterDropDown_SetSubclass("none", "");
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
info.notCheckable = true;
info.hasArrow = false;
info.isNotRadio = true;
info.keepShownOnClick = false;
info.value = -2;
UIDropDownMenu_AddButton(info, level);
-- iterate over sub-classes
local subClasses = { GetTradeSkillSubClasses() };
local subslots = {};
for i,subClass in pairs(subClasses) do
info.text = subClass;
info.func = function()
Cauldron:FilterDropDown_SetSubclass(subClasses[i], "");
-- TradeSkillSetFilter(i, 0, subClasses[i], "");
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end
subslots = { GetTradeSkillSubClassFilteredSlots(i) };
if #subslots > 1 then
info.notCheckable = true;
info.hasArrow = true;
else
local catInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClass];
if not catInfo then
catInfo = {
shown = true,
expanded = true,
};
end
info.notCheckable = false;
info.checked = catInfo.shown;
info.hasArrow = false;
info.isNotRadio = true;
info.keepShownOnClick = true;
end
-- info.hasArrow = #subslots > 1;
info.value = i;
UIDropDownMenu_AddButton(info, level);
end
end
elseif level == 3 then
local subClasses = { GetTradeSkillSubClasses() };
local subslots = { GetTradeSkillSubClassFilteredSlots(UIDROPDOWNMENU_MENU_VALUE) };
for i,slot in pairs(subslots) do
info.text = slot;
info.func = function()
Cauldron:FilterDropDown_SetSubclass(subClasses[UIDROPDOWNMENU_MENU_VALUE], subslots[i]);
--[[
TradeSkillSetFilter(UIDROPDOWNMENU_MENU_VALUE, i, subClasses[UIDROPDOWNMENU_MENU_VALUE], subslots[i]);
--]]
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.offset = 0;
Cauldron:UpdateSkillList();
Cauldron:UpdateStatus();
Cauldron:UpdatePageInfo();
end;
local catInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClasses[UIDROPDOWNMENU_MENU_VALUE]..";"..subslots[i]];
if not catInfo then
catInfo = {
shown = true,
expanded = true,
};
end
info.notCheckable = false;
info.checked = catInfo.shown;
info.isNotRadio = true;
info.keepShownOnClick = true;
info.value = {UIDROPDOWNMENU_MENU_VALUE, i};
UIDropDownMenu_AddButton(info, level);
end
end
end
function CauldronSortDropDown_OnLoad(self)
CauldronSortButton:SetText(L["Sort"]);
UIDropDownMenu_Initialize(self, CauldronSortDropDown_Initialize, "MENU");
CauldronSortDropDownText:SetJustifyH("CENTER");
CauldronSortDropDownButton:Show();
end
function CauldronSortDropDown_Initialize(self, level)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local info = UIDropDownMenu_CreateInfo();
if level == 1 then
-- title
--[[
local sortTitle = UIDropDownMenu_CreateInfo();
sortTitle.text = L["Sort"];
sortTitle.isTitle = true;
sortTitle.isNotRadio = nil;
sortTitle.notCheckable = true;
sortTitle.tooltipTitle = "";
sortTitle.tooltipText = "";
UIDropDownMenu_AddButton(sortTitle, level);
--]]
-- default
local sortDefault = UIDropDownMenu_CreateInfo();
sortDefault.text = L["Default"];
sortDefault.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDefault;
sortDefault.isNotRadio = nil;
sortDefault.keepShownOnClick = false;
sortDefault.func = function()
Cauldron:FilterDropDown_SetSort("default");
Cauldron:UpdateSkillList();
end;
UIDropDownMenu_AddButton(sortDefault, level);
--[[
local sortDefault = {
text = L["Default"],
checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDefault,
tooltipTitle = L["Default"],
tooltipText = L["Set the sorting method to use on the skills list"],
func = function(arg1, arg2) Cauldron:FilterDropDown_SetSort(arg1) end,
arg1 = "default",
arg2 = "",
};
--]]
-- alpha
local sortAlpha = UIDropDownMenu_CreateInfo();
sortAlpha.text = L["Alphabetically"];
sortAlpha.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortAlpha;
sortAlpha.isNotRadio = nil;
sortAlpha.keepShownOnClick = false;
sortAlpha.func = function()
Cauldron:FilterDropDown_SetSort("alpha");
Cauldron:UpdateSkillList();
end;
UIDropDownMenu_AddButton(sortAlpha, level);
--[[
local sortAlpha = {
text = L["Alphabetically"],
checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortAlpha,
tooltipTitle = L["Alphabetically"],
tooltipText = L["Set the sorting method to use on the skills list"],
func = function(arg1, arg2) Cauldron:FilterDropDown_SetSort(arg1) end,
arg1 = "alpha",
arg2 = "",
};
--]]
-- difficulty
local sortDifficulty = UIDropDownMenu_CreateInfo();
sortDifficulty.text = L["By difficulty"];
sortDifficulty.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDifficulty;
sortDifficulty.isNotRadio = nil;
sortDifficulty.keepShownOnClick = false;
sortDifficulty.func = function()
Cauldron:FilterDropDown_SetSort("difficulty");
Cauldron:UpdateSkillList();
end;
UIDropDownMenu_AddButton(sortDifficulty, level);
--[[
local sortDifficulty = {
text = L["By difficulty"],
checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDifficulty,
tooltipTitle = L["By difficulty"],
tooltipText = L["Set the sorting method to use on the skills list"],
func = function(arg1, arg2) Cauldron:FilterDropDown_SetSort(arg1) end,
arg1 = "difficulty",
arg2 = "",
};
--]]
-- item level
local sortItemLevel = UIDropDownMenu_CreateInfo();
sortItemLevel.text = L["By item level"];
sortItemLevel.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortItemLevel;
sortItemLevel.isNotRadio = nil;
sortItemLevel.keepShownOnClick = false;
sortItemLevel.func = function()
Cauldron:FilterDropDown_SetSort("itemlevel");
Cauldron:UpdateSkillList();
end;
UIDropDownMenu_AddButton(sortItemLevel, level);
--[[
local sortItemLevel = {
text = L["By item level"],
checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortItemLevel,
tooltipTitle = L["By item level"],
tooltipText = L["Set the sorting method to use on the skills list"],
func = function(arg1, arg2) Cauldron:FilterDropDown_SetSort(arg1) end,
arg1 = "itemlevel",
arg2 = "",
};
--]]
-- required level
local sortReqLevel = UIDropDownMenu_CreateInfo();
sortReqLevel.text = L["By required level"];
sortReqLevel.checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortRequiredLevel;
sortReqLevel.isNotRadio = nil;
sortReqLevel.keepShownOnClick = false;
sortReqLevel.func = function()
Cauldron:FilterDropDown_SetSort("reqlevel");
Cauldron:UpdateSkillList();
end;
UIDropDownMenu_AddButton(sortReqLevel, level);
--[[
local sortReqLevel = {
text = L["By required level"],
checked = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortRequiredLevel,
tooltipTitle = L["By required level"],
tooltipText = L["Set the sorting method to use on the skills list"],
func = function(arg1, arg2) Cauldron:FilterDropDown_SetSort(arg1) end,
arg1 = "reqlevel",
arg2 = "",
};
--]]
-- favorites
-- TODO
-- benefit
-- TODO
end
end
function Cauldron:FilterDropDown_Reset()
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
--[[
-- sorting
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDefault = true;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortAlpha = false;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortDifficulty = false;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.sortBenefit = false;
--]]
-- difficulty
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.optimal = true;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.medium = true;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.easy = true;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.trivial = true;
-- favorites/achievements
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favorites = false;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.favoritesAtTop = false;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.achievements = false;
-- availability
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
function Cauldron:FilterDropDown_SetSort(sort)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
-- local sort = info.arg1;
local filter = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter;
if sort == "default" then
filter.sortDefault = true;
filter.sortAlpha = false;
filter.sortDifficulty = false;
filter.sortItemLevel = false;
filter.sortRequiredLevel = false;
filter.sortFavorites = false;
filter.sortBenefit = false;
elseif sort == "alpha" then
filter.sortDefault = false;
filter.sortAlpha = true;
filter.sortDifficulty = false;
filter.sortItemLevel = false;
filter.sortRequiredLevel = false;
filter.sortFavorites = false;
filter.sortBenefit = false;
elseif sort == "difficulty" then
filter.sortDefault = false;
filter.sortAlpha = false;
filter.sortDifficulty = true;
filter.sortItemLevel = false;
filter.sortRequiredLevel = false;
filter.sortFavorites = false;
filter.sortBenefit = false;
elseif sort == "itemlevel" then
filter.sortDefault = false;
filter.sortAlpha = false;
filter.sortDifficulty = false;
filter.sortItemLevel = true;
filter.sortRequiredLevel = false;
filter.sortFavorites = false;
filter.sortBenefit = false;
elseif sort == "reqlevel" then
filter.sortDefault = false;
filter.sortAlpha = false;
filter.sortDifficulty = false;
filter.sortItemLevel = false;
filter.sortRequiredLevel = true;
filter.sortFavorites = false;
filter.sortBenefit = false;
elseif sort == "benefit" then
filter.sortDefault = false;
filter.sortAlpha = false;
filter.sortDifficulty = false;
filter.sortItemLevel = false;
filter.sortRequiredLevel = false;
filter.sortFavorites = false;
filter.sortBenefit = true;
elseif sort == "favorite" then
filter.sortDefault = false;
filter.sortAlpha = false;
filter.sortDifficulty = false;
filter.sortItemLevel = false;
filter.sortRequiredLevel = false;
filter.sortFavorites = true;
filter.sortBenefit = false;
end
end
function Cauldron:FilterDropDown_SetSlot(slot)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
-- Cauldron:info("set slot: "..tostring(slot));
local slotInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.slots[slot];
if not slotInfo then
-- don't have slot info; create it
slotInfo = {
checked = true,
};
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.slots[slot] = slotInfo;
end
slotInfo.checked = not slotInfo.checked;
end
function Cauldron:FilterDropDown_SetSubclass(subclass, subslot)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
-- Cauldron:info("set subclass: "..tostring(subclass)..", subslot: "..tostring(subslot));
-- handle "special" sub-classes
if subclass == "all" or subclass == "none" then
local checkit = (subclass == "all");
local subClasses = { GetTradeSkillSubClasses() };
local subslots = {};
for i,subClass in pairs(subClasses) do
subslots = { GetTradeSkillSubClassFilteredSlots(i) };
if #subslots > 1 then
for j,slot in pairs(subslots) do
local catInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClass..";"..subslots[j]];
if not catInfo then
catInfo = {
shown = checkit,
expanded = true,
};
else
catInfo.shown = checkit;
end
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClass..";"..subslots[j]] = catInfo;
end
else
local catInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClass];
if not catInfo then
catInfo = {
shown = checkit,
expanded = true,
};
else
catInfo.shown = checkit;
end
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[subClass] = catInfo;
end
end
return;
end
local catName = subclass;
if subslot ~= "" then
catName = subclass..";"..subslot;
end
-- Cauldron:info("catName: "..catName);
local catInfo = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[catName];
if not catInfo then
-- don't have category info; create it
catInfo = {
shown = true,
expanded = true,
};
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.categories[catName] = catInfo;
end
catInfo.shown = not catInfo.shown;
end
function CauldronLinkDropDown_LinkPost(self, chan)
local link = GetTradeSkillListLink();
if link then
ChatFrame_OpenChat(chan.." "..link, DEFAULT_CHAT_FRAME);
end
end
function CauldronLinkDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, CauldronLinkDropDown_Init, "MENU");
end
function CauldronLinkDropDown_Init(self, level)
local info = UIDropDownMenu_CreateInfo();
info.notCheckable = true;
info.text = TRADESKILL_POST;
info.isTitle = 1;
UIDropDownMenu_AddButton(info);
info.isTitle = nil;
info = UIDropDownMenu_CreateInfo();
info.notCheckable = true;
info.func = CauldronLinkDropDown_LinkPost;
info.text = GUILD;
info.arg1 = SLASH_GUILD1;
info.disabled = not IsInGuild();
UIDropDownMenu_AddButton(info);
info.text = PARTY;
info.arg1 = SLASH_PARTY1;
info.disabled = GetNumPartyMembers() == 0;
UIDropDownMenu_AddButton(info);
info.text = RAID;
info.disabled = GetNumRaidMembers() == 0;
info.arg1 = SLASH_RAID1;
UIDropDownMenu_AddButton(info);
-- info.text = SAY;
-- info.arg1 = SLASH_SAY1;
-- UIDropDownMenu_AddButton(info);
info.disabled = false
local name;
local channels = {GetChannelList()};
local channelCount = #channels/2;
for i=1, MAX_CHANNEL_BUTTONS, 1 do
if ( i <= channelCount) then
info.text = channels[i*2];
info.arg1 = "/"..channels[(i-1)*2 + 1];
UIDropDownMenu_AddButton(info);
end
end
end
function Cauldron:ReagentsFilterNormalCheck()
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local checked = true;
if Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAllReagents or
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveKeyReagents or
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter.haveAnyReagents then
checked = false;
end
return checked;
end
function Cauldron:FilterDropDown_SetReagentFilter(info)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local reagents = info.arg1;
local filter = Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.filter;
if reagents == "normal" then
filter.haveAllReagents = false;
filter.haveKeyReagents = false;
filter.haveAnyReagents = false;
elseif reagents == "all" then
filter.haveAllReagents = true;
filter.haveKeyReagents = false;
filter.haveAnyReagents = false;
elseif reagents == "key" then
filter.haveAllReagents = false;
filter.haveKeyReagents = true;
filter.haveAnyReagents = false;
elseif reagents == "any" then
filter.haveAllReagents = false;
filter.haveKeyReagents = false;
filter.haveAnyReagents = true;
end
-- update the UI
Cauldron:UpdateSkillList();
end
function Cauldron:FilterDropDown_ToggleDifficulty(info)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
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];
end
function Cauldron:CollapseItemButton_OnClick(button)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local skillInfo = button.skillInfo;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.skills[skillInfo.name].expanded = not Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.skills[skillInfo.name].expanded;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.selected = skillInfo.index;
-- update the UI
Cauldron:UpdateSkillList();
end
function Cauldron:SkillItem_OnEnter(frame)
local id = frame:GetID();
local name = _G["CauldronSkillItem"..id.."SkillName"];
if name then
-- name:
end
-- TODO
end
function Cauldron:SkillItem_OnLeave(frame)
-- TODO
end
function Cauldron:SkillItem_OnClick(frame, button, down)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
-- select this frame
if frame.skillIndex then
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.selected = frame.skillIndex;
CauldronFrame.selectedSkill = frame.skillIndex;
CauldronFrame.numAvailable = 1;
end
-- update the UI
Cauldron:UpdateSkillList();
Cauldron:UpdateButtons();
end
function Cauldron:TradeSkillFilter_OnTextChanged(frame)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
if (not skillName or skillName == "UNKNOWN") or
(not self.vars.playername) or
(not self.db.realm.userdata[self.vars.playername]) or
(not self.db.realm.userdata[self.vars.playername].skills[skillName]) then
return;
end
local text = frame:GetText();
if text == SEARCH then
text = "";
end
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.search = text;
-- update the UI
Cauldron:UpdateSkillList();
end
function Cauldron:AmountDecrement_OnClick()
local num = CauldronAmountInputBox:GetNumber();
num = math.max(1, num - 1);
CauldronAmountInputBox:SetNumber(num);
end
function Cauldron:AmountIncrement_OnClick()
local num = CauldronAmountInputBox:GetNumber();
num = math.min(999, num + 1);
CauldronAmountInputBox:SetNumber(num);
end
function Cauldron:FavoriteItemButton_OnClick(button)
local skillName = CURRENT_TRADESKILL;
if IsTradeSkillLinked() then
skillName = "Linked-"..skillName;
end
if IsTradeSkillGuild() then
skillName = "Guild-"..skillName;
end
local skillInfo = button.skillInfo;
Cauldron.db.realm.userdata[Cauldron.vars.playername].skills[skillName].window.skills[skillInfo.name].favorite = button:GetChecked();
end
function Cauldron:AppendToTooltip(tooltip, skillIndex)
if not tooltip then
return;
end
if not skillIndex then
return;
end
end
function Cauldron:ShowGuildCrafters()
if CauldronGuildFrame:IsShown() then
CauldronGuildFrame:Hide();
else
CauldronGuildFrame:Show();
end
end
function CauldronGuildFrame_OnShow()
CauldronGuildCraftersFrameScrollBar:SetValue(0);
CauldronGuilCraftersFrame_Update();
end
function CauldronGuilCraftersFrame_Update()
local skillLineID, recipeID, numMembers = GetGuildRecipeInfoPostQuery();
local offset = FauxScrollFrame_GetOffset(CauldronGuildCraftersFrame);
local index, button, name, online;
for i = 1, TRADE_SKILL_GUILD_CRAFTERS_DISPLAYED, 1 do
index = i + offset;
button = _G["CauldronGuildCrafter"..i];
if ( index > numMembers ) then
button:Hide();
else
name, online = GetGuildRecipeMember(index);
button:SetText(name);
if ( online ) then
button:Enable();
else
button:Disable();
end
button:Show();
button.name = name;
end
end
FauxScrollFrame_Update(CauldronGuildCraftersFrame, numMembers, TRADE_SKILL_GUILD_CRAFTERS_DISPLAYED, TRADE_SKILL_HEIGHT);
end