| 
flickerstreak@25
 | 
     1 --[[
 | 
| 
flickerstreak@25
 | 
     2   ReAction 'Hide Blizzard' module
 | 
| 
flickerstreak@25
 | 
     3 
 | 
| 
flickerstreak@25
 | 
     4   Hides Blizzard action bars. This hides the extra action bars, stance bar, pet bar, and 
 | 
| 
flickerstreak@25
 | 
     5   main menu bar, which in turn hides the experience bar, bag bar, micro menu bar, and lag meter.
 | 
| 
flickerstreak@25
 | 
     6 
 | 
| 
flickerstreak@25
 | 
     7 --]]
 | 
| 
flickerstreak@25
 | 
     8 
 | 
| 
flickerstreak@25
 | 
     9 -- local imports
 | 
| 
flickerstreak@25
 | 
    10 local ReAction = ReAction
 | 
| 
flickerstreak@25
 | 
    11 local L = ReAction.L
 | 
| 
flickerstreak@25
 | 
    12 local _G = _G
 | 
| 
flickerstreak@25
 | 
    13 
 | 
| 
flickerstreak@25
 | 
    14 -- module declaration
 | 
| 
flickerstreak@25
 | 
    15 local moduleID = "HideBlizzard"
 | 
| 
flickerstreak@25
 | 
    16 local module = ReAction:NewModule( moduleID )
 | 
| 
flickerstreak@25
 | 
    17 
 | 
| 
flickerstreak@25
 | 
    18 
 | 
| 
flickerstreak@25
 | 
    19 -- module methods
 | 
| 
flickerstreak@25
 | 
    20 function module:OnInitialize()
 | 
| 
flickerstreak@25
 | 
    21   self.db = ReAction:AcquireDBNamespace(moduleID)
 | 
| 
flickerstreak@25
 | 
    22   ReAction:RegisterDefaults(moduleID,"profile", 
 | 
| 
flickerstreak@25
 | 
    23     { 
 | 
| 
flickerstreak@25
 | 
    24       hide = false
 | 
| 
flickerstreak@25
 | 
    25     }
 | 
| 
flickerstreak@25
 | 
    26   )
 | 
| 
flickerstreak@25
 | 
    27 
 | 
| 
flickerstreak@25
 | 
    28   self.hiddenFrame = CreateFrame("Frame")
 | 
| 
flickerstreak@25
 | 
    29   self.hiddenFrame:Hide()
 | 
| 
flickerstreak@25
 | 
    30 
 | 
| 
flickerstreak@25
 | 
    31   -- disable the buttons to hide/show the blizzard multiaction bars
 | 
| 
flickerstreak@25
 | 
    32   -- see UIOptionsFrame.lua and .xml
 | 
| 
flickerstreak@25
 | 
    33   -- This is called every time the options panel is shown, after it is set up
 | 
| 
flickerstreak@25
 | 
    34   local disabledOptionsButtons = {
 | 
| 
flickerstreak@25
 | 
    35     _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR1_TEXT"].index],
 | 
| 
flickerstreak@25
 | 
    36     _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR2_TEXT"].index],
 | 
| 
flickerstreak@25
 | 
    37     _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR3_TEXT"].index],
 | 
| 
flickerstreak@25
 | 
    38     _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["SHOW_MULTIBAR4_TEXT"].index],
 | 
| 
flickerstreak@25
 | 
    39     _G["UIOptionsFrameCheckButton"..UIOptionsFrameCheckButtons["ALWAYS_SHOW_MULTIBARS_TEXT"].index],
 | 
| 
flickerstreak@25
 | 
    40   }
 | 
| 
flickerstreak@25
 | 
    41   hooksecurefunc("UIOptionsFrame_Load",
 | 
| 
flickerstreak@25
 | 
    42     function()
 | 
| 
flickerstreak@25
 | 
    43       if self.db.profile.hide then
 | 
| 
flickerstreak@25
 | 
    44         for _, f in pairs(disabledOptionsButtons) do
 | 
| 
flickerstreak@25
 | 
    45           f.disabled = true
 | 
| 
flickerstreak@25
 | 
    46           OptionsFrame_DisableCheckBox(f)
 | 
| 
flickerstreak@25
 | 
    47         end
 | 
| 
flickerstreak@25
 | 
    48       end
 | 
| 
flickerstreak@25
 | 
    49     end
 | 
| 
flickerstreak@25
 | 
    50   )
 | 
| 
flickerstreak@25
 | 
    51 end
 | 
