WoWInterface SVN fernir_UI

[/] [actionbars.lua] - Rev 2

Compare with Previous | Blame | View Log

nMainbar = {
    MainMenuBar = {
        scale = 0.8,
        shortBar = true,
    },
    
    vehicle = {
        scale               = 1,
    },
    
    petbar = {
        mouseover           = false,
        scale               = 1,
        alpha               = 1,
    },
    
    possessbar = {
        scale               = 1,
        alpha               = 1,
    },
    
    stanceBar = {
        mouseover           = false,
        hide                = false,
        scale               = 1.3,
        alpha               = 1,
    },
    
    multiBarLeft = {
        mouseover           = true,
        alpha               = 1,
    },
    
    multiBarRight = {
        mouseover           = true,
        alpha               = 1,
    },
    
    multiBarBottomLeft = {
        mouseover           = false,
        alpha               = 1,
    },
    
    multiBarBottomRight = {
        mouseover           = false,
        alpha               = 1,
    },
    
    totemManager = {
        scale               = 1,
        alpha               = 1,
        hideRecallButton    = false,
    },
}

local bars = {
        "MainMenuBarArtFrame",
        "MultiBarBottomLeft",
        "MultiBarBottomRight",
        "MultiBarRight",
        "MultiBarLeft",
        "BonusActionBarFrame",
        "ShapeshiftBarFrame",
        "PossessBarFrame",
}

function clearTextures(frame)
        for i = 1, select('#', frame:GetRegions()) do
                local texture = select(i, frame:GetRegions())
                if (texture and texture:GetObjectType() == 'Texture') then
                        texture:Hide()
                end
        end
end

for i, v in ipairs(bars) do
        local bar = getglobal(v)
        bar:SetAttribute("unit2", "player")
end

local f = CreateFrame("frame","RightClickSelfCast",UIParent)
f:SetScript("OnEvent", function(self, event, ...) self[event](self, ...) end)

function f:PLAYER_LOGIN()

        self:UnregisterEvent("PLAYER_LOGIN")
        self.PLAYER_LOGIN = nil
        
        --this is for the mod ExtraBar (Author: Cowmonster)
        --http://www.wowinterface.com/downloads/info14492-ExtraBar.html
        for id=1, 12 do
                local button = getglobal("ExtraBarButton"..id)
                if button ~= nil then
                        button:SetAttribute("unit2", "player")
                end
        end

        --this is for the mod ExtraBars (Author: Alternator)
        --http://www.wowinterface.com/downloads/info13335-ExtraBars.html
        for id=1, 4 do
                local frame = getglobal("ExtraBar"..id)
                if frame ~= nil then
                        frame:SetAttribute("unit2", "player")
                        for bid=1, 12 do
                                local button = getglobal("ExtraBar"..id.."Button"..bid)
                                if button ~= nil then
                                        button:SetAttribute("unit2", "player")
                                end
                        end
                end
        end

end

if IsLoggedIn() then f:PLAYER_LOGIN() else f:RegisterEvent("PLAYER_LOGIN") end

