vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[

        Set Wrangler
        
]]

--------------------------------------------------------------------------------------------------
-- Constants
--------------------------------------------------------------------------------------------------
SW_NUM_CLASSES          = table.getn(SW_TEXT_CLASSNAMES);
SW_NUM_SET_TABS         = 10;
SW_NUM_BUTTONS          = 8;
SW_MAX_CACHE_ATTEMPTS = 50;

SW_ITEMS_ON_LINE        = 2;

SW_PART_HEAD            = 1;
SW_PART_SHOULD          = 2;
SW_PART_CHEST           = 3;
SW_PART_LEGS            = 4;
SW_PART_HANDS           = 5;
SW_PART_FEET            = 6;
SW_PART_BELT            = 7;
SW_PART_WRISTS          = 8;
SW_PART_BACK            = 9;
SW_PART_TRINKET         = 10;
SW_PART_FINGER          = 11;
SW_PART_HAND            = 12;
SW_PART_OHAND           = 13;
SW_PART_OFFHAND         = 14;

SW_PART_ZG_TRINK        = 1;
SW_PART_ZG_NECK         = 2;
SW_PART_ZG_CHEST        = 3;
SW_PART_ZG_BELT         = 4;
SW_PART_ZG_WRISTS       = 5;

SW_CACHE_TIMER                  = 0.5;

SW_DEFAULT_ICON                 = "Interface/Icons/INV_Misc_QuestionMark";
SW_VERSION                              = "12";

SW_WHISPER_MAX          = 17;

SW_MAX_TABS                     = 8;

--------------------------------------------------------------------------------------------------
-- Globals
--------------------------------------------------------------------------------------------------
gaClassSetData          = {};
gSelectedClass          = 0;
gSelectedSet            = 0;
gSelectedPart           = 0;

gLinkToIndex            = 1;

gDoCacheTimer           = 0;
gCacheTimer                     = 0;
gCacheAttempts          = 0;
gCacheData                      = {};
gCacheData.itemLink = "";
gCacheData.callback     = "";
gWhisperLowerBound      = 1;

gTabSet                         = 0;

gLocalPartData          = {};

local function dout(msg)
        if( DEFAULT_CHAT_FRAME) then
                DEFAULT_CHAT_FRAME:AddMessage(msg,1.0,0,0);
        end
end

--------------------------------------------------------------------------------------------------
-- Class level functions
--------------------------------------------------------------------------------------------------
function SetWrangler_LoadClass(classId,setId)
        SetWrangler_HideInfoIcons();
        
        if (setId == nil) then
                gSelectedSet = 1;
                setId = 1;
        end
        
        gTabSet = 0;
        SetWrangler_SetTabText(classId);
        SetWrangler_LoadSetDropDown();
        SetWrangler_UpdateClassTabs(classId);
        SetWrangler_LoadSet(setId);
        
        -- Page numbers
        SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
end

function SetWrangler_UpdateClassTabs(classId)
        local tabFrame;
        
        for i=1,SW_NUM_CLASSES do
                tabFrame = getglobal("SetWranglerFrameTab"..i);
                
                if (i == classId) then
                        PanelTemplates_SelectTab(tabFrame);
                else
                        PanelTemplates_DeselectTab(tabFrame);   
                end     
        end     
end

function SetWrangler_SetClassTabs()
        local tabFrame;
        
        for i=1,table.getn(gaClassSetData) do
                --dout("Setting tab: "..i..": "..gaClassSetData[i].sName);
                tabFrame = getglobal("SetWranglerFrameTab"..i);
                
                tabFrame:SetText(gaClassSetData[i].sName);
                PanelTemplates_TabResize(1,tabFrame);
                getglobal(tabFrame:GetName().."HighlightTexture"):SetWidth(tabFrame:GetTextWidth() + 35);

                tabFrame:Show();
        end     
end

--------------------------------------------------------------------------------------------------
-- Set level functions
--------------------------------------------------------------------------------------------------
function SetWrangler_LoadSet(setId, leaveChecks)
        -- disable other tabs until set is loaded
                
        --dout("Load Set: "..setId);
        local setSize = table.getn(gaClassSetData[gSelectedClass].aSetData);

        -- Check everything
        if (setSize == 0) then
                SetWrangler_LoadEmptySet();
        else
                if (leaveChecks == nil) then
                        SetWrangler_SetChecks(1);
                end

                -- Hide the info icon
                SetWranglerRankIcon:Hide();

                SetWrangler_UpdateSetTabs(setId);
        
                -- Title Text
                nameLocationText = getglobal("SetWranglerButtonTitle".."ButtonTextNameLocation");
                infoText = getglobal("SetWranglerButtonTitle".."ButtonTextInfo");
                        
                SetWranglerButtonTitleButtonTextNameLocation:SetText(gaClassSetData[gSelectedClass].aSetData[setId].sName);
                infoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].setInfo);

                -- Set the set stats
                SetWranglerFrameInfoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].setStats);

                for i=1,SW_NUM_BUTTONS do
                        swButton = getglobal("SetWranglerSetTabFrameButton"..i);
                        swButton:Hide();
                end
                
                for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[setId].aPartData) do
                        nameLocationText = getglobal("SetWranglerSetTabFrameButton"..i.."ButtonTextNameLocation");
                        infoText = getglobal("SetWranglerSetTabFrameButton"..i.."ButtonTextInfo");
                        icon = getglobal("SetWranglerSetTabFrameButton"..i.."Icon");
                        
                        -- Set the text
                        infoText:SetText(gaClassSetData[gSelectedClass].aSetData[setId].aPartData[i].itemInfo);

                        -- Set the icon
                        link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink
                        
                        if (string.find(link,"item:") ~= nil) then
                                checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
                                state = checkButton:GetChecked();
                                
                                if (state ~= nil) then
                                        if (SetWranglerOptions.useLocalCacheOnly == nil and SetWranglerOptions.disconnectFree == nil) then
                                                SetWrangler_CacheItem(link,SetWrangler_LoadSet);
                                                --dout("caching");
                                        end
                                end
                                local nm,_,rarity,_,_,_,_,_,tex = GetItemInfo(link);

                                if (tex ~= nil) then
                                        icon:SetNormalTexture(tex);
                                else
                                        icon:SetNormalTexture(SW_DEFAULT_ICON);
                                end

                                if (nm ~= nil) then
                                        nameLocationText:SetText(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[rarity]..nm..SW_LINK_COLOR_CLOSE);
                                elseif (SetWranglerOptions.disconnectFree == nil) then
                                        nameLocationText:SetText("Link not cached locally...");
                                else
                                        local index = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink;
                                        index = string.gsub(index,"item:","");
                                        nameLocationText:SetText(SW_LINK_COLOR_OPEN..SWLocalSetData[index]["c"]..SWLocalSetData[index]["i"]..SW_LINK_COLOR_CLOSE);
                                end
                        else
                                icon:SetNormalTexture(SW_DEFAULT_ICON);
                                nameLocationText:SetText("Invalid link...");
                        end

                        swButton = getglobal("SetWranglerSetTabFrameButton"..i);
                        swButton:Show();
                end
        end
