7181066855
Imported from /srv/add01/wow-ascension/Interface/AddOns/Omen — the build Ascension's WotLK 3.3.5 client ships. Single vendored drop: Ascension's build process bundles their custom patches with the standard CurseForge packager output (62 embedded Libs/), and the individual patches aren't published separately. Net delta vs upstream v3.0.9, excluding bundled libs and CRLF normalization: 11 files, 2284+/34- — Ascension-specific adaptations for WotLK 3.3.5. License: All rights reserved (per .toc).
164 lines
4.5 KiB
Lua
164 lines
4.5 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_Border_Item_Select"
|
|
local widgetVersion = 1
|
|
|
|
local function Frame_OnEnter(this)
|
|
local self = this.obj
|
|
|
|
if self.useHighlight then
|
|
self.highlight:Show()
|
|
self.border:Show()
|
|
end
|
|
self:Fire("OnEnter")
|
|
|
|
if self.specialOnEnter then
|
|
self.specialOnEnter(self)
|
|
end
|
|
end
|
|
|
|
local function Frame_OnLeave(this)
|
|
local self = this.obj
|
|
self.border: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
|
|
local backdropTable = self.border:GetBackdrop()
|
|
backdropTable.edgeFile = Media:Fetch('border',text)
|
|
self.border:SetBackdrop(backdropTable)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown-Item-Toggle")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
local border = CreateFrame('Frame')
|
|
border:SetFrameStrata("TOOLTIP")
|
|
border:SetWidth(64)
|
|
border:SetHeight(32)
|
|
border:SetPoint("LEFT",self.frame,"RIGHT",5,0)
|
|
border:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }})
|
|
self.border = border
|
|
border:Hide()
|
|
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_Border"
|
|
local widgetVersion = 3
|
|
|
|
local function Frame_OnEnter(this)
|
|
local self = this.obj
|
|
local text = self.text:GetText()
|
|
if text ~= nil and text ~= '' then
|
|
self.borderframe:Show()
|
|
end
|
|
end
|
|
|
|
local function Frame_OnLeave(this)
|
|
local self = this.obj
|
|
self.borderframe:Hide()
|
|
end
|
|
|
|
local function AddListItem(self, value, text)
|
|
local item = AceGUI:Create("LSM30_Border_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("border")
|
|
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 SetText(self, text)
|
|
if text and text ~= '' then
|
|
local backdropTable = self.borderframe:GetBackdrop()
|
|
backdropTable.edgeFile = Media:Fetch('border',text)
|
|
self.borderframe:SetBackdrop(backdropTable)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown")
|
|
self.type = widgetType
|
|
self.SetList = SetList
|
|
self.SetText = SetText
|
|
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 borderframe = CreateFrame('Frame')
|
|
borderframe:SetFrameStrata("TOOLTIP")
|
|
borderframe:SetWidth(64)
|
|
borderframe:SetHeight(32)
|
|
borderframe:SetPoint("LEFT",right,"RIGHT",-15,0)
|
|
borderframe:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }})
|
|
self.borderframe = borderframe
|
|
borderframe:Hide()
|
|
|
|
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
|