if (nMainbar.MainMenuBar.shortBar) then

        MultiBarBottomLeft:ClearAllPoints()
        MultiBarBottomLeft:SetPoint('BOTTOMLEFT', ActionButton1, 'TOPLEFT', 0, 6)
        MultiBarBottomLeft.SetPoint = function() end

        MultiBarBottomRight:ClearAllPoints()
        MultiBarBottomRight:SetPoint('BOTTOM', MultiBarBottomLeft, 'TOP', 0, 4)
        MultiBarBottomRight.SetPoint = function() end


        function ShapeshiftBar_Update() 
                 ShapeshiftBar_UpdateState()
        end

        for _, frame in pairs({
                 'MultiBarRight',
                 'MultiBarBottomRight',
                 'ShapeshiftBarFrame',
                 'PossessBarFrame',
                 'MULTICASTACTIONBAR_YPOS',
                 'MultiCastActionBarFrame',
                 'PETACTIONBAR_YPOS',
        }) do
                 UIPARENT_MANAGED_FRAME_POSITIONS[frame] = nil
        end

        for _, frame in pairs({        
                 _G['PetActionBarFrame'],
                 _G['ShapeshiftBarFrame'],
                 _G['PossessBarFrame'],
                 _G['MultiCastActionBarFrame'],
        }) do
                 frame:SetMovable(true)
                 frame:SetUserPlaced(true)
                 frame:EnableMouse(false)
        end

                 -- -----------------------------------
                 -- make the new totemmanager moveable
                 -- -----------------------------------


        local f = CreateFrame('Frame', 'MultiCastActionBarFrameAnchor')
        f:RegisterEvent('PLAYER_ENTERING_WORLD')
        f:SetHeight(10)
        f:SetWidth(10)
        f:SetScript('OnEvent', function(self, event)
                 MultiCastActionBarFrame:ClearAllPoints()   
                 MultiCastActionBarFrame:SetPoint('CENTER', MultiCastActionBarFrameAnchor) 
                 MultiCastActionBarFrame.SetPoint = function() end
                 self:UnregisterAllEvents()
        end)

        for i = 1, 12 do
                 for _, button in pairs({        
                          _G['MultiCastActionButton'..i],
                          
                          _G['MultiCastSlotButton1'],
                          _G['MultiCastSlotButton2'],
                          _G['MultiCastSlotButton3'],
                          _G['MultiCastSlotButton4'],
                          
                          _G['MultiCastRecallSpellButton'],
                          _G['MultiCastSummonSpellButton'],
                 }) do
                          MultiCastActionBarFrameAnchor:ClearAllPoints()
                          MultiCastActionBarFrameAnchor:SetPoint('CENTER', UIParent)  
                                        
                          MultiCastActionBarFrameAnchor:SetMovable(true)
                          MultiCastActionBarFrameAnchor:SetUserPlaced(true)
                          
                          button:RegisterForDrag('LeftButton')

                          button:HookScript('OnDragStart', function()
                                        if (IsControlKeyDown()) then
                                                 MultiCastActionBarFrameAnchor:StartMoving() 
                                        end
                          end)

                          button:HookScript('OnDragStop', function() 
                                        MultiCastActionBarFrameAnchor:StopMovingOrSizing()
                          end)
                 end
        end

        for i = 1, 12 do
                 for _, button in pairs({        
                          _G['MultiCastActionButton'..i],
                          
                          _G['MultiCastSlotButton1'],
                          _G['MultiCastSlotButton2'],
                          _G['MultiCastSlotButton3'],
                          _G['MultiCastSlotButton4'],
                          _G['MultiCastRecallSpellButton'],
                          _G['MultiCastSummonSpellButton'],
                          
                          _G['MultiCastActionBarFrame'],
                 }) do
                          button:SetScale(nMainbar.totemManager.scale)
                          button:SetAlpha(nMainbar.totemManager.alpha)
                 end
        end

        MultiCastActionButton1:ClearAllPoints()   
        MultiCastActionButton1:SetPoint('CENTER', MultiCastSlotButton1) 

        MultiCastActionButton5:ClearAllPoints()   
        MultiCastActionButton5:SetPoint('CENTER', MultiCastSlotButton1) 

        MultiCastActionButton9:ClearAllPoints()   
        MultiCastActionButton9:SetPoint('CENTER', MultiCastSlotButton1) 

        hooksecurefunc('MultiCastFlyoutFrame_LoadSlotSpells', function(self, slot, ...)
                local numSpells = select('#', ...)
                if (numSpells == 0) then
                        return false
                end

                numSpells = numSpells + 1
                 
                 for i = 2, numSpells do
                          _G['MultiCastFlyoutButton'..i..'Icon']:SetTexCoord(0.1, 0.9, 0.1, 0.9)
                 end
        end)

        MultiCastFlyoutFrame:SetScale(nMainbar.totemManager.scale * 1.1)

        if (nMainbar.totemManager.hideRecallButton) then
                 MultiCastRecallSpellButton:SetAlpha(0)
                 MultiCastRecallSpellButton.SetAlpha = function() end
                 MultiCastRecallSpellButton:EnableMouse(false)
                 MultiCastRecallSpellButton.EnableMouse = function() end
        end

                 -- -----------------------------------
                 -- moveable bars
                 -- -----------------------------------
                 
        for _, button in pairs({        
                 _G['PossessButton1'],
                 _G['PetActionButton1'],
                 _G['ShapeshiftButton1'],
        }) do
                 button:ClearAllPoints()
                 button:SetPoint('CENTER', UIParent)
                 
                 button:SetMovable(true)
                 button:SetUserPlaced(true)
                 button:RegisterForDrag('LeftButton')
                 
                 button:HookScript('OnDragStart', function(self)
                          if (IsShiftKeyDown() and IsAltKeyDown()) then
                                        self:StartMoving() 
                          end
                 end)

                 button:HookScript('OnDragStop', function(self) 
                          self:StopMovingOrSizing()
                 end)
        end

        for _, button in pairs({
                 _G['ActionBarUpButton'],
                 _G['ActionBarDownButton'],
                 
                 _G['MainMenuBarBackpackButton'],
                 _G['KeyRingButton'],
                 
                 _G['CharacterBag0Slot'],
                 _G['CharacterBag1Slot'],
                 _G['CharacterBag2Slot'],
                 _G['CharacterBag3Slot'],
        }) do
                 button:SetAlpha(0)
                 button:EnableMouse(false)
        end

        local f = CreateFrame('Frame')
        f:Hide()

        for i = 2, 3 do
                 for _, texture in pairs({
                          _G['MainMenuBarTexture'..i],
                          _G['MainMenuMaxLevelBar'..i],
                          _G['MainMenuXPBarTexture'..i],
                          _G['ReputationWatchBarTexture'..i],
                          _G['ReputationXPBarTexture'..i],
                          
                          _G['MainMenuBarPageNumber'],

                          _G['SlidingActionBarTexture0'],
                          _G['SlidingActionBarTexture1'],
                          
                          _G['ShapeshiftBarLeft'],
                          _G['ShapeshiftBarMiddle'],
                          _G['ShapeshiftBarRight'],
                          
                          _G['PossessBackground1'],
                          _G['PossessBackground2'],
                          _G['MainMenuExpBar'],
                          _G["ReputationWatchBar"],
                          _G["VehicleMenuBarHealthBar"],
                          _G["VehicleMenuBarPowerBar"],
                 }) do
                          texture:SetParent(f)
                 end
        end

        for _, bar in pairs({
                 _G['MainMenuBar'],
                 _G['MainMenuExpBar'],
                 _G['MainMenuBarMaxLevelBar'],

                 _G['ReputationWatchStatusBar'],
                 _G['ReputationWatchBar'],
        }) do
                 bar:SetWidth(512)
        end
        
        for _, texture in pairs (
                {
                        _G["MainMenuBarTexture0"],
                        _G["MainMenuBarTexture1"],
                        _G["MainMenuBarTexture2"],
                        _G["MainMenuMaxLevelBar0"],
                        _G["MainMenuXPBarTexture0"],
                        _G["MainMenuXPBarTexture1"],
                        _G["MainMenuXPBarTexture2"],
                        _G["MainMenuXPBarTexture3"],
                        _G["MainMenuBarLeftEndCap"],
                        _G["MainMenuBarRightEndCap"],
                        _G["BonusActionBarTexture0"],
                        _G["BonusActionBarTexture1"],
                        _G["MainMenuMaxLevelBar0"],
                        _G["MainMenuMaxLevelBar1"],
                        _G["MainMenuMaxLevelBar2"],
                        _G["MainMenuMaxLevelBar3"],
                        _G["ExhaustionTickNormal"],
                        _G["ExhaustionTickHighlight"],
                        _G["ExhaustionLevelFillBar"],
                }
        ) do
                texture:Hide()
        end

        clearTextures(MainMenuBar)
        clearTextures(VehicleMenuBarArtFrame)

        CharacterMicroButton:ClearAllPoints()
        CharacterMicroButton:SetPoint('BOTTOMLEFT', 9000, 9000)

        SocialsMicroButton:ClearAllPoints()
        SocialsMicroButton:SetPoint('TOPLEFT', CharacterMicroButton, 'BOTTOMLEFT', 0, 20)
                          
                 hooksecurefunc('VehicleMenuBar_MoveMicroButtons', function()
                          if (not self) then
                                        CharacterMicroButton:ClearAllPoints()
                                        CharacterMicroButton:SetPoint('BOTTOMLEFT', 9000, 9000)
                          elseif (self == 'Mechanical') then
                                        CharacterMicroButton:ClearAllPoints()
                                        CharacterMicroButton:SetPoint('BOTTOMLEFT', VehicleMenuBar, 'BOTTOMRIGHT', -340, 41)
                          elseif (self == 'Natural') then
                                        CharacterMicroButton:ClearAllPoints()
                                        CharacterMicroButton:SetPoint('BOTTOMLEFT', VehicleMenuBar, 'BOTTOMRIGHT', -340, 41)
                          end
                 end) 