end

function SetWrangler_GetItemInfo(link)
        local part = gLocalPartData[link];
        
        local name, tex;
        
        if (part ~= nil) then
                name = SW_LINK_COLOR_OPEN..part.color[1]..part.line[1]..SW_LINK_COLOR_CLOSE;
                tex = part.tex;
        else
                name = "Invalid link...";
                tex = nil;
        end
        
        return name,tex;
end


function SetWrangler_SetChecks(state)
        SetWranglerButtonTitleCheckButton:SetChecked(state);
        
        local checkButton;

        for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
                checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
                checkButton:SetChecked(state);
        end
end

function SetWrangler_LoadEmptySet()
        SetWranglerButtonTitleCheckButton:SetChecked(nil);
        
        nameLocationText = getglobal("SetWranglerButtonTitle".."ButtonTextNameLocation");
        infoText = getglobal("SetWranglerButtonTitle".."ButtonTextInfo");
                
        SetWranglerButtonTitleButtonTextNameLocation:SetText("Unknown Set");
        infoText:SetText("Ensure case is handled in SetWranglerData.lua");
        
        for i=1,SW_NUM_BUTTONS do
                swButton = getglobal("SetWranglerSetTabFrameButton"..i);
                swButton:Hide();
        end
end

function SetWrangler_UpdateSetTabs(setId)
        local tabFrame;
        
        setId = setId - (gTabSet * SW_MAX_TABS);

        for i=1, SW_MAX_TABS do
                tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
                
                if (i == setId) then
                        PanelTemplates_SelectTab(tabFrame);
                else
                        PanelTemplates_DeselectTab(tabFrame);   
                end     
        end     
end


function SetWrangler_SetTabText(classId)
        if (classId == nil) then
                classId = gSelectedClass;
        end
        
        local startIndex = (gTabSet * SW_MAX_TABS) + 1;
        local endIndex  = startIndex + SW_MAX_TABS - 1;
        
        if (table.getn(gaClassSetData[classId].aSetData) < endIndex) then
                endIndex = table.getn(gaClassSetData[classId].aSetData);
        end
        
        local tabFrame;

        for i=1,SW_NUM_SET_TABS do
                tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
                tabFrame:Hide();
        end
        
        local tabIndex = 1;
        
        for i=startIndex,endIndex do
                tabFrame = getglobal("SetWranglerSetTabFrameTab"..tabIndex);
                tabIndex = tabIndex + 1;

                tabFrame:SetText(gaClassSetData[classId].aSetData[i].sTabName);
                PanelTemplates_TabResize(0,tabFrame);
                getglobal(tabFrame:GetName().."HighlightTexture"):SetWidth(tabFrame:GetTextWidth() + 31);
                
                if (SetWranglerOptions.useDropDown == nil) then
                        tabFrame:Show();
                end
        end
        
        -- button disable / enable
        --dout(gaClassSetData[classId].numTabSets.." == "..(gTabSet + 1));
        if (gaClassSetData[classId].numTabSets == (gTabSet + 1)) then
                SetWranglerTabButtonNext:Disable();
        else
                SetWranglerTabButtonNext:Enable();
        end
        
        if (gTabSet == 0) then
                SetWranglerTabButtonBack:Disable();
        else
                SetWranglerTabButtonBack:Enable();
        end
end


--------------------------------------------------------------------------------------------------
-- Utility functions
--------------------------------------------------------------------------------------------------
function SetWrangler_Toggle()
  if SetWranglerFrame:IsVisible() then
    HideUIPanel(SetWranglerFrame);
  else
    ShowUIPanel(SetWranglerFrame);
  end
end

function SetWrangler_StartCacheTimer(itemLink, callback)
        gDoCacheTimer = 1;
        gCacheTimer = 0;
        --gCacheAttempts = 0;
        
        gCacheData.itemLink = itemLink;
        gCacheData.callback     = callback;
end

function SetWrangler_MakeTextLink(itemLink)
        local iName,iLink,iRarity,_,iType,_,_,iEquip = GetItemInfo(itemLink);

        local textLink = nil;
                
        if (iName == nil) then
                --dout("Failed to cache item link");
        else
                --dout("Creating a link for: "..iName);
                
                -- New link
                textLink = SW_LINK_COLOR_OPEN;
                textLink = textLink..SW_LINK_COLORS[iRarity];
                textLink = textLink..SW_LINK_HYPERLINK_OPEN;
                textLink = textLink..itemLink;
                textLink = textLink..SW_LINK_LINK_OPEN;
                textLink = textLink..iName;
                textLink = textLink..SW_LINK_LINK_CLOSE;
                textLink = textLink..SW_LINK_COLOR_CLOSE;
        end

        return textLink;
end

