WoWInterface SVN SliceCommander

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 246 to Rev 247
    Reverse comparison

Rev 246 → Rev 247

trunk/SliceCommander.lua
549,44 → 549,6
SC.OTHER['AS']['obj']:SetAlpha(value/100)
end
 
function SliceCommander:TestBF()
if SC.SET.display.BFICON then
local name = SliceCommander:UnitAura("player", SC_SPELLID['BF'], "HELPFUL PLAYER")
if name and not SC.OTHER['BF']['obj']:IsVisible() then
SC.OTHER['BF']['obj']:Show()
elseif not name and SC.OTHER['BF']['obj']:IsVisible() then
if SC.SET.IsLocked == true then
SC.OTHER['BF']['obj']:Hide()
end
end
else
if SC.SET.IsLocked == true then
SC.OTHER['BF']['obj']:Hide()
end
end
end
 
 
 
function SliceCommander:TestBB()
if SC.SET.display.BB then
local id = GetSpellTexture(SC_SPELL['PS'])
if id and id == 135616 then
if not SC.OTHER['BB']['obj']:IsVisible() then
SC.OTHER['BB']['obj']:Show()
end
elseif SC.OTHER['BB']['obj']:IsVisible() then
if SC.SET.IsLocked == true then
SC.OTHER['BB']['obj']:Hide()
end
end
else
if SC.SET.IsLocked == true then
SC.OTHER['BB']['obj']:Hide()
end
end
end
 
function SliceCommander:TestDP()
local combat = UnitAffectingCombat("player")
if SC.SET.display.DPICON then --and GetSpecialization() == 1
633,28 → 595,6
end
end
 
function SliceCommander:TestSOTD()
if SC.SET.display.SOTD then
local name, _, _, count = SliceCommander:UnitAura("player", SC_SPELLID['SOTD'], "HELPFUL PLAYER")
if name and count >= 29 then
if not SC.OTHER['SOTD']['obj']:IsVisible() then
SC.OTHER['SOTD']['obj']:Show()
end
SC.OTHER['SOTD']['obj'].iconTxt:SetText(count)
elseif SC.OTHER['SOTD']['obj']:IsVisible() then
if SC.SET.IsLocked == true then
SC.OTHER['SOTD']['obj']:Hide()
end
SC.OTHER['SOTD']['obj'].iconTxt:SetText('')
end
else
if SC.SET.IsLocked == true then
SC.OTHER['SOTD']['obj']:Hide()
end
SC.OTHER['SOTD']['obj'].iconTxt:SetText('')
end
end
 
function SliceCommander:UnitAura(target, spell, filter)
local i, name, icon, count, debuffType, duration, expirationTime, unitCaster, canStealOrPurge, nameplateShowPersonal, spellId, canApplyAura, isBossDebuff, isCastByPlayer, nameplateShowAll, timeMod
i = 1
trunk/Core/Settings.lua
1068,6 → 1068,7
Shortcut_BE = SliceCommander:getShortcutSetting("SliceCommander_Outlaw", "Skills", "BE"),
Shortcut_GHCD = SliceCommander:getShortcutSetting("SliceCommander_Outlaw", "Skills", "GHCD"),
Shortcut_OP = SliceCommander:getShortcutSetting("SliceCommander_Outlaw", "Skills", "OP"),
Shortcut_GG = SliceCommander:getShortcutSetting("SliceCommander_Outlaw", "Skills", "GG"),
RB = {
name = SC_SPELL['RB'],
type = "group",
1099,41 → 1100,7
}
)
},
BF = {
order = SliceCommander:getOrder(),
name = SC_SPELL['BF'],
type = "group",
args = {
header = {
type = "header",
order = SliceCommander:getOrder(),
name = L['Spell'],
},
BFShow = SliceCommander:getShowSetting('BF'),
BFColor = SliceCommander:getColorSetting('BF'),
BFPos = SliceCommander:getPosSetting('BF'),
Flash = SliceCommander:getFlashSetting('BF'),
BFIcon = {
order = SliceCommander:getOrder(),
name = string.format(L["Show %s icon"], SC_SPELL['BF']),
desc = string.format(L["Display the %s icon when enbale"], SC_SPELL['BF']),
type = "toggle",
set = function(info,val)
SC.SET.display.BFICON = val
end,
get = function(info) return SC.SET.display.BFICON end
},
headerCD = {
type = "header",
order = SliceCommander:getOrder(),
name = L['Cooldown'],
},
BFCDShow = SliceCommander:getShowSetting('BFCD'),
BFCDColor = SliceCommander:getColorSetting('BFCD'),
BFCDPos = SliceCommander:getPosSetting('BFCD'),
FlashCD = SliceCommander:getFlashSetting('BFCD')
}
},
BF = SliceCommander:getSpellCDSettings('BF'),
AR = {
order = SliceCommander:getOrder(),
name = SC_SPELL['AR'],
1339,36 → 1306,7
childGroups = "tree",
args = {
Shortcut = SliceCommander:getShortcutHeader(),
Shortcut_FOTD = SliceCommander:getShortcutSetting("SliceCommander_Complementary", "General", "FOTD"),
Shortcut_MAI = SliceCommander:getShortcutSetting("SliceCommander_Complementary", "General", "MAI"),
FOTD = {
order = SliceCommander:getOrder(),
name = SC_SPELL['FOTD'],
type = "group",
args = {
header = {
type = "header",
order = SliceCommander:getOrder(),
name = L['Spell'],
},
Show = SliceCommander:getShowSetting('FOTD'),
Pos = SliceCommander:getPosSetting('FOTD'),
Color = SliceCommander:getColorSetting('FOTD'),
Flash = SliceCommander:getFlashSetting('FOTD'),
Icon = {--Shadow of the destroyer icon
order = SliceCommander:getOrder(),
name = string.format(L["%s icon"], SC_SPELL['SOTD']),
desc = string.format(L["%s icon. It's only display when stack reach 30. There is a counter on it."], SC_SPELL['SOTD']),
type = "toggle",
set = function(info,val)
SC.SET.display.SOTD = val
end,
get = function(info)
return SC.SET.display.SOTD
end
},
}
},
MAI = SliceCommander:getSpellSettings('MAI'),
}
},
1394,26 → 1332,7
childGroups = "tree",
args = {
Shortcut = SliceCommander:getShortcutHeader(),
Shortcut_BB = SliceCommander:getShortcutSetting("SliceCommander_Complementary", "Outlaw", "BB"),
Shortcut_GSWW = SliceCommander:getShortcutSetting("SliceCommander_Complementary", "Outlaw", "GSWW"),
BB = {
order = SliceCommander:getOrder(),
name = SC_SPELL['BB'],
type = "group",
args = {
BBShow = {
order = SliceCommander:getOrder(),
name = string.format(L["Show %s icon"], SC_SPELL['BB']),
desc = string.format(L["Display the %s icon when enbale"], SC_SPELL['BB']),
width = "full",
type = "toggle",
set = function(info,val)
SC.SET.display.BB = val
end,
get = function(info) return SC.SET.display.BB end
}
}
},
GSWW = SliceCommander:getSpellSettings('GSWW'),
}
},
trunk/Core/Event.lua
189,8 → 189,5
end
end
 
