vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Constants
TITAN_PANEL_UPDATE_BUTTON = 1;
TITAN_PANEL_UPDATE_TOOLTIP = 2;
TITAN_PANEL_UPDATE_ALL = 3;
TITAN_PANEL_LABEL_SEPARATOR = "  "

TITAN_PANEL_BUTTON_TYPE_TEXT = 1;
TITAN_PANEL_BUTTON_TYPE_ICON = 2;
TITAN_PANEL_BUTTON_TYPE_COMBO = 3;
TITAN_PANEL_BUTTON_TYPE_CUSTOM = 4;

function TitanOptionSlider_TooltipText(text, value) 
        return text .. GREEN_FONT_COLOR_CODE .. value .. FONT_COLOR_CODE_CLOSE;
end

function TitanPanelButton_OnLoad(isChildButton)
        if (isChildButton) then
                this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
        else 
                TitanUtils_RegisterPlugin(this.registry);               
                local plugin = TitanUtils_GetPlugin();
                if (plugin) then
                        this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
                        local frequency = plugin.frequency;
                        if (frequency and frequency > 0) then
                                this.timer = 0;
                                this.frequency = frequency;
                                this.updateType = plugin.updateType;
                                if (not this.updateType) then
                                        this.updateType = TITAN_PANEL_UPDATE_ALL;
                                end
                        end
                end
        end
end

function TitanPanelButton_OnShow()      
        local id = TitanUtils_GetButtonID();
        if (id) then            
                TitanPanelButton_UpdateButton(id, 1);
        end
end

function TitanPanelButton_OnClick(button, isChildButton)
        local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
        
        if (id) then
                local controlFrame = TitanUtils_GetControlFrame(id);
                local rightClickMenu = getglobal("TitanPanelRightClickMenu");
        
                if (button == "LeftButton") then
                        local isControlFrameShown;
                        if (not controlFrame) then
                                isControlFrameShown = false;
                        elseif (controlFrame:IsVisible()) then
                                isControlFrameShown = false;
                        else
                                isControlFrameShown = true;
                        end
                        
                        TitanUtils_CloseAllControlFrames();     
                        TitanPanelRightClickMenu_Close();       
                
                        local position = TitanPanelGetVar("Position");
                        local scale = TitanPanelGetVar("Scale");
                        if (isControlFrameShown) then
                                local buttonCenter = (this:GetLeft() + this:GetRight()) / 2 * scale;
                                local controlFrameRight = buttonCenter + controlFrame:GetWidth() / 2;
                                if ( position == TITAN_PANEL_PLACE_TOP ) then 
                                        controlFrame:ClearAllPoints();
                                        controlFrame:SetPoint("TOP", "UIParent", "TOPLEFT", buttonCenter, -24 * scale); 
                                        
                                        -- Adjust control frame position if it's off the screen
                                        local offscreenX, offscreenY = TitanUtils_GetOffscreen(controlFrame);
                                        if ( offscreenX == -1 ) then
                                                controlFrame:ClearAllPoints();
                                                controlFrame:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 0, -24 * scale);        
                                        elseif ( offscreenX == 1 ) then
                                                controlFrame:ClearAllPoints();
                                                controlFrame:SetPoint("TOPRIGHT", "UIParent", "TOPRIGHT", 0, -24 * scale);      
                                        end                                                     
                                else
                                        controlFrame:ClearAllPoints();
                                        controlFrame:SetPoint("BOTTOM", "UIParent", "BOTTOMLEFT", buttonCenter, 24 * scale); 

                                        -- Adjust control frame position if it's off the screen
                                        local offscreenX, offscreenY = TitanUtils_GetOffscreen(controlFrame);
                                        if ( offscreenX == -1 ) then
                                                controlFrame:ClearAllPoints();
                                                controlFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 0, 24 * scale);   
                                        elseif ( offscreenX == 1 ) then
                                                controlFrame:ClearAllPoints();
                                                controlFrame:SetPoint("BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", 0, 24 * scale); 
                                        end                                                     
                                end
                                
                                controlFrame:Show();
                        end     
                elseif (button == "RightButton") then
                        TitanUtils_CloseAllControlFrames();     
                
                        -- Show RightClickMenu anyway
                        if (TitanPanelRightClickMenu_IsVisible()) then
                                TitanPanelRightClickMenu_Close();
                        end
                        TitanPanelRightClickMenu_Toggle();
                end

                GameTooltip:Hide();
        end
