/
function SliceCommander:UIScale(event) |
if not _G['SC'].SET or _G['SC'].SET.PixelPerfect then |
local resolution = ({GetScreenResolutions()})[GetCurrentResolution()] or GetCVar("gxWindowedResolution") |
if resolution == nil then |
local screenwidth, screenheight = GetScreenWidth(),GetScreenHeight() |
if screenwidth == nil or screenheight == nil then |
if not _G['SC'].SET then |
return false |
end |
end |
return false |
end |
local tableResolution = SC_split(resolution, 'x') |
local screenwidth, screenheight = tableResolution[1],tableResolution[2] |
if IsMacClient() and _G['SC'].screenheight and _G['SC'].screenwidth and (screenwidth ~= _G['SC'].screenheight or screenheight ~= _G['SC'].screenwidth) then |
screenheight = _G['SC'].screenheight |
end |
function SliceCommander:StaticPopup_CollapseTable() |
if (SC.StaticPopup_DisplayedFrames == nil) then |
SliceCommander:LoadPopup(); |
end |
local displayedFrames = SC.StaticPopup_DisplayedFrames; |
local index = #displayedFrames; |
while ( ( index >= 1 ) and ( not displayedFrames[index]:IsShown() ) ) do |
type = "group", |
order = SliceCommander:getOrder(), |
args = SliceCommander_TableMerge( |
SliceCommander:getCDSettings('ERCD').args, |
SliceCommander:getSpellCDSettings('ER').args, |
SliceCommander:getCDSettings('SUMSCD').args |
) |
}, |
SC.BARS['CP']['obj'].combos[i].bg:SetVertexColor(unpack(SC.SET.CP[maxCP][i])) |
end |
for i = 1, 10 do |
SC.BARS['CP']['obj'].combos[i]:Hide() |
SC.BARS['CP']['obj'].combos[i].bg:Hide() |
end |
SliceCommander:SetTimersHeight(SC.SET.TimerHeight) |
_G['SC'].order = 0 |
_G['SC'].maxPos = 0 |
_G['SC'].maxCDPos = 0 |
_G['SC'].previouKyrCount = 0 |
SliceCommander:TestValueOptions() |
SliceCommander:SetEssence() |
SliceCommander:InitConfigurationTable() |
end |
end |
function SliceCommander:TestKYRIAN() |
local _, spellId |
local count = 0 |
local kyrBuff = { |
[323558] = 2, -- 2nd CP |
[323559] = 3, -- 3rd CP |
[323560] = 4, -- 4th CP |
[354838] = 5, -- 5th CP |
} |
for k, v in pairs(kyrBuff) do |
_, _, _, _, _, _, _, _, _, spellId = SliceCommander:UnitAura("player", k, "HELPFUL PLAYER") |
if spellId then |
count = v |
end |
end |
if count ~= _G['SC'].previouKyrCount then |
if _G['SC'].previouKyrCount > 0 then |
_G['SC'].BARS['CP']['obj'].combos[_G['SC'].previouKyrCount].anim:Stop() |
end |
if count > 0 then |
print(count) |
_G['SC'].BARS['CP']['obj'].combos[count].anim:Play() |
end |
_G['SC'].previouKyrCount = count |
end |
end |
function SliceCommander:OnUpdate() |
SliceCommander:Latency()--timer reference and latency |
SliceCommander:GCD()--GCD |
SliceCommander:TargetThreat()--Threat |
for k, v in pairs(SC.BARS) do |
if SC.BARS[k]['type'] ~= nil then |
if SC.BARS[k]['type'] ~= nil then--1=BUFF 2=DEBUFF 3=SELF DEBUF |
if SC.BARS[k]['type'] == 1 or SC.BARS[k]['type'] == 2 or SC.BARS[k]['type'] == 3 then |
SliceCommander:UpdateBar(k) |
elseif SC.BARS[k]['type'] == 4 then |
elseif SC.BARS[k]['type'] == 4 then--CD |
SliceCommander:AbilityCDBar(k) |
elseif SC.BARS[k]['type'] == 5 then |
elseif SC.BARS[k]['type'] == 5 then--CHARGE CD |
SliceCommander:ChargeAbilityCDBar(k) |
elseif SC.BARS[k]['type'] == 6 then |
elseif SC.BARS[k]['type'] == 6 then--MULTIPLE BUFF BAR |
SliceCommander:MultipleAbilityBar(k) |
end |
end |
end |
SliceCommander:TestKYRIAN()--DP Icon |
SliceCommander:TestDP()--DP Icon |
end |
local inset = 0 |
-- pixel perfect script of custom ui Scale. |
local resolution = ({GetScreenResolutions()})[GetCurrentResolution()] or GetCVar("gxWindowedResolution") |
local tableResolution = SC_split(resolution, 'x') |
local width, height = tableResolution[1],tableResolution[2] |
local width, height = GetScreenWidth(),GetScreenHeight() |
local uiscale = min(2, max(.64, 768/width)) |
local mult = 768/height/uiscale |
}) |
if not noinset and not f.isInsetDone then |
f.insettop = f:CreateTexture(nil, "BORDER") |
f.insettop = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insettop:Point("TOPLEFT", f, "TOPLEFT", -1, 1) |
f.insettop:Point("TOPRIGHT", f, "TOPRIGHT", 1, -1) |
f.insettop:Height(1) |
f.insettop:SetColorTexture(0,0,0) |
f.insettop:SetDrawLayer("BORDER", -7) |
f.insetbottom = f:CreateTexture(nil, "BORDER") |
f.insetbottom = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetbottom:Point("BOTTOMLEFT", f, "BOTTOMLEFT", -1, -1) |
f.insetbottom:Point("BOTTOMRIGHT", f, "BOTTOMRIGHT", 1, -1) |
f.insetbottom:Height(1) |
f.insetbottom:SetColorTexture(0,0,0) |
f.insetbottom:SetDrawLayer("BORDER", -7) |
f.insetleft = f:CreateTexture(nil, "BORDER") |
f.insetleft = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetleft:Point("TOPLEFT", f, "TOPLEFT", -1, 1) |
f.insetleft:Point("BOTTOMLEFT", f, "BOTTOMLEFT", 1, -1) |
f.insetleft:Width(1) |
f.insetleft:SetColorTexture(0,0,0) |
f.insetleft:SetDrawLayer("BORDER", -7) |
f.insetright = f:CreateTexture(nil, "BORDER") |
f.insetright = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetright:Point("TOPRIGHT", f, "TOPRIGHT", 1, 1) |
f.insetright:Point("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, -1) |
f.insetright:Width(1) |
f.insetright:SetColorTexture(0,0,0) |
f.insetright:SetDrawLayer("BORDER", -7) |
f.insetinsidetop = f:CreateTexture(nil, "BORDER") |
f.insetinsidetop = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetinsidetop:Point("TOPLEFT", f, "TOPLEFT", 1, -1) |
f.insetinsidetop:Point("TOPRIGHT", f, "TOPRIGHT", -1, 1) |
f.insetinsidetop:Height(1) |
f.insetinsidetop:SetColorTexture(0,0,0) |
f.insetinsidetop:SetDrawLayer("BORDER", -7) |
f.insetinsidebottom = f:CreateTexture(nil, "BORDER") |
f.insetinsidebottom = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetinsidebottom:Point("BOTTOMLEFT", f, "BOTTOMLEFT", 1, 1) |
f.insetinsidebottom:Point("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) |
f.insetinsidebottom:Height(1) |
f.insetinsidebottom:SetColorTexture(0,0,0) |
f.insetinsidebottom:SetDrawLayer("BORDER", -7) |
f.insetinsideleft = f:CreateTexture(nil, "BORDER") |
f.insetinsideleft = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetinsideleft:Point("TOPLEFT", f, "TOPLEFT", 1, -1) |
f.insetinsideleft:Point("BOTTOMLEFT", f, "BOTTOMLEFT", -1, 1) |
f.insetinsideleft:Width(1) |
f.insetinsideleft:SetColorTexture(0,0,0) |
f.insetinsideleft:SetDrawLayer("BORDER", -7) |
f.insetinsideright = f:CreateTexture(nil, "BORDER") |
f.insetinsideright = f:CreateTexture(nil, "BORDER", nil, 1) |
f.insetinsideright:Point("TOPRIGHT", f, "TOPRIGHT", -1, -1) |
f.insetinsideright:Point("BOTTOMRIGHT", f, "BOTTOMRIGHT", 1, 1) |
f.insetinsideright:Width(1) |
local function StyleButton(button) |
if button.SetHighlightTexture and not button.hover then |
local hover = button:CreateTexture("frame", nil, self) |
local hover = button:CreateTexture("frame", nil, self, 1) |
hover:SetColorTexture(1, 1, 1, 0.3) |
hover:Point("TOPLEFT", 2, -2) |
hover:Point("BOTTOMRIGHT", -2, 2) |
end |
if button.SetPushedTexture and not button.pushed then |
local pushed = button:CreateTexture("frame", nil, self) |
local pushed = button:CreateTexture("frame", nil, self, 1) |
pushed:SetColorTexture(0.9, 0.8, 0.1, 0.3) |
pushed:Point("TOPLEFT", 2, -2) |
pushed:Point("BOTTOMRIGHT", -2, 2) |
end |
if button.SetCheckedTexture and not button.checked then |
local checked = button:CreateTexture("frame", nil, self) |
local checked = button:CreateTexture("frame", nil, self, 1) |
checked:SetColorTexture(0,1,0,.3) |
checked:Point("TOPLEFT", 2, -2) |
checked:Point("BOTTOMRIGHT", -2, 2) |
local handled = {["Frame"] = true} |
local object = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate") |
addapi(object) |
addapi(object:CreateTexture()) |
addapi(object:CreateTexture(nil, "OVERLAY", nil, 1)) |
addapi(object:CreateFontString()) |
object = EnumerateFrames() |
SC.OTHER['POISON']['obj'].button:SetFrameLevel(5) |
SC.OTHER['POISON']['obj'].button:SetPoint("BOTTOMLEFT", SC.OTHER['POISON']['obj'], "BOTTOMLEFT") |
SC.OTHER['POISON']['obj'].button:SetPoint("TOPRIGHT", SC.OTHER['POISON']['obj'], "TOPRIGHT") |
SC.OTHER['POISON']['obj'].button:RegisterForClicks("LeftButtonUp", "RightButtonUp") |
local state = C_CVar.GetCVarBool("ActionButtonUseKeyDown") |
if state then |
SC.OTHER['POISON']['obj'].button:RegisterForClicks("LeftButtonDown", "RightButtonDown") |
else |
SC.OTHER['POISON']['obj'].button:RegisterForClicks("LeftButtonUp", "RightButtonUp") |
end |
SC.OTHER['POISON']['obj'].button:SetAttribute("unit", "player") |
SC.OTHER['POISON']['obj'].button:SetAttribute("*type1", "spell") |
SC.OTHER['POISON']['obj'].button:SetAttribute("*type2", "spell") |
SC.OTHER['POISON']['obj'].button:SetAttribute("type", "spell") |
SC.OTHER['POISON']['obj'].button:EnableMouse(false) |
end |
SliceCommander:SetSizeBorder(0, h, SC.BARS['CP']['obj'].combos[i].border) |
end |
SC.BarFont1:SetFont(SliceCommander:GetFont(), (h-2)*SC.V.pxH) |
SC.BarFont2:SetFont(SliceCommander:GetFont(), (h-2)*SC.V.pxH) |
SC.BarFont1:SetFont(SliceCommander:GetFont(), (h-2)*SC.V.pxH, "") |
SC.BarFont2:SetFont(SliceCommander:GetFont(), (h-2)*SC.V.pxH, "") |
SC.BARS['CP']['obj'].comboText:SetFont(SliceCommander:GetFont(), (h-2)*SC.V.pxH, "THINOUTLINE") |
SliceCommander:SetWidth(SC.SET.Width) |
end |
if _G['SC'].version == nil or _G['SC'].version < '7.00' then |
_G['SC'] = {version = GetAddOnMetadata("SliceCommander", "Version")} |
else |
if _G['SC'].version < '9.01' then |
if tonumber(_G['SC'].version) < 9.01 then |
_G['SC'].SET.Pos['RIP'] = nil--Remove ripost |
_G['SC'].BARS['RIP'] = nil |
_G['SC'].SET.Pos['RIPCD'] = nil |
_G['SC'].SET.Pos['STH'] = nil |
_G['SC'].BARS['STH'] = nil |
end |
if _G['SC'].version < '9.06' then |
if tonumber(_G['SC'].version) < 9.06 then |
_G['SC'].SET.Pos['TXBCD'] = nil |
_G['SC'].BARS['TXBCD'] = nil |
_G['SC'].SET.Pos['TXB'] = nil |
_G['SC'].BARS['FOTD'] = nil |
end |
if tonumber(_G['SC'].version) < 10.0 then |
_G['SC'].SET.CP = nil |
end |
_G['SC'].version = GetAddOnMetadata("SliceCommander", "Version") |
end |
end |
end |
function SliceCommander:Global() |
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: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', 'ER'}) |
SliceCommander:NotDisplaySpells({'HEALTH', 'THEALTH', 'VANCD', 'KICD', 'COS', 'COSCD', 'EVA', 'EVACD', 'SPR', 'SPRCD', 'SS'}) |
SliceCommander:FlashSpells({'SND'}) |
SC.SET.Pos.CP = -1 |
end |
SliceCommander:OrderSpells({'SND', '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', 'ER'}) |
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 |
[4] = {.65, .42, .31}, |
[5] = {.69, .31, .31}, |
[6] = {.74, .20, .27}, |
}, |
[7] = { |
[1] = {.33, .63, .33}, |
[2] = {.46, .63, .35}, |
[3] = {.65, .63, .35}, |
[4] = {.65, .42, .31}, |
[5] = {.69, .31, .31}, |
[6] = {.74, .20, .27}, |
[7] = {.8, .12, .25}, |
} |
} |
end |
if SC.BARS['ERCD'] == nil then--Echoing Reprimand (Kyrian) |
SC.BARS['ERCD'] = {['color'] = {.2, .45, .82}} |
end |
if SC.BARS['ER'] == nil then--Echoing Reprimand (Kyrian) |
SC.BARS['ER'] = {['color'] = {.2, .45, .82}} |
end |
if SC.BARS['SBSCD'] == nil then--Serrated Bone Spike (Necrolord) |
SC.BARS['SBSCD'] = {['color'] = {.2, .45, .82}} |
end |
SC.BARS[k]['id'] = SC_SPELLID[k] |
end |
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'} |
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', 'ER'} |
for i, v in ipairs(buff) do--BUFF |
SC.BARS[v]['type'] = 1 |
end |
f:SetFrameStrata("MEDIUM") |
-- text on the right -- |
f.text = f:CreateFontString(nil, nil, "GameFontWhite") |
f.text = f:CreateFontString(nil, nil, 'GameFontNormal') |
f.text:SetFontObject(SC.BarFont1) |
f.text:SCWidth(120) |
f.text:SCPoint("TOPRIGHT", f, "TOPRIGHT", -5, 0) |
f.text:SetJustifyH("RIGHT") |
f.icon = f:CreateTexture(nil, "OVERLAY") |
f.icon = f:CreateTexture(nil, "OVERLAY", nil, 1) |
f.icon:SCPoint("RIGHT", f, "LEFT", -2, 0) |
f.icon:SetTexCoord(.08, .92, .08, .92) |
-- text on the center -- |
f.text2 = f:CreateFontString(nil, nil, nil) |
f.text2 = f:CreateFontString(nil, nil, 'GameFontNormal') |
f.text2:SCPoint("CENTER", f, "CENTER", -8, 0) |
f.text2:SetFontObject(SC.BarFont1) |
f.text2:SCWidth(200) |
function SliceCommander:CPFrame() |
local f = CreateFrame("StatusBar", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate") |
local colorAnim = {.6, .6, 1, 1} |
f.bg = f:CreateTexture(nil, "BACKGROUND") |
f.bg = f:CreateTexture(nil, "BACKGROUND", nil, 1) |
f.bg:SCPoint("TOPLEFT", f, "TOPLEFT", 0, 0) |
f.bg:SCPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) |
f:SetFrameStrata("MEDIUM") |
for i = 1, 10 do--Maximum CP is 10 with anticipation |
local combo = CreateFrame("Frame", nil, f, BackdropTemplateMixin and "BackdropTemplate") |
combo.bg = combo:CreateTexture(nil, "BACKGROUND") |
combo.bg = combo:CreateTexture(nil, "BACKGROUND", nil, 1) |
combo.bg:SetAllPoints(combo) |
combo.bg:SetTexture("Interface\\AddOns\\SliceCommander\\Images\\solid.tga") |
combo.border = SliceCommander:tukSkin(combo, false) |
combo:Hide() |
combo.bg:Hide() |
local animPlaying = false |
combo.anim = { |
Play = function() |
animPlaying = true |
Glower.PixelGlow_Start(combo, colorAnim, 8, .5) |
end, |
Stop = function() |
animPlaying = false |
Glower.PixelGlow_Stop(combo) |
end, |
IsPlaying = function() |
return animPlaying |
end |
} |
f.combos[i] = combo |
end |
f.overlay = CreateFrame("Frame", nil, f, BackdropTemplateMixin and "BackdropTemplate") |
f.overlay:SetAllPoints(f) |
f.comboText = f.overlay:CreateFontString(nil, 'OVERLAY') |
f.comboText = f.overlay:CreateFontString(nil, 'OVERLAY', 'GameFontNormal') |
f.comboText:SetFont(SliceCommander:GetFont(), 8, "THINOUTLINE") |
f.comboText:SetShadowColor(0, 0, 0, 0.4) |
f.comboText:SetTextColor(1, 1, 1) |
f:Show() |
end |
f.txt = f:CreateFontString('VTimerEnergyTxt', 'OVERLAY', GameFontWhite) |
f.txt = f:CreateFontString('VTimerEnergyTxt', 'OVERLAY', 'GameFontNormal') |
f.txt:SetJustifyH("RIGHT") |
f.txt:SCSize(49, 20) |
f.txt:SCPoint('RIGHT', VTimerEnergy, 'RIGHT', -5, 0) |
end |
function SliceCommander:CreateComboText() |
VTimerEnergy:CreateFontString('SliceCommander_Combo', 'OVERLAY') |
VTimerEnergy:CreateFontString('SliceCommander_Combo', 'OVERLAY', 'GameFontNormal') |
SliceCommander_Combo:SetFont(SliceCommander:GetFont(), 17, "THINOUTLINE") |
SliceCommander_Combo:SetShadowColor(0, 0, 0, 0.4) |
SliceCommander_Combo:SetTextColor(1, 1, 1) |
function SliceCommander:CreateSpark() |
for i = 1, 3 do |
SC.Spark[i] = VTimerEnergy:CreateTexture(nil, 'OVERLAY', GameFontWhite) |
SC.Spark[i] = VTimerEnergy:CreateTexture(nil, 'OVERLAY', nil, 1) |
SC.Spark[i]:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark") |
SC.Spark[i]:SetBlendMode('ADD') |
SC.Spark[i]:SCSize(5,20) |
end |
function SliceCommander:NewTickArray(BAR) |
local tickObj = BAR['obj']:CreateTexture(nil, 'OVERLAY', GameFontWhite) |
local tickObj = BAR['obj']:CreateTexture(nil, 'OVERLAY', nil, 1) |
tickObj:SetTexture('Interface\\AddOns\\SliceCommander\\Images\\solid.tga') |
tickObj:SCWidth(2) |
tickObj:SCHeight(SC.SET.TimerHeight) |
f:SetFrameLevel(1) |
f.moveframe = MoveFrame |
local fIcon = f:CreateTexture(nil) |
local fIcon = f:CreateTexture(nil, "OVERLAY", nil, 1) |
fIcon:SCPoint("CENTER", f, "CENTER", 0, 0) |
fIcon:SetAlpha(1) |
fIcon:SetTexCoord(.08, .92, .08, .92) |
f.overlay:SetBackdropColor(0,0,0,.3) |
f.overlay:Hide() |
f.iconTxt = f.overlay:CreateFontString(nil, 'OVERLAY', GameFontWhite) |
f.iconTxt = f.overlay:CreateFontString(nil, 'OVERLAY', 'GameFontNormal') |
f.iconTxt:SetJustifyH("CENTER") |
f.iconTxt:SetJustifyV("MIDDLE") |
f.iconTxt:SCPoint('CENTER', f, "CENTER", 2, 0) |
function SliceCommander:NewFont(name, FontSize, aShadow, rColor, gColor, bColor) |
local f = CreateFont(name) |
f:SetFont(SliceCommander:GetFont(), FontSize) |
f:SetFont(SliceCommander:GetFont(), FontSize, "") |
f:SetShadowColor(0, 0, 0, aShadow) |
f:SetTextColor(rColor, gColor, bColor, 1) |
f:SetShadowOffset(0.8, -0.8) |
-- end |
-- @class file |
-- @name AceAddon-3.0.lua |
-- @release $Id: AceAddon-3.0.lua 1238 2020-08-28 16:18:42Z nevcairiel $ |
-- @release $Id: AceAddon-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ |
local MAJOR, MINOR = "AceAddon-3.0", 13 |
local AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
local loadstring, assert, error = loadstring, assert, error |
local setmetatable, getmetatable, rawset, rawget = setmetatable, getmetatable, rawset, rawget |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: LibStub, IsLoggedIn, geterrorhandler |
--[[ |
xpcall safecall implementation |
]] |
--- 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 1255 2021-11-14 09:14:15Z nevcairiel $ |
-- @release $Id: AceConfigDialog-3.0.lua 1292 2022-09-29 08:00:11Z nevcairiel $ |
local LibStub = LibStub |
local gui = LibStub("AceGUI-3.0") |
local reg = LibStub("AceConfigRegistry-3.0") |
local MAJOR, MINOR = "AceConfigDialog-3.0", 82 |
local MAJOR, MINOR = "AceConfigDialog-3.0", 85 |
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
if not AceConfigDialog then return end |
local tostring, tonumber = tostring, tonumber |
local math_min, math_max, math_floor = math.min, math.max, math.floor |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: NORMAL_FONT_COLOR, ACCEPT, CANCEL |
-- GLOBALS: PlaySound, GameFontHighlight, GameFontHighlightSmall, GameFontHighlightLarge |
-- GLOBALS: CloseSpecialWindows, InterfaceOptions_AddCategory, geterrorhandler |
local emptyTbl = {} |
--[[ |
--We have a function to call |
local info = new() |
--traverse the options table, picking up the handler and filling the info with the path |
local handler |
local group = options |
handler = group.handler or handler |
local handler = group.handler |
for i = 1, #path do |
group = GetSubOption(group, path[i]) |
end |
local function GetFuncName(option) |
local type = option.type |
if type == "execute" then |
if option.type == "execute" then |
return "func" |
else |
return "set" |
end |
end) |
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]], |
tile = true, |
tileSize = 32, |
edgeSize = 32, |
insets = { left = 11, right = 11, top = 11, bottom = 11 }, |
}) |
else |
local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate") |
border:SetAllPoints(frame) |
frame:SetFixedFrameStrata(true) |
frame:SetFixedFrameLevel(true) |
end |
local border = CreateFrame("Frame", nil, frame, "DialogBorderOpaqueTemplate") |
border:SetAllPoints(frame) |
frame:SetFixedFrameStrata(true) |
frame:SetFixedFrameLevel(true) |
local text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight") |
text:SetSize(290, 0) |
text:SetPoint("TOP", 0, -16) |
frame.text = text |
local function newButton(text) |
local function newButton(newText) |
local button = CreateFrame("Button", nil, frame) |
button:SetSize(128, 21) |
button:SetNormalFontObject(GameFontNormal) |
button:GetPushedTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875) |
button:SetHighlightTexture(130762) -- "Interface\\Buttons\\UI-DialogBox-Button-Highlight" |
button:GetHighlightTexture():SetTexCoord(0.0, 1.0, 0.0, 0.71875) |
button:SetText(text) |
button:SetText(newText) |
return button |
end |
if group[funcname] ~= nil then |
func = group[funcname] |
end |
handler = group.handler or handler |
handler = group.handler |
confirm = group.confirm |
validate = group.validate |
for i = 1, #path do |
end |
end |
local rootframe = user.rootframe |
if not validated or type(validated) == "string" then |
if not validated then |
if usage then |
end |
-- show validate message |
if rootframe.SetStatusText then |
rootframe:SetStatusText(validated) |
if user.rootframe.SetStatusText then |
user.rootframe:SetStatusText(validated) |
else |
validationErrorPopup(validated) |
end |
if type(confirm) == "boolean" then |
if confirm then |
if not confirmText then |
local name, desc = option.name, option.desc |
if type(name) == "function" then |
name = name(info) |
local option_name, desc = option.name, option.desc |
if type(option_name) == "function" then |
option_name = option_name(info) |
end |
if type(desc) == "function" then |
desc = desc(info) |
end |
confirmText = name |
confirmText = option_name |
if desc then |
confirmText = confirmText.." - "..desc |
end |
--Control to feed |
local control |
local name = GetOptionsMemberValue("name", v, options, path, appName) |
if v.type == "execute" then |
local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) |
end |
tsort(sorting, sortTblAsStrings) |
end |
for k, value in ipairs(sorting) do |
for _, value in ipairs(sorting) do |
local text = values[value] |
local radio = gui:Create("CheckBox") |
radio:SetLabel(text) |
control:SetWidth(width_multiplier) |
end |
--check:SetTriState(v.tristate) |
for i = 1, #valuesort do |
local key = valuesort[i] |
for s = 1, #valuesort do |
local key = valuesort[s] |
local value = GetOptionsMemberValue("get",v, options, path, appName, key) |
control:SetItemValue(key,value) |
end |
control:PauseLayout() |
local width = GetOptionsMemberValue("width",v,options,path,appName) |
for i = 1, #valuesort do |
local value = valuesort[i] |
for s = 1, #valuesort do |
local value = valuesort[s] |
local text = values[value] |
local check = gui:Create("CheckBox") |
check:SetLabel(text) |
end |
control:SetImageSize(width, height) |
end |
local width = GetOptionsMemberValue("width",v,options,path,appName) |
control.width = not width and "fill" |
local controlWidth = GetOptionsMemberValue("width",v,options,path,appName) |
control.width = not controlWidth and "fill" |
end |
--Common Init |
elseif grouptype == "select" then |
local select = gui:Create("DropdownGroup") |
select:SetTitle(name) |
InjectInfo(select, options, group, path, rootframe, appName) |
select:SetCallback("OnGroupSelected", GroupSelected) |
local selectGroup = gui:Create("DropdownGroup") |
selectGroup:SetTitle(name) |
InjectInfo(selectGroup, options, group, path, rootframe, appName) |
selectGroup:SetCallback("OnGroupSelected", GroupSelected) |
local status = AceConfigDialog:GetStatusTable(appName, path) |
if not status.groups then |
status.groups = {} |
end |
select:SetStatusTable(status.groups) |
selectGroup:SetStatusTable(status.groups) |
local grouplist, orderlist = BuildSelect(group, options, path, appName) |
select:SetGroupList(grouplist, orderlist) |
select:SetUserData("grouplist", grouplist) |
select:SetUserData("orderlist", orderlist) |
selectGroup:SetGroupList(grouplist, orderlist) |
selectGroup:SetUserData("grouplist", grouplist) |
selectGroup:SetUserData("orderlist", orderlist) |
local firstgroup = orderlist[1] |
if firstgroup then |
select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup) |
selectGroup:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup) |
end |
select.width = "fill" |
select.height = "fill" |
selectGroup.width = "fill" |
selectGroup.height = "fill" |
container:AddChild(select) |
container:AddChild(selectGroup) |
--assume tree group by default |
--if parenttype is tree then this group is already a node on that tree |
-- convert pre-39 BlizOptions structure to the new format |
if oldminor and oldminor < 39 and AceConfigDialog.BlizOptions then |
local old = AceConfigDialog.BlizOptions |
local new = {} |
local newOpt = {} |
for key, widget in pairs(old) do |
local appName = widget:GetUserData("appName") |
if not new[appName] then new[appName] = {} end |
new[appName][key] = widget |
if not newOpt[appName] then newOpt[appName] = {} end |
newOpt[appName][key] = widget |
end |
AceConfigDialog.BlizOptions = new |
AceConfigDialog.BlizOptions = newOpt |
else |
AceConfigDialog.BlizOptions = AceConfigDialog.BlizOptions or {} |
end |
-- @param parent The parent to use in the interface options tree. |
-- @param ... The path in the options table to feed into the interface options panel. |
-- @return The reference to the frame registered into the Interface Options. |
-- @return The category ID to pass to Settings.OpenToCategory (or InterfaceOptionsFrame_OpenToCategory) |
function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...) |
local BlizOptions = AceConfigDialog.BlizOptions |
if not BlizOptions[appName][key] then |
local group = gui:Create("BlizOptionsGroup") |
BlizOptions[appName][key] = group |
group:SetName(name or appName, parent) |
group:SetTitle(name or appName) |
group:SetUserData("appName", appName) |
end |
group:SetCallback("OnShow", FeedToBlizPanel) |
group:SetCallback("OnHide", ClearBlizPanel) |
InterfaceOptions_AddCategory(group.frame) |
return group.frame |
if Settings and Settings.RegisterCanvasLayoutCategory then |
local categoryName = name or appName |
if parent then |
local category = Settings.GetCategory(parent) |
if not category then |
error(("The parent category '%s' was not found"):format(parent), 2) |
end |
local subcategory = Settings.RegisterCanvasLayoutSubcategory(category, group.frame, categoryName) |
-- force the generated ID to be used for subcategories, as these can have very simple names like "Profiles" |
group:SetName(subcategory.ID, parent) |
else |
local category = Settings.RegisterCanvasLayoutCategory(group.frame, categoryName) |
-- using appName here would be cleaner, but would not be 100% compatible |
-- but for top-level categories it should be fine, as these are typically addon names |
category.ID = categoryName |
group:SetName(categoryName, parent) |
Settings.RegisterAddOnCategory(category) |
end |
else |
group:SetName(name or appName, parent) |
InterfaceOptions_AddCategory(group.frame) |
end |
return group.frame, group.frame.name |
else |
error(("%s has already been added to the Blizzard Options Window with the given path"):format(appName), 2) |
end |
--- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames. |
-- @class file |
-- @name AceConfigCmd-3.0 |
-- @release $Id: AceConfigCmd-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ |
-- @release $Id: AceConfigCmd-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ |
--[[ |
AceConfigCmd-3.0 |
-- WoW APIs |
local _G = _G |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: LibStub, SELECTED_CHAT_FRAME, DEFAULT_CHAT_FRAME |
local L = setmetatable({}, { -- TODO: replace with proper locale |
__index = function(self,k) return k end |
}) |
local function print(msg) |
(SELECTED_CHAT_FRAME or DEFAULT_CHAT_FRAME):AddMessage(msg) |
end |
return |
end |
local str = strsub(info.input,inputpos); |
local strInput = strsub(info.input,inputpos); |
if tab.type=="execute" then |
------------ execute -------------------------------------------- |
local res = true |
if tab.pattern then |
if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end |
if not strmatch(str, tab.pattern) then |
usererr(info, inputpos, "'"..str.."' - " .. L["invalid input"]) |
if type(tab.pattern)~="string" then err(info, inputpos, "'pattern' - expected a string") end |
if not strmatch(strInput, tab.pattern) then |
usererr(info, inputpos, "'"..strInput.."' - " .. L["invalid input"]) |
return |
end |
end |
do_final(info, inputpos, tab, "set", str) |
do_final(info, inputpos, tab, "set", strInput) |
elseif tab.type=="toggle" then |
------------ toggle -------------------------------------------- |
local b |
local str = strtrim(strlower(str)) |
local str = strtrim(strlower(strInput)) |
if str=="" then |
b = callmethod(info, inputpos, tab, "get") |
elseif tab.type=="range" then |
------------ range -------------------------------------------- |
local val = tonumber(str) |
local val = tonumber(strInput) |
if not val then |
usererr(info, inputpos, "'"..str.."' - "..L["expected number"]) |
usererr(info, inputpos, "'"..strInput.."' - "..L["expected number"]) |
return |
end |
if type(info.step)=="number" then |
elseif tab.type=="select" then |
------------ select ------------------------------------ |
local str = strtrim(strlower(str)) |
local str = strtrim(strlower(strInput)) |
local values = tab.values |
if type(values) == "function" or type(values) == "string" then |
elseif tab.type=="multiselect" then |
------------ multiselect ------------------------------------------- |
local str = strtrim(strlower(str)) |
local str = strtrim(strlower(strInput)) |
local values = tab.values |
if type(values) == "function" or type(values) == "string" then |
--check that the opt is valid |
local ok |
for k,v in pairs(values) do |
for k in pairs(values) do |
if strlower(k)==opt then |
opt = k -- overwrite with key (in case of case mismatches) |
ok = true |
elseif tab.type=="color" then |
------------ color -------------------------------------------- |
local str = strtrim(strlower(str)) |
local str = strtrim(strlower(strInput)) |
if str == "" then |
--TODO: Show current value |
return |
elseif tab.type=="keybinding" then |
------------ keybinding -------------------------------------------- |
local str = strtrim(strlower(str)) |
local str = strtrim(strlower(strInput)) |
if str == "" then |
--TODO: Show current value |
return |
LibStub = LibStub or {libs = {}, minors = {} } |
_G[LIBSTUB_MAJOR] = LibStub |
LibStub.minor = LIBSTUB_MINOR |
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.") |
minor = assert(tonumber(string.match(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 |
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 |
function LibStub:IterateLibraries() return pairs(self.libs) end |
setmetatable(LibStub, { __call = LibStub.GetLibrary }) |
end |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture("OVERLAY", "OVERLAY", nil, 1) |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
soundbutton:SetScript("OnClick", ContentSpeakerOnClick) |
frame.soundbutton = soundbutton |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND") |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND", nil, 1) |
speaker:SetTexture("Interface\\Common\\VoiceChat-Speaker") |
speaker:SetAllPoints(soundbutton) |
frame.speaker = speaker |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT") |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
speakeron:SetTexture("Interface\\Common\\VoiceChat-On") |
speakeron:SetAllPoints(soundbutton) |
frame.speakeron = speakeron |
frame.text:SetPoint("LEFT",soundbutton,"RIGHT",2,0) |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND") |
local speaker = soundbutton:CreateTexture(nil, "BACKGROUND", nil, 1) |
speaker:SetTexture("Interface\\Common\\VoiceChat-Speaker") |
speaker:SetAllPoints(soundbutton) |
self.speaker = speaker |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT") |
local speakeron = soundbutton:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
speakeron:SetTexture("Interface\\Common\\VoiceChat-On") |
speakeron:SetAllPoints(soundbutton) |
self.speakeron = speakeron |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture("OVERLAY", "OVERLAY", nil, 1) |
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") |
local bar = frame:CreateTexture("ARTWORK", "ARTWORK", nil, 1) |
bar:SetHeight(16) |
bar:SetPoint("LEFT",check,"RIGHT",1,0) |
bar:SetPoint("RIGHT",frame,"RIGHT",-1,0) |
frame.dropButton:SetScript("OnClick",ToggleDrop) |
frame:SetScript("OnHide", OnHide) |
local bar = frame:CreateTexture(nil, "OVERLAY") |
local bar = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
bar:SetPoint("TOPLEFT", frame,"TOPLEFT",6,-25) |
bar:SetPoint("BOTTOMRIGHT", frame,"BOTTOMRIGHT", -21, 5) |
bar:SetAlpha(0.5) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
frame:SetScript("OnEnter", ContentOnEnter) |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture("OVERLAY", "OVERLAY", nil, 1) |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
frame:SetScript("OnClick", ContentOnClick) |
frame:SetScript("OnEnter", ContentOnEnter) |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture("OVERLAY","OVERLAY", nil, 1) |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
label:SetText("") |
frame.label = label |
local DLeft = frame:CreateTexture(nil, "ARTWORK") |
local DLeft = frame:CreateTexture(nil, "ARTWORK", nil, 1) |
DLeft:SetWidth(25) |
DLeft:SetHeight(64) |
DLeft:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", -17, -21) |
DLeft:SetTexCoord(0, 0.1953125, 0, 1) |
frame.DLeft = DLeft |
local DRight = frame:CreateTexture(nil, "ARTWORK") |
local DRight = frame:CreateTexture(nil, "ARTWORK", nil, 1) |
DRight:SetWidth(25) |
DRight:SetHeight(64) |
DRight:SetPoint("TOP", DLeft, "TOP") |
DRight:SetTexCoord(0.8046875, 1, 0, 1) |
frame.DRight = DRight |
local DMiddle = frame:CreateTexture(nil, "ARTWORK") |
local DMiddle = frame:CreateTexture(nil, "ARTWORK", nil, 1) |
DMiddle:SetHeight(64) |
DMiddle:SetPoint("TOP", DLeft, "TOP") |
DMiddle:SetPoint("LEFT", DLeft, "RIGHT") |
contentframe:SetPoint("TOPLEFT", scrollframe) |
contentframe:SetPoint("TOPRIGHT", scrollframe) |
local bgTex = frame:CreateTexture(nil, "ARTWORK") |
local bgTex = frame:CreateTexture(nil, "ARTWORK", nil, 1) |
bgTex:SetAllPoints(scrollframe) |
frame.bgTex = bgTex |
frame:SetHeight(18) |
frame:SetHighlightTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]], "ADD") |
frame:SetScript("OnClick", ContentOnClick) |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture("OVERLAY", "OVERLAY", nil, 1) |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",1,-1) |
--- **AceLocale-3.0** manages localization in addons, allowing for multiple locale to be registered with fallback to the base locale for untranslated strings. |
-- @class file |
-- @name AceLocale-3.0 |
-- @release $Id: AceLocale-3.0.lua 1035 2011-07-09 03:20:13Z kaelten $ |
-- @release $Id: AceLocale-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ |
local MAJOR,MINOR = "AceLocale-3.0", 6 |
local AceLocale, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
local assert, tostring, error = assert, tostring, error |
local getmetatable, setmetatable, rawset, rawget = getmetatable, setmetatable, rawset, rawget |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: GAME_LOCALE, geterrorhandler |
local gameLocale = GetLocale() |
if gameLocale == "enGB" then |
gameLocale = "enUS" |
function AceLocale:NewLocale(application, locale, isDefault, silent) |
-- GAME_LOCALE allows translators to test translations of addons without having that wow client installed |
local gameLocale = GAME_LOCALE or gameLocale |
local activeGameLocale = GAME_LOCALE or gameLocale |
local app = AceLocale.apps[application] |
AceLocale.appnames[app] = application |
end |
if locale ~= gameLocale and not isDefault then |
if locale ~= activeGameLocale and not isDefault then |
return -- nop, we don't need these translations |
end |
--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]] |
--[[ $Id: CallbackHandler-1.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]] |
local MAJOR, MINOR = "CallbackHandler-1.0", 7 |
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) |
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 error = error |
local setmetatable, rawget = setmetatable, 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) |
-- 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) |
function CallbackHandler.New(_self, target, RegisterName, UnregisterName, UnregisterAllName) |
RegisterName = RegisterName or "RegisterCallback" |
UnregisterName = UnregisterName or "UnregisterCallback" |
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 |
for event,callbacks in pairs(registry.insertQueue) do |
local first = not rawget(events, event) or not next(events[event]) -- test for empty before. not test for one member after. that one member may have been overwritten. |
for object,func in pairs(callbacks) do |
events[event][object] = func |
-- fire OnUsed callback? |
if first and registry.OnUsed then |
registry.OnUsed(registry, target, eventname) |
registry.OnUsed(registry, target, event) |
first = nil |
end |
end |
local TexPoolResetter = function(pool,tex) |
local maskNum = tex:GetNumMaskTextures() |
for i = maskNum,1 do |
tex:RemoveMaskTexture(tex:GetMaskTexture(i)) |
local curMask = tex:GetMaskTexture(i) |
if curMask then |
tex:RemoveMaskTexture(curMask) |
end |
end |
tex:Hide() |
tex:ClearAllPoints() |
end |
local function configureButtonGlow(f,alpha) |
f.spark = f:CreateTexture(nil, "BACKGROUND") |
f.spark = f:CreateTexture(nil, "BACKGROUND", nil, 1) |
f.spark:SetPoint("CENTER") |
f.spark:SetAlpha(0) |
f.spark:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) |
f.spark:SetTexCoord(0.00781250, 0.61718750, 0.00390625, 0.26953125) |
-- inner glow |
f.innerGlow = f:CreateTexture(nil, "ARTWORK") |
f.innerGlow = f:CreateTexture(nil, "ARTWORK", nil, 1) |
f.innerGlow:SetPoint("CENTER") |
f.innerGlow:SetAlpha(0) |
f.innerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) |
f.innerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375) |
-- inner glow over |
f.innerGlowOver = f:CreateTexture(nil, "ARTWORK") |
f.innerGlowOver = f:CreateTexture(nil, "ARTWORK", nil, 1) |
f.innerGlowOver:SetPoint("TOPLEFT", f.innerGlow, "TOPLEFT") |
f.innerGlowOver:SetPoint("BOTTOMRIGHT", f.innerGlow, "BOTTOMRIGHT") |
f.innerGlowOver:SetAlpha(0) |
f.innerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625) |
-- outer glow |
f.outerGlow = f:CreateTexture(nil, "ARTWORK") |
f.outerGlow = f:CreateTexture(nil, "ARTWORK", nil, 1) |
f.outerGlow:SetPoint("CENTER") |
f.outerGlow:SetAlpha(0) |
f.outerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]]) |
f.outerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375) |
-- outer glow over |
f.outerGlowOver = f:CreateTexture(nil, "ARTWORK") |
f.outerGlowOver = f:CreateTexture(nil, "ARTWORK", nil, 1) |
f.outerGlowOver:SetPoint("TOPLEFT", f.outerGlow, "TOPLEFT") |
f.outerGlowOver:SetPoint("BOTTOMRIGHT", f.outerGlow, "BOTTOMRIGHT") |
f.outerGlowOver:SetAlpha(0) |
f.outerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625) |
-- ants |
f.ants = f:CreateTexture(nil, "OVERLAY") |
f.ants = f:CreateTexture(nil, "OVERLAY", nil, 1) |
f.ants:SetPoint("CENTER") |
f.ants:SetAlpha(0) |
f.ants:SetTexture([[Interface\SpellActivationOverlay\IconAlertAnts]]) |
## Interface: 80200 |
## Interface: 100200 |
## Title: Lib: CustomGlow |
## Notes: Creates custom glow functions |
## Author: deezo |
## X-Category: Library |
## X-License: BSD |
## Version: 1.0.3 |
## Version: 1.0.3.1 |
## OptionalDeps: Masque |
LibStub\LibStub.lua |
-- make into AceHook. |
-- @class file |
-- @name AceHook-3.0 |
-- @release $Id: AceHook-3.0.lua 1243 2020-10-18 00:00:19Z nevcairiel $ |
-- @release $Id: AceHook-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ |
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 9 |
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR) |
registry[self][method] = nil |
end |
handlers[uid], actives[uid], scripts[uid] = nil, nil, nil |
uid = nil |
end |
local orig |
-- f:AddChild(btn) |
-- @class file |
-- @name AceGUI-3.0 |
-- @release $Id: AceGUI-3.0.lua 1247 2021-01-23 23:16:39Z funkehdude $ |
-- @release $Id: AceGUI-3.0.lua 1288 2022-09-25 14:19:00Z funkehdude $ |
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 41 |
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) |
local select, pairs, next, type = select, pairs, next, type |
local error, assert = error, assert |
local setmetatable, rawget = setmetatable, rawget |
local math_max = math.max |
local math_max, math_min, math_ceil = math.max, math.min, math.ceil |
-- WoW APIs |
local UIParent = UIParent |
-- 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, LibStub |
--local con = LibStub("AceConsole-3.0",true) |
AceGUI.WidgetRegistry = AceGUI.WidgetRegistry or {} |
AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {} |
AceGUI.WidgetBase = AceGUI.WidgetBase or {} |
AceGUI.objPools = AceGUI.objPools or {} |
local objPools = AceGUI.objPools |
--Returns a new instance, if none are available either returns a new table or calls the given contructor |
function newWidget(type) |
if not WidgetRegistry[type] then |
function newWidget(widgetType) |
if not WidgetRegistry[widgetType] then |
error("Attempt to instantiate unknown widget type", 2) |
end |
if not objPools[type] then |
objPools[type] = {} |
if not objPools[widgetType] then |
objPools[widgetType] = {} |
end |
local newObj = next(objPools[type]) |
local newObj = next(objPools[widgetType]) |
if not newObj then |
newObj = WidgetRegistry[type]() |
newObj.AceGUIWidgetVersion = WidgetVersions[type] |
newObj = WidgetRegistry[widgetType]() |
newObj.AceGUIWidgetVersion = WidgetVersions[widgetType] |
else |
objPools[type][newObj] = nil |
objPools[widgetType][newObj] = nil |
-- if the widget is older then the latest, don't even try to reuse it |
-- just forget about it, and grab a new one. |
if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[type] then |
return newWidget(type) |
if not newObj.AceGUIWidgetVersion or newObj.AceGUIWidgetVersion < WidgetVersions[widgetType] then |
return newWidget(widgetType) |
end |
end |
return newObj |
end |
-- Releases an instance to the Pool |
function delWidget(obj,type) |
if not objPools[type] then |
objPools[type] = {} |
function delWidget(obj,widgetType) |
if not objPools[widgetType] then |
objPools[widgetType] = {} |
end |
if objPools[type][obj] then |
if objPools[widgetType][obj] then |
error("Attempt to Release Widget that is already released", 2) |
end |
objPools[type][obj] = true |
objPools[widgetType][obj] = true |
end |
end |
-- OnAcquire function on it, before returning. |
-- @param type The type of the widget. |
-- @return The newly created widget. |
function AceGUI:Create(type) |
if WidgetRegistry[type] then |
local widget = newWidget(type) |
function AceGUI:Create(widgetType) |
if WidgetRegistry[widgetType] then |
local widget = newWidget(widgetType) |
if rawget(widget, "Acquire") then |
widget.OnAcquire = widget.Acquire |
if widget.OnAcquire then |
widget:OnAcquire() |
else |
error(("Widget type %s doesn't supply an OnAcquire Function"):format(type)) |
error(("Widget type %s doesn't supply an OnAcquire Function"):format(widgetType)) |
end |
-- Set the default Layout ("List") |
safecall(widget.SetLayout, widget, "List") |
-- This is used by widgets that require a named frame, e.g. when a Blizzard |
-- Template requires it. |
-- @param type The widget type |
function AceGUI:GetNextWidgetNum(type) |
if not self.counts[type] then |
self.counts[type] = 0 |
function AceGUI:GetNextWidgetNum(widgetType) |
if not self.counts[widgetType] then |
self.counts[widgetType] = 0 |
end |
self.counts[type] = self.counts[type] + 1 |
return self.counts[type] |
self.counts[widgetType] = self.counts[widgetType] + 1 |
return self.counts[widgetType] |
end |
--- Return the number of created widgets for this type. |
-- In contrast to GetNextWidgetNum, the number is not incremented. |
-- @param type The widget type |
function AceGUI:GetWidgetCount(type) |
return self.counts[type] or 0 |
-- @param widgetType The widget type |
function AceGUI:GetWidgetCount(widgetType) |
return self.counts[widgetType] or 0 |
end |
--- Return the version of the currently registered widget type. |
-- @param type The widget type |
function AceGUI:GetWidgetVersion(type) |
return WidgetVersions[type] |
-- @param widgetType The widget type |
function AceGUI:GetWidgetVersion(widgetType) |
return WidgetVersions[widgetType] |
end |
------------- |
usedwidth = 0 |
rowstart = frame |
rowstartoffset = frameoffset |
if child.DoLayout then |
child:DoLayout() |
or colObj and (colObj["align" .. dir] or colObj.align) |
or tableObj["align" .. dir] or tableObj.align |
or "CENTERLEFT" |
local child, cell, val = child or 0, cell or 0, nil |
local val |
child, cell = child or 0, cell or 0 |
if type(fn) == "string" then |
fn = fn:lower() |
val = fn |
end |
return fn, max(0, min(val, cell)) |
return fn, math_max(0, math_min(val, cell)) |
end |
-- Get width or height for multiple cells combined |
for cell=from,to do |
dim = dim + (laneDim[cell] or 0) |
end |
return dim + max(0, to - from) * (space or 0) |
return dim + math_max(0, to - from) * (space or 0) |
end |
--[[ Options |
repeat |
n = n + 1 |
local col = (n - 1) % #cols + 1 |
local row = ceil(n / #cols) |
local row = math_ceil(n / #cols) |
local rowspan = rowspans[col] |
local cell = rowspan and rowspan.child or child |
local cellObj = cell:GetUserData("cell") |
end |
-- Colspan |
local colspan = max(0, min((cellObj and cellObj.colspan or 1) - 1, #cols - col)) |
local colspan = math_max(0, math_min((cellObj and cellObj.colspan or 1) - 1, #cols - col)) |
n = n + colspan |
-- Place the cell |
end |
end |
local rows = ceil(n / #cols) |
local rows = math_ceil(n / #cols) |
-- Determine fixed size cols and collect weights |
local extantH, totalWeight = totalH, 0 |
f:ClearAllPoints() |
local childH = f:GetWidth() or 0 |
laneH[col] = max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) |
laneH[col] = math_max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) |
end |
end |
laneH[col] = max(colObj.min or colObj[1] or 0, min(laneH[col], colObj.max or colObj[2] or laneH[col])) |
laneH[col] = math_max(colObj.min or colObj[1] or 0, math_min(laneH[col], colObj.max or colObj[2] or laneH[col])) |
else |
-- Rel./Abs. width |
laneH[col] = colObj.width < 1 and colObj.width * totalH or colObj.width |
end |
extantH = max(0, extantH - laneH[col]) |
extantH = math_max(0, extantH - laneH[col]) |
end |
end |
child:DoLayout() |
end |
rowV = max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV)) |
rowV = math_max(rowV, (f:GetHeight() or 0) - GetCellDimension("V", laneV, rowStart[child], row - 1, spaceV)) |
end |
end |
local PlaySound = PlaySound |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: SetDesaturation, GameFontHighlight |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
["SetDescription"] = function(self, desc) |
if desc then |
if not self.desc then |
local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") |
desc:ClearAllPoints() |
desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) |
desc:SetWidth(self.frame.width - 30) |
desc:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) |
desc:SetJustifyH("LEFT") |
desc:SetJustifyV("TOP") |
self.desc = desc |
local f = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") |
f:ClearAllPoints() |
f:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21) |
f:SetWidth(self.frame.width - 30) |
f:SetPoint("RIGHT", self.frame, "RIGHT", -30, 0) |
f:SetJustifyH("LEFT") |
f:SetJustifyV("TOP") |
self.desc = f |
end |
self.desc:Show() |
--self.text:SetFontObject(GameFontNormal) |
frame:SetScript("OnMouseDown", CheckBox_OnMouseDown) |
frame:SetScript("OnMouseUp", CheckBox_OnMouseUp) |
local checkbg = frame:CreateTexture(nil, "ARTWORK") |
local checkbg = frame:CreateTexture(nil, "ARTWORK", nil, 1) |
checkbg:SetWidth(24) |
checkbg:SetHeight(24) |
checkbg:SetPoint("TOPLEFT") |
checkbg:SetTexture(130755) -- Interface\\Buttons\\UI-CheckBox-Up |
local check = frame:CreateTexture(nil, "OVERLAY") |
local check = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
check:SetAllPoints(checkbg) |
check:SetTexture(130751) -- Interface\\Buttons\\UI-CheckBox-Check |
text:SetPoint("LEFT", checkbg, "RIGHT") |
text:SetPoint("RIGHT") |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT") |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
highlight:SetTexture(130753) -- Interface\\Buttons\\UI-CheckBox-Highlight |
highlight:SetBlendMode("ADD") |
highlight:SetAllPoints(checkbg) |
local image = frame:CreateTexture(nil, "OVERLAY") |
local image = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
image:SetHeight(16) |
image:SetWidth(16) |
image:SetPoint("LEFT", checkbg, "RIGHT", 1, 0) |
BlizOptionsGroup Container |
Simple container widget for the integration of AceGUI into the Blizzard Interface Options |
-------------------------------------------------------------------------------]] |
local Type, Version = "BlizOptionsGroup", 22 |
local Type, Version = "BlizOptionsGroup", 26 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
frame.default = default |
frame.refresh = refresh |
-- 10.0 support function aliases (cancel has been removed) |
frame.OnCommit = okay |
frame.OnDefault = default |
frame.OnRefresh = refresh |
frame:SetScript("OnHide", OnHide) |
frame:SetScript("OnShow", OnShow) |
label:SetJustifyV("TOP") |
label:SetHeight(18) |
local image = frame:CreateTexture(nil, "BACKGROUND") |
local image = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
image:SetWidth(64) |
image:SetHeight(64) |
image:SetPoint("TOP", 0, -5) |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT") |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
highlight:SetAllPoints(image) |
highlight:SetTexture(136580) -- Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight |
highlight:SetTexCoord(0, 1, 0.23, 0.77) |
--[[----------------------------------------------------------------------------- |
Frame Container |
-------------------------------------------------------------------------------]] |
local Type, Version = "Frame", 28 |
local Type, Version = "Frame", 30 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
local PlaySound = PlaySound |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: CLOSE |
--[[----------------------------------------------------------------------------- |
Scripts |
-------------------------------------------------------------------------------]] |
} |
local function Constructor() |
local frame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local frame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") |
frame:Hide() |
frame:EnableMouse(true) |
frame:SetFrameLevel(100) -- Lots of room to draw under it |
frame:SetBackdrop(FrameBackdrop) |
frame:SetBackdropColor(0, 0, 0, 1) |
frame:SetMinResize(400, 200) |
if frame.SetResizeBounds then -- WoW 10.0 |
frame:SetResizeBounds(400, 200) |
else |
frame:SetMinResize(400, 200) |
end |
frame:SetToplevel(true) |
frame:SetScript("OnShow", Frame_OnShow) |
frame:SetScript("OnHide", Frame_OnClose) |
closebutton:SetWidth(100) |
closebutton:SetText(CLOSE) |
local statusbg = CreateFrame("Button", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local statusbg = CreateFrame("Button", nil, frame, "BackdropTemplate") |
statusbg:SetPoint("BOTTOMLEFT", 15, 15) |
statusbg:SetPoint("BOTTOMRIGHT", -132, 15) |
statusbg:SetHeight(24) |
statustext:SetJustifyH("LEFT") |
statustext:SetText("") |
local titlebg = frame:CreateTexture(nil, "OVERLAY") |
local titlebg = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
titlebg:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header |
titlebg:SetTexCoord(0.31, 0.67, 0, 0.63) |
titlebg:SetPoint("TOP", 0, 12) |
local titletext = title:CreateFontString(nil, "OVERLAY", "GameFontNormal") |
titletext:SetPoint("TOP", titlebg, "TOP", 0, -14) |
local titlebg_l = frame:CreateTexture(nil, "OVERLAY") |
local titlebg_l = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
titlebg_l:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header |
titlebg_l:SetTexCoord(0.21, 0.31, 0, 0.63) |
titlebg_l:SetPoint("RIGHT", titlebg, "LEFT") |
titlebg_l:SetWidth(30) |
titlebg_l:SetHeight(40) |
local titlebg_r = frame:CreateTexture(nil, "OVERLAY") |
local titlebg_r = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
titlebg_r:SetTexture(131080) -- Interface\\DialogFrame\\UI-DialogBox-Header |
titlebg_r:SetTexCoord(0.67, 0.77, 0, 0.63) |
titlebg_r:SetPoint("LEFT", titlebg, "RIGHT") |
sizer_se:SetScript("OnMouseDown",SizerSE_OnMouseDown) |
sizer_se:SetScript("OnMouseUp", MoverSizer_OnMouseUp) |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
line1:SetWidth(14) |
line1:SetHeight(14) |
line1:SetPoint("BOTTOMRIGHT", -8, 8) |
local x = 0.1 * 14/17 |
line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
line2:SetWidth(8) |
line2:SetHeight(8) |
line2:SetPoint("BOTTOMRIGHT", -8, 8) |
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border |
local x = 0.1 * 8/17 |
x = 0.1 * 8/17 |
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) |
local sizer_s = CreateFrame("Frame", nil, frame) |
title:SetScript("OnMouseUp", frameOnMouseUp) |
local titlebg = frame:CreateTexture(nil,"OVERLAY") |
local titlebg = frame:CreateTexture(nil,"OVERLAY", nil, 1) |
titlebg:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") |
titlebg:SetTexCoord(0.31,0.67,0,0.63) |
titlebg:SetPoint("TOP",frame,"TOP",0,12) |
titlebg:SetWidth(100) |
titlebg:SetHeight(40) |
local titlebg_l = frame:CreateTexture(nil,"OVERLAY") |
local titlebg_l = frame:CreateTexture(nil,"OVERLAY", nil, 1) |
titlebg_l:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") |
titlebg_l:SetTexCoord(0.21,0.31,0,0.63) |
titlebg_l:SetPoint("RIGHT",titlebg,"LEFT",0,0) |
titlebg_l:SetWidth(30) |
titlebg_l:SetHeight(40) |
local titlebg_right = frame:CreateTexture(nil,"OVERLAY") |
local titlebg_right = frame:CreateTexture(nil,"OVERLAY", nil, 1) |
titlebg_right:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header") |
titlebg_right:SetTexCoord(0.67,0.77,0,0.63) |
titlebg_right:SetPoint("LEFT",titlebg,"RIGHT",0,0) |
sizer_se:SetScript("OnMouseUp", sizerOnMouseUp) |
self.sizer_se = sizer_se |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
self.line1 = line1 |
line1:SetWidth(14) |
line1:SetHeight(14) |
local x = 0.1 * 14/17 |
line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
self.line2 = line2 |
line2:SetWidth(8) |
line2:SetHeight(8) |
titletext:SetJustifyH("LEFT") |
titletext:SetHeight(18) |
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
border:SetPoint("TOPLEFT", 0, -17) |
border:SetPoint("BOTTOMRIGHT", -1, 3) |
border:SetBackdrop(PaneBackdrop) |
--[[ $Id: AceGUIWidget-DropDown.lua 1257 2022-01-10 16:25:37Z nevcairiel $ ]]-- |
--[[ $Id: AceGUIWidget-DropDown.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]]-- |
local AceGUI = LibStub("AceGUI-3.0") |
-- Lua APIs |
local UIParent, CreateFrame = UIParent, CreateFrame |
local _G = _G |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: CLOSE |
local function fixlevels(parent,...) |
local i = 1 |
local child = select(i, ...) |
local function Constructor() |
local count = AceGUI:GetNextWidgetNum(widgetType) |
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, "BackdropTemplate") |
local self = {} |
self.count = count |
self.type = widgetType |
scrollFrame.obj = self |
itemFrame.obj = self |
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, "BackdropTemplate") |
slider:SetOrientation("VERTICAL") |
slider:SetHitRectInsets(0, 0, -10, 0) |
slider:SetBackdrop(sliderBackdrop) |
local CreateFrame, UIParent = CreateFrame, UIParent |
local _G = _G |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
label:SetPoint("BOTTOM") |
label:SetJustifyH("CENTER") |
local left = frame:CreateTexture(nil, "BACKGROUND") |
local left = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
left:SetHeight(8) |
left:SetPoint("LEFT", 3, 0) |
left:SetPoint("RIGHT", label, "LEFT", -5, 0) |
left:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border |
left:SetTexCoord(0.81, 0.94, 0.5, 1) |
local right = frame:CreateTexture(nil, "BACKGROUND") |
local right = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
right:SetHeight(8) |
right:SetPoint("RIGHT", -3, 0) |
right:SetPoint("LEFT", label, "RIGHT", 5, 0) |
local PlaySound = PlaySound |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: GameFontNormal |
---------------- |
-- Main Frame -- |
---------------- |
]] |
do |
local Type = "Window" |
local Version = 6 |
local Version = 8 |
local function frameOnShow(this) |
this.obj:Fire("OnShow") |
frame:SetScript("OnShow",frameOnShow) |
frame:SetScript("OnHide",frameOnClose) |
frame:SetMinResize(240,240) |
if frame.SetResizeBounds then -- WoW 10.0 |
frame:SetResizeBounds(240,240) |
else |
frame:SetMinResize(240,240) |
end |
frame:SetToplevel(true) |
local titlebg = frame:CreateTexture(nil, "BACKGROUND") |
local titlebg = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
titlebg:SetTexture(251966) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Title-Background |
titlebg:SetPoint("TOPLEFT", 9, -6) |
titlebg:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -28, -24) |
local dialogbg = frame:CreateTexture(nil, "BACKGROUND") |
local dialogbg = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
dialogbg:SetTexture(137056) -- Interface\\Tooltips\\UI-Tooltip-Background |
dialogbg:SetPoint("TOPLEFT", 8, -24) |
dialogbg:SetPoint("BOTTOMRIGHT", -6, 8) |
dialogbg:SetVertexColor(0, 0, 0, .75) |
local topleft = frame:CreateTexture(nil, "BORDER") |
local topleft = frame:CreateTexture(nil, "BORDER", nil, 1) |
topleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
topleft:SetWidth(64) |
topleft:SetHeight(64) |
topleft:SetPoint("TOPLEFT") |
topleft:SetTexCoord(0.501953125, 0.625, 0, 1) |
local topright = frame:CreateTexture(nil, "BORDER") |
local topright = frame:CreateTexture(nil, "BORDER", nil, 1) |
topright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
topright:SetWidth(64) |
topright:SetHeight(64) |
topright:SetPoint("TOPRIGHT") |
topright:SetTexCoord(0.625, 0.75, 0, 1) |
local top = frame:CreateTexture(nil, "BORDER") |
local top = frame:CreateTexture(nil, "BORDER", nil, 1) |
top:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
top:SetHeight(64) |
top:SetPoint("TOPLEFT", topleft, "TOPRIGHT") |
top:SetPoint("TOPRIGHT", topright, "TOPLEFT") |
top:SetTexCoord(0.25, 0.369140625, 0, 1) |
local bottomleft = frame:CreateTexture(nil, "BORDER") |
local bottomleft = frame:CreateTexture(nil, "BORDER", nil, 1) |
bottomleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
bottomleft:SetWidth(64) |
bottomleft:SetHeight(64) |
bottomleft:SetPoint("BOTTOMLEFT") |
bottomleft:SetTexCoord(0.751953125, 0.875, 0, 1) |
local bottomright = frame:CreateTexture(nil, "BORDER") |
local bottomright = frame:CreateTexture(nil, "BORDER", nil, 1) |
bottomright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
bottomright:SetWidth(64) |
bottomright:SetHeight(64) |
bottomright:SetPoint("BOTTOMRIGHT") |
bottomright:SetTexCoord(0.875, 1, 0, 1) |
local bottom = frame:CreateTexture(nil, "BORDER") |
local bottom = frame:CreateTexture(nil, "BORDER", nil, 1) |
bottom:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
bottom:SetHeight(64) |
bottom:SetPoint("BOTTOMLEFT", bottomleft, "BOTTOMRIGHT") |
bottom:SetPoint("BOTTOMRIGHT", bottomright, "BOTTOMLEFT") |
bottom:SetTexCoord(0.376953125, 0.498046875, 0, 1) |
local left = frame:CreateTexture(nil, "BORDER") |
local left = frame:CreateTexture(nil, "BORDER", nil, 1) |
left:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
left:SetWidth(64) |
left:SetPoint("TOPLEFT", topleft, "BOTTOMLEFT") |
left:SetPoint("BOTTOMLEFT", bottomleft, "TOPLEFT") |
left:SetTexCoord(0.001953125, 0.125, 0, 1) |
local right = frame:CreateTexture(nil, "BORDER") |
local right = frame:CreateTexture(nil, "BORDER", nil, 1) |
right:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border |
right:SetWidth(64) |
right:SetPoint("TOPRIGHT", topright, "BOTTOMRIGHT") |
sizer_se:SetScript("OnMouseUp", sizerOnMouseUp) |
self.sizer_se = sizer_se |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line1 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
self.line1 = line1 |
line1:SetWidth(14) |
line1:SetHeight(14) |
local x = 0.1 * 14/17 |
line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND") |
local line2 = sizer_se:CreateTexture(nil, "BACKGROUND", nil, 1) |
self.line2 = line2 |
line2:SetWidth(8) |
line2:SetHeight(8) |
line2:SetPoint("BOTTOMRIGHT", -8, 8) |
line2:SetTexture(137057) -- Interface\\Tooltips\\UI-Tooltip-Border |
local x = 0.1 * 8/17 |
x = 0.1 * 8/17 |
line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5) |
local sizer_s = CreateFrame("Frame",nil,frame) |
dropdown.frame:Show() |
dropdown:SetLabel("") |
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
border:SetPoint("TOPLEFT", 0, -26) |
border:SetPoint("BOTTOMRIGHT", 0, 3) |
border:SetBackdrop(PaneBackdrop) |
-- set the script as the last step, so it doesn't fire yet |
scrollbar:SetScript("OnValueChanged", ScrollBar_OnScrollValueChanged) |
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") |
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND", nil, 1) |
scrollbg:SetAllPoints(scrollbar) |
scrollbg:SetColorTexture(0, 0, 0, 0.4) |
local content = CreateFrame("Frame",nil,scrollframe) |
createdcount = createdcount + 1 |
local scrollbar = CreateFrame("Slider",("AceConfigDialogScrollFrame%dScrollBar"):format(createdcount),scrollframe,"UIPanelScrollBarTemplate") |
local scrollbg = scrollbar:CreateTexture(nil,"BACKGROUND") |
local scrollbg = scrollbar:CreateTexture(nil,"BACKGROUND", nil, 1) |
scrollbg:SetAllPoints(scrollbar) |
scrollbg:SetTexture(0,0,0,0.4) |
self.scrollframe = scrollframe |
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1202 2019-05-15 23:11:22Z nevcairiel $ ]]-- |
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1272 2022-08-29 15:56:35Z nevcairiel $ ]]-- |
local AceGUI = LibStub("AceGUI-3.0") |
-- NOTE: The ItemBase version is added to each item's version number |
-- to ensure proper updates on ItemBase changes. |
-- Use at least 1000er steps. |
version = 1000, |
version = 2000, |
counter = 0, |
} |
text:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-8,0) |
self.text = text |
local highlight = frame:CreateTexture(nil, "OVERLAY") |
local highlight = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight |
highlight:SetBlendMode("ADD") |
highlight:SetHeight(14) |
highlight:Hide() |
self.highlight = highlight |
local check = frame:CreateTexture("OVERLAY") |
local check = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
check:SetWidth(16) |
check:SetHeight(16) |
check:SetPoint("LEFT",frame,"LEFT",3,-1) |
check:Hide() |
self.check = check |
local sub = frame:CreateTexture("OVERLAY") |
local sub = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
sub:SetWidth(16) |
sub:SetHeight(16) |
sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1) |
self.SetDisabled = SetDisabled |
local line = self.frame:CreateTexture(nil, "OVERLAY") |
local line = self.frame:CreateTexture(nil, "OVERLAY", nil, 1) |
line:SetHeight(1) |
line:SetColorTexture(.5, .5, .5) |
line:SetPoint("LEFT", self.frame, "LEFT", 10, 0) |
TreeGroup Container |
Container that uses a tree control to switch between groups. |
-------------------------------------------------------------------------------]] |
local Type, Version = "TreeGroup", 45 |
local Type, Version = "TreeGroup", 47 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
-- Lua APIs |
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type |
local math_min, math_max, floor = math.min, math.max, floor |
local math_min, math_max, floor = math.min, math.max, math.floor |
local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat |
-- WoW APIs |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: FONT_COLOR_CODE_CLOSE |
-- Recycling functions |
local new, del |
do |
local button = CreateFrame("Button", ("AceGUI30TreeButton%d"):format(num), self.treeframe, "OptionsListButtonTemplate") |
button.obj = self |
local icon = button:CreateTexture(nil, "OVERLAY") |
local icon = button:CreateTexture(nil, "OVERLAY", nil, 1) |
icon:SetWidth(14) |
icon:SetHeight(14) |
button.icon = icon |
if maxtreewidth > 100 and status.treewidth > maxtreewidth then |
self:SetTreeWidth(maxtreewidth, status.treesizable) |
end |
treeframe:SetMaxResize(maxtreewidth, 1600) |
if treeframe.SetResizeBounds then |
treeframe:SetResizeBounds(100, 1, maxtreewidth, 1600) |
else |
treeframe:SetMaxResize(maxtreewidth, 1600) |
end |
end, |
["OnHeightSet"] = function(self, height) |
local num = AceGUI:GetNextWidgetNum(Type) |
local frame = CreateFrame("Frame", nil, UIParent) |
local treeframe = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local treeframe = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
treeframe:SetPoint("TOPLEFT") |
treeframe:SetPoint("BOTTOMLEFT") |
treeframe:SetWidth(DEFAULT_TREE_WIDTH) |
treeframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5) |
treeframe:SetBackdropBorderColor(0.4, 0.4, 0.4) |
treeframe:SetResizable(true) |
treeframe:SetMinResize(100, 1) |
treeframe:SetMaxResize(400, 1600) |
if treeframe.SetResizeBounds then -- WoW 10.0 |
treeframe:SetResizeBounds(100, 1, 400, 1600) |
else |
treeframe:SetMinResize(100, 1) |
treeframe:SetMaxResize(400, 1600) |
end |
treeframe:SetScript("OnUpdate", FirstFrameUpdate) |
treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) |
treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel) |
local dragger = CreateFrame("Frame", nil, treeframe, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local dragger = CreateFrame("Frame", nil, treeframe, "BackdropTemplate") |
dragger:SetWidth(8) |
dragger:SetPoint("TOP", treeframe, "TOPRIGHT") |
dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT") |
scrollbar:SetWidth(16) |
scrollbar:SetScript("OnValueChanged", OnScrollValueChanged) |
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") |
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND", nil, 1) |
scrollbg:SetAllPoints(scrollbar) |
scrollbg:SetColorTexture(0,0,0,0.4) |
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT") |
border:SetPoint("BOTTOMRIGHT") |
border:SetBackdrop(PaneBackdrop) |
-- WoW APIs |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: ColorPickerFrame, OpacitySliderFrame |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
frame:SetScript("OnLeave", Control_OnLeave) |
frame:SetScript("OnClick", ColorSwatch_OnClick) |
local colorSwatch = frame:CreateTexture(nil, "OVERLAY") |
local colorSwatch = frame:CreateTexture(nil, "OVERLAY", nil, 1) |
colorSwatch:SetWidth(19) |
colorSwatch:SetHeight(19) |
colorSwatch:SetTexture(130939) -- Interface\\ChatFrame\\ChatFrameColorSwatch |
colorSwatch:SetPoint("LEFT") |
local texture = frame:CreateTexture(nil, "BACKGROUND") |
local texture = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
colorSwatch.background = texture |
texture:SetWidth(16) |
texture:SetHeight(16) |
texture:SetPoint("CENTER", colorSwatch) |
texture:Show() |
local checkers = frame:CreateTexture(nil, "BACKGROUND") |
local checkers = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
colorSwatch.checkers = checkers |
checkers:SetWidth(14) |
checkers:SetHeight(14) |
text:SetPoint("LEFT", colorSwatch, "RIGHT", 2, 0) |
text:SetPoint("RIGHT") |
--local highlight = frame:CreateTexture(nil, "HIGHLIGHT") |
--local highlight = frame:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
--highlight:SetTexture(136810) -- Interface\\QuestFrame\\UI-QuestTitleHighlight |
--highlight:SetBlendMode("ADD") |
--highlight:SetAllPoints(frame) |
buttoncount = buttoncount + 1 |
button.obj = self |
local icon = button:CreateTexture(nil, "OVERLAY") |
local icon = button:CreateTexture(nil, "OVERLAY", nil, 1) |
icon:SetWidth(14) |
icon:SetHeight(14) |
button.icon = icon |
createdcount = createdcount + 1 |
local scrollbar = CreateFrame("Slider",("AceConfigDialogTreeGroup%dScrollBar"):format(createdcount),treeframe,"UIPanelScrollBarTemplate") |
self.scrollbar = scrollbar |
local scrollbg = scrollbar:CreateTexture(nil,"BACKGROUND") |
local scrollbg = scrollbar:CreateTexture(nil,"BACKGROUND", nil, 1) |
scrollbg:SetAllPoints(scrollbar) |
scrollbg:SetTexture(0,0,0,0.4) |
scrollbar.obj = self |
frame:SetScript("OnLeave", Control_OnLeave) |
frame:SetScript("OnMouseDown", Label_OnClick) |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT") |
local highlight = frame:CreateTexture(nil, "HIGHLIGHT", nil, 1) |
highlight:SetTexture(nil) |
highlight:SetAllPoints() |
highlight:SetBlendMode("ADD") |
Label Widget |
Displays text and optionally an icon. |
-------------------------------------------------------------------------------]] |
local Type, Version = "Label", 27 |
local Type, Version = "Label", 28 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
-- WoW APIs |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: GameFontHighlightSmall |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
end, |
["SetFont"] = function(self, font, height, flags) |
self.label:SetFont(font, height, flags) |
UpdateImageAnchor(self) |
if not self.fontObject then |
self.fontObject = CreateFont("AceGUI30LabelFont" .. AceGUI:GetNextWidgetNum(Type)) |
end |
self.fontObject:SetFont(font, height, flags) |
self:SetFontObject(self.fontObject) |
end, |
["SetFontObject"] = function(self, font) |
self:SetFont((font or GameFontHighlightSmall):GetFont()) |
self.label:SetFontObject(font or GameFontHighlightSmall) |
UpdateImageAnchor(self) |
end, |
["SetImageSize"] = function(self, width, height) |
frame:Hide() |
local label = frame:CreateFontString(nil, "BACKGROUND", "GameFontHighlightSmall") |
local image = frame:CreateTexture(nil, "BACKGROUND") |
local image = frame:CreateTexture(nil, "BACKGROUND", nil, 1) |
-- create widget |
local widget = { |
local Type, Version = "MultiLineEditBox", 29 |
local Type, Version = "MultiLineEditBox", 32 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
local CreateFrame, UIParent = CreateFrame, UIParent |
local _G = _G |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: ACCEPT, ChatFontNormal |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight()) |
end |
local function OnScrollRangeChanged(self, xrange, yrange) |
if yrange == 0 then |
self.obj.editBox:SetHitRectInsets(0, 0, 0, 0) |
else |
OnVerticalScroll(self, self:GetVerticalScroll()) |
end |
end |
local function OnShowFocus(frame) |
frame.obj.editBox:SetFocus() |
frame:SetScript("OnShow", nil) |
["SetCursorPosition"] = function(self, ...) |
return self.editBox:SetCursorPosition(...) |
end, |
} |
--[[----------------------------------------------------------------------------- |
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1) |
text:SetJustifyV("MIDDLE") |
local scrollBG = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local scrollBG = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
scrollBG:SetBackdrop(backdrop) |
scrollBG:SetBackdropColor(0, 0, 0) |
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4) |
scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag) |
scrollFrame:SetScript("OnSizeChanged", OnSizeChanged) |
scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll) |
scrollFrame:HookScript("OnScrollRangeChanged", OnScrollRangeChanged) |
local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame) |
editBox:SetAllPoints() |
TabGroup Container |
Container that uses tabs on top to switch between groups. |
-------------------------------------------------------------------------------]] |
local Type, Version = "TabGroup", 37 |
local Type, Version = "TabGroup", 38 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
local CreateFrame, UIParent = CreateFrame, UIParent |
local _G = _G |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: PanelTemplates_TabResize, PanelTemplates_SetDisabledTabState, PanelTemplates_SelectTab, PanelTemplates_DeselectTab |
-- local upvalue storage used by BuildTabs |
local widths = {} |
local rowwidths = {} |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
local function PanelTemplates_TabResize(tab, padding, absoluteSize, minWidth, maxWidth, absoluteTextSize) |
local tabName = tab:GetName(); |
local buttonMiddle = tab.Middle or tab.middleTexture or _G[tabName.."Middle"]; |
local buttonMiddleDisabled = tab.MiddleDisabled or (tabName and _G[tabName.."MiddleDisabled"]); |
local left = tab.Left or tab.leftTexture or _G[tabName.."Left"]; |
local sideWidths = 2 * left:GetWidth(); |
local tabText = tab.Text or _G[tab:GetName().."Text"]; |
local highlightTexture = tab.HighlightTexture or (tabName and _G[tabName.."HighlightTexture"]); |
local width, tabWidth; |
local textWidth; |
if ( absoluteTextSize ) then |
textWidth = absoluteTextSize; |
else |
tabText:SetWidth(0); |
textWidth = tabText:GetWidth(); |
end |
-- If there's an absolute size specified then use it |
if ( absoluteSize ) then |
if ( absoluteSize < sideWidths) then |
width = 1; |
tabWidth = sideWidths |
else |
width = absoluteSize - sideWidths; |
tabWidth = absoluteSize |
end |
tabText:SetWidth(width); |
else |
-- Otherwise try to use padding |
if ( padding ) then |
width = textWidth + padding; |
else |
width = textWidth + 24; |
end |
-- If greater than the maxWidth then cap it |
if ( maxWidth and width > maxWidth ) then |
if ( padding ) then |
width = maxWidth + padding; |
else |
width = maxWidth + 24; |
end |
tabText:SetWidth(width); |
else |
tabText:SetWidth(0); |
end |
if (minWidth and width < minWidth) then |
width = minWidth; |
end |
tabWidth = width + sideWidths; |
end |
if ( buttonMiddle ) then |
buttonMiddle:SetWidth(width); |
end |
if ( buttonMiddleDisabled ) then |
buttonMiddleDisabled:SetWidth(width); |
end |
tab:SetWidth(tabWidth); |
if ( highlightTexture ) then |
highlightTexture:SetWidth(tabWidth); |
end |
end |
local function PanelTemplates_DeselectTab(tab) |
local name = tab:GetName(); |
local left = tab.Left or _G[name.."Left"]; |
local middle = tab.Middle or _G[name.."Middle"]; |
local right = tab.Right or _G[name.."Right"]; |
left:Show(); |
middle:Show(); |
right:Show(); |
--tab:UnlockHighlight(); |
tab:Enable(); |
local text = tab.Text or _G[name.."Text"]; |
text:SetPoint("CENTER", tab, "CENTER", (tab.deselectedTextX or 0), (tab.deselectedTextY or 2)); |
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; |
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; |
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; |
leftDisabled:Hide(); |
middleDisabled:Hide(); |
rightDisabled:Hide(); |
end |
local function PanelTemplates_SelectTab(tab) |
local name = tab:GetName(); |
local left = tab.Left or _G[name.."Left"]; |
local middle = tab.Middle or _G[name.."Middle"]; |
local right = tab.Right or _G[name.."Right"]; |
left:Hide(); |
middle:Hide(); |
right:Hide(); |
--tab:LockHighlight(); |
tab:Disable(); |
tab:SetDisabledFontObject(GameFontHighlightSmall); |
local text = tab.Text or _G[name.."Text"]; |
text:SetPoint("CENTER", tab, "CENTER", (tab.selectedTextX or 0), (tab.selectedTextY or -3)); |
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; |
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; |
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; |
leftDisabled:Show(); |
middleDisabled:Show(); |
rightDisabled:Show(); |
if GameTooltip:IsOwned(tab) then |
GameTooltip:Hide(); |
end |
end |
local function PanelTemplates_SetDisabledTabState(tab) |
local name = tab:GetName(); |
local left = tab.Left or _G[name.."Left"]; |
local middle = tab.Middle or _G[name.."Middle"]; |
local right = tab.Right or _G[name.."Right"]; |
left:Show(); |
middle:Show(); |
right:Show(); |
--tab:UnlockHighlight(); |
tab:Disable(); |
tab.text = tab:GetText(); |
-- Gray out text |
tab:SetDisabledFontObject(GameFontDisableSmall); |
local leftDisabled = tab.LeftDisabled or _G[name.."LeftDisabled"]; |
local middleDisabled = tab.MiddleDisabled or _G[name.."MiddleDisabled"]; |
local rightDisabled = tab.RightDisabled or _G[name.."RightDisabled"]; |
leftDisabled:Hide(); |
middleDisabled:Hide(); |
rightDisabled:Hide(); |
end |
local function UpdateTabLook(frame) |
if frame.disabled then |
PanelTemplates_SetDisabledTabState(frame) |
["CreateTab"] = function(self, id) |
local tabname = ("AceGUITabGroup%dTab%d"):format(self.num, id) |
local tab = CreateFrame("Button", tabname, self.border, "OptionsFrameTabButtonTemplate") |
local tab = CreateFrame("Button", tabname, self.border) |
tab:SetSize(115, 24) |
tab.deselectedTextY = -3 |
tab.selectedTextY = -2 |
tab.LeftDisabled = tab:CreateTexture(tabname .. "LeftDisabled", "BORDER", nil, 1) |
tab.LeftDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") |
tab.LeftDisabled:SetSize(20, 24) |
tab.LeftDisabled:SetPoint("BOTTOMLEFT", 0, -3) |
tab.LeftDisabled:SetTexCoord(0, 0.15625, 0, 1.0) |
tab.MiddleDisabled = tab:CreateTexture(tabname .. "MiddleDisabled", "BORDER", nil, 1) |
tab.MiddleDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") |
tab.MiddleDisabled:SetSize(88, 24) |
tab.MiddleDisabled:SetPoint("LEFT", tab.LeftDisabled, "RIGHT") |
tab.MiddleDisabled:SetTexCoord(0.15625, 0.84375, 0, 1.0) |
tab.RightDisabled = tab:CreateTexture(tabname .. "RightDisabled", "BORDER", nil, 1) |
tab.RightDisabled:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-ActiveTab") |
tab.RightDisabled:SetSize(20, 24) |
tab.RightDisabled:SetPoint("LEFT", tab.MiddleDisabled, "RIGHT") |
tab.RightDisabled:SetTexCoord(0.84375, 1.0, 0, 1.0) |
tab.Left = tab:CreateTexture(tabname .. "Left", "BORDER", nil, 1) |
tab.Left:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") |
tab.Left:SetSize(20, 24) |
tab.Left:SetPoint("TOPLEFT") |
tab.Left:SetTexCoord(0, 0.15625, 0, 1.0) |
tab.Middle = tab:CreateTexture(tabname .. "Middle", "BORDER", nil, 1) |
tab.Middle:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") |
tab.Middle:SetSize(88, 24) |
tab.Middle:SetPoint("LEFT", tab.Left, "RIGHT") |
tab.Middle:SetTexCoord(0.15625, 0.84375, 0, 1.0) |
tab.Right = tab:CreateTexture(tabname .. "Right", "BORDER", nil, 1) |
tab.Right:SetTexture("Interface\\OptionsFrame\\UI-OptionsFrame-InActiveTab") |
tab.Right:SetSize(20, 24) |
tab.Right:SetPoint("LEFT", tab.Middle, "RIGHT") |
tab.Right:SetTexCoord(0.84375, 1.0, 0, 1.0) |
tab.Text = tab:CreateFontString(tabname .. "Text") |
tab:SetFontString(tab.Text) |
tab:SetNormalFontObject(GameFontNormalSmall) |
tab:SetHighlightFontObject(GameFontHighlightSmall) |
tab:SetDisabledFontObject(GameFontHighlightSmall) |
tab:SetHighlightTexture("Interface\\PaperDollInfoFrame\\UI-Character-Tab-Highlight", "ADD") |
tab.HighlightTexture = tab:GetHighlightTexture() |
tab.HighlightTexture:ClearAllPoints() |
tab.HighlightTexture:SetPoint("LEFT", tab, "LEFT", 10, -4) |
tab.HighlightTexture:SetPoint("RIGHT", tab, "RIGHT", -10, -4) |
_G[tabname .. "HighlightTexture"] = tab.HighlightTexture |
tab.obj = self |
tab.id = id |
tab.text = _G[tabname .. "Text"] |
tab.text = tab.Text -- compat |
tab.text:ClearAllPoints() |
tab.text:SetPoint("LEFT", 14, -3) |
tab.text:SetPoint("RIGHT", -12, -3) |
titletext:SetHeight(18) |
titletext:SetText("") |
local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") |
border:SetPoint("TOPLEFT", 1, -27) |
border:SetPoint("BOTTOMRIGHT", -1, 3) |
border:SetBackdrop(PaneBackdrop) |
local PlaySound = PlaySound |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: GameFontHighlightSmall |
--[[----------------------------------------------------------------------------- |
Support functions |
-------------------------------------------------------------------------------]] |
end |
local function UpdateLabels(self) |
local min, max = (self.min or 0), (self.max or 100) |
local min_value, max_value = (self.min or 0), (self.max or 100) |
if self.ispercent then |
self.lowtext:SetFormattedText("%s%%", (min * 100)) |
self.hightext:SetFormattedText("%s%%", (max * 100)) |
self.lowtext:SetFormattedText("%s%%", (min_value * 100)) |
self.hightext:SetFormattedText("%s%%", (max_value * 100)) |
else |
self.lowtext:SetText(min) |
self.hightext:SetText(max) |
self.lowtext:SetText(min_value) |
self.hightext:SetText(max_value) |
end |
end |
self.label:SetText(text) |
end, |
["SetSliderValues"] = function(self, min, max, step) |
["SetSliderValues"] = function(self, min_value, max_value, step) |
local frame = self.slider |
frame.setup = true |
self.min = min |
self.max = max |
self.min = min_value |
self.max = max_value |
self.step = step |
frame:SetMinMaxValues(min or 0,max or 100) |
frame:SetMinMaxValues(min_value or 0,max_value or 100) |
UpdateLabels(self) |
frame:SetValueStep(step or 1) |
if self.value then |
label:SetJustifyH("CENTER") |
label:SetHeight(15) |
local slider = CreateFrame("Slider", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local slider = CreateFrame("Slider", nil, frame, "BackdropTemplate") |
slider:SetOrientation("HORIZONTAL") |
slider:SetHeight(15) |
slider:SetHitRectInsets(0, 0, -10, 0) |
local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") |
hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3) |
local editbox = CreateFrame("EditBox", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local editbox = CreateFrame("EditBox", nil, frame, "BackdropTemplate") |
editbox:SetAutoFocus(false) |
editbox:SetFontObject(GameFontHighlightSmall) |
editbox:SetPoint("TOP", slider, "BOTTOM") |
local IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown = IsShiftKeyDown, IsControlKeyDown, IsAltKeyDown |
local CreateFrame, UIParent = CreateFrame, UIParent |
-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded |
-- List them here for Mikk's FindGlobals script |
-- GLOBALS: NOT_BOUND |
--[[----------------------------------------------------------------------------- |
Scripts |
-------------------------------------------------------------------------------]] |
label:SetJustifyH("CENTER") |
label:SetHeight(18) |
local msgframe = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) |
local msgframe = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") |
msgframe:SetHeight(30) |
msgframe:SetBackdrop(ControlBackdrop) |
msgframe:SetBackdropColor(0,0,0) |
------------------------------------------------------------------------ |
r117 | funkehdude | 2021-03-09 20:22:46 +0000 (Tue, 09 Mar 2021) | 1 line |
r126 | funkehdude | 2022-08-29 23:02:19 +0000 (Mon, 29 Aug 2022) | 1 line |
Changed paths: |
A /trunk/LibSharedMedia-3.0_Wrath.toc |
Add Wrath toc |
------------------------------------------------------------------------ |
r125 | funkehdude | 2022-08-29 22:59:26 +0000 (Mon, 29 Aug 2022) | 1 line |
Changed paths: |
M /trunk/LibSharedMedia-3.0.toc |
Bump toc |
------------------------------------------------------------------------ |
r124 | funkehdude | 2022-06-01 04:19:46 +0000 (Wed, 01 Jun 2022) | 1 line |
Changed paths: |
M /trunk/LibSharedMedia-3.0.toc |
bump toc |
------------------------------------------------------------------------ |
## Interface: 90005 |
## Interface: 90207 |
## 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/ |
## Version: 3.0-126 |
## X-Website: https://www.curseforge.com/wow/addons/libsharedmedia-3-0 |
## X-Category: Library |
## X-Revision: 117 |
## X-Date: 2021-03-09T20:22:46Z |
## X-Revision: 126 |
## X-Date: 2022-08-29T23:02:19Z |
LibStub\LibStub.lua |
CallbackHandler-1.0\CallbackHandler-1.0.lua |
## Interface: 90200 |
## Interface: 100200 |
## Author: Tomate |
## Version: 9.07 |
## Version: 10.00 |
## 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 |
SC_SPELLID['DOSCD'] = 300728 --Door of Shadows (Venthyr) |
SC_SPELLID['ERCD'] = 323547 --Echoing Reprimand (Kyrian) |
SC_SPELLID['ER'] = 323559 --Echoing Reprimand (Kyrian) |
SC_SPELLID['SBSCD'] = 328547 --Serrated Bone Spike (Necrolord) |
SC_SPELLID['SBS'] = 324073 --Serrated Bone Spike (Necrolord) |
SC_SPELLID['SP'] = 328305 --Sepsis (Night Fae) |
local maxCP = UnitPowerMax("player", Enum.PowerType.ComboPoints) |
for i = 1, maxCP do |
SC.BARS['CP']['obj'].combos[i]:Hide() |
SC.BARS['CP']['obj'].combos[i].bg:Hide() |
end |
SC.BARS['CP']['obj']:Hide() |
local text = points |
if SC.SET.display.CP == true then |
for i = 1, points do |
SC.BARS['CP']['obj'].combos[i]:Show() |
SC.BARS['CP']['obj'].combos[i].bg:Show() |
end |
SC.BARS['CP']['obj']:Show() |
end |
SC.OTHER['POISON']['obj']:SetAlpha(0) |
end |
if not combat and SC.OTHER['POISON']['obj'].button:IsMouseEnabled() then |
SC.OTHER['POISON']['obj'].button:EnableMouse(false) |
--SC.OTHER['POISON']['obj'].button:EnableMouse(false) |
end |
end |
elseif not name or not name2 or (((expirationTime-SC.tNow) < minimalTime or (expirationTime2-SC.tNow) < minimalTime) and not combat) and not IsMounted() then |
SC.OTHER['POISON']['obj']:SetAlpha(0) |
end |
if not combat and SC.OTHER['POISON']['obj'].button:IsMouseEnabled() then |
SC.OTHER['POISON']['obj'].button:EnableMouse(false) |
--SC.OTHER['POISON']['obj'].button:EnableMouse(false) |
end |
end |
end |