vanilla-wow-addons – Rev 1
?pathlinks?
--[[
-------------------
- Madorin's -
-Bag Status Meters-
- v1.3.7 -
-------------------
Author: Romualdo
Original Author: Kevin "Madorin" Hassett
Last Updated: October 15, 2005
-Patch Notes-
v1.3.7 (10/15/2005)
-TOC updated to 1800
-Fixed errors with 1800
-Fixed bug with quiver
v1.3.6 (4/04/2005):
-TOC updated to 4297
-Added support for myAddOns AddOn arrangement (separate AddOn)
v1.3.5.1 (3/03/2005):
-Fixed a bug where any bag after an ammo bag or empty slot would not be checked
v1.3.5 (2/26/2005):
-TOC updated to 4216
-Added an option to hide the background and meter on the Overall Meter
v1.3.4 (2/17/2005):
-Merged all localizations
-TOC updated to 4211
-Added German Description
v1.3.3 (2/04/2005):
-Changed some variables from local to global for dependency possibilities.
-Fixed a quest reward ammo bag, "Bandolier of the Watch", to not show up as inventory.
-Put in bank bag labels.
-Set the Overall and Dropdown frame level to LOW.
-Commented Code.
v1.3.2 (1/24/2005):
-Fixed layering issues with overlay bars/labels.
-Replaced the command system with a GUI for more customizability.
-To access GUI, just type "/bsm" with anything or nothing following it.
-Added a key binding for BSM Options Pane.
-Added a UI button for the BSM Options Pane.
-Changed binding labels to buttons that toggle corresponding bag.
-Added an option to lock the overall meter.
-Added an option to place the overall meter at a specified location.
v1.3.1 (1/8/2005):
-Added "/bsm color" to toggle colors on/off.
-Added "/bsm totals" to toggle displaying the totals.
-Added "/bsm slots" to toggle using either free or used slots for display.
-Added "/bsm title" to toggle displaying the title on the overall meter.
-Added "/bsm notify" to toggle displaying notifications.
-Fixed "Inventory Full" notification to "Backpack Full".
-Fixed overall frame obstruction.
-Added notification when settings have changed.
-Changed color function to the one contributed by Azam.
-Added a brief readme.
v1.3 (1/5/2005):
-Fixed the small bug with ammo bags counting as inventory.
-Added alternative to use only text for displaying bag status ("/bsm none").
-Added alternative to use a dropdown frame for displaying bag status ("/bsm none").
-Added "/bsm help".
-Added ability to toggle hiding of labels ("/bsm labels").
-Added saved variables.
-Added notification when a bag becomes full.
-Huge XML overhaul.
v1.2 (1/2/2005):
-Fixed a layer problem where the meters showed up over the map frame.
-Added "/bsm hide" and "/bsm show" to hide or show the overall bag meter.
-Minor tweak to the % at which the meters turn yellow.
v1.1 (1/1/2005):
-Optimization help from Vjeux.
-Fixed a bug where a bag dragged into the bag bar from a non-inventory bag would not update.
-Added the missing line of XML to make it draggable.
Special Thanks: Vjeux for v1.1 LUA and XML optimization
Azam for contributing an improved color function
kiki for the french localization
SirPennt for the german localization
SoNeX for the german description
]]
--BSM_NumSlots: global variable that holds the total number of slots per bag
BSM_NumSlots = {0, 0, 0, 0, 0};
--BSM_UsedSlots: global variable that holds the number of used slots per bag
BSM_UsedSlots = {0, 0, 0, 0, 0};
--BSM_BagFull: global variable used for displaying notifications only once
BSM_BagFull = {false, false, false, false, false};
BSM_LOADED = false;
--Variables for UI Objects
BSM_FRAME = "BSM_Frame";
BSM_DROPDOWNS = "BSM_Dropdowns";
BSM_DROPDOWNS_BARS = "BSM_DropdownsBars";
BSM_BARS = "BSM_Bars";
BSM_COODLOWNS = "BSM_Cooldowns";
BSM_BARS_LABELS = "BSM_BarLabels";
BSM_DROPDOWNS_LABELS = "BSM_DropdownLabels";
BSM_BANK = "BSM_BankBag";
--Variables for the type of slot used to keep count
BSM_SLOTS_FREE = 0;
BSM_SLOTS_TAKEN = 1;
--BSM_SavePosition:
-- Purpose - Save the position of the Overall Meter frame
-- Parameters - None
-- Returns - Nothing
function BSM_SavePosition()
BSM_Save.dispX = this:GetLeft();
BSM_Save.dispY = this:GetBottom();
end
--BSM_DisableAllIndividual:
-- Purpose - Hide all the individual meters components
-- Parameters - None
-- Returns - Nothing
function BSM_DisableAllIndividual()
getglobal(BSM_BARS_LABELS):Hide();
getglobal(BSM_BARS):Hide();
getglobal(BSM_DROPDOWNS):Hide();
getglobal(BSM_DROPDOWNS_LABELS):Hide();
end
--BSM_EnableAllIndividual:
-- Purpose - Show all the individual meters components that need to be
-- Parameters - None
-- Returns - Nothing
function BSM_EnableAllIndividual()
if BSM_Save.I.bars and BSM_Save.I.overlay then
getglobal(BSM_BARS):Show();
end
if BSM_Save.I.showlabels and (BSM_Save.I.bars or BSM_Save.I.labels) and BSM_Save.I.overlay then
getglobal(BSM_BARS_LABELS):Show();
end
if BSM_Save.I.dropdowns then
getglobal(BSM_DROPDOWNS):Show();
if BSM_Save.I.showlabels then
getglobal(BSM_DROPDOWNS_LABELS):Show();
end
end
end
--BSM_command:
-- Purpose - Show the Options frame for any "/bsm" command
-- Parameters - the message following "/bsm "
-- Returns - Nothing
local function BSM_command(msg)
msg = string.lower(msg);
if not getglobal("BSM_Options"):IsVisible() then
getglobal("BSM_Options"):Show();
else
getglobal("BSM_Options"):Hide();
end
end
--BSM_initCommands:
-- Purpose - Register the "/bsm" slash command
-- Parameters - None
-- Returns - Nothing
function BSM_initCommands()
SlashCmdList["BSMCOMMAND"] = BSM_command;
SLASH_BSMCOMMAND1 = "/bsm";
end
--BSM_loadVariables:
-- Purpose - Initialize the save vairiables if they don't exist and hide/show appropriate things
-- Parameters - None
-- Returns - Nothing
function BSM_loadVariables()
--Register with myAddOns
if(myAddOnsFrame) then
myAddOnsList.BagStatusMeters = {name = "Bag Status Meters",
description = "Use bar/text overlays for bag status",
version = BSM_VERSION,
category = MYADDONS_CATEGORY_INVENTORY,
frame = BSM_FRAME,
optionsframe = "BSM_Options"};
end
--If any of the key save elements does not exist, create a new save
if not BSM_Save or not BSM_Save.I or not BSM_Save.O then
--BSM_Save: the saved variable for everything
BSM_Save = { };
--BSM_Save.I: the saved variables used for individual meters
BSM_Save.I = { };
--BSM_Save.O: the saved variables used for the overall meter
BSM_Save.O = { };
--BSM_Save.I.enable: enables/disables all of the individual meters
BSM_Save.I.enable = true;
--BSM_Save.I.overlay: enables/disables the individual meters displayed over the bag slots
BSM_Save.I.overlay = true;
--BSM_Save.I.bars: set the display mode for the overlay meters to include the bar
BSM_Save.I.bars = true;
--BSM_Save.I.bars: set the display mode for the overlay meters to only text
BSM_Save.I.labels = false;
--BSM_Save.I.dropdowns: enables/disables the dropdown meters from the overall meter
BSM_Save.I.dropdowns = false;
--BSM_Save.I.bindings: enables/disables the binding buttons next to the dropdown meters that open the bags
BSM_Save.I.bindings = true;
--BSM_Save.I.showlabels: enables/disables the use of any labels on the individual meters
BSM_Save.I.showlabels = true;
--BSM_Save.I.color: enables/disables color changing of the individual bars
BSM_Save.I.color = true;
--BSM_Save.I.totals: enables/disables displaying the total slots on the labels
BSM_Save.I.totals = true;
--BSM_Save.I.slots: determines whether to use free or used slots in the labels
BSM_Save.I.slots = BSM_SLOTS_FREE;
--BSM_Save.O.enable: enables/disables the entire overall meter
BSM_Save.O.enable = true;
--BSM_Save.O.title: enables/disables displaying the title over the overall meter
BSM_Save.O.title = true;
--BSM_Save.O.back: hides/shows the background and meter for the overall meter so there's only text
BSM_Save.O.back = true;
--BSM_Save.O.showlabels: enables/disables the use of the label on the overall meter
BSM_Save.O.showlabels = true;
--BSM_Save.O.color: enables/disables color changing of the overall bar
BSM_Save.O.color = true;
--BSM_Save.O.totals: enables/disables displaying the total slots on the label
BSM_Save.O.totals = true;
--BSM_Save.O.slots: determines whether to use free or used slots in the overall label
BSM_Save.O.slots = BSM_SLOTS_USED;
--BSM_Save.O.lock: locks/unlocks the overall meter from dragging
BSM_Save.O.lock = false;
--BSM_Save.dispX/dispY: the position of the overall meter relative to the bottom left of the screen
BSM_Save.dispX = GetScreenWidth()/2 + 150;
BSM_Save.dispY = 50;
--BSM_Save.notify: enables/disables notifications when bags are full
BSM_Save.notify = true;
--BSM_Save.optbutton: enables/disables displaying the options button next to the overall meter
BSM_Save.optbutton = true;
end
BSM_DisableAllIndividual();
if BSM_Save.I.enable then
BSM_EnableAllIndividual();
end
if not BSM_Save.I.bindings then
for i = 0, 4, 1 do
getglobal(BSM_DROPDOWNS..i.."Key"):Hide();
end
else
end
if not BSM_Save.O.enable then
getglobal(BSM_FRAME):Hide();
end
if not BSM_Save.O.showlabels then
getglobal("BSM_FrameText"):Hide();
end
if not BSM_Save.O.title then
getglobal("BSM_FrameButtonLabel"):Hide();
end
if not BSM_Save.optbutton then
getglobal("BSM_OptionsButton"):Hide();
end
if not BSM_Save.O.back then
getglobal(BSM_FRAME.."BackAlpha"):Hide();
getglobal(BSM_FRAME.."Border"):Hide();
BSM_FrameStatus:Hide();
end
--Set the position of the Overall Meter frame relative to the bottom left of the screen
getglobal(BSM_FRAME):ClearAllPoints();
getglobal(BSM_FRAME):SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", BSM_Save.dispX, BSM_Save.dispY);
BSM_LOADED = true;
BSM_updateFreeSlots();
end
--BSM_updateFreeSlots:
-- Purpose - Update the BSM_NumSlots and BSM_UsedSlots to accurately reflect the inventory
-- Also updates all meters that need to be updated
-- Parameters - None
-- Returns - Nothing
function BSM_updateFreeSlots()
--totalSlots: the number of slots in all bags
local totalSlots = 0;
--totalUsedSlots: the number of used slots in all bags
local totalUsedSlots = 0;
--slotsText: the text that is to be displayed on the meter labels
local slotsText = 0;
--isAmmo: true if the current bag is one of the recognized ammo bags
local isAmmo = false;
--Loop through for every bag
for bag = 0, 4, 1 do
--Save the number of total slots in the current bag to the global variable
BSM_NumSlots[bag+1] = GetContainerNumSlots(bag);
isAmmo = false;
--Check if the current bag is an ammo bag or can't get the bag name
if ( not GetBagName(bag) ) then
isAmmo = true;
else
for i = 1, table.getn( BSM_AMMO ), 1 do
if ( string.find( GetBagName(bag), BSM_AMMO[i] ) ) then
isAmmo = true;
break;
end
end
end
--If there is no bag in the current bag slot or it is an ammo bag, hide all of its meters and don't count it in the total
if (BSM_NumSlots[bag+1] == 0 or isAmmo) then
getglobal(BSM_BARS..bag):Hide();
getglobal(BSM_BARS_LABELS..bag):Hide();
getglobal(BSM_DROPDOWNS..bag):Hide();
getglobal(BSM_DROPDOWNS_LABELS..bag):Hide();
getglobal(BSM_DROPDOWNS_BARS..bag):Hide();
BSM_BagFull[bag+1] = false;
else
totalSlots = totalSlots + BSM_NumSlots[bag+1];
--Reset the used slots global variable and
--loop through every slot in the current bag and
--increment the variable if an item exists
BSM_UsedSlots[bag+1] = 0;
for slot = 1, BSM_NumSlots[bag+1], 1 do
if (GetContainerItemInfo(bag, slot)) then
BSM_UsedSlots[bag+1] = BSM_UsedSlots[bag+1] + 1;
totalUsedSlots = totalUsedSlots + 1;
end
end
--If free slots are used in the individual labels, subtract the used slots from the free slots and
--use that number in the slots text instead of used slots
if BSM_Save.I.slots == BSM_SLOTS_FREE then
slotsText = BSM_NumSlots[bag+1] - BSM_UsedSlots[bag+1];
else
slotsText = BSM_UsedSlots[bag+1];
end
--If the totals are shown in the individual labels, concatenate it onto the end of the text
if BSM_Save.I.totals then
slotsText = slotsText.."/"..BSM_NumSlots[bag+1];
end
--Show the current bag text and reset the text color
getglobal(BSM_BARS_LABELS..bag):Show();
getglobal(BSM_BARS_LABELS..bag):SetText(slotsText);
getglobal(BSM_BARS_LABELS..bag):SetTextColor(1.0, 1.0, 1.0, 1.0);
getglobal(BSM_DROPDOWNS_LABELS..bag):Show();
getglobal(BSM_DROPDOWNS_LABELS..bag):SetText(slotsText);
--status: a temporary variable to hold the current meter being updated
local status;
--If the bars are shown and the overlay is enabled, update the meter/label over the current bag
if BSM_Save.I.bars and BSM_Save.I.overlay then
--Set status to the meter that is over the current bag
status = getglobal(BSM_BARS..bag);
--Set the meter's min, max, and current values accordingly
status:SetMinMaxValues(0, BSM_NumSlots[bag+1]);
status:SetValue(BSM_UsedSlots[bag+1]);
--If color is enabled, color the bar according to the ratio of used slots to total slots
--Otherwise make it a gray color
if BSM_Save.I.color then
status:SetStatusBarColor(BSM_GetColor(BSM_NumSlots[bag+1] - BSM_UsedSlots[bag+1], BSM_NumSlots[bag+1], 0.6));
else
status:SetStatusBarColor(0.5, 0.5, 0.5, 0.6);
end
status:Show();
end
--If the overlay display is set to just labels and the overlay is enabled, update only the label
if BSM_Save.I.labels and BSM_Save.I.overlay then
--If color is disabled or the bag is less than half full, keep the label white
--Otherwise color the label according to the ratio of used slots to total slots
if not BSM_Save.I.color then
getglobal(BSM_BARS_LABELS..bag):SetTextColor(1.0, 1.0, 1.0, 1.0);
elseif BSM_UsedSlots[bag+1] / BSM_NumSlots[bag+1] >= 0.5 then
getglobal(BSM_BARS_LABELS..bag):SetTextColor(BSM_GetColor(BSM_NumSlots[bag+1] - BSM_UsedSlots[bag+1], BSM_NumSlots[bag+1], 1.0));
else
getglobal(BSM_BARS_LABELS..bag):SetTextColor(1.0, 1.0, 1.0, 1.0);
end
end
--If the dropdown meters are enabled, update them
if BSM_Save.I.dropdowns then
--Set status to the dropdown meter that is for the current bag
status = getglobal(BSM_DROPDOWNS_BARS..bag);
--Set the meter's min, max, and current values accordingly
status:SetMinMaxValues(0, BSM_NumSlots[bag+1]);
status:SetValue(BSM_UsedSlots[bag+1]);
--If color is enabled, color the bar according to the ratio of used slots to total slots
--Otherwise make it a gray color
if BSM_Save.I.color then
status:SetStatusBarColor(BSM_GetColor(BSM_NumSlots[bag+1] - BSM_UsedSlots[bag+1], BSM_NumSlots[bag+1], 1.0));
else
status:SetStatusBarColor(0.5, 0.5, 0.5, 1.0);
end
status:Show();
getglobal(BSM_DROPDOWNS..bag):Show()
end
--If the current bag is full and notifications are enabled, check if a notification should be given
if BSM_UsedSlots[bag+1] == BSM_NumSlots[bag+1] and BSM_Save.notify then
--If the bag was not full last check, give a notification and
--set the full bag variable to true
--Otherwise keep the full bag variable false
if not BSM_BagFull[bag+1] then
if bag == 0 then
UIErrorsFrame:AddMessage(BSM_BACKPACK..BSM_FULL, 1.0, 0.1, 1.0, 1.0, UIERRORS_HOLD_TIME);
DEFAULT_CHAT_FRAME:AddMessage(BSM_MSG.."|cffff0fff"..BSM_BACKPACK..BSM_FULL.."|r");
else
UIErrorsFrame:AddMessage(BSM_BAG..bag..BSM_FULL, 1.0, 0.1, 1.0, 1.0, UIERRORS_HOLD_TIME);
DEFAULT_CHAT_FRAME:AddMessage(BSM_MSG.."|cffff0fff"..BSM_BAG..bag..BSM_FULL.."|r");
end
BSM_BagFull[bag+1] = true;
end
else
BSM_BagFull[bag+1] = false;
end
end
end
--Update the bindings for all of the dropdown meter buttons
getglobal(BSM_DROPDOWNS.."0Key"):SetText(GetBindingText(GetBindingKey("TOGGLEBACKPACK"), "KEY_"));
getglobal(BSM_DROPDOWNS.."4Key"):SetText(GetBindingText(GetBindingKey("TOGGLEBAG1"), "KEY_"));
getglobal(BSM_DROPDOWNS.."3Key"):SetText(GetBindingText(GetBindingKey("TOGGLEBAG2"), "KEY_"));
getglobal(BSM_DROPDOWNS.."2Key"):SetText(GetBindingText(GetBindingKey("TOGGLEBAG3"), "KEY_"));
getglobal(BSM_DROPDOWNS.."1Key"):SetText(GetBindingText(GetBindingKey("TOGGLEBAG4"), "KEY_"));
--If the overall meter is disabled, then everything else can be ignored
if not BSM_Save.O.enable then return; end
--totalFreeSlots: free slots in all of the bags
local totalFreeSlots = totalSlots - totalUsedSlots;
--If free slots are used in the overall label, use that number in the slots text instead of used slots
if BSM_Save.O.slots == BSM_SLOTS_FREE then
slotsText = totalFreeSlots;
else
slotsText = totalUsedSlots;
end
--If the totals are shown in the overall label, concatenate it onto the end of the text
if BSM_Save.O.totals then
slotsText = slotsText.."/"..totalSlots;
end
--Update the text and
--min, max, and current values of the overall bar
BSM_FrameText:SetText(slotsText);
BSM_FrameStatus:SetMinMaxValues(0, totalSlots);
BSM_FrameStatus:SetValue(totalUsedSlots);
--If color is enabled, color the bar according to the ratio of used slots to total slots
--Otherwise make it a gray color
if BSM_Save.O.color then
BSM_FrameStatus:SetStatusBarColor(BSM_GetColor(totalFreeSlots, totalSlots, 1.0));
else
BSM_FrameStatus:SetStatusBarColor(0.5, 0.5, 0.5, 1.0);
end
--Update the bank bars if the Bank frame is open
--[[if getglobal("BSM_Bank_Bars"):IsVisible() then
BSM_updateBankBags();
end]]
end
--BSM_GetColor:
-- Purpose - Get the appropriate color for the bar being updated
-- Parameters - freeSlots: free slots in the bag
-- totalSlots: number of slots in the bag
-- alpha: desired opacity of the color
-- Returns - Color for the bar (red, green, blue, alpha)
function BSM_GetColor(freeSlots, totalSlots, alpha)
local pct = freeSlots / totalSlots;
local r, g;
r = 1.0;
g = 1.0;
if pct < 0.5 then
--r = 1.0;
g = pct * 2;
elseif pct > 0.5 then
r = 1.0 - (pct-0.5) * 2;
--g = 1.0;
--elseif pct == 0.5 then
--Do nothing, both already 1.0
end
return r, g, 0.0, alpha;
end
--BSM_updateBankBags:
-- Purpose - Update the bank bars when the bank frame is open
-- Parameters - None
-- Returns - Nothing
function BSM_updateBankBags()
--num: number of slots in the current bank bag
local num = 0;
--used: number of used slots in the current bank bag
local used = 0;
--slotsText: the text that is to be displayed on the meter labels
local slotsText = 0;
--status: the current bar being updated
local status;
--Loop through for every bank bag
for bag = 5, 10, 1 do
--set status to the current bar and get the number of slots in the current bank bag
status = getglobal(BSM_BANK..(bag-4));
num = GetContainerNumSlots(bag);
--if there is no bag in the current bank bag slot, then hide the bar
if num == 0 then
status:Hide();
else
--Reset the used slots and
--loop through every slot in the current bank bag and
--increment the variable if an item exists
used = 0;
for slot = 1, num, 1 do
if GetContainerItemInfo(bag, slot) then
used = used + 1;
end
end
--[[--bar: the bar to the current bank bag
local bar = getglobal(status:GetName().."Bar");
--Set the meter's min, max, and current values accordingly
bar:SetMinMaxValues(0, num);
bar:SetValue(used);
--If color is enabled, color the bar according to the ratio of used slots to total slots
--Otherwise make it a gray color
if BSM_Save.I.color then
bar:SetStatusBarColor(BSM_GetColor(num - used, num, 0.6));
else
bar:SetStatusBarColor(0.5, 0.5, 0.5, 0.6);
end]]
if BSM_Save.I.slots == BSM_SLOTS_FREE then
slotsText = num - used;
else
slotsText = used;
end
if BSM_Save.I.totals then
slotsText = slotsText.."/"..num;
end
status:Show();
getglobal(status:GetName().."Label"):SetText(slotsText);
end
end
end
--BSM_DividerOnShow:
-- Purpose - Set the text of a header depending on its name
-- Parameters - h: the header that's being shown
-- Returns - Nothing
function BSM_DividerOnShow(h)
local name = h:GetName();
if name == "BSM_Divider_Individual" then
getglobal(name.."HeaderText"):SetText(BSM_OPTIONS_INDIVID);
getglobal(name.."Header"):SetWidth(250);
elseif name == "BSM_Divider_Overall" then
getglobal(name.."HeaderText"):SetText(BSM_OPTIONS_OVERALL);
getglobal(name.."Header"):SetWidth(220);
elseif name == "BSM_Divider_Global" then
getglobal(name.."HeaderText"):SetText(BSM_OPTIONS_GLOBAL);
getglobal(name.."Header"):SetWidth(128);
end
end
--BSM_EnableIndividualChecks:
-- Purpose - Enables all the check boxes having to do with individual meters
-- Parameters - None
-- Returns - Nothing
function BSM_EnableIndividualChecks()
getglobal("BSM_Check_Overlay"):Enable();
getglobal("BSM_Check_Bars"):Enable();
getglobal("BSM_Check_Labels"):Enable();
getglobal("BSM_Check_Dropdown"):Enable();
getglobal("BSM_Check_IndvLabels"):Enable();
getglobal("BSM_Check_IndvColor"):Enable();
getglobal("BSM_Check_IndvTotals"):Enable();
getglobal("BSM_Check_IndvSlots"):Enable();
getglobal("BSM_Check_Bindings"):Enable();
end
--BSM_DisableIndividualChecks:
-- Purpose - Disables all the check boxes having to do with individual meters
-- Parameters - None
-- Returns - Nothing
function BSM_DisableIndividualChecks()
getglobal("BSM_Check_Overlay"):Disable();
getglobal("BSM_Check_Bars"):Disable();
getglobal("BSM_Check_Labels"):Disable();
getglobal("BSM_Check_Dropdown"):Disable();
getglobal("BSM_Check_IndvLabels"):Disable();
getglobal("BSM_Check_IndvColor"):Disable();
getglobal("BSM_Check_IndvTotals"):Disable();
getglobal("BSM_Check_IndvSlots"):Disable();
getglobal("BSM_Check_Bindings"):Disable();
end
--BSM_CheckOnShow:
-- Purpose - Set the text of a check box depending on its name
-- Also makes the necessary checks for enabling/disabling child check boxes
-- Parameters - b: the check box that's being shown
-- Returns - Nothing
function BSM_CheckOnShow(b)
local name = b:GetName();
if name == "BSM_Check_Individual" then
getglobal(name.."Text"):SetText(BSM_TEXT_INDIVIDUAL);
if BSM_Save.I.enable then
b:SetChecked(1);
else
b:SetChecked(0);
end
if b:GetChecked() == 1 then
BSM_EnableIndividualChecks();
else
BSM_DisableIndividualChecks();
end
elseif name == "BSM_Check_Overlay" then
getglobal(name.."Text"):SetText(BSM_TEXT_OVERLAY);
if BSM_Save.I.overlay then
b:SetChecked(1);
else
b:SetChecked(0);
end
if b:GetChecked() == 1 and BSM_Save.I.enable then
getglobal("BSM_Check_Bars"):Enable();
getglobal("BSM_Check_Labels"):Enable();
else
getglobal("BSM_Check_Bars"):Disable();
getglobal("BSM_Check_Labels"):Disable();
end
elseif name == "BSM_Check_Bars" then
getglobal(name.."Text"):SetText(BSM_TEXT_BAR);
if BSM_Save.I.bars then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_Labels" then
getglobal(name.."Text"):SetText(BSM_TEXT_LABELSTAT);
if BSM_Save.I.labels then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_Dropdown" then
getglobal(name.."Text"):SetText(BSM_TEXT_DROPDOWN);
if BSM_Save.I.dropdowns then
b:SetChecked(1);
else
b:SetChecked(0);
end
if b:GetChecked() == 1 and BSM_Save.I.enable then
getglobal("BSM_Check_Bindings"):Enable();
else
getglobal("BSM_Check_Bindings"):Disable();
end
elseif name == "BSM_Check_Bindings" then
getglobal(name.."Text"):SetText(BSM_TEXT_BINDINGS);
if BSM_Save.I.bindings then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_IndvLabels" then
getglobal(name.."Text"):SetText(BSM_TEXT_LABELS);
if BSM_Save.I.showlabels then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_IndvColor" then
getglobal(name.."Text"):SetText(BSM_TEXT_COLOR);
if BSM_Save.I.color then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_IndvTotals" then
getglobal(name.."Text"):SetText(BSM_TEXT_TOTALS);
if BSM_Save.I.totals then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_IndvSlots" then
getglobal(name.."Text"):SetText(BSM_TEXT_SLOTS);
if BSM_Save.I.slots == BSM_SLOTS_FREE then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_Overall" then
getglobal(name.."Text"):SetText(BSM_TEXT_OVERALL);
if BSM_Save.O.enable then
b:SetChecked(1);
else
b:SetChecked(0);
end
if b:GetChecked() == 1 then
getglobal("BSM_Check_Title"):Enable();
getglobal("BSM_Check_Back"):Enable();
getglobal("BSM_Check_OverallLabels"):Enable();
getglobal("BSM_Check_OverallColor"):Enable();
getglobal("BSM_Check_OverallTotals"):Enable();
getglobal("BSM_Check_OverallSlots"):Enable();
else
getglobal("BSM_Check_Title"):Disable();
getglobal("BSM_Check_Back"):Disable();
getglobal("BSM_Check_OverallLabels"):Disable();
getglobal("BSM_Check_OverallColor"):Disable();
getglobal("BSM_Check_OverallTotals"):Disable();
getglobal("BSM_Check_OverallSlots"):Disable();
end
elseif name == "BSM_Check_Title" then
getglobal(name.."Text"):SetText(BSM_TEXT_TITLE);
if BSM_Save.O.title then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_Back" then
getglobal(name.."Text"):SetText(BSM_TEXT_BACK);
if BSM_Save.O.back then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OverallLabels" then
getglobal(name.."Text"):SetText(BSM_TEXT_LABELS);
if BSM_Save.O.showlabels then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OverallColor" then
getglobal(name.."Text"):SetText(BSM_TEXT_COLOR);
if BSM_Save.O.color then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OverallTotals" then
getglobal(name.."Text"):SetText(BSM_TEXT_TOTALS);
if BSM_Save.O.totals then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OverallSlots" then
getglobal(name.."Text"):SetText(BSM_TEXT_SLOTS);
if BSM_Save.O.slots == BSM_SLOTS_FREE then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OverallLock" then
getglobal(name.."Text"):SetText(BSM_TEXT_OVERALLLOCK);
if BSM_Save.O.lock then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Options_Position" then
getglobal(name.."Text"):SetText(BSM_TEXT_OVERALLPOS);
elseif name == "BSM_Check_Notify" then
getglobal(name.."Text"):SetText(BSM_TEXT_NOTIFY);
if BSM_Save.notify then
b:SetChecked(1);
else
b:SetChecked(0);
end
elseif name == "BSM_Check_OptionsButton" then
getglobal(name.."Text"):SetText(BSM_TEXT_OPTBUTTON);
if BSM_Save.optbutton then
b:SetChecked(1);
else
b:SetChecked(0);
end
end
end
--BSM_Chk_Individual:
-- Purpose - Enables/Disables all individual meter elements in options and in UI when the "Enable Individual" option is clicked
-- Parameters - b: the "Enable Individual" check box
-- Returns - Nothing
function BSM_Chk_Individual(b)
if b:GetChecked() == 1 then
BSM_EnableIndividualChecks();
BSM_Save.I.enable = true;
BSM_EnableAllIndividual();
BSM_updateFreeSlots();
else
BSM_DisableIndividualChecks();
BSM_Save.I.enable = false;
BSM_DisableAllIndividual();
end
end
--BSM_Chk_Overall:
-- Purpose - Enables/Disables all overall meter elements in options and in UI when the "Enable Overall" option is clicked
-- Parameters - b: the "Enable Overall" check box
-- Returns - Nothing
function BSM_Chk_Overall(b)
if b:GetChecked() == 1 then
getglobal("BSM_Check_Title"):Enable();
getglobal("BSM_Check_Back"):Enable();
getglobal("BSM_Check_OverallLabels"):Enable();
getglobal("BSM_Check_OverallColor"):Enable();
getglobal("BSM_Check_OverallTotals"):Enable();
getglobal("BSM_Check_OverallSlots"):Enable();
getglobal("BSM_Check_OverallLock"):Enable();
getglobal("BSM_Options_PositionSet"):Enable();
BSM_Save.O.enable = true;
getglobal(BSM_FRAME):Show();
BSM_updateFreeSlots();
else
getglobal("BSM_Check_Title"):Disable();
getglobal("BSM_Check_Back"):Disable();
getglobal("BSM_Check_OverallLabels"):Disable();
getglobal("BSM_Check_OverallColor"):Disable();
getglobal("BSM_Check_OverallTotals"):Disable();
getglobal("BSM_Check_OverallSlots"):Disable();
getglobal("BSM_Check_OverallLock"):Disable();
getglobal("BSM_Options_PositionSet"):Disable();
BSM_Save.O.enable = false;
getglobal(BSM_FRAME):Hide();
end
end
--BSM_CheckOnClick:
-- Purpose - Makes the necessary checks for enabling/disabling child check boxes and sets necessary variables
-- Parameters - b: the check box that's being clicked
-- Returns - Nothing
function BSM_CheckOnClick(b)
local name = b:GetName();
if name == "BSM_Check_Individual" then
BSM_Chk_Individual(b);
elseif name == "BSM_Check_Overlay" then
if b:GetChecked() == 1 then
getglobal("BSM_Check_Bars"):Enable();
getglobal("BSM_Check_Labels"):Enable();
BSM_Save.I.overlay = true;
--if BSM_Save.I.enabled then
if BSM_Save.I.bars then
getglobal(BSM_BARS):Show();
end
if BSM_Save.I.showlabels and (BSM_Save.I.bars or BSM_Save.I.labels) then
getglobal(BSM_BARS_LABELS):Show();
end
BSM_updateFreeSlots();
--end
else
getglobal("BSM_Check_Bars"):Disable();
getglobal("BSM_Check_Labels"):Disable();
BSM_Save.I.overlay = false;
getglobal(BSM_BARS_LABELS):Hide();
getglobal(BSM_BARS):Hide();
end
elseif name == "BSM_Check_Bars" then
b:SetChecked(1);
getglobal("BSM_Check_Labels"):SetChecked(0);
BSM_Save.I.bars = true;
BSM_Save.I.labels = false;
--if BSM_Save.I.enabled then
if BSM_Save.I.showlabels then
getglobal(BSM_BARS_LABELS):Show();
end
getglobal(BSM_BARS):Show();
BSM_updateFreeSlots();
--end
elseif name == "BSM_Check_Labels" then
b:SetChecked(1);
getglobal("BSM_Check_Bars"):SetChecked(0);
BSM_Save.I.labels = true;
BSM_Save.I.bars = false;
getglobal(BSM_BARS):Hide();
--if BSM_Save.I.enabled then
if BSM_Save.I.showlabels then
getglobal(BSM_BARS_LABELS):Show();
BSM_updateFreeSlots();
end
--end
elseif name == "BSM_Check_Dropdown" then
if b:GetChecked() == 1 then
getglobal("BSM_Check_Bindings"):Enable();
BSM_Save.I.dropdowns = true;
--if BSM_Save.I.enabled then
getglobal(BSM_DROPDOWNS):Show();
if BSM_Save.I.showlabels then
getglobal(BSM_DROPDOWNS_LABELS):Show();
end
BSM_updateFreeSlots();
--end
else
getglobal("BSM_Check_Bindings"):Disable();
BSM_Save.I.dropdowns = false;
getglobal(BSM_DROPDOWNS):Hide();
getglobal(BSM_DROPDOWNS_LABELS):Hide();
end
elseif name == "BSM_Check_Bindings" then
if b:GetChecked() == 1 then
BSM_Save.I.bindings = true;
--if BSM_Save.I.enabled then
if BSM_Save.I.bindings then
for i = 0, 4, 1 do
getglobal(BSM_DROPDOWNS..i.."Key"):Show();
end
end
--end
else
BSM_Save.I.bindings = false;
for i = 0, 4, 1 do
getglobal(BSM_DROPDOWNS..i.."Key"):Hide();
end
end
elseif name == "BSM_Check_IndvLabels" then
if b:GetChecked() == 1 then
BSM_Save.I.showlabels = true;
--if BSM_Save.I.enabled then
if (BSM_Save.I.bars or BSM_Save.I.labels) and BSM_Save.I.overlay then
getglobal(BSM_BARS_LABELS):Show();
end
getglobal(BSM_DROPDOWNS_LABELS):Show();
BSM_updateFreeSlots();
--end
else
BSM_Save.I.showlabels = false;
getglobal(BSM_BARS_LABELS):Hide();
getglobal(BSM_DROPDOWNS_LABELS):Hide();
end
elseif name == "BSM_Check_IndvColor" then
if b:GetChecked() == 1 then
BSM_Save.I.color = true;
else
BSM_Save.I.color = false;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_IndvTotals" then
if b:GetChecked() == 1 then
BSM_Save.I.totals = true;
else
BSM_Save.I.totals = false;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_IndvSlots" then
if b:GetChecked() == 1 then
BSM_Save.I.slots = BSM_SLOTS_FREE;
else
BSM_Save.I.slots = BSM_SLOTS_USED;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_Overall" then
BSM_Chk_Overall(b);
elseif name == "BSM_Check_Title" then
if b:GetChecked() == 1 then
BSM_Save.O.title = true;
--if BSM_Save.O.enabled then
getglobal("BSM_FrameButtonLabel"):Show();
--end
else
BSM_Save.O.title = false;
getglobal("BSM_FrameButtonLabel"):Hide();
end
elseif name == "BSM_Check_Back" then
if b:GetChecked() == 1 then
BSM_Save.O.back = true;
--if BSM_Save.O.enabled then
getglobal(BSM_FRAME.."BackAlpha"):Show();
getglobal(BSM_FRAME.."Border"):Show();
BSM_FrameStatus:Show();
--end
else
BSM_Save.O.back = false;
getglobal(BSM_FRAME.."BackAlpha"):Hide();
getglobal(BSM_FRAME.."Border"):Hide();
BSM_FrameStatus:Hide();
end
elseif name == "BSM_Check_OverallLabels" then
if b:GetChecked() == 1 then
BSM_Save.O.showlabels = true;
--if BSM_Save.O.enabled then
getglobal("BSM_FrameText"):Show();
BSM_updateFreeSlots();
--end
else
BSM_Save.O.showlabels = false;
getglobal("BSM_FrameText"):Hide();
end
elseif name == "BSM_Check_OverallColor" then
if b:GetChecked() == 1 then
BSM_Save.O.color = true;
else
BSM_Save.O.color = false;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_OverallTotals" then
if b:GetChecked() == 1 then
BSM_Save.O.totals = true;
else
BSM_Save.O.totals = false;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_OverallSlots" then
if b:GetChecked() == 1 then
BSM_Save.O.slots = BSM_SLOTS_FREE;
else
BSM_Save.O.slots = BSM_SLOTS_USED;
end
BSM_updateFreeSlots();
elseif name == "BSM_Check_OverallLock" then
if b:GetChecked() == 1 then
BSM_Save.O.lock = true;
else
BSM_Save.O.lock = false;
end
elseif name == "BSM_Check_Notify" then
if b:GetChecked() == 1 then
BSM_Save.notify = true;
else
BSM_Save.notify = false;
end
elseif name == "BSM_Check_OptionsButton" then
if b:GetChecked() == 1 then
BSM_Save.optbutton = true;
getglobal("BSM_OptionsButton"):Show();
else
BSM_Save.optbutton = false;
getglobal("BSM_OptionsButton"):Hide();
end
end
end
--BSM_SetPosition:
-- Purpose - Sets the position of the Overall Meter frame according to what is in the X/Y text boxes in the Options frame
-- Parameters - None
-- Returns - Nothing
function BSM_SetPosition()
local x, y;
--convert the text in the text boxes to numbers
x = tonumber(getglobal("BSM_Options_PositionX"):GetText());
y = tonumber(getglobal("BSM_Options_PositionY"):GetText());
--if the text converted correctly to a number, set the position of the Overall Meter
if x then
BSM_Save.dispX = x;
end
if y then
BSM_Save.dispY = y;
end
getglobal(BSM_FRAME):ClearAllPoints();
getglobal(BSM_FRAME):SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", BSM_Save.dispX, BSM_Save.dispY);
end
--BSM_openBag:
-- Purpose - Opens the appropriate bag when hitting a key binding button
-- Parameters - b: the button that was pressed
-- Returns - Nothing
function BSM_openBag(b)
--name: the name of the button that was pressed
local name = b:GetName();
--Find the number in the button's name
name = string.sub( name, string.len(BSM_DROPDOWNS)+1, string.len(BSM_DROPDOWNS)+1 );
--Convert the number string to an actual number and toggle that bag
ToggleBag( tonumber(name) );
end