vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

SW_TabbedFrameInfo = {};
-- 1.5 added FrameOrder
SW_TabbedFrameOrder = {};

SW_ChkParentInfo = {};
SW_ChkInfo = {};
SW_ChkOptInfo = {};

-- tab colors
SW_COLOR_ACT = {["r"]=0.7, ["g"]=0.7, ["b"]=1};
SW_COLOR_DIS = {["r"]=1, ["g"]=1, ["b"]=1};

local function SW_FrameSetText(itemName, itemText, addWidth)
        local oItem = getglobal(itemName);
        local txtName = getglobal(itemName.."_Text");
        txtName:SetText(itemText);
        oItem:SetWidth(txtName:GetStringWidth() + addWidth);
end
function SW_TabSetText(tabName, tabText)
        SW_FrameSetText(tabName, tabText, 30);
end

function SW_TitleSetText(titleName, titleText)
        SW_FrameSetText(titleName, titleText, 100);
        local txtName = getglobal(titleName.."_Text");
        txtName:SetTextColor(1,1,1);
end
function SW_ChkClick(oChk, saveTarget, silent)

        if saveTarget == nil then
                saveTarget = SW_Settings;
        end
        
        if oChk.SW_optGroup ~= nil then
                if not silent then
                        PlaySound("igMainMenuOptionCheckBoxOn");
                end
                for _,v in SW_ChkOptInfo[oChk.SW_optGroup] do
                        getglobal(v):SetChecked(0);
                end
                oChk:SetChecked(1);
                saveTarget[oChk.SW_optGroup] = oChk:GetName();
        else
                if ( oChk:GetChecked() ) then
                        if not silent then
                                PlaySound("igMainMenuOptionCheckBoxOn");
                        end
                        saveTarget[ SW_ChkInfo[oChk:GetName()] ] = 1;
                else
                        if not silent then
                                PlaySound("igMainMenuOptionCheckBoxOff");
                        end
                        saveTarget[ SW_ChkInfo[oChk:GetName()] ] = nil;
                end
        end
                
        -- this really shouldn't be here.. but its easy..
        SW_EI_ALLOFF = not (SW_Settings["EI_ShowRegEx"] or  SW_Settings["EI_ShowMatch"]
                                        or SW_Settings["EI_ShowEvent"] or SW_Settings["EI_ShowOrigStr"]);
end

function SW_SetChkStates()
        if SW_Settings == nil then return; end
        for k,v in pairs(SW_ChkInfo) do
                if SW_Settings[v] == 1 then
                        getglobal(k):SetChecked(1); 
                else
                        -- if its not on, no need to save it
                        SW_Settings[v] = nil; 
                end
        end     
        for k,v in pairs(SW_ChkOptInfo) do
                SW_printStr(v);
                for _,opt in ipairs(v) do
                        if SW_Settings[k] == opt then
                                getglobal(opt):SetChecked(1); 
                        else
                                getglobal(opt):SetChecked(0); 
                        end
                end
        end     
end
function SetButtonText(bName, str)
        getglobal(bName):SetText(str);
end
function SW_ChkRegister(oChk, linkedSetting, isAnchor, optGroupName)
        local pName = oChk:GetParent():GetName();
        
        if SW_ChkParentInfo[pName] == nil then SW_ChkParentInfo[pName] = {}; end
        if isAnchor then
                SW_ChkParentInfo[pName][0] = oChk:GetName();
        end
        table.insert(SW_ChkParentInfo[pName], oChk:GetName());
        SW_ChkInfo[oChk:GetName()] = linkedSetting;
        
        if optGroupName ~= nil then
                if SW_ChkOptInfo[optGroupName] == nil then
                        SW_ChkOptInfo[optGroupName] = {};
                end
                table.insert(SW_ChkOptInfo[optGroupName], oChk:GetName());
                oChk.SW_optGroup = optGroupName;
        end
end