SliceCommander:TestSOTD()--SOTD Icon
SliceCommander:TestBF()--BF Icon
SliceCommander:TestBB()--BB Icon
SliceCommander:TestDP()--DP Icon
end
\ No newline at end of file
trunk/Core/Config.lua
107,10 → 107,6
SC.OTHER['POISON']['obj'].button:SetAttribute("*type1", "spell")
SC.OTHER['POISON']['obj'].button:SetAttribute("*type2", "spell")
SC.OTHER['POISON']['obj'].button:EnableMouse(false)
SC.OTHER['BF']['obj'] = SliceCommander:NewIcon("Interface\\Icons\\Ability_Warrior_PunishingBlow", 'BF')--Create Blade fury icon display when BF is enable
SC.OTHER['BB']['obj'] = SliceCommander:NewIcon("Interface\\Icons\\inv_weapon_rifle_07", 'BB')--Create Blunderbuss icon display when BF is enable
SC.OTHER['SOTD']['obj'] = SliceCommander:NewIcon("Interface\\Icons\\inv_misc_volatileshadow", 'SOTD')--Create Shadow of the destroyer icon display when stack rise 30
SC.OTHER['SOTD']['obj'].overlay:Show()
end
 
function SliceCommander:InitGCDBar()
290,12 → 286,6
SliceCommanderFrame:EnableMouse(false)
SC.OTHER['POISON']['obj']['moveframe']:SetAlpha(0)
SC.OTHER['POISON']['obj']['moveframe']:EnableMouse(false)
SC.OTHER['BF']['obj']['moveframe']:SetAlpha(0)
SC.OTHER['BF']['obj']['moveframe']:EnableMouse(false)
SC.OTHER['BB']['obj']['moveframe']:SetAlpha(0)
SC.OTHER['BB']['obj']['moveframe']:EnableMouse(false)
SC.OTHER['SOTD']['obj']['moveframe']:SetAlpha(0)
SC.OTHER['SOTD']['obj']['moveframe']:EnableMouse(false)
SC.SET.IsLocked = true
else
SliceCommander:SetTransparency(100)
305,15 → 295,6
SC.OTHER['POISON']['obj']['moveframe']:EnableMouse(true)
SC.OTHER['POISON']['obj']:SetAlpha(1)
SC.OTHER['POISON']['obj']:Show()
SC.OTHER['BF']['obj']['moveframe']:SetAlpha(.5)
SC.OTHER['BF']['obj']['moveframe']:EnableMouse(true)
SC.OTHER['BF']['obj']:Show()
SC.OTHER['BB']['obj']['moveframe']:SetAlpha(.5)
SC.OTHER['BB']['obj']['moveframe']:EnableMouse(true)
SC.OTHER['BB']['obj']:Show()
SC.OTHER['SOTD']['obj']['moveframe']:SetAlpha(.5)
SC.OTHER['SOTD']['obj']['moveframe']:EnableMouse(true)
SC.OTHER['SOTD']['obj']:Show()
SC.SET.IsLocked = false
SliceCommander:StaticPopup_Show('CONFIG_UNLOCK')
end
408,9 → 389,6
 
function SliceCommander:SetIconSize(w)
SliceCommander:SetIconSizeObj(SC.OTHER['POISON']['obj'], w)
SliceCommander:SetIconSizeObj(SC.OTHER['BF']['obj'], w)
SliceCommander:SetIconSizeObj(SC.OTHER['BB']['obj'], w)
SliceCommander:SetIconSizeObj(SC.OTHER['SOTD']['obj'], w)
end
 
