-- $Revision: 194 $
-- Cauldron shopping list UI functions
local L = LibStub("AceLocale-3.0"):GetLocale("Cauldron")
function Cauldron:ShoppingList_Toggle()
if CauldronShoppingListFrame then
if CauldronShoppingListFrame:IsShown() then
Cauldron:HideShoppingList();
else
Cauldron:ShowShoppingList();
end
end
end
function Cauldron:ShowShoppingList()
if CauldronShoppingListFrame then
CauldronShoppingListFrame:Show();
--[[
local s = CauldronShoppingListFrame:GetEffectiveScale();
if self.db.profile.ShoppingListPositionX and self.db.profile.ShoppingListPositionY then
CauldronShoppingListFrame:SetPoint("TOPLEFT",
self.db.profile.ShoppingListPositionX,
self.db.profile.ShoppingListPositionY);
end
if self.db.profile.ShoppingListWidth then
CauldronShoppingListFrame:SetWidth(self.db.profile.ShoppingListWidth);
end
if self.db.profile.ShoppingListHeight then
CauldronShoppingListFrame:SetHeight(self.db.profile.ShoppingListHeight);
end
--]]
self.db.profile.showShoppingList = true;
end
-- update labels with localized text
CauldronShoppingListFrameTitleText:SetText(L["Shopping List"]);
Cauldron:UpdateShoppingList();
_G["CauldronShoppingListFrameAutoBuyButton"]:SetChecked(Cauldron:GetAutoBuy());
end
function Cauldron:HideShoppingList()
if CauldronShoppingListFrame then
CauldronShoppingListFrame:Hide();
self.db.profile.showShoppingList = false;
end
end
function Cauldron:UpdateShoppingList()
if not CauldronShoppingListFrame:IsShown() then
return;
end
local list = self.db.realm.shopping;
local reqIndex = 1;
local itemIndex = 1;
local width = CauldronShoppingListFrame:GetWidth();
local height = CauldronShoppingListFrame:GetHeight();
-- adjust inner frame sizes
CauldronShoppingListFrameItemsScrollFrame:SetWidth(width - 10);
CauldronShoppingListFrameItemsScrollFrame:SetHeight(height - 20);
CauldronShoppingListFrameItemsScrollFrameScrollChild:SetWidth(width - 10);
local frameAbove = nil;
-- iterate over the requestors
for requestor, items in pairs(list) do
if CauldronShopping:HasItems(list, requestor) then
local shoppingListRequestor = _G["CauldronShoppingListRequestor"..reqIndex];
-- create a frame for the requestor
if not shoppingListRequestor then
-- create a new frame for the skill information
shoppingListRequestor = CreateFrame("Button",
"CauldronShoppingListRequestor"..reqIndex,
CauldronShoppingListFrameItemsScrollFrameScrollChild,
"CauldronShoppingListRequestorTemplate");
end
_G["CauldronShoppingListRequestor"..reqIndex.."Name"]:SetText(requestor);
_G["CauldronShoppingListRequestor"..reqIndex.."Name"]:SetWidth(width - 10);
_G["CauldronShoppingListRequestor"..reqIndex]:SetWidth(width - 10);
-- place the frame in the scroll view
if frameAbove then
-- anchor to the frame above
self:debug("UpdateShoppingList: anchor frame to top left of frame above");
shoppingListRequestor:SetPoint("TOPLEFT", frameAbove, "BOTTOMLEFT", 0, -2);
else
-- anchor to the parent
self:debug("UpdateShoppingList: anchor frame to parent");
shoppingListRequestor:SetPoint("TOPLEFT", CauldronShoppingListFrameItemsScrollFrameScrollChild, "TOPLEFT", 0, 0);
end
shoppingListRequestor:Show();
frameAbove = shoppingListRequestor;
-- add items for the requestor
for _,item in ipairs(Cauldron:SortTableIndices(items)) do
-- for item, amount in pairs(items) do
local amount = items[item];
local shoppingListItem = _G["CauldronShoppingListItem"..itemIndex];
-- create a frame for the item
if not shoppingListItem then
-- create a new frame for the skill information
shoppingListItem = CreateFrame("Button",
"CauldronShoppingListItem"..itemIndex,
CauldronShoppingListFrameItemsScrollFrameScrollChild,
"CauldronShoppingListItemTemplate");
end
-- local _,link,_,_,_,_,_,_,_,_ = GetItemInfo(item);
local str = string.format("%s, %d", item, amount);
shoppingListItem.itemName = item;
shoppingListItem.requestor = requestor;
_G["CauldronShoppingListItem"..itemIndex.."Item"]:SetText(str);
_G["CauldronShoppingListItem"..itemIndex.."Item"]:SetWidth(width - 25);
_G["CauldronShoppingListItem"..itemIndex]:SetWidth(width - 25);
--[[
local frame = _G["CauldronShoppingListItem"..itemIndex.."ItemTooltipFrame"];
frame.itemLink = link;
--]]
-- place the frame in the scroll view
if frameAbove then
-- anchor to the frame above
self:debug("UpdateShoppingList: anchor frame to top left of frame above");
shoppingListItem:SetPoint("TOPLEFT", frameAbove, "BOTTOMLEFT", 0, 0);
end
shoppingListItem:Show();
-- figure out if the current toon has the item, and color it appropriately
local counts = Cauldron:ReagentCount(item);
if counts then
local color = { r=1.0, g=1.0, b=1.0 };
if counts.total > 0 then
-- the current toon has at least 1 of the item
color = { r=0.0, g=1.0, b=1.0 };
if counts.has >= amount then
-- toon has all of them in inventory
color = { r=0.0, g=1.0, b=0.0 };
elseif counts.bank > 0 then
-- toon has some of them in bank
color = { r=1.0, g=0.0, b=1.0 };
elseif counts.mail > 0 then
-- toon has some in the mail
color = { r=1.0, g=1.0, b=0.0 };
end
end
_G["CauldronShoppingListItem"..itemIndex.."Item"]:SetTextColor(color.r, color.g, color.b, 1.0);
end
frameAbove = shoppingListItem;
itemIndex = itemIndex + 1;
end
reqIndex = reqIndex + 1;
end
end
-- set scroll child frame height
CauldronShoppingListFrameItemsScrollFrameScrollChild:SetHeight((reqIndex - 1) * 12 + (itemIndex - 1) * 12);
while true do
local frame = _G["CauldronShoppingListRequestor"..reqIndex];
if not frame then
break;
end
frame:Hide();
-- frame:SetHeight(0);
reqIndex = reqIndex + 1;
end
while true do
local frame = _G["CauldronShoppingListItem"..itemIndex];
if not frame then
break;
end
frame:Hide();
-- frame:SetHeight(0);
itemIndex = itemIndex + 1;
end
end
function Cauldron:AutoBuyShoppingList_OnClick(button)
local checked = button:GetChecked() or 0;
-- checked = (checked > 0) ? true : false;
Cauldron.db.realm.userdata[Cauldron.vars.playername].options.autoBuy = checked;
end