WoWInterface SVN mikma

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /Voodoo
    from Rev 544 to Rev 545
    Reverse comparison

Rev 544 → Rev 545

MyLittleButton.lua File deleted \ No newline at end of file
MyLittleButton.toc File deleted
Voodoo.toc New file
0,0 → 1,6
## Interface: 30200
## Title: My Little Button
## Notes: For the pony!
## SavedVariablesPerCharacter: MyLittleButtonDB
 
MyLittleButton.lua
Voodoo.lua New file
0,0 → 1,219
BINDING_HEADER_MYLITTLEBUTTON = "MyLittleButton"
setglobal("BINDING_NAME_CLICK MyLittleButton:LeftButton", "Execute")
 
local frame = CreateFrame("Button",nil,UIParent)
frame:SetScript("OnEvent", function(self, event, ...)
if self[event] then return self[event](self, event, ...) end
end)
frame:RegisterEvent("PLAYER_LOGIN")
 
local button = CreateFrame("Button", "MyLittleButton", UIParent, "SecureActionButtonTemplate, ActionButtonTemplate")
button:SetPoint("CENTER",UIParent)
 
local function ChangeButtonAttributes(texture,type,spell,target)
if texture then
_G[button:GetName().."Icon"]:SetTexture(texture)
end
if type and spell then
button:SetAttribute("unit",target)
button:SetAttribute("type",type)
button:SetAttribute(type,spell)
end
if target then
editbox:SetText(target)
end
end
 
local function ChangeAction()
if InCombatLockdown() then return end
local type,itemID = GetCursorInfo()
if type == "spell" or "item" then
MyLittleButtonDB[GetActiveTalentGroup()]["type"] = type
if type == "spell" then
MyLittleButtonDB[GetActiveTalentGroup()]["spell"] = select(1,GetSpellName(itemID,type))
MyLittleButtonDB[GetActiveTalentGroup()]["texture"] = GetSpellTexture(MyLittleButtonDB[GetActiveTalentGroup()]["spell"])
elseif type == "item" then
MyLittleButtonDB[GetActiveTalentGroup()]["spell"] = select(1,GetItemInfo(itemID))
MyLittleButtonDB[GetActiveTalentGroup()]["texture"] = select(10,GetItemInfo(itemID))
end
if editbox:GetText() ~= "" then MyLittleButtonDB[GetActiveTalentGroup()]["target"] = editbox:GetText() end
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"])
return ClearCursor()
end
end
 
