view modules/ReAction_HideBlizzard/ReAction_HideBlizzard.lua @ 28:21bcaf8215ff

- converted to Ace3 - rearranged file layout - configGUI menus not working right now
author Flick <flickerstreak@gmail.com>
date Mon, 17 Mar 2008 18:24:53 +0000
parents bf997ea151ca
children 0d95ce7a9ec2
line wrap: on
line source
--[[
  ReAction 'Hide Blizzard' module

  Hides Blizzard action bars. This hides the extra action bars, stance bar, pet bar, and 
  main menu bar, which in turn hides the experience bar, bag bar, micro menu bar, and lag meter.

--]]

-- local imports
local ReAction = ReAction
local L = ReAction.L
local _G = _G

-- module declaration
local moduleID = "HideBlizzard"
local module = ReAction:NewModule( moduleID )


-- module methods
function module:OnInitialize()
  self.db = ReAction.db:RegisterNamespace( moduleID,
    { 
      profile = {
        hide = false
      }
    }
  )
  self.db.RegisterCallback(self,"OnProfileChanged")

  self.hiddenFrame = CreateFrame("Frame")
  self.hiddenFrame:Hide()

  -- disable the buttons to hide/show the blizzard multiaction bars
  -- see UIOptionsFrame.lua and .xml
  -- This is called every time the options panel is shown, after it is set up
  local disabledOptionsButtons = {
    _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR1_TEXT"].index],
    _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR2_TEXT"].index],
    _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR3_TEXT"].index],
    _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR4_TEXT"].index],
    _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["ALWAYS_SHOW_MULTIBARS_TEXT"].index],
  }
  hooksecurefunc("UIOptionsFrame_Load",
    function()
      if self.db.profile.hide then
        for _, f in pairs(disabledOptionsButtons) do
          f.disabled = true
          OptionsFrame_DisableCheckBox(f)
        end
      end
    end
  )
end

function module:OnEnable()
  if self.db.profile.hide then
    self:HideAll(true)
  end
end

function module:OnDisable()
  self:ShowAll(true)
end

function module:OnProfileChanged()
  if self.db.profile.hide then
    module:HideAll(true)
  else
    module:ShowAll(true)
  end
end

local frames = {
  MainMenuBar,
  PetActionButton1,
  PetActionButton2,
  PetActionButton3,
  PetActionButton4,
  PetActionButton5,
  PetActionButton6,
  PetActionButton7,
  PetActionButton8,
  PetActionButton9,
  PetActionButton10,
  BonusActionBarFrame,
  ShapeshiftBarFrame,
  MultiBarLeft,
  MultiBarRight,
  MultiBarBottomLeft,
  MultiBarBottomRight,
  SlidingActionBarTexture0,
  SlidingActionBarTexture1,
}

local hidden = { }

function module:HideAll( force )
  if not(self.db.profile.hide) or force then
    self.db.profile.hide = true
    -- the pet bar is a child of MainMenuBar, but can't be permanently hidden because it will
    -- break automatic pet bar show/hide. Need to reparent it instead.
    PetActionBarFrame:SetParent(UIParent)
    -- for some odd reason PetActionBarFrame has mouse input enabled even though it has no mouse
    -- input handlers. Because of this it can potentially trap mouse clicks from getting through
    -- to things behind it. It's not feasible to move it, either, since UIParent_ManageFramePositions()
    -- will move it back to its original position whenever it's called.
    PetActionBarFrame:EnableMouse(false)

    for _, f in pairs(frames) do
      hidden[f] = hidden[f] or { parent = f:GetParent(), wasShown = f:IsShown() }
      f:SetParent(self.hiddenFrame)
      f:Hide()
    end
  end
end

function module:ShowAll( force )
  if self.db.profile.hide or force then
    self.db.profile.hide = false

    PetActionBarFrame:SetParent(MainMenuBar)
    for _, f in pairs(frames) do
      local h = hidden[f]
      if h then
        f:SetParent(h.parent)
        if h.wasShown then
          f:Show()
        end
      end
    end
  end
end

function module:IsHidden()
  return self.db.profile.hide
end

function module:SetHidden(h)
  if h then
    self:HideAll()
  else
    self:ShowAll()
  end
end

function module:GetGlobalOptions()
  if self.globalOptions == nil then
    self.globalOptions = {
      hideBlizzard = {
        type = "toggle",
        handler = self,
        name = L["Hide Default Action Bars"],
        desc = L["Hide the default main bar and extra action bars"],
        get  = "IsHidden",
        set  = "SetHidden",
        disabled = function() return InCombatLockdown() end
      }
    }
  end
  return self.globalOptions
end