end

function TitanPanelButton_OnUpdate(elapsed)             
        local id = TitanUtils_GetButtonID();
        
        if (id) then    
                if (this.frequency) then
                        local timeLeft = this.timer - elapsed;
                        if (timeLeft <= 0) then
                                this.timer = this.frequency;
                                if (this.updateType == TITAN_PANEL_UPDATE_ALL or
                                                this.updateType == TITAN_PANEL_UPDATE_BUTTON) then
                                        TitanPanelButton_UpdateButton(id);
                                end
                                if (this.updateType == TITAN_PANEL_UPDATE_ALL or
                                                this.updateType == TITAN_PANEL_UPDATE_TOOLTIP) then
                                        TitanPanelButton_UpdateTooltip();
                                end
                        else
                                this.timer = timeLeft;
                        end
                end
        end
        if      TITAN_PANEL_MOVING == 3 then
                TITAN_PANEL_MOVING = 0;
                
                local dropoff = TitanUtils_GetCurrentIndex(TitanPanelSettings.Buttons,TITAN_PANEL_DROPOFF_ADDON);
                local pickup = TitanUtils_GetCurrentIndex(TitanPanelSettings.Buttons,TITAN_PANEL_MOVE_ADDON);
                local dropoffbar = TitanUtils_GetWhichBar(TITAN_PANEL_DROPOFF_ADDON);
                local side = TitanPanel_GetPluginSide(TITAN_PANEL_DROPOFF_ADDON);
                local nextaddon = TitanUtils_GetNextButtonOnBar(dropoffbar,TITAN_PANEL_DROPOFF_ADDON,side);

                if dropoff ~= nil then
                        if dropoff < pickup then
                                table.remove(TitanPanelSettings.Buttons, pickup);
                                table.remove(TitanPanelSettings.Location, pickup);
                                table.insert(TitanPanelSettings.Buttons, dropoff ,TITAN_PANEL_MOVE_ADDON);
                                table.insert(TitanPanelSettings.Location, dropoff ,dropoffbar);
        
                        else
                                table.insert(TitanPanelSettings.Buttons, dropoff ,TITAN_PANEL_MOVE_ADDON);
                                table.insert(TitanPanelSettings.Location, dropoff ,dropoffbar);
                                table.remove(TitanPanelSettings.Buttons, pickup);
                                table.remove(TitanPanelSettings.Location, pickup);
                        end
                        TitanPanel_InitPanelButtons();
                        TITAN_PANEL_MOVE_ADDON = nil;
                        TITAN_PANEL_DROPOFF_ADDON = nil;
                        TITAN_PANEL_NEXT_ADDON = nil;
                end

        end
end

function TitanPanelButton_OnEnter(isChildButton)
        local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
        
        if (id) then
                TitanUtils_StopAutoHideCounting(this:GetName());
                local controlFrame = TitanUtils_GetControlFrame(id);
                if (controlFrame and controlFrame:IsVisible()) then
                        return;
                elseif (TitanPanelRightClickMenu_IsVisible()) then
                        return;
                else
                        TitanPanelButton_SetTooltip(id);
                end     
        end
end

function TitanPanelButton_OnLeave(isChildButton)
        local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
        
        if (id) then
                TitanUtils_StartAutoHideCounting();
                GameTooltip:Hide();
        end
end

function TitanPanelButton_UpdateButton(id, setButtonWidth) 
        local button, id = TitanUtils_GetButton(id, true);
        
        if ( TitanPanelButton_IsText(id) ) then
                -- Update textButton
                TitanPanelButton_SetButtonText(id);
                TitanPanelButton_SetTextButtonWidth(id, setButtonWidth);        
                
        elseif ( TitanPanelButton_IsIcon(id) ) then
                -- Update iconButton
                TitanPanelButton_SetButtonIcon(id);
                TitanPanelButton_SetIconButtonWidth(id);        
                
        elseif ( TitanPanelButton_IsCombo(id) ) then
                -- Update comboButton
                TitanPanelButton_SetButtonText(id);
                TitanPanelButton_SetButtonIcon(id);
                TitanPanelButton_SetComboButtonWidth(id, setButtonWidth);
        end