function SetWrangler_CacheItem(itemLink,callback)
        local attempts = 0;
        local name = GetItemInfo(itemLink);

        if (name == nil) then
                --dout("Caching: "..itemLink);

                ShowUIPanel(SWCacheTooltip);
                if ( not SWCacheTooltip:IsVisible() ) then
                        SWCacheTooltip:SetOwner(UIParent, "ANCHOR_PRESERVE");
                end

                SWCacheTooltip:SetHyperlink(itemLink);
                                
                SetWrangler_StartCacheTimer(itemLink,callback);
        else
                --dout(itemLink.." is already cached");
        end
end

function SetWrangler_LoadPlayerClass()
        local playerClass = UnitClass("player");

        if (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_DRUID]) then
                gSelectedClass = SW_CLASS_DRUID;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_HUNTER]) then
                gSelectedClass = SW_CLASS_HUNTER;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_MAGE]) then
                gSelectedClass = SW_CLASS_MAGE;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_PALADIN]) then
                gSelectedClass = SW_CLASS_PALADIN;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_PRIEST]) then
                gSelectedClass = SW_CLASS_PRIEST;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_ROGUE]) then
                gSelectedClass = SW_CLASS_ROGUE;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_SHAMAN]) then
                gSelectedClass = SW_CLASS_SHAMAN;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_WARLOCK]) then
                gSelectedClass = SW_CLASS_WARLOCK;
                gSelectedSet = 1;
        elseif (playerClass == SW_TEXT_CLASSNAMES[SW_CLASS_WARRIOR]) then
                gSelectedClass = SW_CLASS_WARRIOR;
                gSelectedSet = 1;
        end

        SetWrangler_LoadClass(gSelectedClass, gSelectedSet);
end


function SetWrangler_Init(opposite)
        local faction = UnitFactionGroup("player");
        if (opposite == nil) then
                if (string.lower(faction) == SW_TEXT_ALLIANCE) then
                        gPlayerFaction = SW_TEXT_ALLIANCE;
                        SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_A;
                else
                        gPlayerFaction = SW_TEXT_HORDE;
                        SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_H;
                end
        else
                if (string.lower(faction) == SW_TEXT_ALLIANCE) then
                        gPlayerFaction = SW_TEXT_HORDE;
                        SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_H;
                else
                        gPlayerFaction = SW_TEXT_ALLIANCE;
                        SW_TEXT_RANK_NAMES = SW_TEXT_RANK_NAMES_A;      
                end
        end
        
        for i=1,table.getn(SW_TEXT_CLASSNAMES) do
                gaClassSetData[i] = SetWrangler_MakeMasterData(i);
        end
        
        SetWrangler_SetClassTabs();
        
        -- Set arrow text
        SetWranglerTabButtonNext:SetText(">>");
        SetWranglerTabButtonBack:SetText("<<");
end

function SetWrangler_LoadSetDropDown()
        UIDropDownMenu_Initialize(SetWranglerSetDropDown, SetWranglerSetDropDownOnInit);
        UIDropDownMenu_SetWidth(150, SetWranglerSetDropDown);
        
        SetWrangler_UpdateSetDropDown();
end

function SetWrangler_UpdateSetDropDown()
        UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, gSelectedSet);
        UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sTabName,SetWranglerSetDropDown);
end

--------------------------------------------------------------------------------------------------
-- Handler functions
--------------------------------------------------------------------------------------------------

function SetWranglerOnLoad()
        UIPanelWindows["SetWranglerFrame"] = { area = "left", pushable = 9, whileDead = 1 }; 

        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("PLAYER_LOGIN");

        -- Register our slash command
        SLASH_SETWRANGLER1 = "/setwrangler";
        SLASH_SETWRANGLER2 = "/sw";
        SlashCmdList["SETWRANGLER"] = function(msg)
                SetWrangler_SlashCommandHandler(msg);
        end

        UIDropDownMenu_Initialize(SetWranglerLinkDropDown, SetWranglerDropDownOnInit);
        UIDropDownMenu_SetWidth(60, SetWranglerLinkDropDown);
        
        UIDropDownMenu_Initialize(SetWranglerRightClickMenu, SetWranglerRightClickMenu_AddItems, "MENU");
end


function SetWrangler_OnShow()
        SetWranglerFrameTitleText:SetText(BINDING_HEADER_SETWRANGLER.." v"..SW_VERSION.."");
        
        -- Load the player's class
        SetWrangler_LoadPlayerClass();
        
        -- Page numbers
        SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
        
        -- temp
        --SetWrangler_Init();
        --

        gLinkToIndex = 1;
        UIDropDownMenu_SetSelectedValue(SetWranglerLinkDropDown, gLinkToIndex);
        UIDropDownMenu_SetText(SW_TEXT_LINK_OPTIONS[gLinkToIndex],SetWranglerLinkDropDown);
        
        --UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, gSelectedSet);
        --UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sTabName,SetWranglerLinkDropDown);
        
        if (SetWranglerOptions.disconnectFree ~= nil) then
                SetWranglerPreviewButton:Disable();
                SetWranglerLinkButton:Disable();
        else
                SetWranglerPreviewButton:Enable();
                SetWranglerLinkButton:Enable();
        end
end

function SetWranglerOnEvent(event)
        if( event == "VARIABLES_LOADED" ) then
                if (SetWranglerOptions == nil) then
                        SetWranglerOptions = {};
                        SetWranglerOptions.useLocalCacheOnly = 1;
                        SetWranglerOptions.useDropDown = nil;
                end
                
                -- Set the check
                SetWranglerLocalCacheCheckButton:SetChecked(SetWranglerOptions.useLocalCacheOnly);
                
                -- set the set drop down
                if (SetWranglerOptions.useDropDown ~= nil) then
                        SetWrangler_ShowTabNav(false);
                        SetWrangler_ShowDropDownNav(true);
                end
                
                -- see if we need to load local data
                if (SetWranglerOptions.disconnectFree ~= nil) then
                        SetWrangler_LoadLocalData();
                end
        elseif( event == "PLAYER_LOGIN" ) then
                SetWrangler_Init(SetWranglerOptions.viewOpposingFaction);
        end
end

