vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[--------------------------------------------------------------------------------
  ItemSync Favorites Framework

  Author:  Derkyle
  Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]

local DD_NameCount = 1;

---------------------------------------------------
-- ISync:FavFrame_Binding()
---------------------------------------------------
function ISync:FavFrame_Binding(sOpt)
        if(ISYNC_LOADYES == 1) then
                if ( sOpt and sOpt == 1) then
                        ISync_FavFrame:Hide();
                        return nil;
                end
                if ( ISync_FavFrame:IsVisible() ) then ISync_FavFrame:Hide(); else ISync_FavFrame:Show(); end
        end
end


---------------------------------------------------
-- ISync:Fav_DD_SetSelectedID()
---------------------------------------------------
function ISync:Fav_DD_SetSelectedID(frame, id, names)
        UIDropDownMenu_SetSelectedID(frame, id);
        if( not frame ) then
                frame = this;
        end
        UIDropDownMenu_SetText(names, ISync_FavFrame_DropDown);
end


---------------------------------------------------
-- ISync:Fav_DD_Initialize()
---------------------------------------------------
function ISync:Fav_DD_Initialize()
        local info;
        local sCount = 1;

        for sKey, sVar in ISyncFav do
                info = { };
                info.text = sKey;
                info.func = ISync.Fav_DD_OnClick;
                UIDropDownMenu_AddButton(info);
                if( string.lower(sKey) == string.lower(UnitName("player")) ) then DD_NameCount = sCount; end
                sCount = sCount + 1;
        end

end


---------------------------------------------------
-- ISync:Fav_DD_Load()
---------------------------------------------------
function ISync:Fav_DD_Load()
        UIDropDownMenu_Initialize(ISync_FavFrame_DropDown, ISync.Fav_DD_Initialize);
        ISync:Fav_DD_SetSelectedID(ISync_FavFrame_DropDown, DD_NameCount, UnitName("player"));
        UIDropDownMenu_JustifyText("LEFT", ISync_FavFrame_DropDown)
end


---------------------------------------------------
-- ISync:Fav_DD_OnClick()
---------------------------------------------------
function ISync:Fav_DD_OnClick()
        local oldID = UIDropDownMenu_GetSelectedID(ISync_FavFrame_DropDown);
        UIDropDownMenu_SetSelectedID(ISync_FavFrame_DropDown, this:GetID());
        
        if( oldID ~= this:GetID() ) then
                FauxScrollFrame_SetOffset(ISync_FavFrame_ListScrollFrame, 0);
                getglobal("ISync_FavFrame_ListScrollFrameScrollBar"):SetValue(0);
                ISync:Fav_Refresh();
        end

end

--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------


---------------------------------------------------
-- ISync:Fav_OnEvent()
---------------------------------------------------
function ISync:Fav_OnEvent()

        if( event == "VARIABLES_LOADED" ) then
                ISync:Fav_DD_Load();
        end

end

---------------------------------------------------
-- ISync:Fav_Refresh()
---------------------------------------------------
function ISync:Fav_Refresh()

        if(ISYNC_LOADYES == 0) then return nil; end --don't run if disabled
        
        FauxScrollFrame_SetOffset(ISync_FavFrame_ListScrollFrame, 0);
        getglobal("ISync_FavFrame_ListScrollFrameScrollBar"):SetValue(0);
        ISync:Fav_BuildIndex();
        ISync:Fav_UpdateScrollFrame();
        
end


--------------------------------------------------
-- ISync:Fav_BuildIndex()
---------------------------------------------------
function ISync:Fav_BuildIndex()

        if(ISYNC_LOADYES == 0) then return nil; end --don't run if disabled
        ------------------------------------------------------
        
        local sUser = UIDropDownMenu_GetText(ISync_FavFrame_DropDown);
        if(not sUser) then return nil; end
        if(not ISyncFav or not ISyncFav[sUser]) then return nil; end
        
        local iNew, xPL1, xPL2;
        
        ISync_Fav_SortIndex             = { };
        iNew = 1;

        --do the loop
        for sKey, sVar in ISyncFav[sUser] do
                
                xPL1 = string.gsub(sKey, "^(%d+):(%d+)$", "%1");
                xPL2 = string.gsub(sKey, "^(%d+):(%d+)$", "%2");
                
                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..xPL1..":0:"..xPL2..":0");
                
                if(name_X) then
                        ISync_Fav_SortIndex[iNew] = { };
                        ISync_Fav_SortIndex[iNew].name = name_X;
                        ISync_Fav_SortIndex[iNew].id = sKey;
                        ISync_Fav_SortIndex[iNew].quality = quality_X;
                else
                        ISync_Fav_SortIndex[iNew] = { };
                        ISync_Fav_SortIndex[iNew].name = ISYNC_SHOWINVALID..": ["..sKey.."]";
                        ISync_Fav_SortIndex[iNew].id = sKey;
                        ISync_Fav_SortIndex[iNew].quality = -99;
                end
                
                iNew = iNew + 1;
                
        end--for index, value in ISyncDB[ISync_RealmNum] do
                
        table.sort(ISync_Fav_SortIndex, ISync_SortByName); --use the sortbyname from the main gui
        ISync_Fav_SortIndex.onePastEnd = iNew;