end

function TitanPanelButton_UpdateTooltip() 
        if (GameTooltip:IsOwned(this)) then
                local id = TitanUtils_GetButtonID();
                TitanPanelButton_SetTooltip(id);
        end
end

-- id is required
function TitanPanelButton_SetButtonText(id) 
        if (id and TitanUtils_IsPluginRegistered(id)) then
                local button = TitanUtils_GetButton(id);
                local buttonText = getglobal(button:GetName().."Text");
                local buttonTextFunction = getglobal(TitanUtils_GetPlugin(id).buttonTextFunction);
                if (buttonTextFunction) then
                        local label1, value1, label2, value2, label3, value3, label4, value4 = buttonTextFunction(id);  
                        local text = "";
                        if ( label1 and not ( label2 or label3 or label4 or value1 or value2 or value3 or value4 ) ) then
                                text = label1;
                        elseif (TitanGetVar(id, "ShowLabelText")) then
                                if (label1 or value1) then
                                        text = TitanUtils_ToString(label1)..TitanUtils_ToString(value1);
                                        if (label2 or value2) then
                                                text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label2)..TitanUtils_ToString(value2);
                                                if (label3 or value3) then
                                                        text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label3)..TitanUtils_ToString(value3);
                                                        if (label4 or value4) then
                                                                text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label4)..TitanUtils_ToString(value4);
                                                        end
                                                end
                                        end
                                end
                        else
                                if (value1) then
                                        text = TitanUtils_ToString(value1);
                                        if (value2) then
                                                text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value2);
                                                if (value3) then
                                                        text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value3);
                                                        if (value4) then
                                                                text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value4);
                                                        end
                                                end
                                        end
                                end
                        end
                        buttonText:SetText(text);                       
                end     
        end
end

-- id is required
function TitanPanelButton_SetButtonIcon(id)     
        if (id and TitanUtils_IsPluginRegistered(id)) then
                local button = TitanUtils_GetButton(id);
                local icon = getglobal(button:GetName().."Icon");                       
                local iconTexture = TitanUtils_GetPlugin(id).icon;
                local iconWidth = TitanUtils_GetPlugin(id).iconWidth;
                
                if (iconTexture) then
                        icon:SetTexture(iconTexture);
                end
                if (iconWidth) then
                        icon:SetWidth(iconWidth);
                end
        end
end

-- id is required
function TitanPanelButton_SetTextButtonWidth(id, setButtonWidth) 
        if (id) then
                local button = TitanUtils_GetButton(id);
                local text = getglobal(button:GetName().."Text");
                if ( setButtonWidth or
                                button:GetWidth() == 0 or 
                                button:GetWidth() - text:GetWidth() > TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE or 
                                button:GetWidth() - text:GetWidth() < -TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE ) then
                        button:SetWidth(text:GetWidth());
                        TitanPanelButton_Justify();
                end
        end
end

-- id is required
function TitanPanelButton_SetIconButtonWidth(id) 
        if (id) then
                local button = TitanUtils_GetButton(id);
                local icon = getglobal(button:GetName().."Icon");       
                if ( TitanUtils_GetPlugin(id).iconButtonWidth ) then
                        button:SetWidth(TitanUtils_GetPlugin(id).iconButtonWidth);
                end             
        end
end