function SliceCommander:SetIconSizeObj(obj, w)
469,9 → 447,6
v['obj']:SetAlpha(opValue/100)
end
end
 
SC.OTHER['BF']['obj']:SetAlpha(opValue/100)
SC.OTHER['BB']['obj']:SetAlpha(opValue/100)
end
 
function SliceCommander:TestCurrentVersion()
513,6 → 488,10
_G['SC'].BARS['TXB'] = nil
_G['SC'].SET.Pos['NB'] = nil
_G['SC'].BARS['NB'] = nil
_G['SC'].SET.Pos['SOTD'] = nil
_G['SC'].BARS['SOTD'] = nil
_G['SC'].SET.Pos['FOTD'] = nil
_G['SC'].BARS['FOTD'] = nil
end
 
_G['SC'].version = GetAddOnMetadata("SliceCommander", "Version")
577,7 → 556,7
end
 
function SliceCommander:Global()
SliceCommander:DisplaySpells({'CP', 'THREAT', 'SND', 'CS', 'KS', 'KSCD', 'FOTD', 'CV', 'CVCD', 'TOTCD', 'FE', 'SSCD', 'SUB', 'CDCD', 'AC', 'MDCD', 'DFACD', 'Poison', 'SOTD', 'MAI', 'FECD', 'ESSECD', 'DPICON', 'SUMSCD', 'FCCD', 'SOSCD', 'DOSCD', 'ERCD', 'SBSCD', 'SBS', 'SPCD', 'FLACD', 'SP', 'FLA'})
SliceCommander:DisplaySpells({'CP', 'THREAT', 'SND', 'CS', 'KS', 'KSCD', 'CV', 'CVCD', 'TOTCD', 'FE', 'SSCD', 'SUB', 'CDCD', 'AC', 'MDCD', 'DFACD', 'Poison', 'MAI', 'FECD', 'ESSECD', 'DPICON', 'SUMSCD', 'FCCD', 'SOSCD', 'DOSCD', 'ERCD', 'SBSCD', 'SBS', 'SPCD', 'FLACD', 'SP', 'FLA'})
SliceCommander:NotDisplaySpells({'HEALTH', 'THEALTH', 'VANCD', 'KICD', 'COS', 'COSCD', 'EVA', 'EVACD', 'SPR', 'SPRCD', 'SS'})
 
SliceCommander:FlashSpells({'SND'})
590,7 → 569,7
SC.SET.Pos.CP = -1
end
 
SliceCommander:OrderSpells({'SND', 'FOTD', 'CV', 'FE', 'SUB', 'AC', 'MAI', 'COS', 'EVA', 'SPR', 'SS', 'SP', 'FLA', 'SBS'})
SliceCommander:OrderSpells({'SND', 'CV', 'FE', 'SUB', 'AC', 'MAI', 'COS', 'EVA', 'SPR', 'SS', 'SP', 'FLA', 'SBS'})
SliceCommander:OrderCDs({'CVCD', 'TOTCD', 'VANCD', 'SSCD', 'CDCD', 'MDCD', 'DFACD', 'THREAT', 'HEALTH', 'THEALTH', 'CS', 'KS', 'KSCD', 'KICD', 'COSCD', 'EVACD', 'SPRCD', 'FECD', 'ESSECD', 'SUMSCD', 'FCCD', 'SOSCD', 'DOSCD', 'ERCD', 'SBSCD', 'SPCD', 'FLACD'})
end
 
609,7 → 588,7
end
 
function SliceCommander:Outlaw()
SliceCommander:DisplaySpells({'RB', 'AR', 'ARCD', 'CDB', 'CDBCD', 'KSPCD', 'GS', 'GHCD', 'BE', 'BECD', 'BF', 'BFCD', 'OP', 'GSWW', 'BB', 'LD', 'GSCD', 'BRCD', 'RBCD'})
SliceCommander:DisplaySpells({'RB', 'AR', 'ARCD', 'CDB', 'CDBCD', 'KSPCD', 'GS', 'GHCD', 'BE', 'BECD', 'BF', 'BFCD', 'OP', 'GSWW', 'LD', 'GSCD', 'BRCD', 'RBCD'})
SliceCommander:NotDisplaySpells({'BFICON', 'GG', 'GGCD'})
 