end


local function GetNumShapeSlots()
    local _, class = UnitClass('Player')
    if (class == 'DEATHKNIGHT' or class == 'WARRIOR') then
        return 3
    elseif (class == 'ROGUE') then
        return 1
    else
        return 10
    end
end
    
    -- if you move the bar you get some problems, so what can we make? We move the buttons!
do
    MultiBarRightButton1:ClearAllPoints()
    MultiBarRightButton1:SetPoint('TOPRIGHT', UIParent, 'RIGHT', -6, (MultiBarRight:GetHeight() / 2))

    MultiBarLeftButton1:ClearAllPoints() 
    MultiBarLeftButton1:SetPoint('TOPRIGHT', MultiBarRightButton1, 'TOPLEFT', -6, 0)
end

if (nMainbar.stanceBar.hide) then
    for i = 1, NUM_SHAPESHIFT_SLOTS do
        local button = _G['ShapeshiftButton'..i]
        button:SetAlpha(0)
        button.SetAlpha = function() end
        
        button:EnableMouse(false)
        button.EnableMouse = function() end
    end
end

local function EnableMouseOver(self, bar, min, max, alpha)
    local minAlpha = 0

    for i = min, max do
        local button = _G[self..i]
        
        local f = CreateFrame('Frame', bar, bar)
        f:RegisterEvent('PLAYER_LOGIN')
        f:SetFrameStrata('LOW')
        f:SetFrameLevel(1)
        f:EnableMouse()
        f:SetPoint('TOPLEFT', self..min, -5, 5)
        f:SetPoint('BOTTOMRIGHT', self..max, 5, 5)
        f:SetScript('OnEvent', function(self)
            bar:SetAlpha(minAlpha)
            self:UnregisterAllEvents()
        end)
        
        f:SetScript('OnEnter', function()
            bar:SetAlpha(alpha)
        end)
                    
        f:SetScript('OnLeave', function() 
            if (not MouseIsOver(button)) then
                bar:SetAlpha(minAlpha)
            end
        end)
    
        button:HookScript('OnEnter', function()
            bar:SetAlpha(alpha)
        end)
            
        button:HookScript('OnLeave', function() 
            if (not MouseIsOver(bar)) then
                bar:SetAlpha(minAlpha)
            end
        end)
    end