function SW_ChkLayoutRegisterd()
        local oStart;
        local posX = 0;
        local currX = 0;
        local posY = 0;
        local incY = 0;
        local boxWidth = 0;
        local spacerX = 0;
        
        local chkPerRow =0;
        local oChkText;
        local oChk;
        
        local iCol=0;
        local colMax = {};
        for fName, children in pairs(SW_ChkParentInfo) do
                colMax = {};
                chkPerRow = getglobal(fName).chkPerRow;
                if chkPerRow == nil then chkPerRow = 2; end

                if children[0] == nil then
                        oStart = getglobal(children[1]);
                else
                        oStart = getglobal(children[0]);
                end
        
                
                posX = oStart.swoX;
                
                if posX == nil then posX=0; end
                posY = oStart.swoY;
                if posY == nil then posY=0; end
                
                incY = oStart:GetHeight();
                boxWidth = oStart:GetWidth();
                spacerX = boxWidth / 2;
                iCol = 0;
                -- first we need max text width per column
                for i,v in ipairs(children) do
                        iCol = iCol + 1;
                        oChkText = getglobal(v.."Text");
                        if colMax[iCol] == nil then 
                                colMax[iCol] = oChkText:GetStringWidth();
                        else
                                if oChkText:GetStringWidth() > colMax[iCol] then
                                        colMax[iCol] = oChkText:GetStringWidth();
                                end
                        end
                        
                        if floor (iCol / chkPerRow) == 1 then
                                iCol = 0;
                        end
                end
                iCol = 0;
                for i,v in ipairs(children) do
                        iCol = iCol + 1;
                        oChk = getglobal(v);
                        if iCol == 1 then
                                currX = posX;
                        else 
                                currX = currX + colMax[iCol-1] + spacerX + boxWidth;
                        end
                        oChk:SetPoint("TOPLEFT",fName,"TOPLEFT",currX,posY);
                        
                        if floor (iCol / chkPerRow) == 1 then
                                iCol = 0;
                                posY = posY - incY;
                        end
                end
        end
end
function SW_TabRegister(oTab, linkedFrameName, activated)
        local pName = oTab:GetParent():GetName();
        if activated then
                oTab.IsSelectedTab = true;
                oTab:SetBackdropBorderColor(SW_COLOR_ACT["r"],SW_COLOR_ACT["g"],SW_COLOR_ACT["b"],1);
                getglobal(oTab:GetName().."_Text"):SetTextColor(SW_COLOR_ACT["r"],SW_COLOR_ACT["g"],SW_COLOR_ACT["b"]);
                oTab:SetFrameLevel(oTab:GetParent():GetFrameLevel() +1);
        else
                oTab.IsSelectedTab = nil;
                oTab:SetBackdropBorderColor(SW_COLOR_DIS["r"],SW_COLOR_DIS["g"],SW_COLOR_DIS["b"],1);
                getglobal(oTab:GetName().."_Text"):SetTextColor(SW_COLOR_DIS["r"],SW_COLOR_DIS["g"],SW_COLOR_DIS["b"]);
                oTab:SetFrameLevel(oTab:GetParent():GetFrameLevel() -1);
        end
        oTab:Show();
        if SW_TabbedFrameInfo[pName] == nil then SW_TabbedFrameInfo[pName] = {}; end
        SW_TabbedFrameInfo[pName][oTab:GetName()] = linkedFrameName;
        if SW_TabbedFrameOrder[pName] == nil then SW_TabbedFrameOrder[pName] = {}; end
        table.insert(SW_TabbedFrameOrder[pName], oTab:GetName());
end

--[[ this will space all registered tabs in relation to their parent,
         if there are to many tabs or the parent frame ist to small
         this can have odd visuals
         don't forget - in one language it may work, in another not
         the "original" width is set through SW_TabSetText and depends on the string displayed
]]--
local function SW_TabLayoutRegisterd()
        local pos=0;
        local oTab;
        for k,v in pairs(SW_TabbedFrameInfo) do
                pos=5;
                --[[
                for t,_ in pairs(v) do
                        oTab = getglobal(t);
                        oTab:SetPoint("BOTTOMLEFT",k,"BOTTOMLEFT",pos,-25) 
                        pos = pos + oTab:GetWidth() - 2;
                end
                --]]
                for _,t in ipairs(SW_TabbedFrameOrder[k]) do
                        oTab = getglobal(t);
                        oTab:SetPoint("BOTTOMLEFT",k,"BOTTOMLEFT",pos,-25) 
                        pos = pos + oTab:GetWidth() - 2;
                end
        end
