You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.1 KiB
153 lines
5.1 KiB
|
5 years ago
|
local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||
|
|
local DT = E:GetModule('DataTexts')
|
||
|
|
|
||
|
|
local _G = _G
|
||
|
|
local tonumber = tonumber
|
||
|
|
local format = format
|
||
|
|
local ipairs = ipairs
|
||
|
|
local tinsert = tinsert
|
||
|
|
|
||
|
|
local SetCVar = SetCVar
|
||
|
|
local GetCVar = GetCVar
|
||
|
|
local GetCVarBool = GetCVarBool
|
||
|
|
local IsShiftKeyDown = IsShiftKeyDown
|
||
|
|
local ShowOptionsPanel = ShowOptionsPanel
|
||
|
|
local SOUND = SOUND
|
||
|
|
|
||
|
|
local Sound_GameSystem_GetOutputDriverNameByIndex = Sound_GameSystem_GetOutputDriverNameByIndex
|
||
|
|
local Sound_GameSystem_GetNumOutputDrivers = Sound_GameSystem_GetNumOutputDrivers
|
||
|
|
local Sound_GameSystem_RestartSoundSystem = Sound_GameSystem_RestartSoundSystem
|
||
|
|
|
||
|
|
local AudioStreams = {
|
||
|
|
{ Name = _G.MASTER, Volume = 'Sound_MasterVolume', Enabled = 'Sound_EnableAllSound' },
|
||
|
|
{ Name = _G.SOUND_VOLUME, Volume = 'Sound_SFXVolume', Enabled = 'Sound_EnableSFX' },
|
||
|
|
{ Name = _G.AMBIENCE_VOLUME, Volume = 'Sound_AmbienceVolume', Enabled = 'Sound_EnableAmbience' },
|
||
|
|
{ Name = _G.DIALOG_VOLUME, Volume = 'Sound_DialogVolume', Enabled = 'Sound_EnableDialog' },
|
||
|
|
{ Name = _G.MUSIC_VOLUME, Volume = 'Sound_MusicVolume', Enabled = 'Sound_EnableMusic' }
|
||
|
|
}
|
||
|
|
|
||
|
|
local panel, OnEvent
|
||
|
|
local activeIndex = 1
|
||
|
|
local activeStream = AudioStreams[activeIndex]
|
||
|
|
local menu = {{ text = L["Select Volume Stream"], isTitle = true, notCheckable = true }}
|
||
|
|
local toggleMenu = {{ text = L["Toggle Volume Stream"], isTitle = true, notCheckable = true }}
|
||
|
|
local deviceMenu = {{ text = L["Output Audio Device"], isTitle = true, notCheckable = true }}
|
||
|
|
|
||
|
|
local function GetStreamString(stream, tooltip)
|
||
|
|
if not stream then stream = AudioStreams[1] end
|
||
|
|
|
||
|
|
local color = GetCVarBool(AudioStreams[1].Enabled) and GetCVarBool(stream.Enabled) and '00FF00' or 'FF3333'
|
||
|
|
local level = GetCVar(stream.Volume) * 100
|
||
|
|
|
||
|
|
if tooltip then
|
||
|
|
return format('|cFF%s%.f%%|r', color, level)
|
||
|
|
else
|
||
|
|
return format('%s: |cFF%s%.f%%|r', stream.Name, color, level)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function SelectStream(_, ...)
|
||
|
|
activeIndex = ...
|
||
|
|
activeStream = AudioStreams[activeIndex]
|
||
|
|
|
||
|
|
panel.text:SetText(GetStreamString(activeStream))
|
||
|
|
end
|
||
|
|
|
||
|
|
local function ToggleStream(_, ...)
|
||
|
|
local Stream = AudioStreams[...]
|
||
|
|
|
||
|
|
SetCVar(Stream.Enabled, GetCVarBool(Stream.Enabled) and 0 or 1, 'ELVUI_VOLUME')
|
||
|
|
|
||
|
|
panel.text:SetText(GetStreamString(activeStream))
|
||
|
|
end
|
||
|
|
|
||
|
|
for Index, Stream in ipairs(AudioStreams) do
|
||
|
|
tinsert(menu, { text = Stream.Name, checked = function() return Index == activeIndex end, func = SelectStream, arg1 = Index })
|
||
|
|
tinsert(toggleMenu, { text = Stream.Name, checked = function() return GetCVarBool(Stream.Enabled) end, func = ToggleStream, arg1 = Index})
|
||
|
|
end
|
||
|
|
|
||
|
|
local function SelectSoundOutput(_, ...)
|
||
|
|
SetCVar('Sound_OutputDriverIndex', ..., 'ELVUI_VOLUME')
|
||
|
|
Sound_GameSystem_RestartSoundSystem()
|
||
|
|
end
|
||
|
|
|
||
|
|
local numDevices = Sound_GameSystem_GetNumOutputDrivers()
|
||
|
|
for i = 0, numDevices - 1 do
|
||
|
|
tinsert(deviceMenu, { text = Sound_GameSystem_GetOutputDriverNameByIndex(i), checked = function() return i == tonumber(GetCVar('Sound_OutputDriverIndex')) end, func = SelectSoundOutput, arg1 = i })
|
||
|
|
end
|
||
|
|
|
||
|
|
local function OnEnter()
|
||
|
|
DT.tooltip:ClearLines()
|
||
|
|
|
||
|
|
DT.tooltip:AddLine(L["Active Output Audio Device"], 1, 1, 1)
|
||
|
|
DT.tooltip:AddLine(Sound_GameSystem_GetOutputDriverNameByIndex(GetCVar('Sound_OutputDriverIndex')))
|
||
|
|
DT.tooltip:AddLine(' ')
|
||
|
|
DT.tooltip:AddLine(L["Volume Streams"], 1, 1, 1)
|
||
|
|
|
||
|
|
for _, Stream in ipairs(AudioStreams) do
|
||
|
|
DT.tooltip:AddDoubleLine(Stream.Name, GetStreamString(Stream, true))
|
||
|
|
end
|
||
|
|
|
||
|
|
DT.tooltip:AddLine(' ')
|
||
|
|
|
||
|
|
DT.tooltip:AddLine(L["|cFFffffffLeft Click:|r Select Volume Stream"])
|
||
|
|
DT.tooltip:AddLine(L["|cFFffffffMiddle Click:|r Toggle Mute Master Stream"])
|
||
|
|
DT.tooltip:AddLine(L["|cFFffffffRight Click:|r Toggle Volume Stream"])
|
||
|
|
DT.tooltip:AddLine(L["|cFFffffffShift + Left Click:|r Open System Audio Panel"])
|
||
|
|
DT.tooltip:AddLine(L["|cFFffffffShift + Right Click:|r Select Output Audio Device"])
|
||
|
|
|
||
|
|
DT.tooltip:Show()
|
||
|
|
end
|
||
|
|
|
||
|
|
local function onMouseWheel(_, delta)
|
||
|
|
local vol = GetCVar(activeStream.Volume)
|
||
|
|
local scale = 100
|
||
|
|
|
||
|
|
if IsShiftKeyDown() then
|
||
|
|
scale = 10
|
||
|
|
end
|
||
|
|
|
||
|
|
vol = vol + (delta / scale)
|
||
|
|
|
||
|
|
if vol >= 1 then
|
||
|
|
vol = 1
|
||
|
|
elseif vol <= 0 then
|
||
|
|
vol = 0
|
||
|
|
end
|
||
|
|
|
||
|
|
SetCVar(activeStream.Volume, vol, 'ELVUI_VOLUME')
|
||
|
|
end
|
||
|
|
|
||
|
|
function OnEvent(self, event, arg1)
|
||
|
|
activeStream = AudioStreams[activeIndex]
|
||
|
|
panel = self
|
||
|
|
|
||
|
|
if event == 'ELVUI_FORCE_UPDATE' then
|
||
|
|
self:EnableMouseWheel(true)
|
||
|
|
self:SetScript('OnMouseWheel', onMouseWheel)
|
||
|
|
end
|
||
|
|
|
||
|
|
if event == 'CVAR_UPDATE' and arg1 == 'ELVUI_VOLUME' or event == 'ELVUI_FORCE_UPDATE' then
|
||
|
|
self.text:SetText(GetStreamString(activeStream))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function OnClick(self, button)
|
||
|
|
if button == 'LeftButton' then
|
||
|
|
if IsShiftKeyDown() then
|
||
|
|
ShowOptionsPanel(_G.VideoOptionsFrame, _G.GameMenuFrame, SOUND)
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
DT:SetEasyMenuAnchor(DT.EasyMenu, self)
|
||
|
|
_G.EasyMenu(menu, DT.EasyMenu, nil, nil, nil, 'MENU')
|
||
|
|
elseif button == 'MiddleButton' then
|
||
|
|
SetCVar(AudioStreams[1].Enabled, GetCVarBool(AudioStreams[1].Enabled) and 0 or 1, 'ELVUI_VOLUME')
|
||
|
|
elseif button == 'RightButton' then
|
||
|
|
DT:SetEasyMenuAnchor(DT.EasyMenu, self)
|
||
|
|
_G.EasyMenu(IsShiftKeyDown() and deviceMenu or toggleMenu, DT.EasyMenu, nil, nil, nil, 'MENU')
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
DT:RegisterDatatext(L["Volume"], nil, {'CVAR_UPDATE'}, OnEvent, nil, OnClick, OnEnter)
|