WoWInterface SVN Molinari

[/] [trunk/] [Molinari/] [Molinari.lua] - Rev 9

Go to most recent revision | Compare with Previous | Blame | View Log

--[[

 Copyright (c) 2009, Adrian L Lange
 All rights reserved.

 You're allowed to use this addon, free of monetary charge,
 but you are not allowed to modify, alter, or redistribute
 this addon without express, written permission of the author.

--]]

local milling, prospecting = GetSpellInfo(51005), GetSpellInfo(31252)
local macro = '/cast %s\n/use %s %s'

local button = CreateFrame('Button', 'Molinari', UIParent, 'SecureActionButtonTemplate AutoCastShineTemplate')
button:RegisterForClicks('LeftButtonUp')
button:RegisterEvent('MODIFIER_STATE_CHANGED')

-- multiply the size of the sparks for extra awesomeness
for k, v in next, button.sparkles do
        v:SetWidth(v:GetWidth() * 3)
        v:SetHeight(v:GetHeight() * 3)
end

local function tooltipHook(self)
        if(self:GetItem() and IsAltKeyDown() and not InCombatLockdown()) then
                local text = GameTooltipTextLeft2:GetText()

                if(text and (text == ITEM_MILLABLE or text == ITEM_PROSPECTABLE)) then
                        local scribe = text == ITEM_MILLABLE
                        local anchor = GetMouseFocus()

                        button:ClearAllPoints()
                        button:SetAttribute('macrotext', macro:format(scribe and milling or prospecting, anchor:GetParent():GetID(), anchor:GetID()))
                        button:SetAllPoints(anchor)
                        button:Show()

                        if(scribe) then
                                AutoCastShine_AutoCastStart(button, 0.5, 1, 0.5)
                        else
                                AutoCastShine_AutoCastStart(button, 1, 0.5, 0.5)
                        end
                end
        end
end

function button:MODIFIER_STATE_CHANGED(event, key)
        if((key == 'LALT' or key == 'RALT') and self:IsShown()) then
                if(InCombatLockdown()) then
                        self:RegisterEvent('PLAYER_REGEN_DISABLED')
                else
                        self:ClearAllPoints()
                        self:Hide()
                        AutoCastShine_AutoCastStop(self)
                end
        end
end

function button:PLAYER_REGEN_DISABLED(event)
        self:UnregisterEvent(event)

        self:ClearAllPoints()
        self:Hide()
        AutoCastShine_AutoCastStop(self)
end

button:SetAttribute('*type*', 'macro')
button:SetFrameStrata('DIALOG')
button:SetScript('OnLeave', function(self) self:Hide() end)
button:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)

GameTooltip:HookScript('OnTooltipSetItem', tooltipHook)

-- temporary fix for blizzard's bug with secure frames and anchoring on the ContainerFrame
hooksecurefunc('ContainerFrame_GenerateFrame', function(frame, size, id)
        if(size ~= 1 and id == 0) then
                ContainerFrame1Item1:SetPoint('BOTTOMRIGHT', ContainerFrame1, 'BOTTOMRIGHT', -12, 30)
        end
end)

Go to most recent revision | Compare with Previous | Blame