| 
flickerstreak@25
 | 
    52 
 | 
| 
flickerstreak@25
 | 
    53 function module:OnEnable()
 | 
| 
flickerstreak@25
 | 
    54   if self.db.profile.hide then
 | 
| 
flickerstreak@25
 | 
    55     self:HideAll(true)
 | 
| 
flickerstreak@25
 | 
    56   end
 | 
| 
flickerstreak@25
 | 
    57 end
 | 
| 
flickerstreak@25
 | 
    58 
 | 
| 
flickerstreak@25
 | 
    59 function module:OnDisable()
 | 
| 
flickerstreak@25
 | 
    60   self:ShowAll(true)
 | 
| 
flickerstreak@25
 | 
    61 end
 | 
| 
flickerstreak@25
 | 
    62 
 | 
| 
flickerstreak@25
 | 
    63 function module:OnProfileEnable()
 | 
| 
flickerstreak@25
 | 
    64   if self.db.profile.hide then
 | 
| 
flickerstreak@25
 | 
    65     self:HideAll(true)
 | 
| 
flickerstreak@25
 | 
    66   else
 | 
| 
flickerstreak@25
 | 
    67     self:ShowAll(true)
 | 
| 
flickerstreak@25
 | 
    68   end
 | 
| 
flickerstreak@25
 | 
    69 end
 | 
| 
flickerstreak@25
 | 
    70 
 | 
| 
flickerstreak@25
 | 
    71 
 | 
| 
flickerstreak@25
 | 
    72 local frames = {
 | 
| 
flickerstreak@25
 | 
    73   MainMenuBar,
 | 
| 
flickerstreak@25
 | 
    74   PetActionButton1,
 | 
| 
flickerstreak@25
 | 
    75   PetActionButton2,
 | 
| 
flickerstreak@25
 | 
    76   PetActionButton3,
 | 
| 
flickerstreak@25
 | 
    77   PetActionButton4,
 | 
| 
flickerstreak@25
 | 
    78   PetActionButton5,
 | 
| 
flickerstreak@25
 | 
    79   PetActionButton6,
 | 
| 
flickerstreak@25
 | 
    80   PetActionButton7,
 | 
| 
flickerstreak@25
 | 
    81   PetActionButton8,
 | 
| 
flickerstreak@25
 | 
    82   PetActionButton9,
 | 
| 
flickerstreak@25
 | 
    83   PetActionButton10,
 | 
| 
flickerstreak@25
 | 
    84   BonusActionBarFrame,
 | 
| 
flickerstreak@25
 | 
    85   ShapeshiftBarFrame,
 | 
| 
flickerstreak@25
 | 
    86   MultiBarLeft,
 | 
| 
flickerstreak@25
 | 
    87   MultiBarRight,
 | 
| 
flickerstreak@25
 | 
    88   MultiBarBottomLeft,
 | 
| 
flickerstreak@25
 | 
    89   MultiBarBottomRight,
 | 
| 
flickerstreak@25
 | 
    90   SlidingActionBarTexture0,
 | 
| 
flickerstreak@25
 | 
    91   SlidingActionBarTexture1,
 | 
| 
flickerstreak@25
 | 
    92 }
 | 
| 
flickerstreak@25
 | 
    93 
 | 
| 
flickerstreak@25
 | 
    94 local hidden = { }
 | 
| 
flickerstreak@25
 | 
    95 
 | 
| 
flickerstreak@25
 | 
    96 function module:HideAll( force )
 | 
| 
flickerstreak@25
 | 
    97   if not(self.db.profile.hide) or force then
 | 
| 
flickerstreak@25
 | 
    98     self.db.profile.hide = true
 | 
| 
flickerstreak@25
 | 
    99     -- the pet bar is a child of MainMenuBar, but can't be permanently hidden because it will
 | 
| 
flickerstreak@25
 | 
   100     -- break automatic pet bar show/hide. Need to reparent it instead.
 | 
| 
flickerstreak@25
 | 
   101     PetActionBarFrame:SetParent(UIParent)
 | 
| 
flickerstreak@25
 | 
   102     -- for some odd reason PetActionBarFrame has mouse input enabled even though it has no mouse
 | 
| 
flickerstreak@25
 | 
   103     -- input handlers. Because of this it can potentially trap mouse clicks from getting through
 | 
| 
flickerstreak@25
 | 
   104     -- to things behind it. It's not feasible to move it, either, since UIParent_ManageFramePositions()
 | 