SliceCommander:FlashSpells({'ARCD', 'CDBCD', 'KSPCD', 'BECD', 'BRCD', 'RBCD'})
785,9 → 764,6
if SC.SET.DPSound == nil then
SC.SET.DPSound = 'None'
end
if SC.SET.FOTDSound == nil then
SC.SET.FOTDSound = 'OH YEAH'
end
if SC.SET.Width == nil then
SC.SET.Width = 287
end
871,44 → 847,6
if SC.OTHER == nil then
SC.OTHER = {}
end
if SC.OTHER['BF'] == nil or SC.OTHER['BF']['position'] == nil then
SC.OTHER['BF'] = {
['obj'] = 0,
['position'] = {
['xOfs'] = 75,
['yOfs'] = 150,
['relativePoint'] = "CENTER",
['point'] = "CENTER",
['relativeTo'] = "UIParent"
}
}
end
if SC.OTHER['BB'] == nil or SC.OTHER['BB']['position'] == nil then
SC.OTHER['BB'] = {
['obj'] = 0,
['position'] = {
['xOfs'] = -75,
['yOfs'] = 150,
['relativePoint'] = "CENTER",
['point'] = "CENTER",
['relativeTo'] = "UIParent"
}
}
end
if SC.OTHER['SOTD'] == nil or SC.OTHER['SOTD']['position']== nil then
SC.OTHER['SOTD'] = {
['obj'] = 0,
['iconTxt'] = 0,
['overlay'] = false,
['position'] = {
['xOfs'] = 25,
['yOfs'] = 150,
['relativePoint'] = "CENTER",
['point'] = "CENTER",
['relativeTo'] = "UIParent"
}
}
end
if SC.OTHER['AS'] == nil then
SC.OTHER['AS'] = {
['obj'] = 0,
973,9 → 911,6
if SC.BARS['VANCD'] == nil then--Vanish
SC.BARS['VANCD'] = {['color'] = {.42, .46, .51}}
end
if SC.BARS['FOTD'] == nil then--Fury of the Destroyer
SC.BARS['FOTD'] = {['color'] = {.7, .13, .75}}
end
if SC.BARS['SS'] == nil then--Shadowstep
SC.BARS['SS'] = {['color'] = {.76, .28, .78}}
end
1275,7 → 1210,7
SC.BARS[k]['id'] = SC_SPELLID[k]
end
 
local buff = {'FOTD', 'AR', 'SUB', 'EP', 'CV', 'AC', 'FE', 'SND', 'SD', 'SOD', 'SB', 'OP', 'ENV', 'GB', 'GSWW', 'MAI', 'LD', 'BF', 'SHT', 'COS', 'EVA', 'SPR', 'BLS', 'MA', 'SS'}
local buff = {'AR', 'SUB', 'EP', 'CV', 'AC', 'FE', 'SND', 'SD', 'SOD', 'SB', 'OP', 'ENV', 'GB', 'GSWW', 'MAI', 'LD', 'BF', 'SHT', 'COS', 'EVA', 'SPR', 'BLS', 'MA', 'SS'}
for i, v in ipairs(buff) do--BUFF
SC.BARS[v]['type'] = 1
end
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/prototypes.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua File deleted
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml
1,9 → 1,4
<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>
\ No newline at end of file + +
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua New file
0,0 → 1,230
-- 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 = 13
 
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("TOPLEFT", check, "TOPRIGHT", 1, 0)
text:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -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()
local width = self.frame:GetWidth()
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
self.dropdown:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", width < 160 and (160 - width) or 0, 0)
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
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml New file
0,0 → 1,9
<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>
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua New file
0,0 → 1,235
-- 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 = 13
 
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, BackdropTemplateMixin and "BackdropTemplate")
--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("TOPLEFT", check, "TOPRIGHT", 1, 0)
text:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -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()
local width = self.frame:GetWidth()
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
self.dropdown:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", width < 160 and (160 - width) or 0, 0)
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
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/prototypes.lua New file
0,0 → 1,266
-- Widget created by Yssaril
local DataVersion = 9004
local AGSMW = LibStub:NewLibrary("AceGUISharedMediaWidgets-1.0", DataVersion)
 
if not AGSMW then
return -- already loaded and no upgrade necessary
end
 
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)
 
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, BackdropTemplateMixin and "BackdropTemplate")
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)
frame:SetFrameStrata(self:GetFrameStrata())
frame:SetFrameLevel(self:GetFrameLevel() + 100)
 
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:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -28, 12)
self:SetHeight(UIParent:GetHeight()*2/5)
self.slider:Show()
self:SetScript("OnMouseWheel", OnMouseWheel)
self.slider:SetMinMaxValues(0, self.contentframe:GetHeight()-self.scrollframe:GetHeight())
else
self.scrollframe:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -14, 12)
self:SetHeight(self.contentframe:GetHeight()+25)
self.slider:Hide()
self:SetScript("OnMouseWheel", nil)
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, BackdropTemplateMixin and "BackdropTemplate")
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:SetWidth(160)
scrollframe:SetPoint("TOPLEFT", frame, "TOPLEFT", 14, -13)
scrollframe:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -14, 12)
scrollframe:SetScrollChild(contentframe)
frame.scrollframe = scrollframe
 
contentframe:SetPoint("TOPLEFT", scrollframe)
contentframe:SetPoint("TOPRIGHT", 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, BackdropTemplateMixin and "BackdropTemplate")
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
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua New file
0,0 → 1,216
-- 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 = 13
 
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("TOPLEFT", check, "TOPRIGHT", 1, 0)
text:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -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()
local width = self.frame:GetWidth()
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
self.dropdown:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", width < 160 and (160 - width) or 0, 0)
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
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua New file
0,0 → 1,264
-- 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 = 13
 
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), "Master")
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("TOPLEFT", check, "TOPRIGHT", 1, 0)
text:SetPoint("BOTTOMRIGHT", soundbutton, "BOTTOMLEFT", -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()
local width = self.frame:GetWidth()
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
self.dropdown:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", width < 160 and (160 - width) or 0, 0)
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), "Master")
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
trunk/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua New file
0,0 → 1,233
-- 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 = 13
 
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("TOPLEFT", check, "TOPRIGHT", 3, 0)
text:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -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()
local width = self.frame:GetWidth()
self.dropdown:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT")
self.dropdown:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", width < 160 and (160 - width) or 0, 0)
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, "OVERLAY")
bar:SetPoint("TOPLEFT", frame,"TOPLEFT",6,-25)
bar:SetPoint("BOTTOMRIGHT", frame,"BOTTOMRIGHT", -21, 5)
bar:SetAlpha(0.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
trunk/Libs/AceHook-3.0/AceHook-3.0.lua
9,8 → 9,8
-- make into AceHook.
-- @class file
-- @name AceHook-3.0
-- @release $Id: AceHook-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8
-- @release $Id: AceHook-3.0.lua 1243 2020-10-18 00:00:19Z nevcairiel $
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 9
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR)
 