end

function SW_TabClick(oTab)
        local pFrameL = oTab:GetParent():GetFrameLevel();
        local tabName = oTab:GetName();
        local tmpTab;
        
        for t,frameName in pairs(SW_TabbedFrameInfo[oTab:GetParent():GetName()]) do
                tmpTab = getglobal(t);
                if tmpTab:GetName() == tabName then
                        oTab:SetFrameLevel(pFrameL +1); 
                        local tmpCol = {unpack(SW_Settings["Colors"]["Backdrops"])};
                        tmpCol[4] = 1;
                        oTab:SetBackdropBorderColor(unpack(tmpCol));
                        getglobal(tabName.."_Text"):SetTextColor(unpack(tmpCol));
                        getglobal(frameName):Show();
                        oTab.IsSelectedTab = true;
                else
                        --[[
                                0.96
                                for some odd reason pFrameL can be 0 and a negative frame level raises an error
                        --]]
                        if pFrameL > 0 then
                                tmpTab:SetFrameLevel(pFrameL -1);
                        end
                        oTab.IsSelectedTab = nil;
                        tmpTab:SetBackdropBorderColor(SW_COLOR_DIS["r"],SW_COLOR_DIS["g"],SW_COLOR_DIS["b"],1);
                        getglobal(tmpTab:GetName().."_Text"):SetTextColor(SW_COLOR_DIS["r"],SW_COLOR_DIS["g"],SW_COLOR_DIS["b"]);
                        getglobal(frameName):Hide();
                end
        end
end
function SW_UpdateIconPos() 
        local ang = 20;
        local r = 80;
        if SW_Settings["SW_IconPos"] ~= nil then
                ang = SW_Settings["SW_IconPos"];
        end
        if SW_Settings["SW_IconPosR"] ~= nil then
                r = SW_Settings["SW_IconPosR"];
        end
        
        SW_IconFrame:SetPoint("TOPLEFT", "Minimap", "TOPLEFT", 58 - (r * cos(ang)), (r * sin(ang)) - 58);
end
function SW_DoLayout()
        SW_TabLayoutRegisterd();
        SW_ChkLayoutRegisterd();
        SW_UpdateIconPos()
end

function SW_InitColorSwatch(cs)
        cs.lbl =  getglobal(cs:GetName().."_Text");
        cs.colTexture = getglobal(cs:GetName().."_Button_Color");
        function cs:SetText(txt)
                self.lbl:SetText(txt);
        end
        function cs:SetColor(color, what)
                if type(color) == "table" then
                        self.colTexture:SetVertexColor(unpack(color));
                else
                        
                        local bfc = SW_GetBarSettings(color)[what];
                        if bfc[1]==1 and bfc[2]==0 and bfc[3]==0 and bfc[4]==1 then
                                self.colTexture:SetVertexColor(unpack(SW_Settings["Colors"]["TitleBars"]));
                        else
                                self.colTexture:SetVertexColor(unpack(bfc));
                        end
                        
                end
        end
end

function SW_UpdateTextSetting(newText, info)
        local barSettings = SW_GetBarSettings(info[1]);
        barSettings[ info[2] ] = newText;
        if info[2] == "OT" or info[2] == "OTF" then
                SW_OptUpdateText(info[1]);
        end
end

function SW_InitEditBox(ef)
        function ef:ChangeText()
                local info = SW_GS_EditBoxes[ef:GetName()];
                if info == nil then return; end
                getglobal(ef:GetName().."_Button"):SetText(info[1]);
                getglobal(ef:GetName().."_Text"):SetText(info[2]..self.CurrentVal);
                self.PopupText = info[3];
        end
