vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
TITAN_VOLUME_ID = "Volume";
TITAN_VOLUME_FRAME_SHOW_TIME = 0.5;

function TitanPanelVolumeButton_OnLoad()
        this.registry = { 
                id = TITAN_VOLUME_ID,
                builtIn = 1,
                version = TITAN_VERSION,
                menuText = TITAN_VOLUME_MENU_TEXT, 
                tooltipTitle = TITAN_VOLUME_TOOLTIP, 
                tooltipTextFunction = "TitanPanelVolumeButton_GetTooltipText",
                iconWidth = 32,
                iconButtonWidth = 18,
        };
end

function TitanPanelVolumeButton_OnShow()
        TitanPanelVolume_SetVolumeIcon();
end

function TitanPanelVolumeButton_OnEnter()
        -- Confirm master volume value
        TitanPanelVolumeControlSlider:SetValue(1 - GetCVar("MasterVolume"));
        TitanPanelVolume_SetVolumeIcon();
end

function TitanPanelVolumeControlSlider_OnEnter()
        this.tooltipText = TitanOptionSlider_TooltipText(TITAN_VOLUME_CONTROL_TOOLTIP, TitanPanelVolume_GetVolumeText(GetCVar("MasterVolume")));
        GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT");
        GameTooltip:SetText(this.tooltipText, nil, nil, nil, nil, 1);
        TitanUtils_StopFrameCounting(this:GetParent());
end

function TitanPanelVolumeControlSlider_OnLeave()
        this.tooltipText = nil;
        GameTooltip:Hide();
        TitanUtils_StartFrameCounting(this:GetParent(), TITAN_VOLUME_FRAME_SHOW_TIME);
end

function TitanPanelVolumeControlSlider_OnShow()
        getglobal(this:GetName().."Text"):SetText(TitanPanelVolume_GetVolumeText(GetCVar("MasterVolume")));
        getglobal(this:GetName().."High"):SetText(TITAN_VOLUME_CONTROL_LOW);
        getglobal(this:GetName().."Low"):SetText(TITAN_VOLUME_CONTROL_HIGH);
        this:SetMinMaxValues(0, 1);
        this:SetValueStep(0.01);
        this:SetValue(1 - GetCVar("MasterVolume"));

        position = TitanUtils_GetRealPosition(TITAN_VOLUME_ID);
        
        TitanPanelVolumeControlFrame:SetPoint("BOTTOMRIGHT", "TitanPanel" .. TitanUtils_GetWhichBar(TITAN_VOLUME_ID) .."Button", "TOPRIGHT", 0, 0);
        if (position == TITAN_PANEL_PLACE_TOP) then 
                TitanPanelVolumeControlFrame:ClearAllPoints();
                TitanPanelVolumeControlFrame:SetPoint("TOPLEFT", "TitanPanel" .. TitanUtils_GetWhichBar(TITAN_VOLUME_ID) .."Button", "BOTTOMLEFT", UIParent:GetRight() - TitanPanelVolumeControlFrame:GetWidth(), -4);
        else
                TitanPanelVolumeControlFrame:ClearAllPoints();
                TitanPanelVolumeControlFrame:SetPoint("BOTTOMLEFT", "TitanPanel" .. TitanUtils_GetWhichBar(TITAN_VOLUME_ID) .."Button", "TOPLEFT", UIParent:GetRight() - TitanPanelVolumeControlFrame:GetWidth(), 0);
        end             

end

function TitanPanelVolumeControlSlider_OnValueChanged()
        SetCVar("MasterVolume", 1 - this:GetValue());
        getglobal(this:GetName().."Text"):SetText(TitanPanelVolume_GetVolumeText(GetCVar("MasterVolume")));
        TitanPanelVolume_SetVolumeIcon();

        -- Update GameTooltip
        if (this.tooltipText) then
                this.tooltipText = TitanOptionSlider_TooltipText(TITAN_VOLUME_CONTROL_TOOLTIP, TitanPanelVolume_GetVolumeText(GetCVar("MasterVolume")));
                GameTooltip:SetText(this.tooltipText, nil, nil, nil, nil, 1);
        end
end

function TitanPanelVolume_GetVolumeText(volume)
        return tostring(floor(100 * volume + 0.5)) .. "%";
end

function TitanPanelVolumeControlFrame_OnLoad()
        getglobal(this:GetName().."Title"):SetText(TITAN_VOLUME_CONTROL_TITLE);
        this:SetBackdropBorderColor(1, 1, 1);
        this:SetBackdropColor(0, 0, 0, 1);
end

function TitanPanelVolumeControlFrame_OnUpdate(elapsed)
        TitanUtils_CheckFrameCounting(this, elapsed);
end

function TitanPanelVolume_SetVolumeIcon()
        local icon = getglobal("TitanPanelVolumeButtonIcon");
        local masterVolume = tonumber(GetCVar("MasterVolume"));
        if (masterVolume <= 0) then
                icon:SetTexture(TITAN_ARTWORK_PATH.."TitanVolumeMute");
        elseif (masterVolume < 0.33) then
                icon:SetTexture(TITAN_ARTWORK_PATH.."TitanVolumeLow");
        elseif (masterVolume < 0.66) then
                icon:SetTexture(TITAN_ARTWORK_PATH.."TitanVolumeMedium");
        else
                icon:SetTexture(TITAN_ARTWORK_PATH.."TitanVolumeHigh");
        end     
end

function TitanPanelVolumeButton_GetTooltipText()
        local volumeText = TitanPanelVolume_GetVolumeText(GetCVar("MasterVolume"));
        return ""..
                TITAN_VOLUME_TOOLTIP_VALUE.."\t"..TitanUtils_GetHighlightText(volumeText).."\n"..
                TitanUtils_GetGreenText(TITAN_VOLUME_TOOLTIP_HINT1).."\n"..
                TitanUtils_GetGreenText(TITAN_VOLUME_TOOLTIP_HINT2);
end

function TitanPanelRightClickMenu_PrepareVolumeMenu()
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_VOLUME_ID].menuText);
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_VOLUME_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end