if not AceHook then return end -- No upgrade needed
478,10 → 478,10
for key, value in pairs(registry[self]) do
if type(key) == "table" then
for method in pairs(value) do
self:Unhook(key, method)
AceHook.Unhook(self, key, method)
end
else
self:Unhook(key)
AceHook.Unhook(self, key)
end
end
end
trunk/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua
7,7 → 7,7
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
-- Lua APIs
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, wipe
local pairs, ipairs, assert, type, wipe = pairs, ipairs, assert, type, table.wipe
 
-- WoW APIs
local PlaySound = PlaySound
trunk/Libs/AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua
2,7 → 2,7
BlizOptionsGroup Container
Simple container widget for the integration of AceGUI into the Blizzard Interface Options
-------------------------------------------------------------------------------]]
local Type, Version = "BlizOptionsGroup", 21
local Type, Version = "BlizOptionsGroup", 22
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
99,7 → 99,7
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
local frame = CreateFrame("Frame")
local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer)
frame:Hide()
 
-- support functions for the Blizzard Interface Options
trunk/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua
1,7 → 1,7
--[[-----------------------------------------------------------------------------
Frame Container
-------------------------------------------------------------------------------]]
local Type, Version = "Frame", 27
local Type, Version = "Frame", 28
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
83,6 → 83,7
["OnAcquire"] = function(self)
self.frame:SetParent(UIParent)
self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
self.frame:SetFrameLevel(100) -- Lots of room to draw under it
self:SetTitle()
self:SetStatusText()
self:ApplyStatus()
186,6 → 187,7
frame:SetMovable(true)
frame:SetResizable(true)
frame:SetFrameStrata("FULLSCREEN_DIALOG")
frame:SetFrameLevel(100) -- Lots of room to draw under it
frame:SetBackdrop(FrameBackdrop)
frame:SetBackdropColor(0, 0, 0, 1)
frame:SetMinResize(400, 200)
trunk/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua
1,4 → 1,4
--[[ $Id: AceGUIWidget-DropDown.lua 1239 2020-09-20 10:22:02Z nevcairiel $ ]]--
--[[ $Id: AceGUIWidget-DropDown.lua 1257 2022-01-10 16:25:37Z nevcairiel $ ]]--
local AceGUI = LibStub("AceGUI-3.0")
 
-- Lua APIs
351,7 → 351,7
 
do
local widgetType = "Dropdown"
local widgetVersion = 35
local widgetVersion = 36
 
--[[ Static data ]]--
 
376,7 → 376,6
 
local function Dropdown_TogglePullout(this)
local self = this.obj
PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON
if self.open then
self.open = nil
self.pullout:Close()
trunk/Libs/AceGUI-3.0/AceGUI-3.0.lua
24,14 → 24,14
-- f:AddChild(btn)
-- @class file
-- @name AceGUI-3.0
-- @release $Id: AceGUI-3.0.lua 1231 2020-04-14 22:20:36Z nevcairiel $
-- @release $Id: AceGUI-3.0.lua 1247 2021-01-23 23:16:39Z funkehdude $
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
 
if not AceGUI then return end -- No upgrade needed
 
-- Lua APIs
local tinsert = table.insert
local tinsert, wipe = table.insert, table.wipe
local select, pairs, next, type = select, pairs, next, type
local error, assert = error, assert
local setmetatable, rawget = setmetatable, rawget
trunk/Libs/LibSharedMedia-3.0/LibStub/LibStub.lua New file
0,0 → 1,51
-- $Id: LibStub.lua 76 2007-09-03 01:50:17Z mikk $
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
-- LibStub is hereby placed in the Public Domain
-- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
local LibStub = _G[LIBSTUB_MAJOR]
 
-- Check to see is this version of the stub is obsolete
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
LibStub = LibStub or {libs = {}, minors = {} }
_G[LIBSTUB_MAJOR] = LibStub
LibStub.minor = LIBSTUB_MINOR
 
-- LibStub:NewLibrary(major, minor)
-- major (string) - the major version of the library
-- minor (string or number ) - the minor version of the library
--
-- returns nil if a newer or same version of the lib is already present
-- returns empty library object or old library object if upgrade is needed
function LibStub:NewLibrary(major, minor)
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
 
local oldminor = self.minors[major]
if oldminor and oldminor >= minor then return nil end
self.minors[major], self.libs[major] = minor, self.libs[major] or {}
return self.libs[major], oldminor
end
 
-- LibStub:GetLibrary(major, [silent])
-- major (string) - the major version of the library
-- silent (boolean) - if true, library is optional, silently return nil if its not found
--
-- throws an error if the library can not be found (except silent is set)
-- returns the library object if found
function LibStub:GetLibrary(major, silent)
if not self.libs[major] and not silent then
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
end
return self.libs[major], self.minors[major]
end
 