end


---------------------------------------------------
-- ISync:Fav_UpdateScrollFrame()
---------------------------------------------------
function ISync:Fav_UpdateScrollFrame()

local ISYNC_HEIGHT              = 16;
local ISYNC_SHOWN               = 23;
local LAST_SHOWN                = 1;
        
        if(ISYNC_LOADYES == 0) then return nil; end --don't run if disabled
        
        if( not ISync_Fav_SortIndex or not ISync_Fav_SortIndex.onePastEnd) then
                 ISync:Fav_BuildIndex();
        end
        
        --double check
        if(not ISync_Fav_SortIndex.onePastEnd) then return nil; end

        --Since patch 1.4 the 5th arguement must be nill or an error will occur
        FauxScrollFrame_Update(ISync_FavFrame_ListScrollFrame, ISync_Fav_SortIndex.onePastEnd - 1, ISYNC_SHOWN, ISYNC_HEIGHT, nil);
        
        --do loop until all slots are filled, or we are out of information
        for iItem = 1, ISYNC_SHOWN, 1 do

                local itemIndex = iItem + FauxScrollFrame_GetOffset(ISync_FavFrame_ListScrollFrame);
                local FavItemObj = getglobal("ISync_FavItem"..iItem);
                local FavItemObj_Button = getglobal("ISync_FavRemItem"..iItem);

                if(FavItemObj) then
                
                        --check if were still within bounds
                        if( itemIndex < ISync_Fav_SortIndex.onePastEnd) then
                                
                                if(ISync_Fav_SortIndex[itemIndex].quality ~= -99) then
                                        
                                        FavItemObj:SetText(ISync_Fav_SortIndex[itemIndex].name);

                                        local grabColor = ITEM_QUALITY_COLORS[tonumber(ISync_Fav_SortIndex[itemIndex].quality)];
                                        if( grabColor) then
                                                FavItemObj:SetTextColor(grabColor.r, grabColor.g, grabColor.b);
                                                FavItemObj.r = grabColor.r;
                                                FavItemObj.g = grabColor.g;
                                                FavItemObj.b = grabColor.b;
                                        else
                                                FavItemObj.r = 0;
                                                FavItemObj.g = 0;
                                                FavItemObj.b = 0;
                                        end
                                                
                                else
                                        FavItemObj:SetText("|c00FC5252"..ISync_Fav_SortIndex[itemIndex].name.."|r");
                                end
                                
                                FavItemObj.storeID = ISync_Fav_SortIndex[itemIndex].id;
                                FavItemObj_Button.storeID = ISync_Fav_SortIndex[itemIndex].id;
                                FavItemObj_Button.name = ISync_Fav_SortIndex[itemIndex].name;
                                FavItemObj_Button.quality = ISync_Fav_SortIndex[itemIndex].quality;
                                
                                FavItemObj:Show();
                                FavItemObj_Button:Show();
                        else
                        
                                FavItemObj.storeID = nil;
                                FavItemObj_Button.storeID = nil;
                                FavItemObj_Button.name = nil;
                                FavItemObj_Button.quality = nil;
                                
                                FavItemObj:SetText("");
                                FavItemObj:Hide();
                                FavItemObj_Button:Hide();
                        
                        end--if( itemIndex < ISync_Fav_SortIndex.onePastEnd ) then
                        
                end--if(FavItemObj) then
                        
        end--for iItem = 1, ISYNC_SHOWN, 1 do

end



---------------------------------------------------
-- ISync:Fav_ButtonEnter()
---------------------------------------------------
function ISync:Fav_ButtonEnter()
        
        if(not this.storeID) then return nil; end
        
        local xPL1, xPL2;
        
        xPL1 = string.gsub(this.storeID, "^(%d+):(%d+)$", "%1");
        xPL2 = string.gsub(this.storeID, "^(%d+):(%d+)$", "%2");
        
        if(not xPL1 or not xPL2) then return nil; end
                
        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X, invType_X, icon_X  = GetItemInfo("item:"..xPL1..":0:"..xPL2..":0");

        if(name_X) then
                ISync_FavFrame.TooltipButton = this:GetID();
                GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
                GameTooltip:SetHyperlink(link_X);
                ISync:Do_Parse(UIParent, ISyncTooltip, tonumber(xPL1), "item:"..xPL1..":0:"..xPL2..":0");
                ISync:SendtoMods(GameTooltip, name_X, "item:"..xPL1..":0:"..xPL2..":0", 1, quality_X);
        else
                ISync_FavFrame.TooltipButton = this:GetID();
                GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
                GameTooltip:AddLine(" ", 0, 0, 0);
                GameTooltip:AddLine("|c00FF0000"..ISYNC_ITEMISINVALID_TOOLTIP1.."|r", 0, 0, 0);
                GameTooltip:AddLine("|c00A2D96F"..ISYNC_ITEMISINVALID_TOOLTIP2.."|r", 0, 0, 0);
                GameTooltip:AddLine("|c00FF0000"..ISYNC_ITEMISINVALID_TOOLTIP3.."|r", 0, 0, 0);
                GameTooltip:AddLine(" ", 0, 0, 0);
                GameTooltip:AddLine("|c0000FF00"..ISYNC_BT_ITEMID..":|r |c00BDFCC9"..xPL1.."|r", 0, 0, 0);
                GameTooltip:SetHyperlink("item:"..xPL1..":0:"..xPL2..":0");
                GameTooltip:Show();
        end