-- id is required
function TitanPanelButton_SetComboButtonWidth(id, setButtonWidth) 
        if (id) then
                local button = TitanUtils_GetButton(id);
                local text = getglobal(button:GetName().."Text");
                local icon = getglobal(button:GetName().."Icon");       
                local iconWidth, iconButtonWidth, newButtonWidth;
                
                -- Get icon button width
                iconButtonWidth = 0;
                if ( TitanUtils_GetPlugin(id).iconButtonWidth ) then
                        iconButtonWidth = TitanUtils_GetPlugin(id).iconButtonWidth;
                elseif ( icon:GetWidth() ) then
                        iconButtonWidth = icon:GetWidth();
                end

                if ( TitanGetVar(id, "ShowIcon") and ( iconButtonWidth ~= 0 ) ) then
                        icon:Show();
                        text:ClearAllPoints();
                        text:SetPoint("LEFT", icon:GetName(), "RIGHT", 2, 1);
                        
                        newButtonWidth = text:GetWidth() + iconButtonWidth + 2;
                else
                        icon:Hide();
                        text:ClearAllPoints();
                        text:SetPoint("LEFT", button:GetName(), "Left", 0, 1);
                        
                        newButtonWidth = text:GetWidth();
                end
                
                if ( setButtonWidth or
                                button:GetWidth() == 0 or 
                                button:GetWidth() - newButtonWidth > TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE or 
                                button:GetWidth() - newButtonWidth < -TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE ) then
                        button:SetWidth(newButtonWidth);
                        TitanPanelButton_Justify();
                end                     
        end
end

-- id is required
function TitanPanelButton_SetTooltip(id)
        if (id and TitanUtils_IsPluginRegistered(id)) then
                local plugin = TitanUtils_GetPlugin(id);                
                if ( plugin.tooltipCustomFunction ) then
                        this.tooltipCustomFunction = plugin.tooltipCustomFunction;
                        TitanTooltip_SetPanelTooltip(id);
                elseif ( plugin.tooltipTitle ) then
                        this.tooltipTitle = plugin.tooltipTitle;        
                        local tooltipTextFunc = getglobal(plugin.tooltipTextFunction);
                        if ( tooltipTextFunc ) then
                                this.tooltipText = tooltipTextFunc();
                        end
                        TitanTooltip_SetPanelTooltip(id);
                end
        end
end

function TitanPanelButton_GetType(id)
        -- id is required
        if (not id) then
                return;
        end
        
        local button = TitanUtils_GetButton(id);
        local type;
        if button then
                local text = getglobal(button:GetName().."Text");
                local icon = getglobal(button:GetName().."Icon");

                if (text and icon) then
                        type = TITAN_PANEL_BUTTON_TYPE_COMBO;
                elseif (text and not icon) then
                        type = TITAN_PANEL_BUTTON_TYPE_TEXT;
                elseif (not text and icon) then
                        type = TITAN_PANEL_BUTTON_TYPE_ICON;
                elseif (not text and not icon) then
                        type = TITAN_PANEL_BUTTON_TYPE_CUSTOM;
                end
        else
                type = TITAN_PANEL_BUTTON_TYPE_COMBO;
        end
        
        return type;
end

function TitanPanelButton_IsText(id) 
        if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_TEXT) then
                return 1;
        end
end

function TitanPanelButton_IsIcon(id)
        if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_ICON) then
                return 1;
        end
end

function TitanPanelButton_IsCombo(id)
        if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_COMBO) then
                return 1;
        end
end

function TitanPanelButton_IsCustom(id)
        if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_CUSTOM) then
                return 1;
        end
end

function TitanPanelButton_OnMouseDown(button)
        local frname = getglobal("TitanPanel" .. TitanUtils_GetButtonID() .. "Button");
        if( button == "LeftButton" and IsShiftKeyDown() ) then
                --frname:StartMoving();
                --frname.isMoving = true;
                TITAN_PANEL_MOVE_ADDON = TitanUtils_GetButtonID();
                TITAN_PANEL_MOVING = 1;
        end
end

function TitanPanelButton_OnMouseUp(button)
        local frname = getglobal("TitanPanel" .. TitanUtils_GetButtonID() .. "Button");
        if( button == "LeftButton" and TITAN_PANEL_MOVING == 1 ) then
                --frname:StopMovingOrSizing();
                --frname.isMoving = false;
                TITAN_PANEL_MOVING = 2;
        end
end

Generated by GNU Enscript 1.6.5.90.