Files
coa-omen/Omen/Libs/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua
T
florian.berthold 038931fcfb chore: move Omen addon files into Omen/ subfolder
Match the layout convention used by every other multi-addon-shape fork
in Exiles/ (Bagnon/, Kui_Nameplates/, ShadowedUnitFrames/, etc.) — the
addon's own files live in a subfolder named after the addon, with only
the repo-level README files at the root.

All moves are pure git renames (history preserved). Toc references are
relative to the toc location so nothing inside the addon changes.
2026-05-24 23:00:48 +02:00

163 lines
4.4 KiB
Lua

-- Widget is based on the AceGUIWidget-DropDown.lua supplied with AceGUI-3.0
-- Widget created by Yssaril
local AceGUI = LibStub("AceGUI-3.0")
local Media = LibStub("LibSharedMedia-3.0")
do
local min, max, floor = math.min, math.max, math.floor
local fixlevels = AceGUISharedMediaWidgets.fixlevels
local OnItemValueChanged = AceGUISharedMediaWidgets.OnItemValueChanged
do
local widgetType = "LSM30_Background_Item_Select"
local widgetVersion = 1
local function Frame_OnEnter(this)
local self = this.obj
if self.useHighlight then
self.highlight:Show()
self.texture:Show()
end
self:Fire("OnEnter")
if self.specialOnEnter then
self.specialOnEnter(self)
end
end
local function Frame_OnLeave(this)
local self = this.obj
self.texture:Hide()
self.highlight:Hide()
self:Fire("OnLeave")
if self.specialOnLeave then
self.specialOnLeave(self)
end
end
local function SetText(self, text)
if text and text ~= '' then
self.texture:SetTexture(Media:Fetch('background',text))
end
self.text:SetText(text or "")
end
local function Constructor()
local self = AceGUI:Create("Dropdown-Item-Toggle")
self.type = widgetType
self.SetText = SetText
local textureframe = CreateFrame('Frame')
textureframe:SetFrameStrata("TOOLTIP")
textureframe:SetWidth(128)
textureframe:SetHeight(128)
textureframe:SetPoint("LEFT",self.frame,"RIGHT",5,0)
self.textureframe = textureframe
local texture = textureframe:CreateTexture(nil, "OVERLAY")
texture:SetTexture(0,0,0,0)
texture:SetAllPoints(textureframe)
texture:Hide()
self.texture = texture
self.frame:SetScript("OnEnter", Frame_OnEnter)
self.frame:SetScript("OnLeave", Frame_OnLeave)
return self
end
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
end
do
local widgetType = "LSM30_Background"
local widgetVersion = 3
local function Frame_OnEnter(this)
local self = this.obj
local text = self.text:GetText()
if text ~= nil and text ~= '' then
self.textureframe:Show()
end
end
local function Frame_OnLeave(this)
local self = this.obj
self.textureframe:Hide()
end
local function SetText(self, text)
if text and text ~= '' then
self.texture:SetTexture(Media:Fetch('background',text))
end
self.text:SetText(text or "")
end
local function AddListItem(self, value, text)
local item = AceGUI:Create("LSM30_Background_Item_Select")
item:SetText(text)
item.userdata.obj = self
item.userdata.value = value
item:SetCallback("OnValueChanged", OnItemValueChanged)
self.pullout:AddItem(item)
end
local function SetList(self, list)
self.list = list or Media:HashTable("background")
self.pullout:Clear()
if self.multiselect then
AddCloseButton()
end
end
local sortlist = {}
local function ParseListItems(self)
for v in pairs(self.list) do
sortlist[#sortlist + 1] = v
end
table.sort(sortlist)
for i, value in pairs(sortlist) do
AddListItem(self, value, value)
sortlist[i] = nil
end
end
local function Constructor()
local self = AceGUI:Create("Dropdown")
self.type = widgetType
self.SetText = SetText
self.SetList = SetList
self.SetValue = AceGUISharedMediaWidgets.SetValue
local left = _G[self.dropdown:GetName() .. "Left"]
local middle = _G[self.dropdown:GetName() .. "Middle"]
local right = _G[self.dropdown:GetName() .. "Right"]
local textureframe = CreateFrame('Frame')
textureframe:SetFrameStrata("TOOLTIP")
textureframe:SetWidth(128)
textureframe:SetHeight(128)
textureframe:SetPoint("LEFT",right,"RIGHT",-15,0)
self.textureframe = textureframe
local texture = textureframe:CreateTexture(nil, "OVERLAY")
texture:SetTexture(0,0,0,0)
texture:SetAllPoints(textureframe)
textureframe:Hide()
self.texture = texture
self.dropdown:EnableMouse(true)
self.dropdown:SetScript("OnEnter", Frame_OnEnter)
self.dropdown:SetScript("OnLeave", Frame_OnLeave)
local clickscript = self.button:GetScript("OnClick")
self.button:SetScript("OnClick", function(...)
self.pullout:Clear()
ParseListItems(self)
clickscript(...)
end)
return self
end
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
end
end