end


---------------------------------------------------
-- ISync:Fav_ButtonClick()
---------------------------------------------------
function ISync:Fav_ButtonClick(sButton)

        if(not this.storeID) then return nil; end

        local xPL1, xPL2;
        
        xPL1 = string.gsub(this.storeID, "^(%d+):(%d+)$", "%1");
        xPL2 = string.gsub(this.storeID, "^(%d+):(%d+)$", "%2");
        
        if(not xPL1 or not xPL2) then return nil; end
        

        --special thanks to Axu for the code :)  Support for AxuItemMenus
        if (AxuItemMenus_EvocationTest and this.storeID and AxuItemMenus_EvocationTest(sButton, "isync_fav")) then
                
                AxuItemMenus_FillFromLink("item:"..xPL1..":0:"..xPL2..":0");
                AxuItemMenus_OpenMenu();
        
        elseif (sButton == "LeftButton") then
        
                if( ChatFrameEditBox:IsVisible()) then

                                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X, invType_X, icon_X  = GetItemInfo("item:"..xPL1..":0:"..xPL2..":0");
                                
                                if(name_X and link_X and quality_X) then
        
                                        ChatFrameEditBox:Insert("|c"..ISync:ReturnHexColor(quality_X).."|H"..link_X.."|h["..name_X.."]|h|r");
                                else
                                        ChatFrameEditBox:Insert("["..this:GetText().."]");
                                end
                                
                elseif( IsShiftKeyDown() and ChatFrameEditBox:IsVisible() and this.storeID) then

                                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X, invType_X, icon_X  = GetItemInfo("item:"..xPL1..":0:"..xPL2..":0");
                                
                                if(name_X and link_X and quality_X) then
        
                                        ChatFrameEditBox:Insert("|c"..ISync:ReturnHexColor(quality_X).."|H"..link_X.."|h["..name_X.."]|h|r");
                                else
                                        ChatFrameEditBox:Insert("["..this:GetText().."]");
                                end
                                                    
                elseif( IsControlKeyDown() and this.storeID) then
                
                                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X, invType_X, icon_X  = GetItemInfo("item:"..xPL1..":0:"..xPL2..":0");
                                
                                if(name_X and link_X and quality_X) then DressUpItemLink(link_X); end
                                
                end--end checks
                
        end

end


---------------------------------------------------
-- ISync:FavRem_Click()
---------------------------------------------------
function ISync:FavRem_Click(sFrame)

        if(not sFrame.storeID) then return nil; end
        
        local sUser = UIDropDownMenu_GetText(ISync_FavFrame_DropDown);
        if(not sUser) then return nil; end
        if(not ISyncFav or not ISyncFav[sUser]) then return nil; end
        
        ISyncFav[sUser][sFrame.storeID] = nil; --delete it and refresh
        
        if(sFrame.quality ~=  -99) then
                ISync:Print("|c00A2D96FItemSync:|r "..ISYNC_REMFAV.." <<>> |r|c"..ISync:ReturnHexColor(sFrame.quality)..sFrame.name.."|r");
        else
                ISync:Print("|c00A2D96FItemSync:|r "..ISYNC_REMFAV.." <<>> |r|c00FC5252"..sFrame.name.."|r");
        end
        
        ISync:Fav_Refresh();

end


--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------


---------------------------------------------------
-- ISync:FavPurge_Chk()
---------------------------------------------------
function ISync:FavPurge_Chk()

        local sUser = UIDropDownMenu_GetText(ISync_FavFrame_DropDown);
        if(not sUser) then return nil; end
        if(not ISyncFav or not ISyncFav[sUser]) then return nil; end
        
        StaticPopupDialogs["ISYNC_PURGEFAVITEM_CONFIRM"].text = TEXT(ISYNC_FAV_PURGECHK.."\n\n|c00FFFFFF"..sUser.."|r");
        StaticPopup_Show("ISYNC_PURGEFAVITEM_CONFIRM");

end


---------------------------------------------------
-- ISync:Fav_Purge()
---------------------------------------------------
function ISync:Fav_Purge()

        local sUser = UIDropDownMenu_GetText(ISync_FavFrame_DropDown);
        if(not sUser) then return nil; end
        if(not ISyncFav or not ISyncFav[sUser]) then return nil; end
        
        ISyncFav[sUser] = nil; --delete it
        ISyncFav[sUser] = { }; --recreate

        ISync:Fav_Refresh();
end

Generated by GNU Enscript 1.6.5.90.