| 
flickerstreak@25
 | 
   105     -- will move it back to its original position whenever it's called.
 | 
| 
flickerstreak@25
 | 
   106     PetActionBarFrame:EnableMouse(false)
 | 
| 
flickerstreak@25
 | 
   107 
 | 
| 
flickerstreak@25
 | 
   108     for _, f in pairs(frames) do
 | 
| 
flickerstreak@25
 | 
   109       hidden[f] = hidden[f] or { parent = f:GetParent(), wasShown = f:IsShown() }
 | 
| 
flickerstreak@25
 | 
   110       f:SetParent(self.hiddenFrame)
 | 
| 
flickerstreak@25
 | 
   111       f:Hide()
 | 
| 
flickerstreak@25
 | 
   112     end
 | 
| 
flickerstreak@25
 | 
   113   end
 | 
| 
flickerstreak@25
 | 
   114 end
 | 
| 
flickerstreak@25
 | 
   115 
 | 
| 
flickerstreak@25
 | 
   116 function module:ShowAll( force )
 | 
| 
flickerstreak@25
 | 
   117   if self.db.profile.hide or force then
 | 
| 
flickerstreak@25
 | 
   118     self.db.profile.hide = false
 | 
| 
flickerstreak@25
 | 
   119 
 | 
| 
flickerstreak@25
 | 
   120     PetActionBarFrame:SetParent(MainMenuBar)
 | 
| 
flickerstreak@25
 | 
   121     for _, f in pairs(frames) do
 | 
| 
flickerstreak@25
 | 
   122       local h = hidden[f]
 | 
| 
flickerstreak@25
 | 
   123       if h then
 | 
| 
flickerstreak@25
 | 
   124         f:SetParent(h.parent)
 | 
| 
flickerstreak@25
 | 
   125         if h.wasShown then
 | 
| 
flickerstreak@25
 | 
   126           f:Show()
 | 
| 
flickerstreak@25
 | 
   127         end
 | 
| 
flickerstreak@25
 | 
   128       end
 | 
| 
flickerstreak@25
 | 
   129     end
 | 
| 
flickerstreak@25
 | 
   130   end
 | 
| 
flickerstreak@25
 | 
   131 end
 | 
| 
flickerstreak@25
 | 
   132 
 | 
| 
flickerstreak@25
 | 
   133 function module:IsHidden()
 | 
| 
flickerstreak@25
 | 
   134   return self.db.profile.hide
 | 
| 
flickerstreak@25
 | 
   135 end
 | 
| 
flickerstreak@25
 | 
   136 
 | 
| 
flickerstreak@25
 | 
   137 function module:SetHidden(h)
 | 
| 
flickerstreak@25
 | 
   138   if h then
 | 
| 
flickerstreak@25
 | 
   139     self:HideAll()
 | 
| 
flickerstreak@25
 | 
   140   else
 | 
| 
flickerstreak@25
 | 
   141     self:ShowAll()
 | 
| 
flickerstreak@25
 | 
   142   end
 | 
| 
flickerstreak@25
 | 
   143 end
 | 
| 
flickerstreak@25
 | 
   144 
 | 
| 
flickerstreak@25
 | 
   145 function module:GetGlobalOptions()
 | 
| 
flickerstreak@25
 | 
   146   if self.globalOptions == nil then
 | 
| 
flickerstreak@25
 | 
   147     self.globalOptions = {
 | 
| 
flickerstreak@25
 | 
   148       hideBlizzard = {
 | 
| 
flickerstreak@25
 | 
   149         type = "toggle",
 | 
| 
flickerstreak@25
 | 
   150         handler = self,
 | 
| 
flickerstreak@25
 | 
   151         name = L["Hide Default Action Bars"],
 | 
| 
flickerstreak@25
 | 
   152         desc = L["Hide the default main bar and extra action bars"],
 | 
| 
flickerstreak@25
 | 
   153         get  = "IsHidden",
 | 
| 
flickerstreak@25
 | 
   154         set  = "SetHidden",
 | 
| 
flickerstreak@25
 | 
   155         disabled = function() return InCombatLockdown() end
 | 
| 
flickerstreak@25
 | 
   156       }
 | 
| 
flickerstreak@25
 | 
   157     }
 | 
| 
flickerstreak@25
 | 
   158   end
 | 
| 
flickerstreak@25
 | 
   159   return self.globalOptions
 | 
| 
flickerstreak@25
 | 
   160 end
 |