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.
232 lines
6.3 KiB
232 lines
6.3 KiB
|
5 years ago
|
-----------------------------------------------------------------------
|
||
|
|
--- Provides several dropdown item types that can be used with AceGUI-3.0's
|
||
|
|
-- AceGUIWidget-DropDown in order to style font, statusbar and sound-dropdowns
|
||
|
|
-- properly, making it easier for the user to select the preferred item.
|
||
|
|
--
|
||
|
|
-- LibDDI can also be used with AceConfig option tables with the 'select' type,
|
||
|
|
-- using the itemControl property.
|
||
|
|
--
|
||
|
|
-- The following item types are available: DDI-Font, DDI-Statusbar, DDI-Sound and DDI-RaidIcon.
|
||
|
|
--
|
||
|
|
-- Pull LibDDI-1.0 in via your TOC/embeds.xml and make sure it's loaded after
|
||
|
|
-- AceGUI-3.0 and LibSharedMedia-3.0, and it's ready to be used. There's no real
|
||
|
|
-- API; LibDDI just provides a few widget types for AceGUI.
|
||
|
|
--
|
||
|
|
-- @usage
|
||
|
|
-- -- If you're using AceOptions tables;
|
||
|
|
-- local fonts = LibStub("LibSharedMedia-3.0"):List("font")
|
||
|
|
-- local option = {
|
||
|
|
-- type = "select",
|
||
|
|
-- name = "Font",
|
||
|
|
-- values = fonts,
|
||
|
|
-- get = function()
|
||
|
|
-- for i, v in next, fonts do
|
||
|
|
-- if v == db.font then return i end
|
||
|
|
-- end
|
||
|
|
-- end,
|
||
|
|
-- set = function(_, value)
|
||
|
|
-- db.font = fonts[value]
|
||
|
|
-- end,
|
||
|
|
-- itemControl = "DDI-Font",
|
||
|
|
-- }
|
||
|
|
-- -- If you're using AceGUI-3.0 directly;
|
||
|
|
-- local dropdown = AceGUI:Create("Dropdown")
|
||
|
|
-- dropdown:SetLabel("Font")
|
||
|
|
-- dropdown:SetList(fonts, nil, "DDI-Font")
|
||
|
|
-- dropdown:SetCallback("OnValueChanged", function(_, _, value)
|
||
|
|
-- db.font = fonts[value]
|
||
|
|
-- end)
|
||
|
|
-- for i, v in next, fonts do
|
||
|
|
-- if v == db.font then
|
||
|
|
-- dropdown:SetValue(i)
|
||
|
|
-- break
|
||
|
|
-- end
|
||
|
|
-- end
|
||
|
|
-- @class file
|
||
|
|
-- @name LibDDI-1.0
|
||
|
|
|
||
|
|
local ddiVersion = 2
|
||
|
|
local prototype = LibStub("AceGUI-3.0-DropDown-ItemBase"):GetItemBase()
|
||
|
|
local version = ddiVersion + prototype.version
|
||
|
|
|
||
|
|
if _G.AGUILSMDDI10 and _G.AGUILSMDDI10 >= version then return end
|
||
|
|
_G.AGUILSMDDI10 = version
|
||
|
|
|
||
|
|
local media = LibStub("LibSharedMedia-3.0")
|
||
|
|
local gui = LibStub("AceGUI-3.0")
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------
|
||
|
|
-- Common
|
||
|
|
--
|
||
|
|
|
||
|
|
local function updateToggle(self)
|
||
|
|
if self.value then
|
||
|
|
self.check:Show()
|
||
|
|
else
|
||
|
|
self.check:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
local function onRelease(self)
|
||
|
|
prototype.OnRelease(self)
|
||
|
|
self:SetValue(nil)
|
||
|
|
end
|
||
|
|
local function onClick(frame)
|
||
|
|
local self = frame.obj
|
||
|
|
if self.disabled then return end
|
||
|
|
self.value = not self.value
|
||
|
|
if self.value then
|
||
|
|
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
|
||
|
|
else
|
||
|
|
PlaySound(857) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF
|
||
|
|
end
|
||
|
|
updateToggle(self)
|
||
|
|
self:Fire("OnValueChanged", self.value)
|
||
|
|
end
|
||
|
|
local function setValue(self, value)
|
||
|
|
self.value = value
|
||
|
|
updateToggle(self)
|
||
|
|
end
|
||
|
|
local function getValue(self)
|
||
|
|
return self.value
|
||
|
|
end
|
||
|
|
local function commonConstructor(type)
|
||
|
|
local self = prototype.Create(type)
|
||
|
|
self.frame:SetScript("OnClick", onClick)
|
||
|
|
self.SetValue = setValue
|
||
|
|
self.GetValue = getValue
|
||
|
|
self.OnRelease = onRelease
|
||
|
|
return self
|
||
|
|
end
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------
|
||
|
|
-- Raid icon
|
||
|
|
--
|
||
|
|
|
||
|
|
do
|
||
|
|
local icons = {
|
||
|
|
[RAID_TARGET_1] = 1, Star = 1,
|
||
|
|
[RAID_TARGET_2] = 2, Circle = 2, Orange = 2, Nipple = 2,
|
||
|
|
[RAID_TARGET_3] = 3, Diamond = 3,
|
||
|
|
[RAID_TARGET_4] = 4, Triangle = 4,
|
||
|
|
[RAID_TARGET_5] = 5, Moon = 5,
|
||
|
|
[RAID_TARGET_6] = 6, Square = 6,
|
||
|
|
[RAID_TARGET_7] = 7, Cross = 7,
|
||
|
|
[RAID_TARGET_8] = 8, Skull = 8,
|
||
|
|
}
|
||
|
|
local widgetType = "DDI-RaidIcon"
|
||
|
|
local function setText(self, text)
|
||
|
|
if icons[text] then
|
||
|
|
self.icon:SetTexture(icons[text] + 137000) -- Texture id list for raid icons 1-8 is 137001-137008. Base texture path is Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_%d
|
||
|
|
else
|
||
|
|
self.icon:SetTexture()
|
||
|
|
end
|
||
|
|
self.text:SetText(text)
|
||
|
|
end
|
||
|
|
local function constructor()
|
||
|
|
local self = commonConstructor(widgetType)
|
||
|
|
local frame = self.frame
|
||
|
|
|
||
|
|
local icon = frame:CreateTexture(nil, "ARTWORK")
|
||
|
|
icon:SetWidth(16)
|
||
|
|
icon:SetHeight(16)
|
||
|
|
icon:SetPoint("LEFT", frame, "LEFT", 18, 0)
|
||
|
|
self.icon = icon
|
||
|
|
|
||
|
|
local text = self.text
|
||
|
|
text:ClearAllPoints()
|
||
|
|
text:SetPoint("LEFT", icon, "RIGHT", 4, 0)
|
||
|
|
text:SetPoint("RIGHT", frame, "RIGHT", -8, 0)
|
||
|
|
text:SetPoint("TOP", frame)
|
||
|
|
text:SetPoint("BOTTOM", frame)
|
||
|
|
|
||
|
|
self.SetText = setText
|
||
|
|
gui:RegisterAsWidget(self)
|
||
|
|
return self
|
||
|
|
end
|
||
|
|
gui:RegisterWidgetType(widgetType, constructor, version)
|
||
|
|
end
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------
|
||
|
|
-- Sound
|
||
|
|
--
|
||
|
|
|
||
|
|
do
|
||
|
|
local widgetType = "DDI-Sound"
|
||
|
|
local function onClick(self)
|
||
|
|
local snd = media:Fetch("sound", self.sound:GetText())
|
||
|
|
if snd then PlaySoundFile(snd, "Master") end
|
||
|
|
end
|
||
|
|
local function constructor()
|
||
|
|
local self = commonConstructor(widgetType)
|
||
|
|
local frame = self.frame
|
||
|
|
|
||
|
|
local sndButton = CreateFrame("Button", nil, frame)
|
||
|
|
sndButton:SetWidth(16)
|
||
|
|
sndButton:SetHeight(16)
|
||
|
|
sndButton:SetPoint("RIGHT", frame, "RIGHT", -3, -1)
|
||
|
|
sndButton:SetScript("OnClick", onClick)
|
||
|
|
sndButton.sound = frame.obj.text
|
||
|
|
|
||
|
|
local icon = sndButton:CreateTexture(nil, "BACKGROUND")
|
||
|
|
icon:SetTexture(130979) --"Interface\\Common\\VoiceChat-Speaker"
|
||
|
|
icon:SetAllPoints(sndButton)
|
||
|
|
|
||
|
|
local highlight = sndButton:CreateTexture(nil, "HIGHLIGHT")
|
||
|
|
highlight:SetTexture(130977) --"Interface\\Common\\VoiceChat-On"
|
||
|
|
highlight:SetAllPoints(sndButton)
|
||
|
|
|
||
|
|
gui:RegisterAsWidget(self)
|
||
|
|
return self
|
||
|
|
end
|
||
|
|
gui:RegisterWidgetType(widgetType, constructor, version)
|
||
|
|
end
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------
|
||
|
|
-- Font
|
||
|
|
--
|
||
|
|
|
||
|
|
do
|
||
|
|
local widgetType = "DDI-Font"
|
||
|
|
local function setText(self, text)
|
||
|
|
local _, size, flags = self.text:GetFont()
|
||
|
|
local font = media:Fetch("font", text)
|
||
|
|
if font then self.text:SetFont(font, size, flags) end
|
||
|
|
self.text:SetText(text)
|
||
|
|
end
|
||
|
|
local function constructor()
|
||
|
|
local self = commonConstructor(widgetType)
|
||
|
|
self.SetText = setText
|
||
|
|
gui:RegisterAsWidget(self)
|
||
|
|
return self
|
||
|
|
end
|
||
|
|
gui:RegisterWidgetType(widgetType, constructor, version)
|
||
|
|
end
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------
|
||
|
|
-- Statusbar
|
||
|
|
--
|
||
|
|
|
||
|
|
do
|
||
|
|
local widgetType = "DDI-Statusbar"
|
||
|
|
local function setText(self, text)
|
||
|
|
self.text:SetText(text)
|
||
|
|
local texture = media:Fetch("statusbar", text)
|
||
|
|
if texture then self.bar:SetTexture(texture) end
|
||
|
|
end
|
||
|
|
local function constructor()
|
||
|
|
local self = commonConstructor(widgetType)
|
||
|
|
local frame = self.frame
|
||
|
|
|
||
|
|
local bar = frame:CreateTexture(nil, "ARTWORK")
|
||
|
|
bar:SetPoint("TOPLEFT", frame, "TOPLEFT", 3, -1)
|
||
|
|
bar:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -8, 1)
|
||
|
|
self.bar = bar
|
||
|
|
|
||
|
|
self.SetText = setText
|
||
|
|
gui:RegisterAsWidget(self)
|
||
|
|
return self
|
||
|
|
end
|
||
|
|
gui:RegisterWidgetType(widgetType, constructor, version)
|
||
|
|
end
|
||
|
|
|