-- LibStub:IterateLibraries()
--
-- Returns an iterator for the currently registered libraries
function LibStub:IterateLibraries()
return pairs(self.libs)
end
 
setmetatable(LibStub, { __call = LibStub.GetLibrary })
end
trunk/Libs/LibSharedMedia-3.0/lib.xml
1,4 → 1,5
<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>
\ No newline at end of file + + +
trunk/Libs/LibSharedMedia-3.0/CHANGES.txt New file
0,0 → 1,8
------------------------------------------------------------------------
r117 | funkehdude | 2021-03-09 20:22:46 +0000 (Tue, 09 Mar 2021) | 1 line
Changed paths:
M /trunk/LibSharedMedia-3.0.toc
 
bump toc
------------------------------------------------------------------------
 
trunk/Libs/LibSharedMedia-3.0/CallbackHandler-1.0/CallbackHandler-1.0.lua New file
0,0 → 1,212
--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]]
local MAJOR, MINOR = "CallbackHandler-1.0", 7
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
 
if not CallbackHandler then return end -- No upgrade needed
 
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
 
-- Lua APIs
local tconcat = table.concat
local assert, error, loadstring = assert, error, loadstring
local setmetatable, rawset, rawget = setmetatable, rawset, rawget
local next, select, pairs, type, tostring = next, select, pairs, type, tostring
 
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
-- List them here for Mikk's FindGlobals script
-- GLOBALS: geterrorhandler
 
local xpcall = xpcall
 
local function errorhandler(err)
return geterrorhandler()(err)
end
 
local function Dispatch(handlers, ...)
local index, method = next(handlers)
if not method then return end
repeat
xpcall(method, errorhandler, ...)
index, method = next(handlers, index)
until not method
end
 
--------------------------------------------------------------------------
-- CallbackHandler:New
--
-- target - target object to embed public APIs in
-- RegisterName - name of the callback registration API, default "RegisterCallback"
-- UnregisterName - name of the callback unregistration API, default "UnregisterCallback"
-- UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
 
function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName)
 
RegisterName = RegisterName or "RegisterCallback"
UnregisterName = UnregisterName or "UnregisterCallback"
if UnregisterAllName==nil then -- false is used to indicate "don't want this method"
UnregisterAllName = "UnregisterAllCallbacks"
end
 
-- we declare all objects and exported APIs inside this closure to quickly gain access
-- to e.g. function names, the "target" parameter, etc
 
 
-- Create the registry object
local events = setmetatable({}, meta)
local registry = { recurse=0, events=events }
 
-- registry:Fire() - fires the given event/message into the registry
function registry:Fire(eventname, ...)
if not rawget(events, eventname) or not next(events[eventname]) then return end
local oldrecurse = registry.recurse
registry.recurse = oldrecurse + 1
 
Dispatch(events[eventname], eventname, ...)
 
registry.recurse = oldrecurse
 
if registry.insertQueue and oldrecurse==0 then
-- Something in one of our callbacks wanted to register more callbacks; they got queued
for eventname,callbacks in pairs(registry.insertQueue) do
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten.
for self,func in pairs(callbacks) do
events[eventname][self] = func
-- fire OnUsed callback?
if first and registry.OnUsed then
registry.OnUsed(registry, target, eventname)
first = nil
end
end
end
registry.insertQueue = nil
end
end
 
-- Registration of a callback, handles:
-- self["method"], leads to self["method"](self, ...)
-- self with function ref, leads to functionref(...)
-- "addonId" (instead of self) with function ref, leads to functionref(...)
-- all with an optional arg, which, if present, gets passed as first argument (after self if present)
target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]])
if type(eventname) ~= "string" then
error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2)
end
 
method = method or eventname
 
local first = not rawget(events, eventname) or not next(events[eventname]) -- test for empty before. not test for one member after. that one member may have been overwritten.
 
if type(method) ~= "string" and type(method) ~= "function" then
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2)
end
 
local regfunc
 
if type(method) == "string" then
-- self["method"] calling style
if type(self) ~= "table" then
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2)
elseif self==target then
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2)
elseif type(self[method]) ~= "function" then
error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2)
end
 
if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
local arg=select(1,...)
regfunc = function(...) self[method](self,arg,...) end
else
regfunc = function(...) self[method](self,...) end
end
else
-- function ref with self=object or self="addonId" or self=thread
if type(self)~="table" and type(self)~="string" and type(self)~="thread" then
error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2)
end
 
if select("#",...)>=1 then -- this is not the same as testing for arg==nil!
local arg=select(1,...)
regfunc = function(...) method(arg,...) end
else
regfunc = method
end
end
 
 
if events[eventname][self] or registry.recurse<1 then
-- if registry.recurse<1 then
-- we're overwriting an existing entry, or not currently recursing. just set it.
events[eventname][self] = regfunc
-- fire OnUsed callback?
if registry.OnUsed and first then
registry.OnUsed(registry, target, eventname)
end
else
-- we're currently processing a callback in this registry, so delay the registration of this new entry!
-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency
registry.insertQueue = registry.insertQueue or setmetatable({},meta)
registry.insertQueue[eventname][self] = regfunc
end
end
 
