/trunk
]] |
local addon, ns = ... |
local kui = LibStub('Kui-1.0') |
local LSM = LibStub('LibSharedMedia-3.0') |
LibStub('AceAddon-3.0'):NewAddon(ns, 'KuiNameplates') |
ns.kui = kui |
-- add yanone kaffesatz and accidental presidency to LSM (only supports latin) |
LSM:Register(LSM.MediaType.FONT, 'Yanone Kaffesatz', kui.m.f.yanone) |
LSM:Register(LSM.MediaType.FONT, 'Accidental Presidency', kui.m.f.accid) |
-- TODO should probably move LSM stuff into Kui, and replace the table there |
local locale = GetLocale() |
local latin = (locale ~= 'zhCN' and locale ~= 'zhTW' and locale ~= 'koKR' and locale ~= 'ruRU') |
-------------------------------------------------------------- Default config -- |
local defaults = { |
profile = { |
highlight = true, -- highlight plates on mouse-over |
combopoints = true, -- display combo points |
fixaa = true, -- attempt to make plates appear sharper (with some drawbacks) |
font = kui.m.f.yanone, -- the font used for all text |
font = (latin and 'Yanone Kaffesatz' or LSM:GetDefault(LSM.MediaType.FONT)), -- the font used for all text |
fontscale = 1.0, -- the scale of all displayed font sizes |
}, |
fade = { |
glowcolour = { 1, 0, 0, 1, 1 } -- the glow colour to use when you have threat |
}, |
hp = { |
--[[ |
syntax help: |
A simple pattern is used to determine what text should be displayed for health. |
A pattern consists of rules seperated by semi-colons (;). |
A rule consists of the condition followed by the result of the rule seperated by a colon (:). |
For example: |
A rule: condition:result |
A pattern: rule1;rule2;rule3 (etc) |
Valid conditions are as follows: |
<= : When health is less than or equal to its maximum value... |
< : When health is less than its maximum value... |
= : When health is equal to its maximum value... |
Valid results are: |
c : the current, precise health value (i.e. 128.4k) |
d : precise value of health that is currently missing (i.e. -12.3k) |
m : the maximum amount of health |
p : the current amount of health in percent |
Health display defaults to blank if no rule is matched. |
The default patterns and their meanings are: |
Friendly: =:m;<:d; |
Meaning: When at max health, display max health (=:m;) |
When below max health, display health deficit (<:d;) |
Hostile: <:p; |
Meaning: When below max health, display health as a percentage. |
Otherwise, display nothing. |
]] |
friendly = '=:m;<:d;', -- health display pattern for friendly units |
hostile = '<:p;', -- health display pattern for hostile/neutral units |
showalt = true, -- show alternate (contextual) health values as well as main values |
spellname = true, -- display spell name |
spellicon = true, -- display spell icon |
barcolour = { .43, .47, .55, 1 }, -- the colour of the spell bar (interruptible casts) |
warnings = true, -- display spell cast warnings on any plates |
usenames = true -- use unit names to display cast warnings on their correct frames: may increase memory usage and may cause warnings to be displayed on incorrect frames when there are many units with the same name. Reccommended on for PvP, off for PvE. |
warnings = false, -- display spell cast warnings on any plates |
usenames = false -- use unit names to display cast warnings on their correct frames: may increase memory usage and may cause warnings to be displayed on incorrect frames when there are many units with the same name. Reccommended on for PvP, off for PvE. |
}, |
} |
} |
]] |
local addon, ns = ... |
local kui = ns.kui |
local uiscale, prevuiscale |
local loadedGUIDs, loadedNames, targetExists, profile |
= {}, {} |
local kui = LibStub('Kui-1.0') |
local LSM = LibStub('LibSharedMedia-3.0') |
-- our frame, whee |
ns.f = CreateFrame('Frame') |
['SPELL_PERIODIC_HEAL'] = true |
} |
local font, uiscale, prevuiscale |
local loadedGUIDs, loadedNames, targetExists, profile = {}, {} |
local origSizes, origFontSizes, sizes, fontSizes = {},{},{},{} |
--------------------------------------------------------------------- globals -- |
local blue = (1 - (1 / 5) * self.points) |
self:SetText(self.points) |
self:SetFont(profile.general.font, size, 'OUTLINE') |
self:SetFont(font, size, 'OUTLINE') |
self:SetTextColor(1, 1, blue) |
elseif self:GetText() then |
self:SetText('') |
-- health text ------------------------------------------------------------- |
frame.health.p = kui.CreateFontString(frame.overlay, { |
font = profile.general.font, size = fontSizes.large, outline = "OUTLINE" }) |
font = font, size = fontSizes.large, outline = "OUTLINE" }) |
frame.health.p:SetJustifyH('RIGHT') |
frame.health.p:SetPoint('BOTTOMRIGHT', frame.health, 'TOPRIGHT', -2, uiscale and -(3/uiscale) or -3) |
if profile.hp.showalt then |
frame.health.mo = kui.CreateFontString(frame.overlay, { |
font = profile.general.font, size = fontSizes.small, outline = "OUTLINE" }) |
font = font, size = fontSizes.small, outline = "OUTLINE" }) |
frame.health.mo:SetJustifyH('RIGHT') |
frame.health.mo:SetPoint('BOTTOMRIGHT', frame.health, -2, uiscale and -(3/uiscale) or -3) |
-- level text -------------------------------------------------------------- |
frame.level = kui.CreateFontString(frame.level, { reset = true, |
font = profile.general.font, size = fontSizes.name, outline = 'OUTLINE' }) |
font = font, size = fontSizes.name, outline = 'OUTLINE' }) |
frame.level:SetParent(frame.overlay) |
frame.level:ClearAllPoints() |
-- name text --------------------------------------------------------------- |
frame.name = kui.CreateFontString(frame.overlay, { |
font = profile.general.font, size = fontSizes.name, outline = 'OUTLINE' }) |
font = font, size = fontSizes.name, outline = 'OUTLINE' }) |
frame.name:SetJustifyH('LEFT') |
frame.name:SetHeight(8) |
-- combo point text -------------------------------------------------------- |
if profile.general.combopoints then |
frame.cp = kui.CreateFontString(frame.health, |
{ font = profile.general.font, size = fontSizes.combopoints, outline = 'OUTLINE', shadow = true }) |
{ font = font, size = fontSizes.combopoints, outline = 'OUTLINE', shadow = true }) |
frame.cp:SetPoint('LEFT', frame.health, 'RIGHT', 5, 1) |
frame.cp.Update = ComboPointsUpdate |
-- cast bar text ------------------------------------------------------- |
if profile.castbar.spellname then |
frame.castbar.name = kui.CreateFontString(frame.castbar, { |
font = profile.general.font, size = fontSizes.name, outline = "OUTLINE" }) |
font = font, size = fontSizes.name, outline = "OUTLINE" }) |
frame.castbar.name:SetPoint('TOPLEFT', frame.castbar, 'BOTTOMLEFT', 2, -2) |
end |
if profile.castbar.casttime then |
frame.castbar.max = kui.CreateFontString(frame.castbar, { |
font = profile.general.font, size = fontSizes.name, outline = "OUTLINE" }) |
font = font, size = fontSizes.name, outline = "OUTLINE" }) |
frame.castbar.max:SetPoint('TOPRIGHT', frame.castbar, 'BOTTOMRIGHT', -2, -1) |
frame.castbar.curr = kui.CreateFontString(frame.castbar, { |
font = profile.general.font, size = fontSizes.small, outline = "OUTLINE" }) |
font = font, size = fontSizes.small, outline = "OUTLINE" }) |
frame.castbar.curr:SetAlpha(.5) |
frame.castbar.curr:SetPoint('TOPRIGHT', frame.castbar.max, 'TOPLEFT', -1, -1) |
end |
if profile.castbar.warnings then |
-- casting spell name |
frame.castWarning = kui.CreateFontString(frame.overlay, { |
font = profile.general.font, size = fontSizes.spellname, outline = 'OUTLINE' }) |
font = font, size = fontSizes.spellname, outline = 'OUTLINE' }) |
frame.castWarning:SetPoint('BOTTOMLEFT', frame.level, 'TOPLEFT', 0, 1) |
frame.castWarning:Hide() |
-- incoming healing |
frame.incWarning = kui.CreateFontString(frame.overlay, { |
font = profile.general.font, size = fontSizes.small, outline = 'OUTLINE' }) |
font = font, size = fontSizes.small, outline = 'OUTLINE' }) |
frame.incWarning:SetPoint('BOTTOMRIGHT', frame.health.p, 'TOPRIGHT', 1) |
frame.incWarning:Hide() |
frame:SetBackdropColor(1, 1, 1, .5) |
frame.isfriend = kui.CreateFontString(frame, { |
font = profile.general.font, size = 10, outline = 'OUTLINE' }) |
font = font, size = 10, outline = 'OUTLINE' }) |
frame.isfriend:SetPoint('BOTTOM', frame, 'TOP') |
frame.guidtext = kui.CreateFontString(frame, { |
font = profile.general.font, size = 10, outline = "OUTLINE" }) |
font = font, size = 10, outline = "OUTLINE" }) |
frame.guidtext:SetPoint('TOP', frame, 'BOTTOM') |
frame.nametext = kui.CreateFontString(frame, { |
font = profile.general.font, size = 10, outline = "OUTLINE" }) |
font = font, size = 10, outline = "OUTLINE" }) |
frame.nametext:SetPoint('TOP', frame.guidtext, 'BOTTOM') |
]] |
fontSizes[k] = size * profile.general.fontscale |
end |
-- fetch font path from lsm |
font = LSM:Fetch(LSM.MediaType.FONT, profile.general.font) |
ns.f:SetScript('OnUpdate', self.OnUpdate) |
ns.f:SetScript('OnEvent', self.OnEvent) |
local addon, ns = ... |
local kui = LibStub('Kui-1.0') |
------------------------------------------------------------------ Ace config -- |
local AceConfig = LibStub('AceConfig-3.0') |
--------------------------------------------------------------- Options table -- |
do |
local fontSelection = { |
'Yanone Kaffeesatz', |
'Accidental Presidency', |
'Standard font (Friz Quadrata)', |
'Chat font (Arial Narrow)', |
'Morpheus', |
'Skurri', |
} |
local fontSelectionValues = { |
kui.m.f.yanone, |
kui.m.f.accid, |
STANDARD_TEXT_FONT, |
select(1, DEFAULT_CHAT_FRAME:GetFont()), |
'Fonts\\MORPHEUS.ttf', |
'Fonts\\skurri.ttf', |
} |
local handler = {} |
local options = { |
name = 'Kui Nameplates', |
name = 'Font', |
desc = 'The font used for all text on frames', |
type = 'select', |
get = 'GetFont', |
set = 'SetFont', |
values = fontSelection |
dialogControl = 'LSM30_Font', |
values = AceGUIWidgetLSMlists.font, |
order = 4 |
}, |
fontscale = { |
name = 'Font scale', |
desc = 'The scale of all fonts displayed on nameplates', |
type = 'range', |
min = 0, |
min = 0.01, |
softMax = 2, |
order = 4 |
order = 5 |
} |
} |
}, |
ns.db.profile[info[1]][info[#info]] = val |
end |
end |
function handler:GetFont(info) |
local path = ns.db.profile[info[1]][info[#info]] |
for id, thisPath in pairs(fontSelectionValues) do |
if path == thisPath then |
return id |
end |
end |
return 1 |
end |
function handler:SetFont(info, val) |
ns.db.profile[info[1]][info[#info]] = fontSelectionValues[val] |
end |
AceConfig:RegisterOptionsTable('kuinameplates', options) |
AceConfigDialog:AddToBlizOptions('kuinameplates', 'Kui Nameplates') |
end |
-- 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") |
local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") |
do |
local widgetType = "LSM30_Sound" |
local widgetVersion = 9 |
local contentFrameCache = {} |
local function ReturnSelf(self) |
self:ClearAllPoints() |
self:Hide() |
self.check:Hide() |
table.insert(contentFrameCache, self) |
end |
local function ContentOnClick(this, button) |
local self = this.obj |
self:Fire("OnValueChanged", this.text:GetText()) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function ContentSpeakerOnClick(this, button) |
local self = this.frame.obj |
local sound = this.frame.text:GetText() |
PlaySoundFile(self.list[sound] ~= sound and self.list[sound] or Media:Fetch('sound',sound)) |
end |
local function GetContentLine() |
local frame |
if next(contentFrameCache) then |
frame = table.remove(contentFrameCache) |
else |
frame = CreateFrame("Button", nil, UIParent) |
--frame:SetWidth(200) |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") |
check:Hide() |
frame.check = check |
local soundbutton = CreateFrame("Button", nil, frame) |
soundbutton:SetWidth(16) |
soundbutton:SetHeight(16) |
soundbutton:SetPoint("RIGHT",frame,"RIGHT",-1,0) |
soundbutton.frame = frame |
soundbutton:SetScript("OnClick", ContentSpeakerOnClick) |
frame.soundbutton = soundbutton |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND") |
speaker:SetTexture("Interface\\Common\\VoiceChat-Speaker") |
speaker:SetAllPoints(soundbutton) |
frame.speaker = speaker |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT") |
speakeron:SetTexture("Interface\\Common\\VoiceChat-On") |
speakeron:SetAllPoints(soundbutton) |
frame.speakeron = speakeron |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontWhite") |
text:SetPoint("LEFT", check, "RIGHT", 1, 0) |
text:SetPoint("RIGHT", soundbutton, "LEFT", -2, 0) |
text:SetJustifyH("LEFT") |
text:SetText("Test Test Test Test Test Test Test") |
frame.text = text |
frame.ReturnSelf = ReturnSelf |
end |
frame:Show() |
return frame |
end |
local function OnAcquire(self) |
self:SetHeight(44) |
self:SetWidth(200) |
end |
local function OnRelease(self) |
self:SetText("") |
self:SetLabel("") |
self:SetDisabled(false) |
self.value = nil |
self.list = nil |
self.open = nil |
self.hasClose = nil |
self.frame:ClearAllPoints() |
self.frame:Hide() |
end |
local function SetValue(self, value) -- Set the value to an item in the List. |
if self.list then |
self:SetText(value or "") |
end |
self.value = value |
end |
local function GetValue(self) |
return self.value |
end |
local function SetList(self, list) -- Set the list of values for the dropdown (key => value pairs) |
self.list = list or Media:HashTable("sound") |
end |
local function SetText(self, text) -- Set the text displayed in the box. |
self.frame.text:SetText(text or "") |
end |
local function SetLabel(self, text) -- Set the text for the label. |
self.frame.label:SetText(text or "") |
end |
local function AddItem(self, key, value) -- Add an item to the list. |
self.list = self.list or {} |
self.list[key] = value |
end |
local SetItemValue = AddItem -- Set the value of a item in the list. <<same as adding a new item>> |
local function SetMultiselect(self, flag) end -- Toggle multi-selecting. <<Dummy function to stay inline with the dropdown API>> |
local function GetMultiselect() return false end-- Query the multi-select flag. <<Dummy function to stay inline with the dropdown API>> |
local function SetItemDisabled(self, key) end-- Disable one item in the list. <<Dummy function to stay inline with the dropdown API>> |
local function SetDisabled(self, disabled) -- Disable the widget. |
self.disabled = disabled |
if disabled then |
self.frame:Disable() |
self.speaker:SetDesaturated(true) |
self.speakeron:SetDesaturated(true) |
else |
self.frame:Enable() |
self.speaker:SetDesaturated(false) |
self.speakeron:SetDesaturated(false) |
end |
end |
local function textSort(a,b) |
return string.upper(a) < string.upper(b) |
end |
local sortedlist = {} |
local function ToggleDrop(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
AceGUI:ClearFocus() |
else |
AceGUI:SetFocus(self) |
self.dropdown = AGSMW:GetDropDownFrame() |
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") |
for k, v in pairs(self.list) do |
sortedlist[#sortedlist+1] = k |
end |
table.sort(sortedlist, textSort) |
for i, k in ipairs(sortedlist) do |
local f = GetContentLine() |
f.text:SetText(k) |
if k == self.value then |
f.check:Show() |
end |
f.obj = self |
self.dropdown:AddFrame(f) |
end |
wipe(sortedlist) |
end |
end |
local function ClearFocus(self) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function OnHide(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function Drop_OnEnter(this) |
this.obj:Fire("OnEnter") |
end |
local function Drop_OnLeave(this) |
this.obj:Fire("OnLeave") |
end |
local function WidgetPlaySound(this) |
local self = this.obj |
local sound = self.frame.text:GetText() |
PlaySoundFile(self.list[sound] ~= sound and self.list[sound] or Media:Fetch('sound',sound)) |
end |
local function Constructor() |
local frame = AGSMW:GetBaseFrame() |
local self = {} |
self.type = widgetType |
self.frame = frame |
frame.obj = self |
frame.dropButton.obj = self |
frame.dropButton:SetScript("OnEnter", Drop_OnEnter) |
frame.dropButton:SetScript("OnLeave", Drop_OnLeave) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
local soundbutton = CreateFrame("Button", nil, frame) |
soundbutton:SetWidth(16) |
soundbutton:SetHeight(16) |
soundbutton:SetPoint("LEFT",frame.DLeft,"LEFT",26,1) |
soundbutton:SetScript("OnClick", WidgetPlaySound) |
soundbutton.obj = self |
self.soundbutton = soundbutton |
frame.text:SetPoint("LEFT",soundbutton,"RIGHT",2,0) |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND") |
speaker:SetTexture("Interface\\Common\\VoiceChat-Speaker") |
speaker:SetAllPoints(soundbutton) |
self.speaker = speaker |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT") |
speakeron:SetTexture("Interface\\Common\\VoiceChat-On") |
speakeron:SetAllPoints(soundbutton) |
self.speakeron = speakeron |
self.alignoffset = 31 |
self.OnRelease = OnRelease |
self.OnAcquire = OnAcquire |
self.ClearFocus = ClearFocus |
self.SetText = SetText |
self.SetValue = SetValue |
self.GetValue = GetValue |
self.SetList = SetList |
self.SetLabel = SetLabel |
self.SetDisabled = SetDisabled |
self.AddItem = AddItem |
self.SetMultiselect = SetMultiselect |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.ToggleDrop = ToggleDrop |
AceGUI:RegisterAsWidget(self) |
return self |
end |
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) |
end |
-- 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") |
local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") |
do |
local widgetType = "LSM30_Statusbar" |
local widgetVersion = 9 |
local contentFrameCache = {} |
local function ReturnSelf(self) |
self:ClearAllPoints() |
self:Hide() |
self.check:Hide() |
table.insert(contentFrameCache, self) |
end |
local function ContentOnClick(this, button) |
local self = this.obj |
self:Fire("OnValueChanged", this.text:GetText()) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function GetContentLine() |
local frame |
if next(contentFrameCache) then |
frame = table.remove(contentFrameCache) |
else |
frame = CreateFrame("Button", nil, UIParent) |
--frame:SetWidth(200) |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") |
check:Hide() |
frame.check = check |
local bar = frame:CreateTexture("ARTWORK") |
bar:SetHeight(16) |
bar:SetPoint("LEFT",check,"RIGHT",1,0) |
bar:SetPoint("RIGHT",frame,"RIGHT",-1,0) |
frame.bar = bar |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontWhite") |
local font, size = text:GetFont() |
text:SetFont(font,size,"OUTLINE") |
text:SetPoint("LEFT", check, "RIGHT", 3, 0) |
text:SetPoint("RIGHT", frame, "RIGHT", -2, 0) |
text:SetJustifyH("LEFT") |
text:SetText("Test Test Test Test Test Test Test") |
frame.text = text |
frame.ReturnSelf = ReturnSelf |
end |
frame:Show() |
return frame |
end |
local function OnAcquire(self) |
self:SetHeight(44) |
self:SetWidth(200) |
end |
local function OnRelease(self) |
self:SetText("") |
self:SetLabel("") |
self:SetDisabled(false) |
self.value = nil |
self.list = nil |
self.open = nil |
self.hasClose = nil |
self.frame:ClearAllPoints() |
self.frame:Hide() |
end |
local function SetValue(self, value) -- Set the value to an item in the List. |
if self.list then |
self:SetText(value or "") |
end |
self.value = value |
end |
local function GetValue(self) |
return self.value |
end |
local function SetList(self, list) -- Set the list of values for the dropdown (key => value pairs) |
self.list = list or Media:HashTable("statusbar") |
end |
local function SetText(self, text) -- Set the text displayed in the box. |
self.frame.text:SetText(text or "") |
local statusbar = self.list[text] ~= text and self.list[text] or Media:Fetch('statusbar',text) |
self.bar:SetTexture(statusbar) |
end |
local function SetLabel(self, text) -- Set the text for the label. |
self.frame.label:SetText(text or "") |
end |
local function AddItem(self, key, value) -- Add an item to the list. |
self.list = self.list or {} |
self.list[key] = value |
end |
local SetItemValue = AddItem -- Set the value of a item in the list. <<same as adding a new item>> |
local function SetMultiselect(self, flag) end -- Toggle multi-selecting. <<Dummy function to stay inline with the dropdown API>> |
local function GetMultiselect() return false end-- Query the multi-select flag. <<Dummy function to stay inline with the dropdown API>> |
local function SetItemDisabled(self, key) end-- Disable one item in the list. <<Dummy function to stay inline with the dropdown API>> |
local function SetDisabled(self, disabled) -- Disable the widget. |
self.disabled = disabled |
if disabled then |
self.frame:Disable() |
else |
self.frame:Enable() |
end |
end |
local function textSort(a,b) |
return string.upper(a) < string.upper(b) |
end |
local sortedlist = {} |
local function ToggleDrop(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
AceGUI:ClearFocus() |
else |
AceGUI:SetFocus(self) |
self.dropdown = AGSMW:GetDropDownFrame() |
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") |
for k, v in pairs(self.list) do |
sortedlist[#sortedlist+1] = k |
end |
table.sort(sortedlist, textSort) |
for i, k in ipairs(sortedlist) do |
local f = GetContentLine() |
f.text:SetText(k) |
--print(k) |
if k == self.value then |
f.check:Show() |
end |
local statusbar = self.list[k] ~= k and self.list[k] or Media:Fetch('statusbar',k) |
f.bar:SetTexture(statusbar) |
f.obj = self |
f.dropdown = self.dropdown |
self.dropdown:AddFrame(f) |
end |
wipe(sortedlist) |
end |
end |
local function ClearFocus(self) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function OnHide(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function Drop_OnEnter(this) |
this.obj:Fire("OnEnter") |
end |
local function Drop_OnLeave(this) |
this.obj:Fire("OnLeave") |
end |
local function Constructor() |
local frame = AGSMW:GetBaseFrame() |
local self = {} |
self.type = widgetType |
self.frame = frame |
frame.obj = self |
frame.dropButton.obj = self |
frame.dropButton:SetScript("OnEnter", Drop_OnEnter) |
frame.dropButton:SetScript("OnLeave", Drop_OnLeave) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
local bar = frame:CreateTexture(nil, "ARTWORK") |
bar:SetPoint("TOPLEFT", frame,"TOPLEFT",6,-25) |
bar:SetPoint("BOTTOMRIGHT", frame,"BOTTOMRIGHT", -21, 5) |
self.bar = bar |
self.alignoffset = 31 |
self.OnRelease = OnRelease |
self.OnAcquire = OnAcquire |
self.ClearFocus = ClearFocus |
self.SetText = SetText |
self.SetValue = SetValue |
self.GetValue = GetValue |
self.SetList = SetList |
self.SetLabel = SetLabel |
self.SetDisabled = SetDisabled |
self.AddItem = AddItem |
self.SetMultiselect = SetMultiselect |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.ToggleDrop = ToggleDrop |
AceGUI:RegisterAsWidget(self) |
return self |
end |
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) |
end |
-- 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") |
local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") |
do |
local widgetType = "LSM30_Border" |
local widgetVersion = 9 |
local contentFrameCache = {} |
local function ReturnSelf(self) |
self:ClearAllPoints() |
self:Hide() |
self.check:Hide() |
table.insert(contentFrameCache, self) |
end |
local function ContentOnClick(this, button) |
local self = this.obj |
self:Fire("OnValueChanged", this.text:GetText()) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function ContentOnEnter(this, button) |
local self = this.obj |
local text = this.text:GetText() |
local border = self.list[text] ~= text and self.list[text] or Media:Fetch('border',text) |
this.dropdown:SetBackdrop({edgeFile = border, |
bgFile=[[Interface\DialogFrame\UI-DialogBox-Background-Dark]], |
tile = true, tileSize = 16, edgeSize = 16, |
insets = { left = 4, right = 4, top = 4, bottom = 4 }}) |
end |
local function GetContentLine() |
local frame |
if next(contentFrameCache) then |
frame = table.remove(contentFrameCache) |
else |
frame = CreateFrame("Button", nil, UIParent) |
--frame:SetWidth(200) |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
frame:SetScript("OnEnter", ContentOnEnter) |
local check = frame:CreateTexture("OVERLAY") |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") |
check:Hide() |
frame.check = check |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontWhite") |
text:SetPoint("LEFT", check, "RIGHT", 1, 0) |
text:SetPoint("RIGHT", frame, "RIGHT", -2, 0) |
text:SetJustifyH("LEFT") |
text:SetText("Test Test Test Test Test Test Test") |
frame.text = text |
frame.ReturnSelf = ReturnSelf |
end |
frame:Show() |
return frame |
end |
local function OnAcquire(self) |
self:SetHeight(44) |
self:SetWidth(200) |
end |
local function OnRelease(self) |
self:SetText("") |
self:SetLabel("") |
self:SetDisabled(false) |
self.value = nil |
self.list = nil |
self.open = nil |
self.hasClose = nil |
self.frame:ClearAllPoints() |
self.frame:Hide() |
end |
local function SetValue(self, value) -- Set the value to an item in the List. |
if self.list then |
self:SetText(value or "") |
end |
self.value = value |
end |
local function GetValue(self) |
return self.value |
end |
local function SetList(self, list) -- Set the list of values for the dropdown (key => value pairs) |
self.list = list or Media:HashTable("border") |
end |
local function SetText(self, text) -- Set the text displayed in the box. |
self.frame.text:SetText(text or "") |
local border = self.list[text] ~= text and self.list[text] or Media:Fetch('border',text) |
self.frame.displayButton:SetBackdrop({edgeFile = border, |
bgFile=[[Interface\DialogFrame\UI-DialogBox-Background-Dark]], |
tile = true, tileSize = 16, edgeSize = 16, |
insets = { left = 4, right = 4, top = 4, bottom = 4 }}) |
end |
local function SetLabel(self, text) -- Set the text for the label. |
self.frame.label:SetText(text or "") |
end |
local function AddItem(self, key, value) -- Add an item to the list. |
self.list = self.list or {} |
self.list[key] = value |
end |
local SetItemValue = AddItem -- Set the value of a item in the list. <<same as adding a new item>> |
local function SetMultiselect(self, flag) end -- Toggle multi-selecting. <<Dummy function to stay inline with the dropdown API>> |
local function GetMultiselect() return false end-- Query the multi-select flag. <<Dummy function to stay inline with the dropdown API>> |
local function SetItemDisabled(self, key) end-- Disable one item in the list. <<Dummy function to stay inline with the dropdown API>> |
local function SetDisabled(self, disabled) -- Disable the widget. |
self.disabled = disabled |
if disabled then |
self.frame:Disable() |
else |
self.frame:Enable() |
end |
end |
local function textSort(a,b) |
return string.upper(a) < string.upper(b) |
end |
local sortedlist = {} |
local function ToggleDrop(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
AceGUI:ClearFocus() |
else |
AceGUI:SetFocus(self) |
self.dropdown = AGSMW:GetDropDownFrame() |
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") |
for k, v in pairs(self.list) do |
sortedlist[#sortedlist+1] = k |
end |
table.sort(sortedlist, textSort) |
for i, k in ipairs(sortedlist) do |
local f = GetContentLine() |
f.text:SetText(k) |
--print(k) |
if k == self.value then |
f.check:Show() |
end |
f.obj = self |
f.dropdown = self.dropdown |
self.dropdown:AddFrame(f) |
end |
wipe(sortedlist) |
end |
end |
local function ClearFocus(self) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function OnHide(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function Drop_OnEnter(this) |
this.obj:Fire("OnEnter") |
end |
local function Drop_OnLeave(this) |
this.obj:Fire("OnLeave") |
end |
local function Constructor() |
local frame = AGSMW:GetBaseFrameWithWindow() |
local self = {} |
self.type = widgetType |
self.frame = frame |
frame.obj = self |
frame.dropButton.obj = self |
frame.dropButton:SetScript("OnEnter", Drop_OnEnter) |
frame.dropButton:SetScript("OnLeave", Drop_OnLeave) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
self.alignoffset = 31 |
self.OnRelease = OnRelease |
self.OnAcquire = OnAcquire |
self.ClearFocus = ClearFocus |
self.SetText = SetText |
self.SetValue = SetValue |
self.GetValue = GetValue |
self.SetList = SetList |
self.SetLabel = SetLabel |
self.SetDisabled = SetDisabled |
self.AddItem = AddItem |
self.SetMultiselect = SetMultiselect |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.ToggleDrop = ToggleDrop |
AceGUI:RegisterAsWidget(self) |
return self |
end |
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) |
end |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<Script file="prototypes.lua" /> |
<Script file="FontWidget.lua" /> |
<Script file="SoundWidget.lua" /> |
<Script file="StatusbarWidget.lua" /> |
<Script file="BorderWidget.lua" /> |
<Script file="BackgroundWidget.lua" /> |
</Ui> |
-- 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") |
local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") |
do |
local widgetType = "LSM30_Background" |
local widgetVersion = 9 |
local contentFrameCache = {} |
local function ReturnSelf(self) |
self:ClearAllPoints() |
self:Hide() |
self.check:Hide() |
table.insert(contentFrameCache, self) |
end |
local function ContentOnClick(this, button) |
local self = this.obj |
self:Fire("OnValueChanged", this.text:GetText()) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function ContentOnEnter(this, button) |
local self = this.obj |
local text = this.text:GetText() |
local background = self.list[text] ~= text and self.list[text] or Media:Fetch('background',text) |
self.dropdown.bgTex:SetTexture(background) |
end |
local function GetContentLine() |
local frame |
if next(contentFrameCache) then |
frame = table.remove(contentFrameCache) |
else |
frame = CreateFrame("Button", nil, UIParent) |
--frame:SetWidth(200) |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
frame:SetScript("OnEnter", ContentOnEnter) |
local check = frame:CreateTexture("OVERLAY") |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") |
check:Hide() |
frame.check = check |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontWhite") |
local font, size = text:GetFont() |
text:SetFont(font,size,"OUTLINE") |
text:SetPoint("LEFT", check, "RIGHT", 1, 0) |
text:SetPoint("RIGHT", frame, "RIGHT", -2, 0) |
text:SetJustifyH("LEFT") |
text:SetText("Test Test Test Test Test Test Test") |
frame.text = text |
frame.ReturnSelf = ReturnSelf |
end |
frame:Show() |
return frame |
end |
local function OnAcquire(self) |
self:SetHeight(44) |
self:SetWidth(200) |
end |
local function OnRelease(self) |
self:SetText("") |
self:SetLabel("") |
self:SetDisabled(false) |
self.value = nil |
self.list = nil |
self.open = nil |
self.hasClose = nil |
self.frame:ClearAllPoints() |
self.frame:Hide() |
end |
local function SetValue(self, value) -- Set the value to an item in the List. |
if self.list then |
self:SetText(value or "") |
end |
self.value = value |
end |
local function GetValue(self) |
return self.value |
end |
local function SetList(self, list) -- Set the list of values for the dropdown (key => value pairs) |
self.list = list or Media:HashTable("background") |
end |
local function SetText(self, text) -- Set the text displayed in the box. |
self.frame.text:SetText(text or "") |
local background = self.list[text] ~= text and self.list[text] or Media:Fetch('background',text) |
self.frame.displayButton:SetBackdrop({bgFile = background, |
edgeFile = "Interface/Tooltips/UI-Tooltip-Border", |
edgeSize = 16, |
insets = { left = 4, right = 4, top = 4, bottom = 4 }}) |
end |
local function SetLabel(self, text) -- Set the text for the label. |
self.frame.label:SetText(text or "") |
end |
local function AddItem(self, key, value) -- Add an item to the list. |
self.list = self.list or {} |
self.list[key] = value |
end |
local SetItemValue = AddItem -- Set the value of a item in the list. <<same as adding a new item>> |
local function SetMultiselect(self, flag) end -- Toggle multi-selecting. <<Dummy function to stay inline with the dropdown API>> |
local function GetMultiselect() return false end-- Query the multi-select flag. <<Dummy function to stay inline with the dropdown API>> |
local function SetItemDisabled(self, key) end-- Disable one item in the list. <<Dummy function to stay inline with the dropdown API>> |
local function SetDisabled(self, disabled) -- Disable the widget. |
self.disabled = disabled |
if disabled then |
self.frame:Disable() |
self.frame.displayButton:SetBackdropColor(.2,.2,.2,1) |
else |
self.frame:Enable() |
self.frame.displayButton:SetBackdropColor(1,1,1,1) |
end |
end |
local function textSort(a,b) |
return string.upper(a) < string.upper(b) |
end |
local sortedlist = {} |
local function ToggleDrop(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
AceGUI:ClearFocus() |
else |
AceGUI:SetFocus(self) |
self.dropdown = AGSMW:GetDropDownFrame() |
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") |
for k, v in pairs(self.list) do |
sortedlist[#sortedlist+1] = k |
end |
table.sort(sortedlist, textSort) |
for i, k in ipairs(sortedlist) do |
local f = GetContentLine() |
f.text:SetText(k) |
--print(k) |
if k == self.value then |
f.check:Show() |
end |
f.obj = self |
f.dropdown = self.dropdown |
self.dropdown:AddFrame(f) |
end |
wipe(sortedlist) |
end |
end |
local function ClearFocus(self) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function OnHide(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function Drop_OnEnter(this) |
this.obj:Fire("OnEnter") |
end |
local function Drop_OnLeave(this) |
this.obj:Fire("OnLeave") |
end |
local function Constructor() |
local frame = AGSMW:GetBaseFrameWithWindow() |
local self = {} |
self.type = widgetType |
self.frame = frame |
frame.obj = self |
frame.dropButton.obj = self |
frame.dropButton:SetScript("OnEnter", Drop_OnEnter) |
frame.dropButton:SetScript("OnLeave", Drop_OnLeave) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
self.alignoffset = 31 |
self.OnRelease = OnRelease |
self.OnAcquire = OnAcquire |
self.ClearFocus = ClearFocus |
self.SetText = SetText |
self.SetValue = SetValue |
self.GetValue = GetValue |
self.SetList = SetList |
self.SetLabel = SetLabel |
self.SetDisabled = SetDisabled |
self.AddItem = AddItem |
self.SetMultiselect = SetMultiselect |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.ToggleDrop = ToggleDrop |
AceGUI:RegisterAsWidget(self) |
return self |
end |
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) |
end |
-- Widget created by Yssaril |
--[===[@debug@ |
local DataVersion = 9001 -- dev version always overwrites everything else :) |
--@end-debug@]===] |
--@non-debug@ |
local DataVersion = 42 |
--@end-non-debug@ |
local AGSMW = LibStub:NewLibrary("AceGUISharedMediaWidgets-1.0", DataVersion) |
if not AGSMW then |
return -- already loaded and no upgrade necessary |
end |
LoadAddOn("LibSharedMedia-3.0") |
local AceGUI = LibStub("AceGUI-3.0") |
local Media = LibStub("LibSharedMedia-3.0") |
AGSMW = AGSMW or {} |
AceGUIWidgetLSMlists = { |
['font'] = Media:HashTable("font"), |
['sound'] = Media:HashTable("sound"), |
['statusbar'] = Media:HashTable("statusbar"), |
['border'] = Media:HashTable("border"), |
['background'] = Media:HashTable("background"), |
} |
do |
local function disable(frame) |
frame.label:SetTextColor(.5,.5,.5) |
frame.text:SetTextColor(.5,.5,.5) |
frame.dropButton:Disable() |
if frame.displayButtonFont then |
frame.displayButtonFont:SetTextColor(.5,.5,.5) |
frame.displayButton:Disable() |
end |
end |
local function enable(frame) |
frame.label:SetTextColor(1,.82,0) |
frame.text:SetTextColor(1,1,1) |
frame.dropButton:Enable() |
if frame.displayButtonFont then |
frame.displayButtonFont:SetTextColor(1,1,1) |
frame.displayButton:Enable() |
end |
end |
local displayButtonBackdrop = { |
edgeFile = "Interface/Tooltips/UI-Tooltip-Border", |
tile = true, tileSize = 16, edgeSize = 16, |
insets = { left = 4, right = 4, top = 4, bottom = 4 }, |
} |
-- create or retrieve BaseFrame |
function AGSMW:GetBaseFrame() |
local frame = CreateFrame("Frame", nil, UIParent) |
frame:SetHeight(44) |
frame:SetWidth(200) |
frame:SetPoint("CENTER", UIParent, "CENTER") |
local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") |
label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) |
label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) |
label:SetJustifyH("LEFT") |
label:SetHeight(18) |
label:SetText("") |
frame.label = label |
local DLeft = frame:CreateTexture(nil, "ARTWORK") |
DLeft:SetWidth(25) |
DLeft:SetHeight(64) |
DLeft:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", -17, -21) |
DLeft:SetTexture([[Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame]]) |
DLeft:SetTexCoord(0, 0.1953125, 0, 1) |
frame.DLeft = DLeft |
local DRight = frame:CreateTexture(nil, "ARTWORK") |
DRight:SetWidth(25) |
DRight:SetHeight(64) |
DRight:SetPoint("TOP", DLeft, "TOP") |
DRight:SetPoint("RIGHT", frame, "RIGHT", 17, 0) |
DRight:SetTexture([[Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame]]) |
DRight:SetTexCoord(0.8046875, 1, 0, 1) |
frame.DRight = DRight |
local DMiddle = frame:CreateTexture(nil, "ARTWORK") |
DMiddle:SetHeight(64) |
DMiddle:SetPoint("TOP", DLeft, "TOP") |
DMiddle:SetPoint("LEFT", DLeft, "RIGHT") |
DMiddle:SetPoint("RIGHT", DRight, "LEFT") |
DMiddle:SetTexture([[Interface\Glues\CharacterCreate\CharacterCreate-LabelFrame]]) |
DMiddle:SetTexCoord(0.1953125, 0.8046875, 0, 1) |
frame.DMiddle = DMiddle |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontHighlightSmall") |
text:SetPoint("RIGHT",DRight,"RIGHT",-43,1) |
text:SetPoint("LEFT",DLeft,"LEFT",26,1) |
text:SetJustifyH("RIGHT") |
text:SetHeight(18) |
text:SetText("") |
frame.text = text |
local dropButton = CreateFrame("Button", nil, frame) |
dropButton:SetWidth(24) |
dropButton:SetHeight(24) |
dropButton:SetPoint("TOPRIGHT", DRight, "TOPRIGHT", -16, -18) |
dropButton:SetNormalTexture([[Interface\ChatFrame\UI-ChatIcon-ScrollDown-Up]]) |
dropButton:SetPushedTexture([[Interface\ChatFrame\UI-ChatIcon-ScrollDown-Down]]) |
dropButton:SetDisabledTexture([[Interface\ChatFrame\UI-ChatIcon-ScrollDown-Disabled]]) |
dropButton:SetHighlightTexture([[Interface\Buttons\UI-Common-MouseHilight]], "ADD") |
frame.dropButton = dropButton |
frame.Disable = disable |
frame.Enable = enable |
return frame |
end |
function AGSMW:GetBaseFrameWithWindow() |
local frame = self:GetBaseFrame() |
local displayButton = CreateFrame("Button", nil, frame) |
displayButton:SetHeight(42) |
displayButton:SetWidth(42) |
displayButton:SetPoint("TOPLEFT", frame, "TOPLEFT", 1, -2) |
displayButton:SetBackdrop(displayButtonBackdrop) |
displayButton:SetBackdropBorderColor(.5, .5, .5) |
frame.displayButton = displayButton |
frame.label:SetPoint("TOPLEFT",displayButton,"TOPRIGHT",1,2) |
frame.DLeft:SetPoint("BOTTOMLEFT", displayButton, "BOTTOMRIGHT", -17, -20) |
return frame |
end |
end |
do |
local sliderBackdrop = { |
["bgFile"] = [[Interface\Buttons\UI-SliderBar-Background]], |
["edgeFile"] = [[Interface\Buttons\UI-SliderBar-Border]], |
["tile"] = true, |
["edgeSize"] = 8, |
["tileSize"] = 8, |
["insets"] = { |
["left"] = 3, |
["right"] = 3, |
["top"] = 3, |
["bottom"] = 3, |
}, |
} |
local frameBackdrop = { |
bgFile=[[Interface\DialogFrame\UI-DialogBox-Background-Dark]], |
edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]], |
tile = true, tileSize = 32, edgeSize = 32, |
insets = { left = 11, right = 12, top = 12, bottom = 9 }, |
} |
local function OnMouseWheel(self, dir) |
self.slider:SetValue(self.slider:GetValue()+(15*dir*-1)) |
end |
local function AddFrame(self, frame) |
frame:SetParent(self.contentframe) |
local strata = self:GetFrameStrata() |
frame:SetFrameStrata(strata) |
local level = self:GetFrameLevel() + 100 |
frame:SetFrameLevel(level) |
if next(self.contentRepo) then |
frame:SetPoint("TOPLEFT", self.contentRepo[#self.contentRepo], "BOTTOMLEFT", 0, 0) |
frame:SetPoint("RIGHT", self.contentframe, "RIGHT", 0, 0) |
self.contentframe:SetHeight(self.contentframe:GetHeight() + frame:GetHeight()) |
self.contentRepo[#self.contentRepo+1] = frame |
else |
self.contentframe:SetHeight(frame:GetHeight()) |
frame:SetPoint("TOPLEFT", self.contentframe, "TOPLEFT", 0, 0) |
frame:SetPoint("RIGHT", self.contentframe, "RIGHT", 0, 0) |
self.contentRepo[1] = frame |
end |
if self.contentframe:GetHeight() > UIParent:GetHeight()*2/5 - 20 then |
self.scrollframe:SetWidth(146) |
self:SetHeight(UIParent:GetHeight()*2/5) |
self.slider:Show() |
self:SetScript("OnMouseWheel", OnMouseWheel) |
self.scrollframe:UpdateScrollChildRect() |
self.slider:SetMinMaxValues(0, self.contentframe:GetHeight()-self.scrollframe:GetHeight()) |
else |
self.scrollframe:SetWidth(160) |
self:SetHeight(self.contentframe:GetHeight()+25) |
self.slider:Hide() |
self:SetScript("OnMouseWheel", nil) |
self.scrollframe:UpdateScrollChildRect() |
self.slider:SetMinMaxValues(0, 0) |
end |
self.contentframe:SetWidth(self.scrollframe:GetWidth()) |
end |
local function ClearFrames(self) |
for i, frame in ipairs(self.contentRepo) do |
frame:ReturnSelf() |
self.contentRepo[i] = nil |
end |
end |
local function slider_OnValueChanged(self, value) |
self.frame.scrollframe:SetVerticalScroll(value) |
end |
local DropDownCache = {} |
function AGSMW:GetDropDownFrame() |
local frame |
if next(DropDownCache) then |
frame = table.remove(DropDownCache) |
else |
frame = CreateFrame("Frame", nil, UIParent) |
frame:SetClampedToScreen(true) |
frame:SetWidth(188) |
frame:SetBackdrop(frameBackdrop) |
frame:SetFrameStrata("TOOLTIP") |
frame:EnableMouseWheel(true) |
local contentframe = CreateFrame("Frame", nil, frame) |
contentframe:SetWidth(160) |
contentframe:SetHeight(0) |
frame.contentframe = contentframe |
local scrollframe = CreateFrame("ScrollFrame", nil, frame) |
scrollframe:SetPoint("TOPLEFT", frame, "TOPLEFT", 14, -13) |
scrollframe:SetPoint("BOTTOM", frame, "BOTTOM", 0, 12) |
scrollframe:SetWidth(160) |
scrollframe:SetScrollChild(contentframe) |
frame.scrollframe = scrollframe |
local bgTex = frame:CreateTexture(nil, "ARTWORK") |
bgTex:SetAllPoints(scrollframe) |
frame.bgTex = bgTex |
frame.AddFrame = AddFrame |
frame.ClearFrames = ClearFrames |
frame.contentRepo = {} -- store all our frames in here so we can get rid of them later |
local slider = CreateFrame("Slider", nil, scrollframe) |
slider:SetOrientation("VERTICAL") |
slider:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -14, -10) |
slider:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -14, 10) |
slider:SetBackdrop(sliderBackdrop) |
slider:SetThumbTexture([[Interface\Buttons\UI-SliderBar-Button-Vertical]]) |
slider:SetMinMaxValues(0, 1) |
--slider:SetValueStep(1) |
slider:SetWidth(12) |
slider.frame = frame |
slider:SetScript("OnValueChanged", slider_OnValueChanged) |
frame.slider = slider |
end |
frame:SetHeight(UIParent:GetHeight()*2/5) |
frame.slider:SetValue(0) |
frame:Show() |
return frame |
end |
function AGSMW:ReturnDropDownFrame(frame) |
ClearFrames(frame) |
frame:ClearAllPoints() |
frame:Hide() |
frame:SetBackdrop(frameBackdrop) |
frame.bgTex:SetTexture(nil) |
table.insert(DropDownCache, frame) |
return nil |
end |
end |
-- 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") |
local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") |
do |
local widgetType = "LSM30_Font" |
local widgetVersion = 9 |
local contentFrameCache = {} |
local function ReturnSelf(self) |
self:ClearAllPoints() |
self:Hide() |
self.check:Hide() |
table.insert(contentFrameCache, self) |
end |
local function ContentOnClick(this, button) |
local self = this.obj |
self:Fire("OnValueChanged", this.text:GetText()) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function GetContentLine() |
local frame |
if next(contentFrameCache) then |
frame = table.remove(contentFrameCache) |
else |
frame = CreateFrame("Button", nil, UIParent) |
--frame:SetWidth(200) |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") |
check:Hide() |
frame.check = check |
local text = frame:CreateFontString(nil,"OVERLAY","GameFontWhite") |
text:SetPoint("LEFT", check, "RIGHT", 1, 0) |
text:SetPoint("RIGHT", frame, "RIGHT", -2, 0) |
text:SetJustifyH("LEFT") |
text:SetText("Test Test Test Test Test Test Test") |
frame.text = text |
frame.ReturnSelf = ReturnSelf |
end |
frame:Show() |
return frame |
end |
local function OnAcquire(self) |
self:SetHeight(44) |
self:SetWidth(200) |
end |
local function OnRelease(self) |
self:SetText("") |
self:SetLabel("") |
self:SetDisabled(false) |
self.value = nil |
self.list = nil |
self.open = nil |
self.hasClose = nil |
self.frame:ClearAllPoints() |
self.frame:Hide() |
end |
local function SetValue(self, value) -- Set the value to an item in the List. |
if self.list then |
self:SetText(value or "") |
end |
self.value = value |
end |
local function GetValue(self) |
return self.value |
end |
local function SetList(self, list) -- Set the list of values for the dropdown (key => value pairs) |
self.list = list or Media:HashTable("font") |
end |
local function SetText(self, text) -- Set the text displayed in the box. |
self.frame.text:SetText(text or "") |
local font = self.list[text] ~= text and self.list[text] or Media:Fetch('font',text) |
local _, size, outline= self.frame.text:GetFont() |
self.frame.text:SetFont(font,size,outline) |
end |
local function SetLabel(self, text) -- Set the text for the label. |
self.frame.label:SetText(text or "") |
end |
local function AddItem(self, key, value) -- Add an item to the list. |
self.list = self.list or {} |
self.list[key] = value |
end |
local SetItemValue = AddItem -- Set the value of a item in the list. <<same as adding a new item>> |
local function SetMultiselect(self, flag) end -- Toggle multi-selecting. <<Dummy function to stay inline with the dropdown API>> |
local function GetMultiselect() return false end-- Query the multi-select flag. <<Dummy function to stay inline with the dropdown API>> |
local function SetItemDisabled(self, key) end-- Disable one item in the list. <<Dummy function to stay inline with the dropdown API>> |
local function SetDisabled(self, disabled) -- Disable the widget. |
self.disabled = disabled |
if disabled then |
self.frame:Disable() |
else |
self.frame:Enable() |
end |
end |
local function textSort(a,b) |
return string.upper(a) < string.upper(b) |
end |
local sortedlist = {} |
local function ToggleDrop(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
AceGUI:ClearFocus() |
else |
AceGUI:SetFocus(self) |
self.dropdown = AGSMW:GetDropDownFrame() |
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT") |
for k, v in pairs(self.list) do |
sortedlist[#sortedlist+1] = k |
end |
table.sort(sortedlist, textSort) |
for i, k in ipairs(sortedlist) do |
local f = GetContentLine() |
local _, size, outline= f.text:GetFont() |
local font = self.list[k] ~= k and self.list[k] or Media:Fetch('font',k) |
f.text:SetFont(font,size,outline) |
f.text:SetText(k) |
if k == self.value then |
f.check:Show() |
end |
f.obj = self |
self.dropdown:AddFrame(f) |
end |
wipe(sortedlist) |
end |
end |
local function ClearFocus(self) |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function OnHide(this) |
local self = this.obj |
if self.dropdown then |
self.dropdown = AGSMW:ReturnDropDownFrame(self.dropdown) |
end |
end |
local function Drop_OnEnter(this) |
this.obj:Fire("OnEnter") |
end |
local function Drop_OnLeave(this) |
this.obj:Fire("OnLeave") |
end |
local function Constructor() |
local frame = AGSMW:GetBaseFrame() |
local self = {} |
self.type = widgetType |
self.frame = frame |
frame.obj = self |
frame.dropButton.obj = self |
frame.dropButton:SetScript("OnEnter", Drop_OnEnter) |
frame.dropButton:SetScript("OnLeave", Drop_OnLeave) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
self.alignoffset = 31 |
self.OnRelease = OnRelease |
self.OnAcquire = OnAcquire |
self.ClearFocus = ClearFocus |
self.SetText = SetText |
self.SetValue = SetValue |
self.GetValue = GetValue |
self.SetList = SetList |
self.SetLabel = SetLabel |
self.SetDisabled = SetDisabled |
self.AddItem = AddItem |
self.SetMultiselect = SetMultiselect |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.ToggleDrop = ToggleDrop |
AceGUI:RegisterAsWidget(self) |
return self |
end |
AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) |
end |
--[[ |
Name: LibSharedMedia-3.0 |
Revision: $Revision: 74 $ |
Author: Elkano (elkano@gmx.de) |
Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com) |
Website: http://www.wowace.com/projects/libsharedmedia-3-0/ |
Description: Shared handling of media data (fonts, sounds, textures, ...) between addons. |
Dependencies: LibStub, CallbackHandler-1.0 |
License: LGPL v2.1 |
]] |
local MAJOR, MINOR = "LibSharedMedia-3.0", 5000402 -- 5.0.4 v2 / increase manually on changes |
local lib = LibStub:NewLibrary(MAJOR, MINOR) |
if not lib then return end |
local _G = getfenv(0) |
local pairs = _G.pairs |
local type = _G.type |
local band = _G.bit.band |
local table_insert = _G.table.insert |
local table_sort = _G.table.sort |
local locale = GetLocale() |
local locale_is_western |
local LOCALE_MASK = 0 |
lib.LOCALE_BIT_koKR = 1 |
lib.LOCALE_BIT_ruRU = 2 |
lib.LOCALE_BIT_zhCN = 4 |
lib.LOCALE_BIT_zhTW = 8 |
lib.LOCALE_BIT_western = 128 |
local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0") |
lib.callbacks = lib.callbacks or CallbackHandler:New(lib) |
lib.DefaultMedia = lib.DefaultMedia or {} |
lib.MediaList = lib.MediaList or {} |
lib.MediaTable = lib.MediaTable or {} |
lib.MediaType = lib.MediaType or {} |
lib.OverrideMedia = lib.OverrideMedia or {} |
local defaultMedia = lib.DefaultMedia |
local mediaList = lib.MediaList |
local mediaTable = lib.MediaTable |
local overrideMedia = lib.OverrideMedia |
-- create mediatype constants |
lib.MediaType.BACKGROUND = "background" -- background textures |
lib.MediaType.BORDER = "border" -- border textures |
lib.MediaType.FONT = "font" -- fonts |
lib.MediaType.STATUSBAR = "statusbar" -- statusbar textures |
lib.MediaType.SOUND = "sound" -- sound files |
-- populate lib with default Blizzard data |
-- BACKGROUND |
if not lib.MediaTable.background then lib.MediaTable.background = {} end |
lib.MediaTable.background["None"] = [[]] |
lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]] |
lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]] |
lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]] |
lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]] |
lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]] |
lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]] |
lib.MediaTable.background["Blizzard Parchment"] = [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]] |
lib.MediaTable.background["Blizzard Parchment 2"] = [[Interface\AchievementFrame\UI-GuildAchievement-Parchment-Horizontal]] |
lib.MediaTable.background["Blizzard Rock"] = [[Interface\FrameGeneral\UI-Background-Rock]] |
lib.MediaTable.background["Blizzard Tabard Background"] = [[Interface\TabardFrame\TabardFrameBackground]] |
lib.MediaTable.background["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Background]] |
lib.MediaTable.background["Solid"] = [[Interface\Buttons\WHITE8X8]] |
lib.DefaultMedia.background = "None" |
-- BORDER |
if not lib.MediaTable.border then lib.MediaTable.border = {} end |
lib.MediaTable.border["None"] = [[]] |
lib.MediaTable.border["Blizzard Achievement Wood"] = [[Interface\AchievementFrame\UI-Achievement-WoodBorder]] |
lib.MediaTable.border["Blizzard Chat Bubble"] = [[Interface\Tooltips\ChatBubble-Backdrop]] |
lib.MediaTable.border["Blizzard Dialog"] = [[Interface\DialogFrame\UI-DialogBox-Border]] |
lib.MediaTable.border["Blizzard Dialog Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Border]] |
lib.MediaTable.border["Blizzard Party"] = [[Interface\CHARACTERFRAME\UI-Party-Border]] |
lib.MediaTable.border["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Border]] |
lib.DefaultMedia.border = "None" |
-- FONT |
if not lib.MediaTable.font then lib.MediaTable.font = {} end |
local SML_MT_font = lib.MediaTable.font |
--[[ |
file name latin koKR ruRU zhCN zhTW |
2002.ttf 2002 X X X - - |
2002B.ttf 2002 Bold X X X - - |
ARHei.ttf AR CrystalzcuheiGBK Demibold X - X X X |
ARIALN.TTF Arial Narrow X - X - - |
ARKai_C.ttf AR ZhongkaiGBK Medium (Combat) X - X X X |
ARKai_T.ttf AR ZhongkaiGBK Medium X - X X X |
bHEI00M.ttf AR Heiti2 Medium B5 - - - - X |
bHEI01B.ttf AR Heiti2 Bold B5 - - - - X |
bKAI00M.ttf AR Kaiti Medium B5 - - - - X |
bLEI00D.ttf AR Leisu Demi B5 - - - - X |
FRIZQT__.TTF Friz Quadrata TT X - - - - |
FRIZQT___CYR.TTF FrizQuadrataCTT - - X - - |
K_Damage.TTF YDIWingsM - X X - - |
K_Pagetext.TTF MoK X X X - - |
MORPHEUS.TTF Morpheus X - - - - |
MORPHEUS_CYR.TTF Morpheus X - X - - |
NIM_____.ttf Nimrod MT X - X - - |
SKURRI.TTF Skurri X - - - - |
SKURRI_CYR.TTF Skurri X - X - - |
]] |
if locale == "koKR" then |
LOCALE_MASK = lib.LOCALE_BIT_koKR |
-- |
SML_MT_font["êµµì ê¸ê¼´"] = [[Fonts\2002B.TTF]] |
SML_MT_font["기본 ê¸ê¼´"] = [[Fonts\2002.TTF]] |
SML_MT_font["ë°ë¯¸ì§ ê¸ê¼´"] = [[Fonts\K_Damage.TTF]] |
SML_MT_font["íì¤í¸ ê¸ê¼´"] = [[Fonts\K_Pagetext.TTF]] |
-- |
lib.DefaultMedia["font"] = "기본 ê¸ê¼´" -- someone from koKR please adjust if needed |
-- |
elseif locale == "zhCN" then |
LOCALE_MASK = lib.LOCALE_BIT_zhCN |
-- |
SML_MT_font["伤害æ°å"] = [[Fonts\ARKai_C.ttf]] |
SML_MT_font["é»è®¤"] = [[Fonts\ARKai_T.ttf]] |
SML_MT_font["è天"] = [[Fonts\ARHei.ttf]] |
-- |
lib.DefaultMedia["font"] = "é»è®¤" -- someone from zhCN please adjust if needed |
-- |
elseif locale == "zhTW" then |
LOCALE_MASK = lib.LOCALE_BIT_zhTW |
-- |
SML_MT_font["æ示è¨æ¯"] = [[Fonts\bHEI00M.ttf]] |
SML_MT_font["è天"] = [[Fonts\bHEI01B.ttf]] |
SML_MT_font["å·å®³æ¸å"] = [[Fonts\bKAI00M.ttf]] |
SML_MT_font["é è¨"] = [[Fonts\bLEI00D.ttf]] |
-- |
lib.DefaultMedia["font"] = "é è¨" -- someone from zhTW please adjust if needed |
elseif locale == "ruRU" then |
LOCALE_MASK = lib.LOCALE_BIT_ruRU |
-- |
SML_MT_font["2002"] = [[Fonts\2002.TTF]] |
SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]] |
SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]] |
SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]] |
SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]] |
SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]] |
SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT___CYR.TTF]] |
SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]] |
SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]] |
SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]] |
SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]] |
-- |
lib.DefaultMedia.font = "Friz Quadrata TT" |
-- |
else |
LOCALE_MASK = lib.LOCALE_BIT_western |
locale_is_western = true |
-- |
SML_MT_font["2002"] = [[Fonts\2002.TTF]] |
SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]] |
SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]] |
SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]] |
SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]] |
SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]] |
SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]] |
SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]] |
SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]] |
SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]] |
SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]] |
-- |
lib.DefaultMedia.font = "Friz Quadrata TT" |
-- |
end |
-- STATUSBAR |
if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end |
lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]] |
lib.MediaTable.statusbar["Blizzard Character Skills Bar"] = [[Interface\PaperDollInfoFrame\UI-Character-Skills-Bar]] |
lib.MediaTable.statusbar["Blizzard Raid Bar"] = [[Interface\RaidFrame\Raid-Bar-Hp-Fill]] |
lib.DefaultMedia.statusbar = "Blizzard" |
-- SOUND |
if not lib.MediaTable.sound then lib.MediaTable.sound = {} end |
lib.MediaTable.sound["None"] = [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input. |
lib.DefaultMedia.sound = "None" |
local function rebuildMediaList(mediatype) |
local mtable = mediaTable[mediatype] |
if not mtable then return end |
if not mediaList[mediatype] then mediaList[mediatype] = {} end |
local mlist = mediaList[mediatype] |
-- list can only get larger, so simply overwrite it |
local i = 0 |
for k in pairs(mtable) do |
i = i + 1 |
mlist[i] = k |
end |
table_sort(mlist) |
end |
function lib:Register(mediatype, key, data, langmask) |
if type(mediatype) ~= "string" then |
error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype)) |
end |
if type(key) ~= "string" then |
error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key)) |
end |
mediatype = mediatype:lower() |
if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end |
if not mediaTable[mediatype] then mediaTable[mediatype] = {} end |
local mtable = mediaTable[mediatype] |
if mtable[key] then return false end |
mtable[key] = data |
rebuildMediaList(mediatype) |
self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key) |
return true |
end |
function lib:Fetch(mediatype, key, noDefault) |
local mtt = mediaTable[mediatype] |
local overridekey = overrideMedia[mediatype] |
local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil |
return result ~= "" and result or nil |
end |
function lib:IsValid(mediatype, key) |
return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false |
end |
function lib:HashTable(mediatype) |
return mediaTable[mediatype] |
end |
function lib:List(mediatype) |
if not mediaTable[mediatype] then |
return nil |
end |
if not mediaList[mediatype] then |
rebuildMediaList(mediatype) |
end |
return mediaList[mediatype] |
end |
function lib:GetGlobal(mediatype) |
return overrideMedia[mediatype] |
end |
function lib:SetGlobal(mediatype, key) |
if not mediaTable[mediatype] then |
return false |
end |
overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil |
self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype]) |
return true |
end |
function lib:GetDefault(mediatype) |
return defaultMedia[mediatype] |
end |
function lib:SetDefault(mediatype, key) |
if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then |
defaultMedia[mediatype] = key |
return true |
else |
return false |
end |
end |
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ |
..\FrameXML\UI.xsd"> |
<Script file="LibSharedMedia-3.0.lua" /> |
</Ui> |
<Ui xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> |
<Script file="LibStub\LibStub.lua"/> |
<Include file="Kui\kui.xml"/> |
<Include file="Ace3\CallbackHandler-1.0\CallbackHandler-1.0.xml"/> |
<Include file="Ace3\AceAddon-3.0\AceAddon-3.0.xml"/> |
<Include file="Ace3\AceDB-3.0\AceDB-3.0.xml"/> |
<Include file="Ace3\AceDBOptions-3.0\AceDBOptions-3.0.xml"/> |
<Include file="Ace3\AceGUI-3.0\AceGUI-3.0.xml"/> |
<Include file="Ace3\AceConfig-3.0\AceConfig-3.0.xml"/> |
<Include file="Ace3\AceDB-3.0\AceDB-3.0.xml"/> |
<Include file="Ace3\AceDBOptions-3.0\AceDBOptions-3.0.xml"/> |
<Include file="LibSharedMedia-3.0\lib.xml"/> |
<Include file="Ace3\AceGUI-3.0-SharedMediaWidgets\widget.xml"/> |
</Ui> |