end
function SW_SetSliderPreText(slname, str)
        local sl = getglobal(slname);
        if sl ~= nil then
                sl.preTxt = str;
        end
end
function SW_InitSlider(sl, min, max, setting)
        sl.linkedSetting = setting;
        getglobal(sl:GetName().."Low"):SetText(min);
        getglobal(sl:GetName().."High"):SetText(max);
        this:SetMinMaxValues(min, max);
        this:SetValueStep(1);
end
function SW_SetColorSwatchText(csname, str)
        local cs = getglobal(csname);
        if cs ~= nil then
                cs:SetText(str);
        end
end
function SW_InitRoundButton(b)
        b.NormalF = getglobal(b:GetName().."_Normal");
        b.HighlightF = getglobal(b:GetName().."_Highlight");
        b.NormalT = getglobal(b:GetName().."_Normal_Texture");
        b.HighlightT = getglobal(b:GetName().."_Highlight_Texture");
        b.NormalText = getglobal(b:GetName().."_Normal_Text");
        b.HighlightText = getglobal(b:GetName().."_Highlight_Text");
        b.NormalIcon = getglobal(b:GetName().."_Normal_TextureIcon");
        b.HighlightIcon = getglobal(b:GetName().."_Highlight_TextureIcon");
        b.NormalT:SetVertexColor(0,1,0,1);
        b.HighlightT:SetVertexColor(0,1,0,1);
        b.NormalIcon:Hide();
        b.HighlightIcon:Hide();
        
        b.SetIcons = function(self, normalTex, highlightTex)
                if normalTex == nil then return; end
                self.NormalIcon:SetTexture(normalTex);
                
                if highlightTex == nil then
                        self.NormalIcon:SetTexture(normalTex);
                else
                        self.HighlightIcon:SetTexture(highlightTex);
                end
                self.NormalIcon:Show();
                self.HighlightIcon:Show();
                self.NormalText:Hide();
                self.HighlightText:Hide();
        end
        
end
function SW_RoundButtonRegister(b, vColor, txt, fColor, fHeight, fForeColor)
        SW_InitRoundButton(b);
        if vColor ~= nil then
                b.NormalT:SetVertexColor(unpack(vColor));
                b.HighlightT:SetVertexColor(unpack(vColor));
        end
        if txt ~= nil then
                b.NormalText:SetText(txt);
                b.HighlightText:SetText(txt);
        end
        if fColor ~= nil then
                b.NormalText:SetVertexColor(unpack(fColor));
                b.HighlightText:SetVertexColor(unpack(fColor));
        end
        if fHeight ~= nil then
                b.NormalText:SetTextHeight(fHeight);
                b.HighlightText:SetTextHeight(fHeight);
        end
        if fForeColor == nil then
                b.NormalText:SetTextColor(1,1,1,1);
                b.HighlightText:SetTextColor(1,1,1,1);
        else
                b.NormalText:SetTextColor(unpack(fForeColor));
                b.HighlightText:SetTextColor(unpack(fForeColor));
        end
end

function SW_InitIconMenu()
        for k, v in ipairs(SW_MiniIconMenu) do
        
                if v["checkFrame"] ~= nil then
                        if getglobal(v["checkFrame"]):IsVisible() then
                                v["text"] = v["textHide"];
                        else
                                v["text"] = v["textShow"];
                        end
                end
                UIDropDownMenu_AddButton(v);
                
        end
        --UIDropDownMenu_AddButton(SW_MiniIconMenu[1]);
end
function SW_ToggleIconMenu()
        SW_IconFrame_Menu.point = "TOPRIGHT";
        --SW_IconFrame_Menu.relativePoint = "BOTTOMLEFT";
        ToggleDropDownMenu(1, nil, SW_IconFrame_Menu);
end
function SW_IconMenuInit()
        UIDropDownMenu_Initialize(getglobal("SW_IconFrame_Menu"), SW_InitIconMenu, "MENU");  
end

Generated by GNU Enscript 1.6.5.90.