function SetWrangler_OnInfoButtonEnter()
        GameTooltip:SetOwner(this, "ANCHOR_NONE");
        GameTooltip:SetPoint("TOPLEFT",this, "BOTTOMLEFT",32,0);
        
        local link = nil;
                
        if (this:GetID() == 1) then
                link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink2;
        elseif (this:GetID() == 2) then
                link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink3;
        elseif (this:GetID() == 3) then
                link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink4;
        else
                link = "";
        end
        
        if (SetWranglerOptions.disconnectFree == nil) then -- do normal method
                
                if (string.find(link,"item:") ~= nil) then
                        if (GetItemInfo(link)) then
                                GameTooltip:SetHyperlink(link);
                                GameTooltip:Show();
                        end
                end
        else
                local index = string.gsub(link,"item:","");
                SetWrangler_SetLocalTooltip(index);
        end
end

function SetWrangler_OnButtonEnter()
        GameTooltip:SetOwner(this, "ANCHOR_NONE");
        GameTooltip:SetPoint("TOPLEFT",this, "BOTTOMLEFT",32,0);
        
        if (SetWranglerOptions.disconnectFree == nil) then -- do normal method
                local link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[this:GetParent():GetID()].itemLink;

                if (string.find(link,"item:") ~= nil) then
                        if (GetItemInfo(link)) then
                                GameTooltip:SetHyperlink(link);
                                GameTooltip:Show();
                        end
                end
        else -- Do disconnect free local method
                local index = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[this:GetParent():GetID()].itemLink;
                index = string.gsub(index,"item:","");
                SetWrangler_SetLocalTooltip(index);
        end

        this:GetParent():LockHighlight();
end

function SetWrangler_SetLocalTooltip(index)
        local ttText = SWLocalSetData[index]["t"];
        local token = "";
                
        if (ttText ~= nil) then
                local color = SWLocalSetData[index]["c"];
                
                --dout(ttText);
                token,ttText = SetWrangler_GetToken(ttText);
                GameTooltip:AddLine(SW_LINK_COLOR_OPEN..color..token..SW_LINK_COLOR_CLOSE);
                
                -- Binding
                token,ttText = SetWrangler_GetToken(ttText);
                GameTooltip:AddLine(SW_LINK_COLOR_OPEN.."ffffff"..token..SW_LINK_COLOR_CLOSE);
                                
                -- Spot and type
                leftToken,ttText = SetWrangler_GetToken(ttText);
                rightToken,ttText = SetWrangler_GetToken(ttText);
                GameTooltip:AddDoubleLine(leftToken,rightToken,1,1,1,1,1,1);
                
                -- The bonuses
                token,ttText = SetWrangler_GetToken(ttText);
                --dout(token.." ("..SetWrangler_SafeLen(token)..")");
                local lineColor = "ffffff";
                while (SetWrangler_IsEmpty(token) == false) do
                        if (string.find(token,"Equip:") ~= nil or string.find(token,"Passive:") ~= nil or string.find(token,"Use:") ~= nil) then
                                lineColor = SW_GREEN;
                        end
                        
                        GameTooltip:AddLine(SW_LINK_COLOR_OPEN..lineColor..token..SW_LINK_COLOR_CLOSE);
                        token,ttText = SetWrangler_GetToken(ttText);
                        --dout(token.." ("..SetWrangler_SafeLen(token)..")");
                        
                end
                
                local firstTime = true;
                
                -- Set the set text
                token,ttText = SetWrangler_GetToken(ttText);
                while (SetWrangler_SafeLen(token) > 0) do
                        if (firstTime == true) then
                                GameTooltip:AddLine(" ");
                                firstTime = false;
                        end
                        GameTooltip:AddLine(SW_GOLD_OPEN..token..SW_LINK_COLOR_CLOSE);
                        token,ttText = SetWrangler_GetToken(ttText);
                end
                
                firstTime = true;
                
                -- Set the descriptive text
                token,ttText = SetWrangler_GetToken(ttText);
                while (SetWrangler_SafeLen(token) > 0) do
                        if (firstTime == true) then
                                GameTooltip:AddLine(" ");
                                firstTime = false;
                        end
                        GameTooltip:AddLine(SW_GREEN_OPEN..token..SW_LINK_COLOR_CLOSE);
                        token,ttText = SetWrangler_GetToken(ttText);
                end
                                                
                GameTooltip:SetWidth(200);
                GameTooltip:Show();
        end
end

function SetWrangler_GetToken(ttText)
        if (ttText == nil) then
                return nil,nil;
        end
        
        local lineEnd = string.find(ttText,"ยท");
        
        if (lineEnd == nil) then
                return "";
        end
        
        if (lineEnd > 35) then
                for i=35, SetWrangler_SafeLen(ttText) do
                        --dout(string.byte(token,i));
                        local char = string.byte(ttText,i);
                        
                        if (char > 127 or char == 32) then
                                lineEnd = i;
                                i = SetWrangler_SafeLen(ttText);
                        end
                end
        end
        
        local token = string.sub(ttText,1,lineEnd);
        ttText = string.sub(ttText,lineEnd+1);
        
        return token,ttText;
end

function SetWrangler_SafeLen(str)
        if (str == nil) then
                return 0;
        end
        
        return string.len(str);
end

function SetWrangler_IsEmpty(token)
        if (SetWrangler_SafeLen(token) == 0) then
                return true;
        end
        
        for i=1, SetWrangler_SafeLen(token) do
                --dout(string.byte(token,i));
                local char = string.byte(token,i);
                
                if (char ~= 32 and char ~= 10 and char < 127) then
                        return false;
                end
        end
        
        return true;
end

function SetWrangler_OnUpdate(elapse)
        if (gDoCacheTimer == 1) then
                --dout("Update: "..gCacheTimer);
                gCacheTimer = gCacheTimer + elapse;

                if (gCacheTimer > SW_CACHE_TIMER) then
                        gDoCacheTimer = 0;
                        gCacheAttempts = gCacheAttempts + 1;

                        if (gCacheAttempts <= SW_MAX_CACHE_ATTEMPTS) then
                                gCacheData.callback(gSelectedSet,1);
                        else
                                nameLocationText:SetText("Failed to load link...");
                        end
                end
        end     