-- Unregister a callback
target[UnregisterName] = function(self, eventname)
if not self or self==target then
error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2)
end
if type(eventname) ~= "string" then
error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2)
end
if rawget(events, eventname) and events[eventname][self] then
events[eventname][self] = nil
-- Fire OnUnused callback?
if registry.OnUnused and not next(events[eventname]) then
registry.OnUnused(registry, target, eventname)
end
end
if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then
registry.insertQueue[eventname][self] = nil
end
end
 
-- OPTIONAL: Unregister all callbacks for given selfs/addonIds
if UnregisterAllName then
target[UnregisterAllName] = function(...)
if select("#",...)<1 then
error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2)
end
if select("#",...)==1 and ...==target then
error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2)
end
 
 
for i=1,select("#",...) do
local self = select(i,...)
if registry.insertQueue then
for eventname, callbacks in pairs(registry.insertQueue) do
if callbacks[self] then
callbacks[self] = nil
end
end
end
for eventname, callbacks in pairs(events) do
if callbacks[self] then
callbacks[self] = nil
-- Fire OnUnused callback?
if registry.OnUnused and not next(callbacks) then
registry.OnUnused(registry, target, eventname)
end
end
end
end
end
end
 
return registry
end
 
 
-- CallbackHandler purposefully does NOT do explicit embedding. Nor does it
-- try to upgrade old implicit embeds since the system is selfcontained and
-- relies on closures to work.
 
trunk/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0/lib.xml New file
0,0 → 1,4
<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>
trunk/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0/LibSharedMedia-3.0.lua New file
0,0 → 1,300
--[[
Name: LibSharedMedia-3.0
Revision: $Revision: 114 $
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", 8020003 -- 8.2.0 v3 / 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_sort = _G.table.sort
 
local RESTRICTED_FILE_ACCESS = WOW_PROJECT_ID == WOW_PROJECT_MAINLINE -- starting with 8.2, some rules for file access have changed; classic still uses the old way
 
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 Collections Background"] = [[Interface\Collections\CollectionsBackgroundTile]]
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 Garrison Background"] = [[Interface\Garrison\GarrisonUIBackground]]
lib.MediaTable.background["Blizzard Garrison Background 2"] = [[Interface\Garrison\GarrisonUIBackground2]]
lib.MediaTable.background["Blizzard Garrison Background 3"] = [[Interface\Garrison\GarrisonMissionUIInfoBoxBackgroundTile]]
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
--[[
All font files are currently in all clients, the following table depicts which font supports which charset as of 5.0.4
Fonts were checked using langcover.pl from DejaVu fonts (http://sourceforge.net/projects/dejavu/) and FontForge (http://fontforge.org/)
latin means check for: de, en, es, fr, it, pt
 
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 - 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 - -
 
WARNING: Although FRIZQT___CYR is available on western clients, it doesn't support special European characters e.g. é, ï, ö
Due to this, we cannot use it as a replacement for FRIZQT__.TTF
]]
 
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.MediaTable.statusbar["Solid"] = [[Interface\Buttons\WHITE8X8]]
lib.DefaultMedia.statusbar = "Blizzard"
 
-- SOUND
if not lib.MediaTable.sound then lib.MediaTable.sound = {} end
lib.MediaTable.sound["None"] = RESTRICTED_FILE_ACCESS and 1 or [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on these values.
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
-- ignore fonts that aren't flagged as supporting local glyphs on non-western clients
return false
end
if type(data) == "string" and (mediatype == lib.MediaType.BACKGROUND or mediatype == lib.MediaType.BORDER or mediatype == lib.MediaType.STATUSBAR or mediatype == lib.MediaType.SOUND) then
local path = data:lower()
if RESTRICTED_FILE_ACCESS and not path:find("^interface") then
-- files accessed via path only allowed from interface folder
return false
end
if mediatype == lib.MediaType.SOUND and not (path:find(".ogg", nil, true) or path:find(".mp3", nil, true)) then
-- Only ogg and mp3 are valid sounds.
return false
end
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
trunk/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.toc New file
0,0 → 1,18
## Interface: 90005
## LoadOnDemand: 1
 
## Title: Lib: SharedMedia-3.0
## Notes: Shared handling of media data (fonts, sounds, textures, ...) between addons.
## Author: Elkano
## Version: 3.0-117
## X-Website: http://www.wowace.com/projects/libsharedmedia-3-0/
## X-Category: Library
 
## X-Revision: 117
## X-Date: 2021-03-09T20:22:46Z
 
LibStub\LibStub.lua
CallbackHandler-1.0\CallbackHandler-1.0.lua
 
LibSharedMedia-3.0\lib.xml
 
trunk/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua
1,13 → 1,13
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
-- @class file
-- @name AceConfigDialog-3.0
-- @release $Id: AceConfigDialog-3.0.lua 1232 2020-04-14 22:21:22Z nevcairiel $
-- @release $Id: AceConfigDialog-3.0.lua 1255 2021-11-14 09:14:15Z nevcairiel $
 
local LibStub = LibStub
local gui = LibStub("AceGUI-3.0")
local reg = LibStub("AceConfigRegistry-3.0")
 
local MAJOR, MINOR = "AceConfigDialog-3.0", 79
local MAJOR, MINOR = "AceConfigDialog-3.0", 82
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
 
if not AceConfigDialog then return end
22,10 → 22,10
AceConfigDialog.frame.closeAllOverride = AceConfigDialog.frame.closeAllOverride or {}
 
-- Lua APIs
local tinsert, tsort, tremove = table.insert, table.sort, table.remove
local tinsert, tsort, tremove, wipe = table.insert, table.sort, table.remove, table.wipe
local strmatch, format = string.match, string.format
local error = error
local pairs, next, select, type, unpack, wipe, ipairs = pairs, next, select, type, unpack, wipe, ipairs
local pairs, next, select, type, unpack, ipairs = pairs, next, select, type, unpack, ipairs
local tostring, tonumber = tostring, tonumber
local math_min, math_max, math_floor = math.min, math.max, math.floor
 
544,13 → 544,15
end
do
local frame = AceConfigDialog.popup
if not frame then
if not frame or oldminor < 81 then
frame = CreateFrame("Frame", nil, UIParent)
AceConfigDialog.popup = frame
frame:Hide()
frame:SetPoint("CENTER", UIParent, "CENTER")
frame:SetSize(320, 72)
frame:EnableMouse(true) -- Do not allow click-through on the frame
frame:SetFrameStrata("TOOLTIP")
frame:SetFrameLevel(100) -- Lots of room to draw under it
frame:SetScript("OnKeyDown", function(self, key)
if key == "ESCAPE" then
self:SetPropagateKeyboardInput(false)
564,7 → 566,7
end
end)
 
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC then
if not frame.SetFixedFrameStrata then -- API capability check (classic check)
frame:SetBackdrop({
bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]],
edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]],
574,8 → 576,10
insets = { left = 11, right = 11, top = 11, bottom = 11 },
})
else
local border = CreateFrame("Frame", nil, frame, "DialogBorderDarkTemplate")
local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate")
border:SetAllPoints(frame)
frame:SetFixedFrameStrata(true)
frame:SetFixedFrameLevel(true)
end
 
