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 |