end

function SetWranglerFunctionButton_OnEnter()
        if( this:GetCenter() < GetScreenWidth() / 2 ) then
                GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
        else
                GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
        end     

        if (this == SetWranglerPreviewButton) then
                GameTooltip:SetText("Preview the checked items in the Dressing Room.");
        elseif (this == SetWranglerLinkButton) then
                GameTooltip:SetText("Link the checked items in the chat window.");
        elseif (this == SetWranglerLocalCacheCheckButton or this == SWOptionsLocalCacheCheckButton) then
                GameTooltip:SetText(SW_TEXT_CACHE_TT);
        elseif (this == SetWranglerTabButtonNext) then
                GameTooltip:SetText(SW_TEXT_TAB_NEXT);
        elseif (this == SetWranglerTabButtonBack) then
                GameTooltip:SetText(SW_TEXT_TAB_BACK);
        elseif (this == SWOptionsDropDownCheckButton) then
                GameTooltip:SetText(SW_TEXT_TAB_NAV);
        elseif (this == SWOptionsMOFakeButton) then
                GameTooltip:SetText(SW_TEXT_PMODE);
        elseif (this == SWOptionsDisconnectFreeCheckButton) then
                GameTooltip:SetText(SW_TEXT_DFMODE);
        end

end

function SetWrangler_SlashCommandHandler(msg)
        SetWrangler_Toggle();
end

--------------------------------------------------------------------------------------------------
-- OnClick Handlers
--------------------------------------------------------------------------------------------------
function SetWranglerOnEventOnClassClick(classId)
        gDoCacheTimer = 0;
        
        SetWrangler_HideInfoIcons();
        
        gSelectedClass = classId;

        if (classId <= table.getn(gaClassSetData)) then
                SetWrangler_LoadClass(classId);
        end
end


function SetWranglerOnEventOnSetClick(setId)
        gDoCacheTimer = 0;
        
        SetWrangler_HideInfoIcons();
        
        gSelectedSet = (gTabSet * SW_MAX_TABS) + setId;
        SetWrangler_LoadSet(gSelectedSet);
        SetWrangler_UpdateSetDropDown();
end

function SetWrangler_OnCheckButtonClick()
        local state = this:GetChecked();
        SetWrangler_SetChecks(state);
end

function SetWrangler_OnPreview()
        --ShowUIPanel(DressUpModel);
        -- Dummy link to open it or Undress will not work initially
        DressUpItemLink("");
        
        if (SetWranglerOptions.previewMode == 2) then -- get naked
                DressUpModel:Undress();
        elseif (SetWranglerOptions.previewMode == 3) then -- dress in current armor
                DressUpModel:Dress();
        end
        
        for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
                checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
                state = checkButton:GetChecked();

                if (state ~= nil) then
                        if (GetItemInfo(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink) ~= nil) then
                                DressUpItemLink(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink);           
                        end
                end
        end
        --DressUpItemLink("item:4044:0:0:0");
        --DressUpItemLink("item:16793:0:0:0");
end

function SetWrangler_OnLink()
        --dout("Link");
        local numOnLine = 0;
        local line = "";
        
        local CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[gLinkToIndex];
                        
        SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,CHAT_SYSTEM,nil,nil);
        SendChatMessage(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sName.." ("..gaClassSetData[gSelectedClass].sName..", "..gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setInfo..")",CHAT_SYSTEM,nil,nil);
        for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
                checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
                state = checkButton:GetChecked();

                if (state ~= nil) then
                        link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink
                        
                        if (GetItemInfo(link) ~= nil) then
                                textLink = SetWrangler_MakeTextLink(link);
                                
                                if (textLink ~= nil and string.find(link,"item:") ~= nil) then
                                        line = line..textLink..", ";
                                        numOnLine = numOnLine + 1;
                                        
                                        val = math.mod(numOnLine,SW_ITEMS_ON_LINE);
                                        
                                        if (math.mod(numOnLine,SW_ITEMS_ON_LINE) == 0) then
                                                line = string.sub(line,1,string.len(line) - 2);
                                                SendChatMessage(line,CHAT_SYSTEM,nil,nil);
                                                numOnLine = 0;
                                                line = "";
                                        end
                                end
                        end
                end
        end
        
        if (numOnLine > 0) then
                line = string.sub(line,1,string.len(line) - 2);
                SendChatMessage(line,system,nil,whisperName);
        end
end

function SetWrangler_OnLocalCache()
        if (SetWranglerOptions.useLocalCacheOnly == nil) then
                SetWranglerOptions.useLocalCacheOnly = 1;
        else
                SetWranglerOptions.useLocalCacheOnly = nil;
                SetWrangler_HideInfoIcons();
                SetWrangler_LoadSet(gSelectedSet,1);
        end
end

function SetWranglerCommand_OnLink(system, whisperName)
        --dout("Link");
        
        local numOnLine = 0;
        local line = "";
                                
        SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,system,nil,whisperName);
        SendChatMessage(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].sName.." ("..gaClassSetData[gSelectedClass].sName..", "..gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setInfo..")",system,nil,whisperName);
        for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData) do
                checkButton = getglobal("SetWranglerSetTabFrameButton"..i.."CheckButton");
                state = checkButton:GetChecked();

                if (state ~= nil) then
                        link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[i].itemLink

                        if (GetItemInfo(link) ~= nil) then
                                textLink = SetWrangler_MakeTextLink(link);

                                if (textLink ~= nil and string.find(link,"item:") ~= nil) then
                                        line = line..textLink..", ";
                                        numOnLine = numOnLine + 1;
                                        
                                        if (math.mod(numOnLine,SW_ITEMS_ON_LINE) == 0) then
                                                line = string.sub(line,1,string.len(line) - 2);
                                                SendChatMessage(line,system,nil,whisperName);
                                                numOnLine = 0;
                                                line = "";
                                        end
                                end
                        end
                end
        end
        
        if (numOnLine > 0) then
                line = string.sub(line,1,string.len(line) - 2);
                SendChatMessage(line,system,nil,whisperName);
        end