local function CheckCooldown()
local start,duration,enable
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and GetSpellInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) and GetSpellTexture(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) then
start,duration,enable = GetSpellCooldown(MyLittleButtonDB[GetActiveTalentGroup()]["spell"])
elseif MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and GetItemInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) and select(10,GetItemInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"])) then
start,duration,enable = GetItemCooldown(MyLittleButtonDB[GetActiveTalentGroup()]["spell"])
else
start,duration,enable = 0,0,1
end
if start and duration and enable then
CooldownFrame_SetTimer(_G[button:GetName().."Cooldown"], start, duration, enable)
end
end
 
_G[button:GetName().."Icon"]:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark")
button:SetScript("OnReceiveDrag", function()
ChangeAction()
CheckCooldown()
end)
 
editbox = CreateFrame('EditBox', "MyLittleEditbox", UIParent)
editbox:SetAutoFocus(false)
editbox:SetHeight(32)
editbox:SetFontObject('GameFontHighlightSmall')
editbox:SetWidth(100)
editbox:SetHeight(20)
editbox:SetFrameStrata("HIGH")
 
local left = editbox:CreateTexture(nil, "BACKGROUND")
left:SetWidth(8)
left:SetHeight(20)
left:SetPoint("LEFT", -5, 0)
left:SetTexture("Interface\\Common\\Common-Input-Border")
left:SetTexCoord(0, 0.0625, 0, 0.625)
 
local right = editbox:CreateTexture(nil, "BACKGROUND")
right:SetWidth(8)
right:SetHeight(20)
right:SetPoint("RIGHT", 0, 0)
right:SetTexture("Interface\\Common\\Common-Input-Border")
right:SetTexCoord(0.9375, 1, 0, 0.625)
 
local center = editbox:CreateTexture(nil, "BACKGROUND")
center:SetHeight(20)
center:SetPoint("RIGHT", right, "LEFT", 0, 0)
center:SetPoint("LEFT", left, "RIGHT", 0, 0)
center:SetTexture("Interface\\Common\\Common-Input-Border")
center:SetTexCoord(0.0625, 0.9375, 0, 0.625)
 
editbox:SetPoint("LEFT",button,"RIGHT",9,0)
editbox:SetScript("OnEnterPressed", function(self)
if InCombatLockdown() then
self:ClearFocus()
return
end
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"])
self:ClearFocus()
end)
editbox:SetScript("OnEscapePressed", function(self)
if InCombatLockdown() then
self:ClearFocus()
return
end
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"])
self:ClearFocus()
end)
editbox:SetScript("OnEditFocusGained", function(self)
if InCombatLockdown() then return end
if IsShiftKeyDown() and UnitExists("target") then
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = UnitName("target")
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"])
self:SetText(MyLittleButtonDB[GetActiveTalentGroup()]["target"])
self:ClearFocus()
else
self:HighlightText()
end
end)
 
frame:SetBackdrop(GameTooltip:GetBackdrop())
frame:SetBackdropColor(1,0,0,0.5)
frame:SetBackdropBorderColor(0,0,0,1)
frame:RegisterForDrag("LeftButton")
frame:SetMovable(true)
frame:EnableMouse(true)
frame:SetUserPlaced(true)
frame:SetClampedToScreen(true)
frame:SetScript("OnDragStart", function(self)
if not MyLittleButtonDB.lock then
self:StartMoving()
end
end)
frame:SetScript("OnDragStop", function(self)
self:StopMovingOrSizing()
MyLittleButtonDB.point, MyLittleButtonDB.x, MyLittleButtonDB.y = "BOTTOMLEFT", self:GetLeft(), self:GetBottom()
end)
frame:SetScript("OnDoubleClick", function(self)
if IsShiftKeyDown() then
MyLittleButtonDB.lock = not MyLittleButtonDB.lock
if MyLittleButtonDB.lock then
frame:SetBackdropColor(0,0,0,0.5)
else
frame:SetBackdropColor(1,0,0,0.5)
end
end
end)
 
local function onUpdate(self,elapsed)
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] then
if IsSpellInRange(MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == 1 or IsItemInRange(MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == 1 then
frame:SetBackdropBorderColor(0,1,0,1)
elseif string.lower(MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == string.lower(UnitName("player")) then
frame:SetBackdropBorderColor(1,1,0,1)
else
frame:SetBackdropBorderColor(1,0,0,1)
end
else
frame:SetBackdropBorderColor(1,1,1,1)
end
end
 
frame:SetScript("OnUpdate", onUpdate)
 
local function SetPosition()
frame:SetPoint("TOPLEFT",MyLittleButton,"TOPLEFT",-7,7)
frame:SetPoint("BOTTOMLEFT",MyLittleButton,"BOTTOMLEFT",-7,-7)
frame:SetPoint("RIGHT",MyLittleEditbox,"RIGHT",7,0)
local width = frame:GetWidth()
local height = frame:GetHeight()
frame:ClearAllPoints()
frame:SetPoint(MyLittleButtonDB.point and MyLittleButtonDB.point or "CENTER", MyLittleButtonDB.x and MyLittleButtonDB.x or UIParent, MyLittleButtonDB.y and MyLittleButtonDB.y or nil)
frame:SetWidth(width)
frame:SetHeight(height)
button:ClearAllPoints()
button:SetPoint("TOPLEFT",frame,"TOPLEFT",7,-7)
button:SetParent(frame)
editbox:SetParent(frame)
end
 
local function GetSpellData()
if not MyLittleButtonDB[GetActiveTalentGroup()] then MyLittleButtonDB[GetActiveTalentGroup()] = {} end
local texture = MyLittleButtonDB[GetActiveTalentGroup()]["texture"] and MyLittleButtonDB[GetActiveTalentGroup()]["texture"] or "Interface\\Icons\\INV_Misc_QuestionMark"
local type = MyLittleButtonDB[GetActiveTalentGroup()]["type"] and MyLittleButtonDB[GetActiveTalentGroup()]["type"] or nil
local spell = MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["spell"] or nil
local target = MyLittleButtonDB[GetActiveTalentGroup()]["target"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] or ""
return texture,type,spell,target
end
 
function frame:SPELL_UPDATE_COOLDOWN()
CheckCooldown()
end
 
function frame:PLAYER_TALENT_UPDATE()
local texture,type,spell,target = GetSpellData()
ChangeButtonAttributes(texture,type,spell,target)
CheckCooldown()
end
 
function frame:PLAYER_LOGIN()
if not MyLittleButtonDB then MyLittleButtonDB = {} end
if not MyLittleButtonDB[GetActiveTalentGroup()] then MyLittleButtonDB[GetActiveTalentGroup()] = {} end
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["texture"] then
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"])
end
editbox:SetText(MyLittleButtonDB[GetActiveTalentGroup()]["target"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] or "")
if MyLittleButtonDB.lock then
frame:SetBackdropColor(0,0,0,0.5)
else
frame:SetBackdropColor(1,0,0,0.5)
end
SetPosition()
frame:RegisterEvent("PLAYER_TALENT_UPDATE")
frame:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end
\ No newline at end of file