vanilla-wow-addons – Rev 1
?pathlinks?
--[[--------------------------------------------------------------------------------
ItemSyncCore BagView Framework
Author: Derkyle
Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]
local ISync_BVList = { };
---------------------------------------------------
-- ISync:BV_Load
---------------------------------------------------
function ISync:BV_Load()
---------------------------------------------------
-- Register our slash command
SLASH_ISYNCBAGVIEW1 = "/bagview";
SLASH_ISYNCBAGVIEW2 = "/bv";
SLASH_ISYNCBAGVIEW3 = "/bagv";
SlashCmdList["ISYNCBAGVIEW"] = function(msg)
if(ISYNC_LOADYES == 1) then
if ( ISync_BV_Frame:IsVisible() ) then ISync_BV_Frame:Hide(); else ISync_BV_Frame:Show(); end
end
end
tinsert(UISpecialFrames, "ISync_BV_Frame");
end
---------------------------------------------------
-- ISync:BV_Binding
---------------------------------------------------
function ISync:BV_Unload()
ISync_BVList = nil;
end
---------------------------------------------------
-- ISync:BV_Binding
---------------------------------------------------
function ISync:BV_Binding()
if(ISYNC_LOADYES == 1) then
if ( ISync_BV_Frame:IsVisible() ) then ISync_BV_Frame:Hide(); else ISync_BV_Frame:Show(); end
end
end
---------------------------------------------------
-- ISync:BV_Refresh()
---------------------------------------------------
function ISync:BV_Refresh()
ISync_BVList = nil; --reset
local offset = FauxScrollFrame_GetOffset(ISync_IC_ScrollFrame);
if( offset ) then
--set to last offset
FauxScrollFrame_SetOffset(ISync_IC_ScrollFrame, offset);
else
--set to zero offset
FauxScrollFrame_SetOffset(ISync_IC_ScrollFrame, 0);
end
ISync:BV_BuildIndex();
ISync:BV_UpdateScrollFrame();
end
---------------------------------------------------
-- ISync:BV_BuildIndex()
---------------------------------------------------
function ISync:BV_BuildIndex()
if(not ISyncDB) then return nil; end
if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
--reset inven array
ISync_BVList = nil;
ISync_BVList = { };
local iNew = 1;
local costOfItem, sColor, sParseLink;
--do the loops through all the bags
for bag=0,NUM_BAG_FRAMES do
for slot=1,GetContainerNumSlots(bag) do
local link = GetContainerItemLink(bag, slot);
if (link) then
local sID = ISync:GetCoreID(link);
local name = ISync:NameFromLink(link);
local link = ISync:GetItemID(link);
if(ISync:FetchDB(sID, "price")) then
--grab the item information from the bag, slot
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bag, slot);
--we have to have an item count
if(itemCount) then
costOfItem = 0;
costOfItem = tonumber(ISync:FetchDB(sID, "price"));
--show stacked
if(costOfItem > 0 and itemCount > 0 and ISync:SetVar({"BAGVIEW","SHOWSTACKED"}, 1, "COMPARE")) then
costOfItem = floor(tonumber(costOfItem) * tonumber(itemCount));
end
if(not costOfItem or costOfItem < 1 and ISync:SetVar({"BAGVIEW","SHOWNIL"}, 1, "COMPARE")) then
--do nothing cause we want to hide value for this item
else
if(not costOfItem or costOfItem < 1) then costOfItem = 0; end
--insert into table
ISync_BVList[iNew] = { };
ISync_BVList[iNew].name = name;
ISync_BVList[iNew].money = costOfItem;
ISync_BVList[iNew].bag = bag;
ISync_BVList[iNew].slot = slot;
ISync_BVList[iNew].count = itemCount;
ISync_BVList[iNew].quality = tonumber(ISync:FetchDB(sID, "quality"));
ISync_BVList[iNew].texture = texture;
ISync_BVList[iNew].link = link;
ISync_BVList[iNew].coreID = sID;
iNew = iNew + 1;
end
end--if(itemCount) then
end--if(name and name ~= "") then
end--if (link and link ~= "") then
end--end for
end--end for
ISync_BVList.onePastEnd = iNew;
ISync:BV_Sort();
end
---------------------------------------------------
-- ISync:BV_Sort()
---------------------------------------------------
function ISync:BV_Sort()
if not ISync_BVList then return; end
if(ISync:SetVar({"BAGVIEW","SORT_VALUE"}, 1, "COMPARE")) then
table.sort(ISync_BVList, ISync_BV_SortByValue);
elseif(ISync:SetVar({"BAGVIEW","SORT_RARITY"}, 1, "COMPARE")) then
table.sort(ISync_BVList, ISync_BV_SortByRarity);
else
table.sort(ISync_BVList, ISync_BV_SortByName);
end
end
---------------------------------------------------
-- ISync_BV_SortByName
---------------------------------------------------
function ISync_BV_SortByName(a,b)
return a.name < b.name;
end
---------------------------------------------------
-- ISync_BV_SortByValue
---------------------------------------------------
function ISync_BV_SortByValue(a,b)
if(a.money and b.money) then
return b.money < a.money;
end
end
---------------------------------------------------
-- ISync_BV_SortByRarity
---------------------------------------------------
function ISync_BV_SortByRarity(elem1, elem2)
local color1, color2;
--get the corresponding quality
color1 = elem1.quality;
color2 = elem2.quality
if(color1 and color2) then
if( color1 == color2 ) then
return elem1.name < elem2.name;
end
return color2 < color1;
else
return nil;
end
end
---------------------------------------------------
-- ISync:BV_UpdateScrollFrame()
---------------------------------------------------
function ISync:BV_UpdateScrollFrame()
local iItem;
if (not ISync_BV_Frame:IsVisible()) then return; end
if (not ISync_BVList) then ISync:BV_BuildIndex(); end --make sure
if (not ISync_BVList or not ISync_BVList.onePastEnd) then return nil; end
--start the scroll process
--15 items and height of 16 each
FauxScrollFrame_Update(ISync_IC_ScrollFrame, ISync_BVList.onePastEnd - 1, 15, 16);
--loop through the 15 frames
for iItem = 1, 15, 1 do
--grab the current item index and then get the itembar object itself
local itemIndex = iItem + FauxScrollFrame_GetOffset(ISync_IC_ScrollFrame);
local ISyncItemObj = getglobal("ISync_BrowseButton"..iItem);
--if it's still within boundaries then procezz
if( itemIndex < ISync_BVList.onePastEnd ) then
--make sure the item is even in the array and that it has an sID
if(ISync_BVList[itemIndex] and ISync_BVList[itemIndex].link) then
ISyncItemObj.storeID = ISync_BVList[itemIndex].link;
if(ISync_BVList[itemIndex].name) then
getglobal("ISync_BrowseButton"..iItem.."Name"):SetText(ISync_BVList[itemIndex].name);
end
--set color
local color = { };
if(ISync_BVList[itemIndex].quality) then
color = ITEM_QUALITY_COLORS[tonumber(ISync_BVList[itemIndex].quality)];
getglobal("ISync_BrowseButton"..iItem.."Name"):SetTextColor(color.r, color.g, color.b);
getglobal("ISync_BrowseButton"..iItem.."Name").r = color.r;
getglobal("ISync_BrowseButton"..iItem.."Name").g = color.g;
getglobal("ISync_BrowseButton"..iItem.."Name").b = color.b;
else
getglobal("ISync_BrowseButton"..iItem.."Name").r = 0;
getglobal("ISync_BrowseButton"..iItem.."Name").g = 0;
getglobal("ISync_BrowseButton"..iItem.."Name").b = 0;
end
local moneyFrame = getglobal("ISync_BrowseButton"..iItem.."MoneyFrame");
--set price if available
if(ISync_BVList[itemIndex].money and moneyFrame) then
MoneyFrame_Update(moneyFrame:GetName(), ISync_BVList[itemIndex].money);
moneyFrame:Show();
end
--set texture
if(ISync_BVList[itemIndex].texture) then
getglobal("ISync_BrowseButton"..iItem.."ItemIconTexture"):SetTexture(ISync_BVList[itemIndex].texture);
end
--show stacked items
if(ISync_BVList[itemIndex].count > 1 and ISync:SetVar({"BAGVIEW","SHOWSTACKED"}, 1, "COMPARE") == 1) then
getglobal("ISync_BrowseButton"..iItem.."ItemCount"):SetText(ISync_BVList[itemIndex].count);
getglobal("ISync_BrowseButton"..iItem.."ItemCount"):Show();
--store the count
ISyncItemObj.storeCount = ISync_BVList[itemIndex].count;
else
getglobal("ISync_BrowseButton"..iItem.."ItemCount"):Hide();
ISyncItemObj.storeCount = 1; --default
end
--store the item array in both the item bar and texture
ISyncItemObj.itemInfo = ISync_BVList[itemIndex];
--show the item
ISyncItemObj:Show();
else
--nothing to show then hide it
ISyncItemObj:Hide();
end
else
--error occured hide it
ISyncItemObj:Hide();
end
end --end for
end
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
-- ISync:BV_ItemEnter()
---------------------------------------------------
function ISync:BV_ItemEnter()
local iItem;
if(not ISyncDB) then return nil; end
if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
local storeID;
local sFrame;
--get the item info
if(this.itemInfo) then
iItem = this.itemInfo;
storeID = this.storeID;
sFrame = this;
elseif(this:GetParent():GetName()) then
iItem = getglobal(this:GetParent():GetName()).itemInfo;
storeID = getglobal(this:GetParent():GetName()).storeID;
sFrame = getglobal(this:GetParent():GetName());
else
return nil;
end
if(not iItem) then return; end
if(storeID) then
local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..storeID);
if(link_X) then
--show the sell cursor
if(MerchantFrame:IsVisible() and not InRepairMode()) then
ShowContainerSellCursor(iItem.bag, iItem.slot);
elseif(not MerchantFrame:IsVisible() and InRepairMode()) then
ResetCursor();
end
ISync_BV_Frame.TooltipButton = sFrame:GetID();
GameTooltip:SetOwner(sFrame, "ANCHOR_RIGHT");
GameTooltip:SetHyperlink(link_X);
--update the search information
ISync:Do_Parse(UIParent, ISyncTooltip, iItem.coreID, "item:"..storeID);
--check counter
if(ISync_AddTooltip and sFrame.storeCount) then
--update another mod if available
ISync:SendtoMods(GameTooltip, name_X, "item:"..storeID, sFrame.storeCount, quality_X);
ISync:AddTooltipInfo(GameTooltip, "item:"..storeID, sFrame.storeCount, 1);
else
--update another mod if available
ISync:SendtoMods(GameTooltip, name_X, "item:"..storeID, 1, quality_X);
ISync:AddTooltipInfo(GameTooltip, "item:"..storeID, 1, 1);
end
end
end--end
end
---------------------------------------------------
-- ISync:BV_ItemClick()
---------------------------------------------------
function ISync:BV_ItemClick(sButton)
local iItem;
if(not ISyncDB) then return nil; end
if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
--get the item info
if(this.itemInfo) then
iItem = this.itemInfo;
elseif(this:GetParent():GetName()) then
iItem = getglobal(this:GetParent():GetName()).itemInfo;
else
iItem = nil;
end
if(not iItem) then return; end
--special thanks to Axu for the code :) Support for AxuItemMenus
if (AxuItemMenus_EvocationTest and AxuItemMenus_EvocationTest(sButton, "isync")) then
AxuItemMenus_FillFromLink(GetContainerItemLink(iItem.bag, iItem.slot));
AxuItemMenus_OpenMenu();
elseif sButton == "LeftButton" then
if IsShiftKeyDown() then
if ChatFrameEditBox:IsVisible() then
local link = GetContainerItemLink(iItem.bag, iItem.slot);
if link then ChatFrameEditBox:Insert(link); end
end
elseif( IsControlKeyDown()) then
DressUpItemLink(GetContainerItemLink(iItem.bag, iItem.slot));
else
PickupContainerItem(iItem.bag, iItem.slot);
end
elseif sButton == "RightButton" then
UseContainerItem(iItem.bag, iItem.slot);
end
end