end

function SetWrangler_HideInfoIcons()
        -- Hide the info icons
        SetWranglerSetTabFrameInfoIcon1:Hide();
        SetWranglerSetTabFrameInfoIcon2:Hide();
        SetWranglerSetTabFrameInfoIcon3:Hide();
end

function SetWrangler_LoadInfoIcons()
        local part = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart];
        
        SetWrangler_HideInfoIcons();
        
        for i=1,3 do
                local link = nil;
                
                if (i == 1) then
                        link = part.itemLink2;
                elseif (i == 2) then
                        link = part.itemLink3;
                elseif (i == 3) then
                        link = part.itemLink4;
                end
                
                local button = getglobal("SetWranglerSetTabFrameInfoIcon"..i);
                local title = getglobal("SetWranglerInfoIconTitle"..i);
                if (link ~= nil) then
                        if (string.find(link,"item:") ~= nil) then
                                if (SetWranglerOptions.useLocalCacheOnly == nil) then
                                        SetWrangler_CacheItem(link,SetWrangler_LoadInfoIcons);
                                end
                                
                                local nm,_,rarity,_,_,_,_,_,tex = GetItemInfo(link);
                                
                                if (tex ~= nil) then
                                        button:SetNormalTexture(tex);
                                else
                                        button:SetNormalTexture(SW_DEFAULT_ICON);
                                end
                                
                                if (nm ~= nil) then
                                        title:SetText(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[rarity]..nm..SW_LINK_COLOR_CLOSE);
                                elseif (SetWranglerOptions.disconnectFree == nil) then
                                        title:SetText("Link not cached locally...");
                                else
                                        local index = string.gsub(link,"item:","");
                                        title:SetText(SW_LINK_COLOR_OPEN..SWLocalSetData[index]["c"]..SWLocalSetData[index]["i"]..SW_LINK_COLOR_CLOSE);
                                end
                        else
                                --dout("default tex");
                                button:SetNormalTexture(SW_DEFAULT_ICON);
                        end
                        
                        button:Show();
                end
        end
end


function SetWranglerItem_OnClick(button)
        gDoCacheTimer = 0;
        
        local partIndex = this:GetID();

        if (partIndex == 500) then -- then icon button
                partIndex = this:GetParent():GetID();
        end

        gSelectedPart = partIndex;
        
        if (button == "LeftButton") then
                if (IsShiftKeyDown()) then
                        if (SetWranglerOptions.disconnectFree == nil) then
                                link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink
                                
                                if (link ~= nil) then
                                        if (GetItemInfo(link) ~= nil) then 
                                                textLink = SetWrangler_MakeTextLink(link);
                                                
                                                if ( not ChatFrameEditBox:IsVisible() ) then
                                                        ChatFrame_OpenChat(textLink);
                                                else
                                                        ChatFrameEditBox:SetText(ChatFrameEditBox:GetText()..textLink);
                                                end
                                        end
                                end
                        end
                else
                        -- see if the part has an info icon
                        local part = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[partIndex];
                        infoIcon = part.itemInfoIcon;
                        if (infoIcon ~= nil) then
                                SetWranglerRankIcon:SetTexture(infoIcon);
                                SetWranglerRankIcon:Show();     
                        else
                                SetWranglerRankIcon:Hide();
                        end
                        
                        SetWranglerFrameInfoText:SetText(part.itemStats);
                        
                        SetWrangler_LoadInfoIcons();
                end
        else
                if (SetWranglerOptions.disconnectFree == nil) then
                        gWhisperLowerBound = 1;
                        
                        xOffset = 72;
                        yOffset = (this:GetHeight() / 2);
                        
                        ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrameButton"..partIndex, xOffset, yOffset);
                end
        end
end

function SetWranglerTitleButton_OnClick(button)
        SetWrangler_HideInfoIcons();
        
        -- Set the set stats
        gSelectedPart = 0;

        if (button == "LeftButton") then
                SetWranglerRankIcon:Hide();
                SetWranglerFrameInfoText:SetText(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].setStats);
        else
                gWhisperLowerBound = 1;
                xOffset = 40;
                yOffset = (this:GetHeight() / 2);
                
                ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerButtonTitle", xOffset, yOffset);
        end
end

function SetWranglerRightClickMenu_OnClick()
        ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrame", 100, 420);

        if (this.value == "preview") then
                if (gSelectedPart > 0) then
                        if (GetItemInfo(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink) ~= nil) then
                                DressUpItemLink(gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink);
                        end
                else -- do whole set
                        SetWrangler_OnPreview();
                end
        else
                local CHAT_SYSTEM, link;
                
                if (this.value == 1) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[1];
                elseif (this.value == 2) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[2];
                elseif (this.value == 3) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[3];
                elseif (this.value == 4) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[4];
                elseif (this.value == 5) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[5];
                elseif (this.value == 6) then
                        CHAT_SYSTEM = SW_TEXT_LINK_OPTIONS_SL[6];
                end

                if (gSelectedPart > 0) then
                        link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink;
                        
                        if (string.find(link,"item:") ~= nil) then
                                                        
                                SendChatMessage(BINDING_HEADER_SETWRANGLER.." "..SW_TEXT_LINKS,CHAT_SYSTEM);
                                                        
                                textLink = SetWrangler_MakeTextLink(link);

                                if (GetItemInfo(link) ~= nil) then
                                        if (textLink ~= nil) then
                                                SendChatMessage(textLink,CHAT_SYSTEM);
                                        end
                                end
                        end
                else -- link set
                        SetWranglerCommand_OnLink(CHAT_SYSTEM);
                end
        end
end