local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
1364,7 → 1368,7
elseif width == "half" then
check:SetWidth(width_multiplier / 2)
elseif (type(width) == "number") then
control:SetWidth(width_multiplier * width)
check:SetWidth(width_multiplier * width)
elseif width == "full" then
check.width = "fill"
else
trunk/SliceCommander.toc
1,6 → 1,6
## Interface: 90105
## Interface: 90200
## Author: Tomate
## Version: 9.06
## Version: 9.07
## Title: |TInterface\Icons\ClassIcon_Rogue:0|t |cffd38245Slice|r|cff45ad3bCommander|r |TInterface\Icons\ClassIcon_Rogue:0|t
## Notes: Energy bar, Combo point bar and rogue timer bar.
## SavedVariables: SC
trunk/Locale/spell.lua
20,8 → 20,6
SC_SPELLID['DFACD'] = 269513 --Death from Above CD
SC_SPELLID['CV'] = 185311 --Crimson Vial
SC_SPELLID['CVCD'] = 185311 --Crimson Vial CD
SC_SPELLID['SOTD'] = 109941 --Shadow of the Destroyer
SC_SPELLID['FOTD'] = 109949 --Fury of the Destroyer
SC_SPELLID['MAI'] = 235027 --Master Assassin's Initiative
SC_SPELLID['KICD'] = 1766 --Kick CD
SC_SPELLID['COS'] = 31224 --Cloak of Shadows
35,6 → 33,8
SC_SPELLID['WP'] = 8679 --Wound Poison
SC_SPELLID['AKP'] = 5761 --Ankylosant Poison
 
 
 
--AZERITE ESSENCE
SC_SPELLID['ESSECD'] = -1
SC_SPELLID['ALLESSE'] = {
138,7 → 138,7
SC_SPELLID['GSCD'] = 196937 --Ghostly Strike
SC_SPELLID['GHCD'] = 195457 --Grappling Hook CD
SC_SPELLID['BE'] = 315341 --Between the Eyes
SC_SPELLID['BECD'] = 199804 --Between the Eyes CD
SC_SPELLID['BECD'] = 315341 --Between the Eyes CD
SC_SPELLID['OP'] = 195627 --Opportunity
SC_SPELLID['RB'] = 315508 --Roll the Bones
SC_SPELLID['RBCD'] = 315508 --Roll the Bones
152,7 → 152,6
SC_SPELLID['CDBCD'] = 343142 --Curse of the Dreadblades CD
SC_SPELLID['GSWW'] = 209423 --Greenskin's Waterlogged Wristcuffs
SC_SPELLID['PS'] = 185763 --Cannonball Barrage
SC_SPELLID['BB'] = 202895 --Blunderbuss
SC_SPELLID['RT'] = 208225 --Run Through
SC_SPELLID['LD'] = 256171 --Loaded Dice
SC_SPELLID['BRCD'] = 271877 --Blade Rush CD
231,4 → 230,7
--REMOVED SC_SPELLID['RIPCD'] = 199754 --Riposte CD
--REMOVED SC_SPELLID['TXB'] = 245389 --Toxic Blade
--REMOVED SC_SPELLID['TXBCD'] = 245388 --Toxic Blade CD
--REMOVED SC_SPELLID['NB'] = 195452 --Nightblade
\ No newline at end of file +--REMOVED SC_SPELLID['NB'] = 195452 --Nightblade +--REMOVED SC_SPELLID['SOTD'] = 109941 --Shadow of the Destroyer +--REMOVED SC_SPELLID['FOTD'] = 109949 --Fury of the Destroyer +--REMOVED SC_SPELLID['BB'] = 202895 --Blunderbuss \ No newline at end of file