end

    
if (nMainbar.multiBarLeft.mouseover) then
    EnableMouseOver('MultiBarLeftButton', MultiBarLeft, 1, 12, nMainbar.multiBarLeft.alpha)
end

if (nMainbar.multiBarRight.mouseover) then
    EnableMouseOver('MultiBarRightButton', MultiBarRight, 1, 12, nMainbar.multiBarRight.alpha)
end

if (nMainbar.multiBarBottomLeft.mouseover) then
    EnableMouseOver('MultiBarBottomLeftButton', MultiBarBottomLeft, 1, 12, nMainbar.multiBarBottomLeft.alpha)
end

if (nMainbar.multiBarBottomRight.mouseover) then
    EnableMouseOver('MultiBarBottomRightButton', MultiBarBottomRight, 1, 12, nMainbar.multiBarBottomRight.alpha)
end

if (nMainbar.petbar.mouseover) then
    PetActionBarFrame:SetFrameStrata('HIGH')
    EnableMouseOver('PetActionButton', PetActionBarFrame, 1, 10, nMainbar.petbar.alpha)
end

if (nMainbar.stanceBar.mouseover) then
    ShapeshiftBarFrame:SetFrameStrata('HIGH')
    EnableMouseOver('ShapeshiftButton', ShapeshiftBarFrame, 1, GetNumShapeSlots(), nMainbar.stanceBar.alpha)
end

Compare with Previous | Blame