function SetWranglerWhisperRightClickMenu_OnClick()
        ToggleDropDownMenu(1, nil, SetWranglerRightClickMenu, "SetWranglerSetTabFrame", 100, 420);

        local whisper;
        
        if (this.value == 0) then
                whisper = UnitName("target");
        else
                whisper = this.value;
        end

        if (whisper ~= nil) and (string.len(whisper) > 0) then
                if (gSelectedPart > 0 and string.find(link,"item:") ~= nil) then
                        link = gaClassSetData[gSelectedClass].aSetData[gSelectedSet].aPartData[gSelectedPart].itemLink;
                        
                        if (GetItemInfo(link) ~= nil) then
                                textLink = SetWrangler_MakeTextLink(link);
                                SendChatMessage(textLink,"WHISPER",nil,whisper);
                        end
                else
                        SetWranglerCommand_OnLink("WHISPER",whisper);
                end
        end
end

function SetWranglerMoreRightClickMenu_OnClick()
        --dout("inc and update");
        gWhisperLowerBound = gWhisperLowerBound + SW_WHISPER_MAX + 1;
        
        UIDropDownMenu_Initialize(SetWranglerRightClickMenu, SetWranglerRightClickMenu_AddItems, "MENU");
end


function SetWrangler_OnTabNavClick()
        if (this == SetWranglerTabButtonNext) then
                gTabSet = gTabSet + 1;
        elseif (this == SetWranglerTabButtonBack) then
                gTabSet = gTabSet - 1;
        end
        
        SetWrangler_UpdateSetTabs(gSelectedSet);
        SetWrangler_SetTabText();
        -- Page numbers
        SetWranglerTabPageText:SetText(SW_TEXT_PAGE.." "..(gTabSet+1).."/"..gaClassSetData[gSelectedClass].numTabSets);
end

function SetWrangler_OnOptions()
        ShowUIPanel(SWOptionsFrame);
end
--------------------------------------------------------------------------------------------------
-- Menu functions
--------------------------------------------------------------------------------------------------
function SetWranglerDropDownOnInit()
        SetWranglerDropDownAdd(SetWranglerDropDownDropDownOnSelect);
end

function SetWranglerSetDropDownOnInit()
        SetWranglerDropDownAddSets(SetWranglerSetDropDownOnSelect);
end


function SetWranglerDropDownDropDownOnSelect()
        UIDropDownMenu_SetSelectedValue(SetWranglerLinkDropDown, this.value);
        UIDropDownMenu_SetText(SW_TEXT_LINK_OPTIONS[this.value],SetWranglerLinkDropDown);
        gLinkToIndex = this.value;
end

function SetWranglerSetDropDownOnSelect()
        UIDropDownMenu_SetSelectedValue(SetWranglerSetDropDown, this.value);
        UIDropDownMenu_SetText(gaClassSetData[gSelectedClass].aSetData[this.value].sTabName,SetWranglerSetDropDown);
        
        gDoCacheTimer = 0;
        
        SetWrangler_HideInfoIcons();
        
        local setId = this.value;
        
        gSelectedSet = setId;
        
        -- set the correct tab set here
        gTabSet = math.ceil(setId / SW_MAX_TABS) - 1;
        SetWrangler_UpdateSetTabs(gSelectedSet);
        SetWrangler_SetTabText();
        
        SetWrangler_LoadSet(setId);
end

function SetWranglerDropDownAdd(func)
        for i=1,table.getn(SW_TEXT_LINK_OPTIONS) do
                info = {};
                info.text = SW_TEXT_LINK_OPTIONS[i];
                info.func = func;
                info.value = i;
                UIDropDownMenu_AddButton(info);
        end
end


function SetWranglerDropDownAddSets(func)
        --dout(gSelectedClass);
        for i=1,table.getn(gaClassSetData[gSelectedClass].aSetData) do
                info = {};
                info.text = gaClassSetData[gSelectedClass].aSetData[i].sTabName;
                info.func = func;
                info.value = i;
                UIDropDownMenu_AddButton(info);
        end
end


function SetWranglerRightClickMenu_AddItems()
        --dout("Init");
        
        if (UIDROPDOWNMENU_MENU_LEVEL == 1) then
                SetWranglerRightClickMenu_AddTitle(BINDING_HEADER_SETWRANGLER);
                SetWranglerRightClickMenu_AddCommand(SW_TEXT_PREVIEW, "preview", SetWranglerRightClickMenu_OnClick, nil);
                SetWranglerRightClickMenu_AddNest(SW_TEXT_LINK, "2")
        elseif (UIDROPDOWNMENU_MENU_LEVEL == 2) then
                for i=1,table.getn(SW_TEXT_LINK_OPTIONS) do
                        SetWranglerRightClickMenu_AddCommand(SW_TEXT_LINK_OPTIONS[i], i, SetWranglerRightClickMenu_OnClick, nil, UIDROPDOWNMENU_MENU_LEVEL);            
                end

                SetWranglerRightClickMenu_AddNest(SW_TEXT_WHISPER, "3",2);
        elseif (UIDROPDOWNMENU_MENU_LEVEL == 3) then
                SetWranglerRightClickMenu_AddCommand(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[3]..SW_TEXT_WHISPER_TARGET..SW_LINK_COLOR_CLOSE, 0, SetWranglerWhisperRightClickMenu_OnClick,nil, UIDROPDOWNMENU_MENU_LEVEL, 74, 133, 184);
                
                local bound = gWhisperLowerBound + SW_WHISPER_MAX;
                local addMore = 0;

                if (bound > GetNumFriends()) then
                        bound = GetNumFriends();
                else
                        addMore = 1;
                end
                
                --dout("low: "..gWhisperLowerBound);
                --dout("high: "..bound);
                
                for i=gWhisperLowerBound,bound do
                        local name, level, class, area, connected = GetFriendInfo(i);
                        if (connected == 1) then
                                SetWranglerRightClickMenu_AddCommand(name, name, SetWranglerWhisperRightClickMenu_OnClick, nil, UIDROPDOWNMENU_MENU_LEVEL);
                        else
                                SetWranglerRightClickMenu_AddCommand(name, name, SetWranglerWhisperRightClickMenu_OnClick, 1, UIDROPDOWNMENU_MENU_LEVEL);
                        end
                end

                if (addMore == 1) then
                        SetWranglerRightClickMenu_AddMoreCommand(SW_LINK_COLOR_OPEN..SW_LINK_COLORS[3]..SW_TEXT_MORE..SW_LINK_COLOR_CLOSE, 0, SetWranglerMoreRightClickMenu_OnClick,UIDROPDOWNMENU_MENU_LEVEL);
                end
        end
