795 lines
20 KiB
Lua
795 lines
20 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 function readOnly (t)
|
|
local proxy = {}
|
|
local mt = { -- create metatable
|
|
__index = t,
|
|
__newindex = function (t,k,v)
|
|
error("attempt to update a read-only table", 2)
|
|
end
|
|
}
|
|
setmetatable(proxy, mt)
|
|
return proxy
|
|
end
|
|
local lists = readOnly{}
|
|
rawset(lists, 'font', readOnly{})
|
|
rawset(lists, 'sound', readOnly{})
|
|
rawset(lists, 'statusbar', readOnly{})
|
|
rawset(lists, 'border', readOnly{})
|
|
rawset(lists, 'background', readOnly{})
|
|
|
|
Media:RegisterCallback("LibSharedMedia_Registered", function(event, mediatype, key)
|
|
if lists[mediatype] then
|
|
rawset(lists[mediatype], key, key)
|
|
end
|
|
end)
|
|
|
|
for k, v in pairs(Media:List("font")) do
|
|
rawset(lists.font, v, v)
|
|
end
|
|
for k, v in pairs(Media:List("sound")) do
|
|
rawset(lists.sound, v, v)
|
|
end
|
|
for k, v in pairs(Media:List("statusbar")) do
|
|
rawset(lists.statusbar, v, v)
|
|
end
|
|
for k, v in pairs(Media:List("border")) do
|
|
rawset(lists.border, v, v)
|
|
end
|
|
for k, v in pairs(Media:List("background")) do
|
|
rawset(lists.background, v, v)
|
|
end
|
|
|
|
|
|
|
|
local min, max, floor = math.min, math.max, math.floor
|
|
|
|
local function fixlevels(parent,...)
|
|
local i = 1
|
|
local child = select(i, ...)
|
|
while child do
|
|
child:SetFrameLevel(parent:GetFrameLevel()+1)
|
|
fixlevels(child, child:GetChildren())
|
|
i = i + 1
|
|
child = select(i, ...)
|
|
end
|
|
end
|
|
|
|
local function OnItemValueChanged(this, event, checked)
|
|
local self = this.userdata.obj
|
|
if self.multiselect then
|
|
self:Fire("OnValueChanged", this.userdata.value, checked)
|
|
else
|
|
if checked then
|
|
self:SetValue(this.userdata.value)
|
|
self:Fire("OnValueChanged", this.userdata.value)
|
|
else
|
|
this:SetValue(true)
|
|
end
|
|
self.pullout:Close()
|
|
end
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Font_Item_Select"
|
|
local widgetVersion = 11
|
|
|
|
local function SetText(self, text)
|
|
if text and text ~= '' then
|
|
local _, size, outline= self.text:GetFont()
|
|
self.text:SetFont(Media:Fetch('font',text),size,outline)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown-Item-Toggle")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Statusbar_Item_Select"
|
|
local widgetVersion = 11
|
|
|
|
local function SetText(self, text)
|
|
if text and text ~= '' then
|
|
self.texture:SetTexture(Media:Fetch('statusbar',text))
|
|
self.texture:SetVertexColor(.5,.5,.5)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown-Item-Toggle")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
local texture = self.frame:CreateTexture(nil, "BACKGROUND")
|
|
texture:SetTexture(0,0,0,0)
|
|
texture:SetPoint("BOTTOMRIGHT",self.frame,"BOTTOMRIGHT",-4,1)
|
|
texture:SetPoint("TOPLEFT",self.frame,"TOPLEFT",6,-1)
|
|
self.texture = texture
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Background_Item_Select"
|
|
local widgetVersion = 11
|
|
|
|
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_Sound_Item_Select"
|
|
local widgetVersion = 11
|
|
|
|
local function Frame_OnEnter(this)
|
|
local self = this.obj
|
|
|
|
if self.useHighlight then
|
|
self.highlight:Show()
|
|
end
|
|
self:Fire("OnEnter")
|
|
|
|
if self.specialOnEnter then
|
|
self.specialOnEnter(self)
|
|
end
|
|
end
|
|
|
|
local function Frame_OnLeave(this)
|
|
local self = this.obj
|
|
|
|
self.highlight:Hide()
|
|
self:Fire("OnLeave")
|
|
|
|
if self.specialOnLeave then
|
|
self.specialOnLeave(self)
|
|
end
|
|
end
|
|
|
|
local function OnAcquire(self)
|
|
self.frame:SetToplevel(true)
|
|
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
end
|
|
|
|
local function OnRelease(self)
|
|
self.pullout = nil
|
|
self.frame:SetParent(nil)
|
|
self.frame:ClearAllPoints()
|
|
self.frame:Hide()
|
|
end
|
|
|
|
local function SetPullout(self, pullout)
|
|
self.pullout = pullout
|
|
|
|
self.frame:SetParent(nil)
|
|
self.frame:SetParent(pullout.itemFrame)
|
|
self.parent = pullout.itemFrame
|
|
fixlevels(pullout.itemFrame, pullout.itemFrame:GetChildren())
|
|
end
|
|
|
|
local function SetText(self, text)
|
|
self.sound = text or ''
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function GetText(self)
|
|
return self.text:GetText()
|
|
end
|
|
|
|
local function SetPoint(self, ...)
|
|
self.frame:SetPoint(...)
|
|
end
|
|
|
|
local function Show(self)
|
|
self.frame:Show()
|
|
end
|
|
|
|
local function Hide(self)
|
|
self.frame:Hide()
|
|
end
|
|
|
|
local function SetDisabled(self, disabled)
|
|
self.disabled = disabled
|
|
if disabled then
|
|
self.useHighlight = false
|
|
self.text:SetTextColor(.5, .5, .5)
|
|
else
|
|
self.useHighlight = true
|
|
self.text:SetTextColor(1, 1, 1)
|
|
end
|
|
end
|
|
|
|
local function SetOnLeave(self, func)
|
|
self.specialOnLeave = func
|
|
end
|
|
|
|
local function SetOnEnter(self, func)
|
|
self.specialOnEnter = func
|
|
end
|
|
|
|
local function UpdateToggle(self)
|
|
if self.value then
|
|
self.check:Show()
|
|
else
|
|
self.check:Hide()
|
|
end
|
|
end
|
|
|
|
local function Frame_OnClick(this, button)
|
|
local self = this.obj
|
|
self.value = not self.value
|
|
UpdateToggle(self)
|
|
self:Fire("OnValueChanged", self.value)
|
|
end
|
|
|
|
local function Speaker_OnClick(this, button)
|
|
local self = this.obj
|
|
PlaySoundFile(Media:Fetch('sound',self.sound))
|
|
end
|
|
|
|
local function SetValue(self, value)
|
|
self.value = value
|
|
UpdateToggle(self)
|
|
end
|
|
|
|
local function Constructor()
|
|
local count = AceGUI:GetNextWidgetNum(type)
|
|
local frame = CreateFrame("Frame", "LSM30_Sound_DropDownItem"..count)
|
|
local self = {}
|
|
self.frame = frame
|
|
frame.obj = self
|
|
self.type = type
|
|
|
|
self.useHighlight = true
|
|
|
|
frame:SetHeight(17)
|
|
frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
|
|
|
local button = CreateFrame("Button", nil, frame)
|
|
button:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-22,0)
|
|
button:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0)
|
|
self.button = button
|
|
button.obj = self
|
|
|
|
local speakerbutton = CreateFrame("Button", nil, frame)
|
|
speakerbutton:SetWidth(16)
|
|
speakerbutton:SetHeight(16)
|
|
speakerbutton:SetPoint("RIGHT",frame,"RIGHT",-6,0)
|
|
self.speakerbutton = speakerbutton
|
|
speakerbutton.obj = self
|
|
|
|
local speaker = frame:CreateTexture(nil, "BACKGROUND")
|
|
speaker:SetTexture("Interface\\Common\\VoiceChat-Speaker")
|
|
speaker:SetAllPoints(speakerbutton)
|
|
self.speaker = speaker
|
|
|
|
local speakeron = speakerbutton:CreateTexture(nil, "HIGHLIGHT")
|
|
speakeron:SetTexture("Interface\\Common\\VoiceChat-On")
|
|
speakeron:SetAllPoints(speakerbutton)
|
|
self.speakeron = speakeron
|
|
|
|
local text = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall")
|
|
text:SetTextColor(1,1,1)
|
|
text:SetJustifyH("LEFT")
|
|
text:SetPoint("TOPLEFT",frame,"TOPLEFT",18,0)
|
|
text:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-24,0)
|
|
self.text = text
|
|
|
|
local highlight = button:CreateTexture(nil, "OVERLAY")
|
|
highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
|
|
highlight:SetBlendMode("ADD")
|
|
highlight:SetHeight(14)
|
|
highlight:ClearAllPoints()
|
|
highlight:SetPoint("RIGHT",frame,"RIGHT",-19,0)
|
|
highlight:SetPoint("LEFT",frame,"LEFT",5,0)
|
|
highlight:Hide()
|
|
self.highlight = highlight
|
|
|
|
local check = frame:CreateTexture("OVERLAY")
|
|
check:SetWidth(16)
|
|
check:SetHeight(16)
|
|
check:SetPoint("LEFT",frame,"LEFT",3,-1)
|
|
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
|
|
check:Hide()
|
|
self.check = check
|
|
|
|
local sub = frame:CreateTexture("OVERLAY")
|
|
sub:SetWidth(16)
|
|
sub:SetHeight(16)
|
|
sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1)
|
|
sub:SetTexture("Interface\\ChatFrame\\ChatFrameExpandArrow")
|
|
sub:Hide()
|
|
self.sub = sub
|
|
|
|
button:SetScript("OnEnter", Frame_OnEnter)
|
|
button:SetScript("OnLeave", Frame_OnLeave)
|
|
|
|
self.OnAcquire = OnAcquire
|
|
self.OnRelease = OnRelease
|
|
|
|
self.SetPullout = SetPullout
|
|
self.GetText = GetText
|
|
self.SetText = SetText
|
|
self.SetDisabled = SetDisabled
|
|
|
|
self.SetPoint = SetPoint
|
|
self.Show = Show
|
|
self.Hide = Hide
|
|
|
|
self.SetOnLeave = SetOnLeave
|
|
self.SetOnEnter = SetOnEnter
|
|
|
|
self.button:SetScript("OnClick", Frame_OnClick)
|
|
self.speakerbutton:SetScript("OnClick", Speaker_OnClick)
|
|
|
|
self.SetValue = SetValue
|
|
|
|
AceGUI:RegisterAsWidget(self)
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Border_Item_Select"
|
|
local widgetVersion = 11
|
|
|
|
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_Font"
|
|
local widgetVersion = 11
|
|
|
|
local function SetText(self, text)
|
|
if text and text ~= '' then
|
|
local _, size, outline= self.text:GetFont()
|
|
self.text:SetFont(Media:Fetch('font',text),size,outline)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function SetValue(self, value)
|
|
if value then
|
|
if value ~= '' then
|
|
local _, size, outline= self.text:GetFont()
|
|
self.text:SetFont(Media:Fetch('font',value),size,outline)
|
|
end
|
|
self:SetText(value or "")
|
|
end
|
|
self.value = value
|
|
end
|
|
|
|
local function AddListItem(self, value, text)
|
|
local item = AceGUI:Create("LSM30_Font_Item_Select")
|
|
item:SetText(value)
|
|
item.userdata.obj = self
|
|
item.userdata.value = value
|
|
item:SetCallback("OnValueChanged", OnItemValueChanged)
|
|
self.pullout:AddItem(item)
|
|
end
|
|
|
|
local sortlist = {}
|
|
local function SetList(self, list)
|
|
self.list = list or lists.font
|
|
self.pullout:Clear()
|
|
|
|
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, self.list[value])
|
|
sortlist[i] = nil
|
|
end
|
|
if self.multiselect then
|
|
AddCloseButton()
|
|
end
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
self.SetValue = SetValue
|
|
self.SetList = SetList
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Statusbar"
|
|
local widgetVersion = 11
|
|
|
|
local function SetText(self, text)
|
|
if text and text ~= '' then
|
|
self.texture:SetTexture(Media:Fetch('statusbar',text))
|
|
self.texture:SetVertexColor(.5,.5,.5)
|
|
end
|
|
self.text:SetText(text or "")
|
|
end
|
|
|
|
local function AddListItem(self, value, text)
|
|
local item = AceGUI:Create("LSM30_Statusbar_Item_Select")
|
|
item:SetText(value)
|
|
item.userdata.obj = self
|
|
item.userdata.value = value
|
|
item:SetCallback("OnValueChanged", OnItemValueChanged)
|
|
self.pullout:AddItem(item)
|
|
end
|
|
|
|
local sortlist = {}
|
|
local function SetList(self, list)
|
|
self.list = list or lists.statusbar
|
|
self.pullout:Clear()
|
|
|
|
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, self.list[value])
|
|
sortlist[i] = nil
|
|
end
|
|
if self.multiselect then
|
|
AddCloseButton()
|
|
end
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
self.SetList = SetList
|
|
|
|
local left = _G[self.dropdown:GetName() .. "Left"]
|
|
local middle = _G[self.dropdown:GetName() .. "Middle"]
|
|
local right = _G[self.dropdown:GetName() .. "Right"]
|
|
|
|
local texture = self.dropdown:CreateTexture(nil, "ARTWORK")
|
|
texture:SetPoint("BOTTOMRIGHT", right, "BOTTOMRIGHT" ,-39, 26)
|
|
texture:SetPoint("TOPLEFT", left, "TOPLEFT", 24, -24)
|
|
self.texture = texture
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Background"
|
|
local widgetVersion = 11
|
|
|
|
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(value)
|
|
item.userdata.obj = self
|
|
item.userdata.value = value
|
|
item:SetCallback("OnValueChanged", OnItemValueChanged)
|
|
self.pullout:AddItem(item)
|
|
end
|
|
|
|
local sortlist = {}
|
|
local function SetList(self, list)
|
|
self.list = list or lists.background
|
|
self.pullout:Clear()
|
|
|
|
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, self.list[value])
|
|
sortlist[i] = nil
|
|
end
|
|
if self.multiselect then
|
|
AddCloseButton()
|
|
end
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown")
|
|
self.type = widgetType
|
|
self.SetText = SetText
|
|
self.SetList = SetList
|
|
|
|
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)
|
|
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Sound"
|
|
local widgetVersion = 11
|
|
|
|
local function AddListItem(self, value, text)
|
|
local item = AceGUI:Create("LSM30_Sound_Item_Select")
|
|
item:SetText(value)
|
|
item.userdata.obj = self
|
|
item.userdata.value = value
|
|
item:SetCallback("OnValueChanged", OnItemValueChanged)
|
|
self.pullout:AddItem(item)
|
|
end
|
|
|
|
local sortlist = {}
|
|
local function SetList(self, list)
|
|
self.list = list or lists.sound
|
|
self.pullout:Clear()
|
|
|
|
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, self.list[value])
|
|
sortlist[i] = nil
|
|
end
|
|
if self.multiselect then
|
|
AddCloseButton()
|
|
end
|
|
end
|
|
|
|
local function Constructor()
|
|
local self = AceGUI:Create("Dropdown")
|
|
self.type = widgetType
|
|
self.SetList = SetList
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
do
|
|
local widgetType = "LSM30_Border"
|
|
local widgetVersion = 11
|
|
|
|
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(value)
|
|
item.userdata.obj = self
|
|
item.userdata.value = value
|
|
item:SetCallback("OnValueChanged", OnItemValueChanged)
|
|
self.pullout:AddItem(item)
|
|
end
|
|
|
|
local sortlist = {}
|
|
local function SetList(self, list)
|
|
self.list = list or lists.border
|
|
self.pullout:Clear()
|
|
|
|
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, self.list[value])
|
|
sortlist[i] = nil
|
|
end
|
|
if self.multiselect then
|
|
AddCloseButton()
|
|
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
|
|
|
|
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)
|
|
|
|
return self
|
|
end
|
|
|
|
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion)
|
|
end
|
|
|
|
AceGUIWidgetLSMlists = lists
|
|
end
|