end


function SetWranglerRightClickMenu_AddTitle(title, level)
        if (title) then
                local info = {};
                info.text = title;
                info.notClickable = 1;
                info.isTitle = 1;
                UIDropDownMenu_AddButton(info, level);
        end
end

function SetWranglerRightClickMenu_AddNest(text, value, level)
        local info = {};
        info.text = text;
        --info.value = value;
        info.func = nil;
        info.hasArrow = 1;
        info.notCheckable = 1;
        info.keepShownOnClick = 1;
        UIDropDownMenu_AddButton(info, level);
end

function SetWranglerRightClickMenu_AddCommand(text, value, functionName, disabled, level, r, g, b)
        local info = {};
        info.text = text;
        info.value = value;
        info.func = functionName;
        info.notCheckable = 1;
        info.disabled = disabled;

        info.r = r;
        info.g = g;
        info.b = b;

        UIDropDownMenu_AddButton(info, level);
end

function SetWranglerRightClickMenu_AddMoreCommand(text, value, functionName, level)
        local info = {};
        info.text = text;
        info.value = value;
        info.func = functionName;
        info.notCheckable = 1;
        info.keepShownOnClick = 1;
        info.checked = nil;
        UIDropDownMenu_AddButton(info, level);
end

--------------------------------------------------------------------------------------------------
-- Options functions
--------------------------------------------------------------------------------------------------
function SWOptionsFrame_OnLoad()

end

function SWOptionsFrame_OnShow()
        SWOptionsLocalCacheCheckButton:SetChecked(SetWranglerLocalCacheCheckButton:GetChecked());
        SWOptionsDropDownCheckButton:SetChecked(SetWranglerOptions.useDropDown);
        SWOptionsDisconnectFreeCheckButton:SetChecked(SetWranglerOptions.disconnectFree);
                
        UIDropDownMenu_Initialize(SWOptionsPreviewModeDropDown, SetWrranglerPreviewModeDropDownOnInit);
        UIDropDownMenu_SetWidth(150, SWOptionsPreviewModeDropDown);
        
        if (SetWranglerOptions.previewMode == nil) then
                SetWranglerOptions.previewMode = 1;
        end
        
        UIDropDownMenu_SetSelectedValue(SWOptionsPreviewModeDropDown, SetWranglerOptions.previewMode);
        UIDropDownMenu_SetText(SW_TEXT_PREVIEW_OPTIONS[SetWranglerOptions.previewMode],SWOptionsPreviewModeDropDown);
end

function SWOptionsFrame_OnHide()

end

function SWOptionsFrame_OnOK()
        ---
        SetWranglerOptions.useLocalCacheOnly = SWOptionsLocalCacheCheckButton:GetChecked();
        SetWranglerLocalCacheCheckButton:SetChecked(SetWranglerOptions.useLocalCacheOnly);
                
        ---
        SetWranglerOptions.useDropDown = SWOptionsDropDownCheckButton:GetChecked();
        
        if (SetWranglerOptions.useDropDown ~= nil) then
                SetWrangler_ShowTabNav(false);
                SetWrangler_ShowDropDownNav(true);      
        else
                SetWrangler_ShowTabNav(true);
                SetWrangler_ShowDropDownNav(false);     
        end
        
        ---
        SetWranglerOptions.disconnectFree = SWOptionsDisconnectFreeCheckButton:GetChecked();
        
        if (SetWranglerOptions.disconnectFree ~= nil) then
                SetWrangler_LoadLocalData();
                -- Disable the preview and link buttons
                SetWranglerPreviewButton:Disable();
                SetWranglerLinkButton:Disable();
                SetWranglerLocalCacheCheckButton:Hide();
        else
                SetWrangler_ClearLocalData();
                SetWranglerPreviewButton:Enable();
                SetWranglerLinkButton:Enable();
                SetWranglerLocalCacheCheckButton:Show();
        end
        ---
        HideUIPanel(SWOptionsFrame);
        
        -- refresh the current set
        SetWrangler_LoadSet(gSelectedSet);
end

function SetWrangler_ShowTabNav(show)
        local tabFrame;

        if (show == false) then
                for i=1,SW_NUM_SET_TABS do
                        tabFrame = getglobal("SetWranglerSetTabFrameTab"..i);
                        tabFrame:Hide();
                end
                
                SetWranglerTabButtonNext:Hide();
                SetWranglerTabButtonBack:Hide();
                SetWranglerTabPageText:Hide();
        else
                SetWrangler_SetTabText(gSelectedClass);
                                
                SetWranglerTabButtonNext:Show();
                SetWranglerTabButtonBack:Show();
                SetWranglerTabPageText:Show();
        end
end

function SetWrangler_ShowDropDownNav(show)
        if (show == false) then
                SetWranglerSetDropDown:Hide();
        else
                SetWranglerSetDropDown:Show();
        end
end


function SetWrranglerPreviewModeDropDownOnInit()
        SetWranglerPreviewModeDropDownAdd(SetWranglerPreviewModeDropDownOnSelect);
end

function SetWranglerPreviewModeDropDownAdd(func)
        for i=1,table.getn(SW_TEXT_PREVIEW_OPTIONS) do
                info = {};
                info.text = SW_TEXT_PREVIEW_OPTIONS[i];
                info.func = func;
                info.value = i;
                UIDropDownMenu_AddButton(info);
        end
end

function SetWranglerPreviewModeDropDownOnSelect()
        UIDropDownMenu_SetSelectedValue(SWOptionsPreviewModeDropDown, SetWranglerOptions.previewMode);
        UIDropDownMenu_SetText(SW_TEXT_PREVIEW_OPTIONS[this.value],SWOptionsPreviewModeDropDown);
        
        SetWranglerOptions.previewMode = this.value;
end

Generated by GNU Enscript 1.6.5.90.