Files
2026-04-06 16:33:27 -07:00

3711 lines
169 KiB
Lua

-------------------------------------------------------------------------------------
-- Title: Mik's Scrolling Battle Text Options
-- Author: Mik
-- Maintainer: Athene
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-- Local Constants.
-------------------------------------------------------------------------------------
-- The name of the options frame.
local OPTIONS_FRAME_NAME = "MSBTFrameOptions";
-- The name of the font settings frame.
local FONT_SETTINGS_FRAME_NAME = "MSBTFontSettingsFrame";
-- The name of the scroll area frames.
local SCROLL_AREA_MOVER_FRAME_NAME = "MSBTScrollAreaMoverFrame";
local SCROLL_AREA_MOVER_CONTROL_FRAME_NAME = "MSBTScrollAreaMoverControlFrame";
local SCROLL_AREA_MOVER_INCOMING_FRAME_NAME = "MSBTScrollAreaMoverIncomingFrame";
local SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME = "MSBTScrollAreaMoverOutgoingFrame";
local SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME = "MSBTScrollAreaMoverNotificationFrame";
-- The name of the trigger configuration frame.
local TRIGGER_CONFIGURATION_FRAME_NAME = "MSBTTriggerConfigFrame";
-- The min and max font sizes allowed.
local MIN_FONT_SIZE = 12;
local MAX_FONT_SIZE = 64;
-- The min and max animation steps.
local MIN_ANIMATION_STEP = 1;
local MAX_ANIMATION_STEP = 5;
-- The min and max scroll heights.
local MIN_SCROLL_HEIGHT = 100;
local MAX_SCROLL_HEIGHT = 600;
-- The size of an event settings line and number of event items per page.
local EVENT_ITEM_HEIGHT = 25;
local EVENT_ITEMS_PER_PAGE = 10;
-- The size of a trigger settings line and number of trigger items per page.
local TRIGGER_ITEM_HEIGHT = 25;
local TRIGGER_ITEMS_PER_PAGE = 11;
-- The size of a trigger event line and the number of trigger event items per page.
local TRIGGER_EVENT_ITEM_HEIGHT = 25;
local TRIGGER_EVENT_ITEMS_PER_PAGE = 4;
-- The size of a suppressions settings line and number of suppression items per page.
local SUPPRESSION_ITEM_HEIGHT = 25;
local SUPPRESSION_ITEMS_PER_PAGE = 11;
-- Tab indices.
local TAB_INDEX_GENERAL = 1;
local TAB_INDEX_INCOMING = 2;
local TAB_INDEX_OUTGOING = 3;
local TAB_INDEX_NOTIFICATION = 4;
local TAB_INDEX_TRIGGERS = 5;
local TAB_INDEX_SUPPRESSIONS = 6;
-------------------------------------------------------------------------------------
-- Local variables.
-------------------------------------------------------------------------------------
-- Holds available font and outline selections.
local availableFontsInherit;
local availableOutlinesInherit;
-- Holds a table of available trigger events.
local availableTriggerEvents = {};
-------------------------------------------------------------------------------------
-- Core event handlers.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Called when the options frame is loaded.
-- **********************************************************************************
function MikSBTOpt.OnLoad()
-- Register for the ADDON_LOADED event.
this:RegisterEvent("ADDON_LOADED");
end
-- **********************************************************************************
-- Called when the events we registered for occur.
-- **********************************************************************************
function MikSBTOpt.OnEvent()
-- When an addon is loaded.
if (event == "ADDON_LOADED") then
-- Make sure it's this addon.
if (arg1 == string.gsub(MikSBT.MOD_NAME .. "Options", "%s", "")) then
-- Don't get notification for other addons being loaded.
this:UnregisterEvent("ADDON_LOADED");
-- Initialize the options.
MikSBTOpt.Init();
end
end
end
-- **********************************************************************************
-- Called when the mod is fully loaded (variables loaded).
-- **********************************************************************************
function MikSBTOpt.Init()
-- Set the options window title.
getglobal(OPTIONS_FRAME_NAME .. "TitleText"):SetText(MikSBT.WINDOW_TITLE);
-- Set the normal and crit size font preview text.
getglobal(FONT_SETTINGS_FRAME_NAME .. "NormalPreviewText"):SetText(MikSBTOpt.MSG_NORMAL_PREVIEW_TEXT);
getglobal(FONT_SETTINGS_FRAME_NAME .. "CritPreviewText"):SetText(MikSBTOpt.MSG_CRIT_PREVIEW_TEXT);
-- Set the trigger classes text
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerClassesText"):SetText(MikSBTOpt.MSG_TRIGGER_APPLICABLE_CLASSES_LABEL);
-- Initialize the dropdowns.
MikSBTOpt.InitDropdowns();
-- Initialize the checkboxes.
MikSBTOpt.InitCheckboxes();
-- Initialize the sliders.
MikSBTOpt.InitSliders();
-- Initialize the buttons.
MikSBTOpt.InitButtons();
-- Initialize the editboxes.
MikSBTOpt.InitEditboxes();
-- Initialize the events.
MikSBTOpt.InitEvents();
-- Populate the tabs and select the first one.
MikSBTOpt.PopulateTabs();
MikSBTOpt.TabOnClick(1);
-- Change the state of the profile buttons correctly, and set the current profile label.
MikSBTOpt.EnableDisableProfileButtons();
getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameCurrentProfileLabel"):SetText(MikSBTOpt.MSG_CURRENT_PROFILE_TEXT .. ": " .. MikSBT_Save.CurrentProfile);
-- Setup the available trigger events.
MikSBTOpt.SetupAvailableTriggerEvents();
-- Populate the options for the current profile.
MikSBTOpt.PopulateProfileOptions();
-- Insert the frame name into the UISpecialFrames array so it closes when the escape key is pressed.
table.insert(UISpecialFrames, OPTIONS_FRAME_NAME);
end
-- **********************************************************************************
-- Called when the options frame is shown.
-- **********************************************************************************
function MikSBTOpt.OnShow()
-- Holds whether or not to play a sound.
local doPlaySound = true;
-- Get the scroll area mover control frame and make sure it exists.
local frame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Check if the scroll area mover frame is shown.
if (frame and frame:IsShown()) then
-- Don't play a sound.
doPlaySound = false;
end
-- Check if a sound should be played.
if (doPlaySound) then
-- Play the opening sound
PlaySound("igCharacterInfoOpen");
end
end
-- **********************************************************************************
-- Called when the options frame is hidden.
-- **********************************************************************************
function MikSBTOpt.OnHide()
-- Holds whether or not to play a sound.
local doPlaySound = true;
-- Get the scroll area mover control frame and make sure it exists.
local frame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Check if the scroll area mover frame is shown.
if (frame and frame:IsShown()) then
-- Don't play a sound.
doPlaySound = false;
end
-- Check if a sound should be played.
if (doPlaySound) then
-- Play the closing sound
PlaySound("igCharacterInfoClose");
end
-- Hide the font settings frame when the main frame is closed.
getglobal(FONT_SETTINGS_FRAME_NAME):Hide();
-- Hide the trigger config frame when the main frame is closed.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
end
-- **********************************************************************************
-- Called when one of the scroll areas is scrolled.
-- **********************************************************************************
function MikSBTOpt.OnVerticalScroll()
-- Uncomment once populate functions exist.
-- Check if it's the incoming event settings scroll frame.
if (this:GetName() == OPTIONS_FRAME_NAME .. "Tab2FrameEventsScrollFrame") then
FauxScrollFrame_OnVerticalScroll(EVENT_ITEM_HEIGHT, MikSBTOpt.PopulateIncomingEventSettings);
-- Outgoing event settings scroll frame.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab3FrameEventsScrollFrame") then
FauxScrollFrame_OnVerticalScroll(EVENT_ITEM_HEIGHT, MikSBTOpt.PopulateOutgoingEventSettings);
-- Notification event settings scroll frame.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab4FrameEventsScrollFrame") then
FauxScrollFrame_OnVerticalScroll(EVENT_ITEM_HEIGHT, MikSBTOpt.PopulateNotificationEventSettings);
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab5FrameTriggersScrollFrame") then
FauxScrollFrame_OnVerticalScroll(TRIGGER_ITEM_HEIGHT, MikSBTOpt.PopulateTriggerEventSettings);
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab6FrameSuppressionsScrollFrame") then
FauxScrollFrame_OnVerticalScroll(SUPPRESSION_ITEM_HEIGHT, MikSBTOpt.PopulateSuppressionSettings);
elseif (this:GetName() == TRIGGER_CONFIGURATION_FRAME_NAME .. "EventsScrollFrame") then
FauxScrollFrame_OnVerticalScroll(TRIGGER_EVENT_ITEM_HEIGHT, MikSBTOpt.PopulateAvailableTriggerEvents);
end
end
-------------------------------------------------------------------------------------
-- Tab functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Populates the tabs.
-- **********************************************************************************
function MikSBTOpt.PopulateTabs()
-- Set the number of tabs for the options frame.
PanelTemplates_SetNumTabs(getglobal(OPTIONS_FRAME_NAME), table.getn(MikSBTOpt.TABS));
-- Loop through all of the tabs.
for tabNumber, tabData in MikSBTOpt.TABS do
-- Get the associated tab frame.
local tabFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab" .. tabNumber);
if (tabFrame) then
-- Set the tooltip for the tab.
tabFrame.tooltipText = tabData.Tooltip;
-- Set the text for the tab and resize it.
tabFrame:SetText(tabData.Label);
PanelTemplates_TabResize(1, tabFrame);
end
end
end
-- **********************************************************************************
-- Called when a tab is clicked.
-- **********************************************************************************
function MikSBTOpt.TabOnClick(tab)
-- Get the clicked tab
if (not tab) then
tab = this:GetID();
end
-- Set the selected tab
PanelTemplates_SetTab(getglobal(OPTIONS_FRAME_NAME), tab);
-- Hide all of the tab frames.
for tabNumber, tabData in MikSBTOpt.TABS do
local associatedTabFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab" .. tabNumber .. "Frame");
if (associatedTabFrame) then
associatedTabFrame:Hide();
end
end
-- Show the associated frame for the selected tab.
local associatedTabFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab" .. tab .. "Frame");
if (associatedTabFrame) then
associatedTabFrame:Show();
end
-- Hide the font settings frame.
getglobal(FONT_SETTINGS_FRAME_NAME):Hide();
-- Hide the trigger config frame.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
end
-------------------------------------------------------------------------------------
-- Dropdown functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the dropdowns.
-- **********************************************************************************
function MikSBTOpt.InitDropdowns()
-- Setup the available fonts with the inherit option.
availableFontsInherit = MikSBT.CopyTable(MikSBT.AVAILABLE_FONTS);
table.insert(availableFontsInherit, 1, {Name=MikSBTOpt.MSG_INHERIT_TEXT});
for key, data in availableFontsInherit do
data.Value = key - 1;
end
-- Setup the available font outlines with the inherit option.
availableOutlinesInherit = MikSBT.CopyTable(MikSBT.AVAILABLE_OUTLINES);
table.insert(availableOutlinesInherit, 1, {Name=MikSBTOpt.MSG_INHERIT_TEXT});
for key, data in availableOutlinesInherit do
data.Value = key - 1;
end
-- Setup the available profiles.
local availableProfiles = {};
for profileName, _ in MikSBT_Save.Profiles do
availableProfiles[profileName] = {Name=profileName};
end
-- Setup the available scroll areas.
local availableScrollAreas = {};
availableScrollAreas["Incoming"] = {Name=MikSBTOpt.TABS[TAB_INDEX_INCOMING].Label};
availableScrollAreas["Outgoing"] = {Name=MikSBTOpt.TABS[TAB_INDEX_OUTGOING].Label};
availableScrollAreas["Notification"] = {Name=MikSBTOpt.TABS[TAB_INDEX_NOTIFICATION].Label};
-- Initialize the profile dropdown.
local key = "Tab1FrameProfileDropdown";
MikSBTOpt.SetupDropdown(OPTIONS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.ProfileDropdownOnClick, availableProfiles, nil);
MikSBTOpt.PopulateDropdown(OPTIONS_FRAME_NAME .. key, MikSBT_Save.CurrentProfile);
-- Initialize the scroll area dropdown.
key = "ScrollAreaDropdown";
MikSBTOpt.SetupDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.ScrollAreaDropdownOnClick, availableScrollAreas, nil);
-- Initialize the text align dropdown.
key = "TextAlignDropdown";
MikSBTOpt.SetupDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.DropdownOnClick, MikSBT.AVAILABLE_TEXT_ALIGNS, nil);
-- Initialize the animation styles dropdown.
key = "AnimationStyleDropdown";
MikSBTOpt.SetupDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.DropdownOnClick, MikSBT.AVAILABLE_ANIMATION_STYLES, nil);
-- Initialize the scroll direction dropdown.
key = "ScrollDirectionDropdown";
MikSBTOpt.SetupDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.DropdownOnClick, MikSBT.AVAILABLE_SCROLL_DIRECTIONS, nil);
-- Initialize the trigger types dropdown.
key = "TriggerTypeDropdown";
MikSBTOpt.SetupDropdown(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.TriggerTypeDropdownOnClick, MikSBT.AVAILABLE_TRIGGER_TYPES, nil);
UIDropDownMenu_SetWidth(150, getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. key));
-- Initialize the stances dropdown.
key = "StanceDropdown";
MikSBTOpt.SetupDropdown(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.DROPDOWNS[key].Tooltip, MikSBTOpt.StanceDropdownOnClick, MikSBT.AVAILABLE_STANCES, nil);
UIDropDownMenu_SetWidth(240, getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. key));
end
-- **********************************************************************************
-- Sets up a dropdown with the passed information.
-- **********************************************************************************
function MikSBTOpt.SetupDropdown(frameName, label, tooltip, clickFunc, options, varPath)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
associatedFrame.tooltipText = tooltip;
associatedFrame.clickFunction = clickFunc;
associatedFrame.menuOptions = options;
associatedFrame.associatedVarPath = varPath;
-- Set the label for the dropdown.
getglobal(frameName .. "Label"):SetText(label);
-- Initialize the dropdown.
UIDropDownMenu_Initialize(associatedFrame, MikSBTOpt.DropdownInit);
end
end
-- **********************************************************************************
-- Sets the dropdown's selected value for the passed frame name. If a value is passed
-- it is used, otherwise the function will attempt to get the value from the
-- associatedVarPath field of the dropdown frame.
-- **********************************************************************************
function MikSBTOpt.PopulateDropdown(frameName, selectValue)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
local tempValue = selectValue;
-- Check if no selected value was passed.
if (tempValue == nil) then
-- Check if there is an associated variable path for the dropdown.
if (associatedFrame.associatedVarPath) then
-- Get the selected value from the current profile.
tempValue = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath);
end
end
-- Make sure there is a value to be selected.
if (tempValue ~= nil) then
-- Set the default selected value.
UIDropDownMenu_SetSelectedValue(associatedFrame, tempValue);
-- Set the text for the default selected value.
for key, optionData in associatedFrame.menuOptions do
-- If there is no value for the option data, use the key as the value.
local optionValue = optionData.Value;
if (optionValue == nil) then
optionValue = key;
end
local selectedValue = associatedFrame.selectedValue;
if (optionValue == selectedValue) then
UIDropDownMenu_SetText(optionData.Name, associatedFrame);
end
end
end
end
end
-- **********************************************************************************
-- Called when a drop down menu is initialized (shown).
-- **********************************************************************************
function MikSBTOpt.DropdownInit()
local info = {};
-- Check if the dropdown frame is the options frame and exit.
local dropdownFrame = this;
if (dropdownFrame:GetName() == OPTIONS_FRAME_NAME) then
return;
end
-- Check if dropdownFrame is a button and not the actual dropdown itself.
if (not dropdownFrame.menuOptions) then
dropdownFrame = this:GetParent();
end
-- Make sure there is dropdown data.
if (dropdownFrame.menuOptions) then
-- Loop through all of the options for dropdown.
for key, optionData in dropdownFrame.menuOptions do
-- If the option data has a value use it otherwise use the key as the value.
local tempValue = optionData.Value;
if (tempValue == nil) then
tempValue = key;
end
-- Add the option to the dropdown list.
info = {};
info.text = optionData.Name;
info.value = tempValue;
info.func = dropdownFrame.clickFunction;
info.arg1 = dropdownFrame:GetName();
UIDropDownMenu_AddButton(info);
end
end
end
-- **********************************************************************************
-- Called when one of the dropdown menu options is clicked.
-- **********************************************************************************
function MikSBTOpt.DropdownOnClick(frameName)
-- Set the selected dropdown option to the appropriate value.
UIDropDownMenu_SetSelectedValue(getglobal(frameName), this.value);
-- Get the associated variable path.
local associatedVarPath = getglobal(frameName).associatedVarPath;
-- Make sure there is a variable path.
if (associatedVarPath) then
-- Update current profile data.
MikSBT.SetOptionFromVarPath(associatedVarPath, this.value);
end
end
-- **********************************************************************************
-- Called when one of the dropdown menu options on the font settings frame is clicked.
-- **********************************************************************************
function MikSBTOpt.FontSettingsDropdownOnClick(frameName)
-- Call the normal dropdown OnClick handler.
MikSBTOpt.DropdownOnClick(frameName);
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Called when one of the profile dropdown menu options is clicked.
-- **********************************************************************************
function MikSBTOpt.ProfileDropdownOnClick(frameName)
-- Call the normal dropdown OnClick handler.
MikSBTOpt.DropdownOnClick(frameName);
-- Enable and disable the load and delete profile buttons.
MikSBTOpt.EnableDisableProfileButtons();
end
-- **********************************************************************************
-- Called when one of the scroll area dropdown menu options is clicked.
-- **********************************************************************************
function MikSBTOpt.ScrollAreaDropdownOnClick(frameName)
-- Save the settings in the controls to the control frame's current settings.
MikSBTOpt.SaveScrollAreaControlsToCurrentSettings();
-- Call the normal dropdown OnClick handler.
MikSBTOpt.DropdownOnClick(frameName);
-- Get the selected scroll area.
scrollArea = UIDropDownMenu_GetSelectedValue(getglobal(frameName));
if (scrollArea ~= nil) then
-- Populate the controls for the scroll area.
MikSBTOpt.PopulateScrollAreaControls(scrollArea);
end
end
-- **********************************************************************************
-- Called when the trigger type dropdown menu is clicked.
-- **********************************************************************************
function MikSBTOpt.TriggerTypeDropdownOnClick(frameName)
-- Set the selected dropdown option to the appropriate value.
UIDropDownMenu_SetSelectedValue(getglobal(frameName), this.value);
-- Setup the trigger controls appropriately depending on the trigger type.
MikSBTOpt.SetupVariableTriggerControls(getglobal(frameName):GetParent().TriggerKey, this.value == MikCEH.TRIGGERTYPE_SEARCH_PATTERN);
end
-- **********************************************************************************
-- Called when the stance dropdown menu is clicked.
-- **********************************************************************************
function MikSBTOpt.StanceDropdownOnClick(frameName)
-- Set the selected dropdown option to the appropriate value.
UIDropDownMenu_SetSelectedValue(getglobal(frameName), this.value);
end
-- **********************************************************************************
-- This function refreshes the options for the profiles dropdown.
-- **********************************************************************************
function MikSBTOpt.RefreshProfilesDropdown()
-- Setup the available profiles.
local availableProfiles = {};
for profileName, _ in MikSBT_Save.Profiles do
availableProfiles[profileName] = {Name=profileName};
end
-- Reset the available options for the profiles dropdown.
getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown").menuOptions = availableProfiles;
end
-------------------------------------------------------------------------------------
-- Checkbox functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the checkboxes.
-- **********************************************************************************
function MikSBTOpt.InitCheckboxes()
-- Initialize the Disable MSBT checkbox.
local key = "Tab1FrameDisableCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, nil);
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. key, MikSBT_Save.UserDisabled);
-- Initialize the Show Partial Effects checkbox.
key = "Tab1FrameShowPartialEffectsCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "ShowPartialEffects");
-- Initialize the Use Sticky Crits checkbox.
key = "Tab1FrameUseStickyCritsCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "UseStickyCrits");
-- Initialize the Show Overheals checkbox.
key = "Tab1FrameShowOverhealsCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "ShowOverheals");
-- Initialize the Show Game Damage checkbox.
key = "Tab1FrameShowGameDamageCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "ShowGameDamage");
-- Initialize the Show All Mana Gains checkbox.
key = "Tab1FrameShowAllManaGainsCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "ShowAllManaGains");
-- Initialize the Low Health Sound checkbox.
key = "Tab1FrameLowHealthSoundCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "LowHealthSound");
-- Initialize the Low Mana Sound checkbox.
key = "Tab1FrameLowManaSoundCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "LowManaSound");
-- Initialize the Resist Sound checkbox.
key = "Tab1FrameResistSoundCheckbox";
MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "ResistSound");
-- Initialize the show scroll area events checkboxes.
key = "Tab2FrameShowEventsCheckbox"; MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "DisplaySettings.Incoming.Show");
key = "Tab3FrameShowEventsCheckbox"; MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "DisplaySettings.Outgoing.Show");
key = "Tab4FrameShowEventsCheckbox"; MikSBTOpt.SetupCheckbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.CHECKBOXES[key].Tooltip, "DisplaySettings.Notification.Show");
-- Initialize the trigger config class checkboxes.
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "AllClassesCheckbox", ALL, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "DruidCheckbox", MikSBTOpt.MSG_CLASS_NAME_DRUID, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "HunterCheckbox", MikSBTOpt.MSG_CLASS_NAME_HUNTER, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "MageCheckbox", MikSBTOpt.MSG_CLASS_NAME_MAGE, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "PaladinCheckbox", MikSBTOpt.MSG_CLASS_NAME_PALADIN, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "PriestCheckbox", MikSBTOpt.MSG_CLASS_NAME_PRIEST, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "RogueCheckbox", MikSBTOpt.MSG_CLASS_NAME_ROGUE, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "ShamanCheckbox", MikSBTOpt.MSG_CLASS_NAME_SHAMAN, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarlockCheckbox", MikSBTOpt.MSG_CLASS_NAME_WARLOCK, nil, nil);
MikSBTOpt.SetupCheckbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarriorCheckbox", MikSBTOpt.MSG_CLASS_NAME_WARRIOR, nil, nil);
end
-- **********************************************************************************
-- Sets up a checkbox with the passed information.
-- **********************************************************************************
function MikSBTOpt.SetupCheckbox(frameName, label, tooltip, varPath)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
associatedFrame.associatedVarPath = varPath;
associatedFrame.tooltipText = tooltip;
-- Set the text for the checkbox.
if (label) then
getglobal(frameName .. "Text"):SetText(label);
end
end
end
-- **********************************************************************************
-- Sets the checkbox's checked state for the passed frame name. If a value is passed
-- it is used, otherwise the function will attempt to get the value from the
-- associatedVarPath field of the checkbox frame.
-- **********************************************************************************
function MikSBTOpt.PopulateCheckbox(frameName, isChecked)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
local tempValue = isChecked;
-- Check if no value was passed.
if (tempValue == nil) then
-- Check if there is an associated variable path for the checkbox.
if (associatedFrame.associatedVarPath) then
-- Get the selected value from the current profile.
tempValue = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath);
end
end
-- Make sure there is a value to set.
if (tempValue ~= nil) then
-- Set the checkbox checked state appropriately.
if (tempValue == true) then
associatedFrame:SetChecked(1);
else
associatedFrame:SetChecked(0);
end
end
end
end
-- **********************************************************************************
-- Called when a checkbox is clicked.
-- **********************************************************************************
function MikSBTOpt.CheckboxOnClick()
-- Disable MSBT checkbox.
if (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameDisableCheckbox") then
-- Check if the checkbox is checked.
if (this:GetChecked() == 1) then
MikSBT.SetOptionUserDisabled(true);
else
MikSBT.SetOptionUserDisabled(false);
end
-- Return from the function.
return;
-- Show Game Damage checkbox.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameShowGameDamageCheckbox") then
-- Check if the checkbox is checked.
if (this:GetChecked() == 1) then
MikSBT.SetOptionShowGameDamage(true);
else
MikSBT.SetOptionShowGameDamage(false);
end
-- Return from the function.
return;
-- Inherit font size, or inherit critical font size checkbox.
elseif (this:GetName() == FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox" or
this:GetName() == FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox") then
-- Call the font settings checkbox OnClick handler.
MikSBTOpt.FontSettingsCheckboxOnClick();
-- Return from the function.
return;
-- Trigger frame all classes checkbox.
elseif (this:GetName() == TRIGGER_CONFIGURATION_FRAME_NAME .. "AllClassesCheckbox") then
-- Hide or show the individual class checkboxes depending on the state of the all classes
-- checkbox.
if (this:GetChecked() == 1) then
MikSBTOpt.HideTriggerClassCheckboxes();
else
MikSBTOpt.ShowTriggerClassCheckboxes();
end
--Trigger frame trigger event checkbox.
elseif (string.find(this:GetName(), TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent")) then
-- Make sure there is an associated trigger event.
if (this.TriggerEvent) then
local triggerFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
if (this:GetChecked()) then
triggerFrame.SelectedTriggerEvents[this.TriggerEvent] = true;
else
triggerFrame.SelectedTriggerEvents[this.TriggerEvent] = nil;
end
end
end
-- Check if there is an associated variable path and set it to the correct value.
if (this.associatedVarPath) then
if (this:GetChecked() == 1) then
-- Set the associated variable in the current profile to the inherited value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, true);
else
-- Set the associated variable in the current profile to the inherited value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, false);
end
end
end
-- **********************************************************************************
-- Called when an enable trigger checkbox is clicked.
-- **********************************************************************************
function MikSBTOpt.EnableTriggerCheckboxOnClick()
-- Check if there is an associated variable path and set it to the correct value.
if (this.associatedVarPath) then
if (this:GetChecked() == 1) then
-- Set the associated variable in the current profile to the inherited value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, true);
else
-- Set the associated variable in the current profile to the inherited value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, false);
end
end
-- Reregister all of the triggers.
MikSBT.RegisterTriggers();
end
-- **********************************************************************************
-- Called when a checkbox in the font settings area is clicked.
-- **********************************************************************************
function MikSBTOpt.FontSettingsCheckboxOnClick()
local associatedSlider;
local inheritedValue;
local sliderKey;
-- Check if it's the inherit font size checkbox.
if (this:GetName() == FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox") then
sliderKey = "FontSizeSlider";
associatedSlider = getglobal(FONT_SETTINGS_FRAME_NAME .. sliderKey);
inheritedValue = this:GetParent().InheritedFontSize;
elseif (this:GetName() == FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox") then
sliderKey = "FontSizeCritSlider";
associatedSlider = getglobal(FONT_SETTINGS_FRAME_NAME .. sliderKey);
inheritedValue = this:GetParent().InheritedFontSizeCrit;
end
-- Make sure there is an associated variable path.
if (this.associatedVarPath) then
if (this:GetChecked() == 1) then
-- Set the associated variable in the current profile to inherit.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, 0);
-- Hide the associated slider.
associatedSlider:Hide();
else
-- Set the associated variable in the current profile to the inherited value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, inheritedValue);
-- Show the associated slider.
associatedSlider:Show();
-- Populate the slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. sliderKey);
end
end
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-------------------------------------------------------------------------------------
-- Slider functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the sliders.
-- **********************************************************************************
function MikSBTOpt.InitSliders()
-- Initialize the Animation Step slider.
local key = "Tab1FrameAnimationStepSlider";
MikSBTOpt.SetupSlider(OPTIONS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.SLIDERS[key].Tooltip, MIN_ANIMATION_STEP, MAX_ANIMATION_STEP, 0.5, "AnimationStep");
-- Initialize the scroll height slider.
key = "ScrollHeightSlider";
MikSBTOpt.SetupSlider(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.SLIDERS[key].Tooltip, MIN_SCROLL_HEIGHT, MAX_SCROLL_HEIGHT, 2, nil);
key = "ThresholdSlider";
MikSBTOpt.SetupSlider(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.SLIDERS[key].Tooltip, 1, 100, 1, nil);
end
-- **********************************************************************************
-- Sets up a slider with the passed data.
-- **********************************************************************************
function MikSBTOpt.SetupSlider(frameName, label, tooltip, minValue, maxValue, step, varPath)
local associatedSliderFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedSliderFrame) then
associatedSliderFrame.savedLabel = label;
associatedSliderFrame.tooltipText = tooltip;
associatedSliderFrame.associatedVarPath = varPath;
-- Set the text for the slider.
getglobal(frameName .. "Text"):SetText(label);
-- Set the min/max values for the slider.
associatedSliderFrame:SetMinMaxValues(minValue, maxValue);
associatedSliderFrame:SetValueStep(step);
end
end
-- **********************************************************************************
-- Sets the slider's value for the passed frame name. If a value is passed
-- it is used, otherwise the function will attempt to get the value from the
-- associatedVarPath field of the slider frame.
-- **********************************************************************************
function MikSBTOpt.PopulateSlider(frameName, sliderValue)
local associatedSliderFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedSliderFrame) then
local tempValue = sliderValue;
-- Check if no value was passed.
if (tempValue == nil) then
-- Check if there is an associated variable path for the slider.
if (associatedSliderFrame.associatedVarPath) then
-- Get the selected value from the current profile.
tempValue = MikSBT.GetOptionFromVarPath(associatedSliderFrame.associatedVarPath);
end
end
-- Make sure there is a value to set.
if (tempValue ~= nil) then
-- Set the slider's value to the appropriate value.
associatedSliderFrame:SetValue(tempValue);
-- Update the label to reflect the new value.
getglobal(frameName .. "Text"):SetText(associatedSliderFrame.savedLabel .. ": " .. associatedSliderFrame:GetValue());
end
end
end
-- **********************************************************************************
-- Called when a slider values changes.
-- **********************************************************************************
function MikSBTOpt.SliderOnValueChanged()
-- Update the label to reflect the new value.
getglobal(this:GetName() .. "Text"):SetText(this.savedLabel .. ": " .. this:GetValue());
-- Check if the slider has an associated variable path.
if (this.associatedVarPath) then
-- Update current profile data.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, this:GetValue());
end
end
-- **********************************************************************************
-- Called when a font settings slider values changes.
-- **********************************************************************************
function MikSBTOpt.FontSettingsSliderOnValueChanged()
-- Call the normal slider OnValueChanged handler.
MikSBTOpt.SliderOnValueChanged();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Called when the scroll area mover control slider value changes.
-- **********************************************************************************
function MikSBTOpt.ScrollAreaMoverControlSliderOnValueChanged()
-- Call the normal slider OnValueChanged handler.
MikSBTOpt.SliderOnValueChanged();
-- Get the currently selected scroll area and the scroll area mover control frame.
local scrollArea = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollAreaDropdown"));
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Save the scroll height for the selected scroll area.
controlFrame.MSBTCurrentSettings[scrollArea .. "ScrollHeight"] = this:GetValue();
-- Reposition the scroll area mover frames.
MikSBTOpt.RepositionScrollAreaMoverFrames();
end
-------------------------------------------------------------------------------------
-- Button Functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the buttons.
-- **********************************************************************************
function MikSBTOpt.InitButtons()
-- Initialize the edit font settings buttons for master, incoming, outgoing, and notification.
local key = "Tab1FrameEditFontSettingsButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab1FrameEditBlizzardFontSettingsButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab2FrameEditFontSettingsButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab3FrameEditFontSettingsButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab4FrameEditFontSettingsButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
-- Initialize the profile manipulation buttons.
key = "Tab1FrameLoadProfileButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab1FrameDeleteProfileButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab1FrameResetProfileButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "Tab1FrameCreateProfileButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
-- Initialize the configure scroll area buttons for incoming, outgoing, and notification.
key = "Tab2FrameConfigureScrollAreaButton";
local commonLabel = MikSBTOpt.BUTTONS[key].Label;
local commonTooltip = MikSBTOpt.BUTTONS[key].Tooltip;
MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, commonLabel, commonTooltip);
key = "Tab3FrameConfigureScrollAreaButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, commonLabel, commonTooltip);
key = "Tab4FrameConfigureScrollAreaButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, commonLabel, commonTooltip);
-- Initialize the scroll area mover buttons.
key = "PreviewButton"; MikSBTOpt.SetupButton(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "SaveButton"; MikSBTOpt.SetupButton(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "CancelButton"; MikSBTOpt.SetupButton(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
-- Initialize the add trigger button.
key = "Tab5FrameAddTriggerButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
-- Initialize the save and cancel trigger buttons.
key = "SaveTriggerButton"; MikSBTOpt.SetupButton(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
key = "CancelTriggerButton"; MikSBTOpt.SetupButton(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
-- Initialize the add suppression button.
key = "Tab6FrameAddSuppressionButton"; MikSBTOpt.SetupButton(OPTIONS_FRAME_NAME .. key, MikSBTOpt.BUTTONS[key].Label, MikSBTOpt.BUTTONS[key].Tooltip);
end
-- **********************************************************************************
-- Sets up a button with the passed data.
-- **********************************************************************************
function MikSBTOpt.SetupButton(frameName, label, tooltip)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
associatedFrame.tooltipText = tooltip;
-- Set the text for the button.
associatedFrame:SetText(label);
associatedFrame:SetWidth(associatedFrame:GetTextWidth() + 40);
end
end
-- **********************************************************************************
-- Called when a button is clicked.
-- **********************************************************************************
function MikSBTOpt.ButtonOnClick()
-- Edit master font settings button.
if (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameEditFontSettingsButton") then
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].FontSettingsTitle);
MikSBTOpt.ShowMasterFontSettings();
-- Edit Blizzard scrolling text font.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameEditBlizzardFontSettingsButton") then
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Blizzard"].FontSettingsTitle);
MikSBTOpt.ShowBlizzardFontSettings();
-- Edit incoming font settings button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab2FrameEditFontSettingsButton") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab2FrameMessageEditbox");
-- Get the font settings frame, anchor it to the buton pushed, raise it, and change the title.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_INCOMING].Label);
MikSBTOpt.ShowScrollAreaFontSettings("Incoming");
-- Edit outgoing font settings button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab3FrameEditFontSettingsButton") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab3FrameMessageEditbox");
-- Get the font settings frame, anchor it to the buton pushed, raise it, and change the title.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_OUTGOING].Label);
MikSBTOpt.ShowScrollAreaFontSettings("Outgoing");
-- Edit notification font settings button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab4FrameEditFontSettingsButton") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab4FrameMessageEditbox");
-- Get the font settings frame, anchor it to the buton pushed, raise it, and change the title.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_NOTIFICATION].Label);
MikSBTOpt.ShowScrollAreaFontSettings("Notification");
-- Load profile button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameLoadProfileButton") then
-- Select the appropriate profile and update the current profile label.
MikSBT.SelectProfile(UIDropDownMenu_GetSelectedValue(getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown")));
getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameCurrentProfileLabel"):SetText(MikSBTOpt.MSG_CURRENT_PROFILE_TEXT .. ": " .. MikSBT_Save.CurrentProfile);
-- Enable and disable the load and delete profile buttons.
MikSBTOpt.EnableDisableProfileButtons();
-- Repopulate the options.
MikSBTOpt.PopulateProfileOptions();
-- Delete profile button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameDeleteProfileButton") then
local profileName = UIDropDownMenu_GetSelectedValue(getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown"));
MikSBT.DeleteProfile(profileName);
-- Refresh the available profiles for the dropdown.
MikSBTOpt.RefreshProfilesDropdown();
-- Select the current profile in the dropdown and update the current profile label.
MikSBTOpt.PopulateDropdown(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown", MikSBT_Save.CurrentProfile);
getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameCurrentProfileLabel"):SetText(MikSBTOpt.MSG_CURRENT_PROFILE_TEXT .. ": " .. MikSBT_Save.CurrentProfile);
-- Enable and disable the load and delete profile buttons.
MikSBTOpt.EnableDisableProfileButtons();
-- Repopulate the options.
MikSBTOpt.PopulateProfileOptions();
-- Reset profile button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameResetProfileButton") then
local profileName = UIDropDownMenu_GetSelectedValue(getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown"));
MikSBT.ResetProfile(profileName, true);
-- Repopulate the options.
MikSBTOpt.PopulateProfileOptions();
-- Create profile button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameCreateProfileButton") then
local profileNameEditbox = getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameNewProfileNameEditbox");
local profileName = profileNameEditbox:GetText();
-- Clear the text in the profile name editbox.
profileNameEditbox:SetText("");
-- Make sure there is a profile name.
if (profileName ~= "") then
MikSBT.CreateProfile(profileName);
-- Refresh the available profiles for the dropdown.
MikSBTOpt.RefreshProfilesDropdown();
-- Enable and disable the load and delete profile buttons.
MikSBTOpt.EnableDisableProfileButtons();
-- Hide the font settings frame when profile options are populated.
getglobal(FONT_SETTINGS_FRAME_NAME):Hide();
-- Hide the trigger frame when profile options are populated.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
end
-- Configure incoming scroll area button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab2FrameConfigureScrollAreaButton") then
-- Setup and show the scroll area mover frames.
MikSBTOpt.ShowScrollAreaMoverFrames("Incoming");
-- Configure outgoing scroll area button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab3FrameConfigureScrollAreaButton") then
-- Setup and show the scroll area mover frames.
MikSBTOpt.ShowScrollAreaMoverFrames("Outgoing");
-- Configure notification scroll area button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab4FrameConfigureScrollAreaButton") then
-- Setup and show the scroll area mover frames.
MikSBTOpt.ShowScrollAreaMoverFrames("Notification");
-- Scroll area mover preview button.
elseif (this:GetName() == SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "PreviewButton") then
-- Preview a test message in the new position.
MikSBTOpt.ScrollAreaMoverPreviewOnClick();
-- Scroll area mover save button.
elseif (this:GetName() == SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "SaveButton") then
-- Save the new position for the scroll area.
MikSBTOpt.ScrollAreaMoverSaveOnClick();
-- Scroll area mover cancel button.
elseif (this:GetName() == SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "CancelButton") then
-- Cancel the scroll area movement.
MikSBTOpt.ScrollAreaMoverCancelOnClick();
-- Incoming event font settings button.
elseif (this:GetParent().EventArea == "Incoming") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab2FrameMessageEditbox");
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
-- Make sure the event type is set for the button.
if (this:GetParent().EventType ~= nil) then
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(this:GetParent().FontFrameTitle);
MikSBTOpt.ShowEventFontSettings("Incoming", this:GetParent().EventType);
end
-- Outgoing event font settings button.
elseif (this:GetParent().EventArea == "Outgoing") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab3FrameMessageEditbox");
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
-- Make sure the event type is set for the button.
if (this:GetParent().EventType ~= nil) then
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(this:GetParent().FontFrameTitle);
MikSBTOpt.ShowEventFontSettings("Outgoing", this:GetParent().EventType);
end
-- Notification event font settings button.
elseif (this:GetParent().EventArea == "Notification") then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab4FrameMessageEditbox");
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
-- Make sure the event type is set for the button.
if (this:GetParent().EventType ~= nil) then
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(this:GetParent().FontFrameTitle);
MikSBTOpt.ShowEventFontSettings("Notification", this:GetParent().EventType);
end
-- Add trigger button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab5FrameAddTriggerButton") then
-- Hide the trigger configuration frame.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
-- Add a new trigger.
MikSBTOpt.AddNewTrigger();
-- Trigger event font settings button.
elseif (this:GetParent().EventArea == "Trigger" and string.find(this:GetName(), "EditFontSettingsButton")) then
-- Hide the trigger event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab5FrameMessageEditbox");
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
fontSettingsFrame:Raise();
-- Make sure the trigger key is set for the button.
if (this:GetParent().TriggerKey ~= nil) then
getglobal(FONT_SETTINGS_FRAME_NAME .. "Title"):SetText(this:GetParent().FontFrameTitle);
MikSBTOpt.ShowTriggerFontSettings(this:GetParent().TriggerKey);
end
-- Trigger edit config button.
elseif (this:GetParent().EventArea == "Trigger" and string.find(this:GetName(), "EditTriggerSettingsButton")) then
-- Hide the trigger event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab5FrameMessageEditbox");
local triggerConfigFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
triggerConfigFrame:SetPoint("TOPLEFT", this, "BOTTOMLEFT");
triggerConfigFrame:Raise();
-- Make sure the trigger key is set for the button.
if (this:GetParent().TriggerKey ~= nil) then
MikSBTOpt.ShowTriggerConfig(this:GetParent().TriggerKey);
end
-- Delete trigger button.
elseif (string.find(this:GetName(), "DeleteTriggerButton")) then
-- Hide the trigger event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab5FrameMessageEditbox");
-- Hide the trigger configuration frame.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
-- Make sure the trigger key is set for the button.
if (this:GetParent().TriggerKey ~= nil) then
MikSBTOpt.DeleteTrigger(this:GetParent().TriggerKey);
end
-- Save trigger config button.
elseif (this:GetName() == TRIGGER_CONFIGURATION_FRAME_NAME .. "SaveTriggerButton") then
-- Save the trigger config and hide the frame.
MikSBTOpt.SaveTriggerConfig();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
-- Cancel trigger config button.
elseif (this:GetName() == TRIGGER_CONFIGURATION_FRAME_NAME .. "CancelTriggerButton") then
-- Hide the frame.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME):Hide();
-- Add suppression button.
elseif (this:GetName() == OPTIONS_FRAME_NAME .. "Tab6FrameAddSuppressionButton") then
-- Add a new suppression.
MikSBTOpt.AddNewSuppression();
-- Delete suppression button.
elseif (string.find(this:GetName(), "DeleteSuppressionButton")) then
-- Hide the suppression event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab6FrameMessageEditbox");
-- Make sure the suppression key is set for the button.
local suppressionKey = this:GetParent().SuppressionKey;
if (suppressionKey ~= nil) then
-- Remove the suppression.
MikSBT.CurrentProfile.Suppressions[suppressionKey] = nil;
-- Repopulate the suppression settings.
MikSBTOpt.PopulateSuppressionSettings();
end
end
end
-- **********************************************************************************
-- This function will enable and disable the load and delete profile
-- buttons according to which profile is selected.
-- **********************************************************************************
function MikSBTOpt.EnableDisableProfileButtons()
local profileDropdown = getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameProfileDropdown");
local deleteProfileButton = getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameDeleteProfileButton");
local loadProfileButton = getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameLoadProfileButton");
-- Enable the profile button manipulation buttons.
deleteProfileButton:Enable();
loadProfileButton:Enable();
-- Check if the default profile is selected and disable the delete profile button.
if (UIDropDownMenu_GetSelectedValue(profileDropdown) == MikSBT.DEFAULT_PROFILE_NAME) then
deleteProfileButton:Disable();
end
-- Check if it's the currently loaded profile and disable the load button.
if (UIDropDownMenu_GetSelectedValue(profileDropdown) == MikSBT_Save.CurrentProfile) then
loadProfileButton:Disable();
end
end
-------------------------------------------------------------------------------------
-- Editbox Functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the editboxes.
-- **********************************************************************************
function MikSBTOpt.InitEditboxes()
-- Setup the new profile name editbox.
local key = "Tab1FrameNewProfileNameEditbox";
MikSBTOpt.SetupEditbox(OPTIONS_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
-- Setup the scroll area X and Y offset editboxes.
key = "XOffsetEditbox"; MikSBTOpt.SetupEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "YOffsetEditbox"; MikSBTOpt.SetupEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "IconNameEditbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "SearchPattern1Editbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
key = "SearchPattern2Editbox"; MikSBTOpt.SetupEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. key, MikSBTOpt.EDITBOXES[key].Label, MikSBTOpt.EDITBOXES[key].Tooltip, nil);
end
-- **********************************************************************************
-- Sets up an editbox with the passed data.
-- **********************************************************************************
function MikSBTOpt.SetupEditbox(frameName, label, tooltip, varPath)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
associatedFrame.tooltipText = tooltip;
associatedFrame.associatedVarPath = varPath;
-- Set the label for the editbox.
getglobal(frameName .. "Label"):SetText(label);
end
end
-- **********************************************************************************
-- Sets the editbox's text for the passed frame name. If a value is passed
-- it is used, otherwise the function will attempt to get the value from the
-- associatedVarPath field of the editbox frame.
-- **********************************************************************************
function MikSBTOpt.PopulateEditbox(frameName, editboxValue)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
local tempValue = editboxValue;
-- Check if no value was passed.
if (tempValue == nil) then
-- Check if there is an associated variable path for the editbox.
if (associatedFrame.associatedVarPath) then
tempValue = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath);
end
end
-- Make sure there is a value to set.
if (tempValue) then
-- Set the value.
associatedFrame:SetText(tempValue);
end
end
end
-- **********************************************************************************
-- Called when the text changes in an edit box.
-- **********************************************************************************
function MikSBTOpt.EditboxOnTextChanged()
-- New Profile Name.
if (this:GetName() == OPTIONS_FRAME_NAME .. "Tab1FrameNewProfileNameEditbox") then
local createProfileButton = getglobal(OPTIONS_FRAME_NAME .. "Tab1FrameCreateProfileButton");
-- Enable the create profile button.
createProfileButton:Enable();
-- Check if there is no text and disable the create profile button.
if (this:GetText() == "") then
createProfileButton:Disable();
-- Check if the profile already exists.
elseif (MikSBT.ProfileExists(this:GetText())) then
createProfileButton:Disable();
end
-- Scroll Area X Offset.
elseif (this:GetName() == SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "XOffsetEditbox") then
-- Get the number in the x offset editbox and make sure it's valid.
local xOffset = tonumber(this:GetText());
if (xOffset ~= nil) then
MikSBTOpt.SaveScrollAreaControlsToCurrentSettings();
MikSBTOpt.RepositionScrollAreaMoverFrames();
end
-- Scroll Area Y Offset.
elseif (this:GetName() == SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "YOffsetEditbox") then
-- Get the number in the y offset editbox and make sure it's valid.
local yOffset = tonumber(this:GetText());
if (yOffset ~= nil) then
MikSBTOpt.SaveScrollAreaControlsToCurrentSettings();
MikSBTOpt.RepositionScrollAreaMoverFrames();
end
else
-- Check if there is an associated variable path and set it to the correct value.
if (this.associatedVarPath) then
-- Set the associated variable in the current profile to the value.
MikSBT.SetOptionFromVarPath(this.associatedVarPath, this:GetText());
end
end
end
-------------------------------------------------------------------------------------
-- Color swatch functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Sets up a color swatch with the passed data.
-- **********************************************************************************
function MikSBTOpt.SetupColorSwatch(frameName, tooltip, varPath)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
associatedFrame.tooltipText = tooltip;
associatedFrame.associatedVarPath = varPath;
end
end
-- **********************************************************************************
-- Sets the color swatch's color for the passed frame name. If color values are
-- passed they are used, otherwise the function will attempt to get the values from
-- the associatedVarPath field of the color swatch frame.
-- **********************************************************************************
function MikSBTOpt.PopulateColorSwatch(frameName, colorR, colorG, colorB)
local associatedFrame = getglobal(frameName);
-- Make sure the associated frame exists.
if (associatedFrame) then
local tempR = colorR;
local tempG = colorG;
local tempB = colorB;
-- Check if no r value was passed.
if (tempR == nil) then
-- Check if there is an associated variable path for the color swatch.
if (associatedFrame.associatedVarPath) then
tempR = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath .. ".r");
end
end
-- Check if no g value was passed.
if (tempG == nil) then
-- Check if there is an associated variable path for the color swatch.
if (associatedFrame.associatedVarPath) then
tempG = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath .. ".g");
end
end
-- Check if no b value was passed.
if (tempB == nil) then
-- Check if there is an associated variable path for the color swatch.
if (associatedFrame.associatedVarPath) then
tempB = MikSBT.GetOptionFromVarPath(associatedFrame.associatedVarPath .. ".b");
end
end
-- Make sure there are values to set.
if (tempR ~= nil and tempG ~= nil and tempB ~= nil) then
-- Set the values.
local objColorSwatchTexture = getglobal(associatedFrame:GetName() .. "NormalTexture");
objColorSwatchTexture:SetVertexColor(tempR, tempG, tempB);
end
end
end
-- **********************************************************************************
-- Called when on of the color swatches for an event is clicked.
-- **********************************************************************************
function MikSBTOpt.ColorSwatchOnClick()
-- Check if the color swatch has an associated variable path.
if (this.associatedVarPath) then
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(this:GetParent():GetParent():GetName().. "MessageEditbox");
-- Get the r, g, and b values from the associated variable path and show the color picker.
this.r = MikSBT.GetOptionFromVarPath(this.associatedVarPath .. ".r");
this.g = MikSBT.GetOptionFromVarPath(this.associatedVarPath .. ".g");
this.b = MikSBT.GetOptionFromVarPath(this.associatedVarPath .. ".b");
this.swatchFunc = MikSBTOpt.ColorSwatchSetColor;
this.cancelFunc = MikSBTOpt.ColorSwatchCancel;
ColorPickerFrame.associatedVarPath = this.associatedVarPath;
ColorPickerFrame.associatedColorSwatch = this;
UIDropDownMenuButton_OpenColorPicker(this);
end
end
-- **********************************************************************************
-- Caled when a color is selected for an event in the color picker dialog.
-- **********************************************************************************
function MikSBTOpt.ColorSwatchSetColor()
-- Get the red, green, and blue color values.
local r, g, b = ColorPickerFrame:GetColorRGB();
-- Make sure there is an associated color swatch.
if (ColorPickerFrame.associatedColorSwatch) then
-- Get the associated color swatch texture and make sure it's valid.
local objColorSwatchTexture = getglobal(ColorPickerFrame.associatedColorSwatch:GetName() .. "NormalTexture");
if (objColorSwatchTexture) then
-- Set the associated
objColorSwatchTexture:SetVertexColor(r, g, b);
end
end
-- Check if the color swatch has an associated variable path.
if (ColorPickerFrame.associatedVarPath) then
-- Update current profile data.
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".r", r);
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".g", g);
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".b", b);
end
end
-- **********************************************************************************
-- Called when the color picker dialog is canceled.
-- **********************************************************************************
function MikSBTOpt.ColorSwatchCancel(previousValues)
-- Make sure there is an associated color swatch.
if (ColorPickerFrame.associatedColorSwatch) then
-- Get the associated color swatch texture and make sure it's valid.
local objColorSwatchTexture = getglobal(ColorPickerFrame.associatedColorSwatch:GetName() .. "NormalTexture");
if (objColorSwatchTexture) then
-- Set the associated
objColorSwatchTexture:SetVertexColor(previousValues.r, previousValues.g, previousValues.b);
end
end
-- Check if the color swatch has an associated variable path.
if (ColorPickerFrame.associatedVarPath) then
-- Update current profile data.
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".r", previousValues.r);
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".g", previousValues.g);
MikSBT.SetOptionFromVarPath(ColorPickerFrame.associatedVarPath .. ".b", previousValues.b);
end
end
-------------------------------------------------------------------------------------
-- Event settings functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Initializes all the events.
-- **********************************************************************************
function MikSBTOpt.InitEvents()
local index;
local evtData;
evtData = MikSBTOpt.INCOMING_EVENTS;
index = 1; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_DAMAGE";
index = 2; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_MISS";
index = 3; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_DODGE";
index = 4; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PARRY";
index = 5; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_BLOCK";
index = 6; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_ABSORB";
index = 7; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_IMMUNE";
index = 8; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_EVADE";
index = 9; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_DAMAGE";
index = 10; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_DOT";
index = 11; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_MISS";
index = 12; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_DODGE";
index = 13; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_PARRY";
index = 14; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_BLOCK";
index = 15; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_RESIST";
index = 16; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_ABSORB";
index = 17; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_IMMUNE";
index = 18; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_REFLECT";
index = 19; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_SPELL_EVADE";
index = 20; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_HEAL";
index = 21; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_HOT";
index = 22; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_ENVIRONMENTAL";
index = 23; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_DAMAGE";
index = 24; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_MISS";
index = 25; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_DODGE";
index = 26; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_PARRY";
index = 27; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_BLOCK";
index = 28; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_ABSORB";
index = 29; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_IMMUNE";
index = 30; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_EVADE";
index = 31; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_DAMAGE";
index = 32; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_DOT";
index = 33; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_MISS";
index = 34; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_DODGE";
index = 35; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_PARRY";
index = 36; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_BLOCK";
index = 37; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_RESIST";
index = 38; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_ABSORB";
index = 39; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_IMMUNE";
index = 40; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_EVADE";
index = 41; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_SPELL_REFLECT";
index = 42; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_HEAL";
index = 43; evtData[index].EventType = "MSBT_EVENTTYPE_INCOMING_PET_HOT";
evtData = MikSBTOpt.OUTGOING_EVENTS;
index = 1; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_DAMAGE";
index = 2; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_MISS";
index = 3; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_DODGE";
index = 4; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PARRY";
index = 5; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_BLOCK";
index = 6; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_ABSORB";
index = 7; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_IMMUNE";
index = 8; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_EVADE";
index = 9; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_DAMAGE";
index = 10; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_DOT";
index = 11; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_MISS";
index = 12; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_DODGE";
index = 13; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_PARRY";
index = 14; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_BLOCK";
index = 15; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_RESIST";
index = 16; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_ABSORB";
index = 17; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_IMMUNE";
index = 18; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_REFLECT";
index = 19; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_SPELL_EVADE";
index = 20; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_HEAL";
index = 21; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_HOT";
index = 22; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_DAMAGE";
index = 23; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_MISS";
index = 24; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_DODGE";
index = 25; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_PARRY";
index = 26; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_BLOCK";
index = 27; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_ABSORB";
index = 28; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_IMMUNE";
index = 29; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_EVADE";
index = 30; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_DAMAGE";
index = 31; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_MISS";
index = 32; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_DODGE";
index = 33; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_PARRY";
index = 34; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_BLOCK";
index = 35; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_RESIST";
index = 36; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_ABSORB";
index = 37; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_IMMUNE";
index = 38; evtData[index].EventType = "MSBT_EVENTTYPE_OUTGOING_PET_SPELL_EVADE";
evtData = MikSBTOpt.NOTIFICATION_EVENTS;
index = 1; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_DEBUFF";
index = 2; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_BUFF";
index = 3; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_ITEM_BUFF";
index = 4; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_BUFF_FADE";
index = 5; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_COMBAT_ENTER";
index = 6; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_COMBAT_LEAVE";
index = 7; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_POWER_GAIN";
index = 8; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_POWER_LOSS";
index = 9; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_CP_GAIN";
index = 10; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_CP_FULL";
index = 11; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_HONOR_GAIN";
index = 12; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_REP_GAIN";
index = 13; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_REP_LOSS";
index = 14; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_SKILL_GAIN";
index = 15; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_EXPERIENCE_GAIN";
index = 16; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_PC_KILLING_BLOW";
index = 17; evtData[index].EventType = "MSBT_EVENTTYPE_NOTIFICATION_NPC_KILLING_BLOW";
end
-- **********************************************************************************
-- This function populates the incoming event settings.
-- **********************************************************************************
function MikSBTOpt.PopulateIncomingEventSettings()
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab2FrameMessageEditbox");
-- Get the total number of events.
totalItems = table.getn(MikSBTOpt.INCOMING_EVENTS);
-- Get the incoming event settings scroll frame and its offset.
local objFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab2FrameEventsScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, EVENT_ITEMS_PER_PAGE, EVENT_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
local objEventSettings = nil;
-- Loop through all of the visible items.
for i = 1, EVENT_ITEMS_PER_PAGE do
objEventSettings = getglobal(OPTIONS_FRAME_NAME .. "Tab2FrameEvent" .. i);
-- Make sure the event settings object exists.
if (objEventSettings) then
-- Check if there is not event settings data for the event settings slot.
if (i > totalItems) then
-- Hide the event settings.
objEventSettings:Hide();
-- There is data for the event settings slot.
else
-- Get the data for the event.
local evtData = MikSBTOpt.INCOMING_EVENTS[i+skipCount];
-- Make sure there is an associated event type and set it.
if (evtData.EventType ~= nil) then
objEventSettings.EventType = evtData.EventType;
end
-- Set the font frame title to the checkbox's label and the event area.
objEventSettings.FontFrameTitle = evtData.Label;
objEventSettings.EventArea = "Incoming";
-- Setup the color swatch and populate it.
MikSBTOpt.SetupColorSwatch(objEventSettings:GetName() .. "ColorSwatch", MikSBTOpt.MSG_EVENT_COLOR_SWATCH_TOOLTIP, "EventSettings." .. objEventSettings.EventType .. ".FontSettings.Color");
MikSBTOpt.PopulateColorSwatch(objEventSettings:GetName() .. "ColorSwatch");
-- Setup and populate the event settings show checkbox.
MikSBTOpt.SetupCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox", evtData.Label, evtData.Tooltips.ShowCheckbox, "EventSettings." .. objEventSettings.EventType .. ".Show");
MikSBTOpt.PopulateCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox");
-- Set the message label to the appropriate text and the editbox's tooltip.
local objMessageLabel = getglobal(objEventSettings:GetName() .. "MessageLabel");
if (objMessageLabel) then
-- Set the tooltip for the label.
objMessageLabel:GetParent().tooltipText = MikSBTOpt.MSG_EVENT_MESSAGE_LABEL_TOOLTIP;
if (objEventSettings.EventType ~= nil) then
objMessageLabel:SetText(MikSBT.GetOptionFromVarPath("EventSettings." .. objEventSettings.EventType .. ".Message"));
end
end
objEventSettings.EditboxTooltip = evtData.Tooltips.Editbox;
-- Hide the sticky event checkbox.
getglobal(objEventSettings:GetName() .. "StickyEventCheckbox"):Hide();
-- Setup the edit font settings button for the event.
MikSBTOpt.SetupButton(objEventSettings:GetName() .. "EditFontSettingsButton", MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_LABEL, MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_TOOLTIP);
-- Show the event settings.
objEventSettings:Show();
end
end
end
end
-- **********************************************************************************
-- This function populates the outgoing event settings.
-- **********************************************************************************
function MikSBTOpt.PopulateOutgoingEventSettings()
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab3FrameMessageEditbox");
-- Get the total number of events.
totalItems = table.getn(MikSBTOpt.OUTGOING_EVENTS);
-- Get the outgoing event settings scroll frame and its offset.
local objFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab3FrameEventsScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, EVENT_ITEMS_PER_PAGE, EVENT_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
local objEventSettings = nil;
-- Loop through all of the visible items.
for i = 1, EVENT_ITEMS_PER_PAGE do
objEventSettings = getglobal(OPTIONS_FRAME_NAME .. "Tab3FrameEvent" .. i);
-- Make sure the event settings object exists.
if (objEventSettings) then
-- Check if there is not event settings data for the event settings slot.
if (i > totalItems) then
-- Hide the event settings.
objEventSettings:Hide();
-- There is data for the event settings slot.
else
-- Get the data for the event.
local evtData = MikSBTOpt.OUTGOING_EVENTS[i+skipCount];
-- Make sure there is an associated event type and set it.
if (evtData.EventType ~= nil) then
objEventSettings.EventType = evtData.EventType;
end
-- Set the font frame title to the checkbox's label and the event area.
objEventSettings.FontFrameTitle = evtData.Label;
objEventSettings.EventArea = "Outgoing";
-- Setup the color swatch and populate it.
MikSBTOpt.SetupColorSwatch(objEventSettings:GetName() .. "ColorSwatch", MikSBTOpt.MSG_EVENT_COLOR_SWATCH_TOOLTIP, "EventSettings." .. objEventSettings.EventType .. ".FontSettings.Color");
MikSBTOpt.PopulateColorSwatch(objEventSettings:GetName() .. "ColorSwatch");
-- Setup and populate the event settings show checkbox.
MikSBTOpt.SetupCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox", evtData.Label, evtData.Tooltips.ShowCheckbox, "EventSettings." .. objEventSettings.EventType .. ".Show");
MikSBTOpt.PopulateCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox");
-- Set the message label to the appropriate text and the editbox's tooltip.
local objMessageLabel = getglobal(objEventSettings:GetName() .. "MessageLabel");
if (objMessageLabel) then
-- Set the tooltip for the label.
objMessageLabel:GetParent().tooltipText = MikSBTOpt.MSG_EVENT_MESSAGE_LABEL_TOOLTIP;
if (objEventSettings.EventType ~= nil) then
objMessageLabel:SetText(MikSBT.GetOptionFromVarPath("EventSettings." .. objEventSettings.EventType .. ".Message"));
end
end
objEventSettings.EditboxTooltip = evtData.Tooltips.Editbox;
-- Hide the sticky event checkbox.
getglobal(objEventSettings:GetName() .. "StickyEventCheckbox"):Hide();
-- Setup the edit font settings button for the event.
MikSBTOpt.SetupButton(objEventSettings:GetName() .. "EditFontSettingsButton", MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_LABEL, MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_TOOLTIP);
-- Show the event settings.
objEventSettings:Show();
end
end
end
end
-- **********************************************************************************
-- This function populates the notification event settings.
-- **********************************************************************************
function MikSBTOpt.PopulateNotificationEventSettings()
-- Hide the event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab4FrameMessageEditbox");
-- Get the total number of events.
totalItems = table.getn(MikSBTOpt.NOTIFICATION_EVENTS);
-- Get the notification event settings scroll frame and its offset.
local objFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab4FrameEventsScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, EVENT_ITEMS_PER_PAGE, EVENT_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
local objEventSettings = nil;
-- Loop through all of the visible items.
for i = 1, EVENT_ITEMS_PER_PAGE do
objEventSettings = getglobal(OPTIONS_FRAME_NAME .. "Tab4FrameEvent" .. i);
-- Make sure the event settings object exists.
if (objEventSettings) then
-- Check if there is not event settings data for the event settings slot.
if (i > totalItems) then
-- Hide the event settings.
objEventSettings:Hide();
-- There is data for the event settings slot.
else
-- Get the data for the event.
local evtData = MikSBTOpt.NOTIFICATION_EVENTS[i+skipCount];
-- Make sure there is an associated event type and set it.
if (evtData.EventType ~= nil) then
objEventSettings.EventType = evtData.EventType;
end
-- Set the font frame title to the checkbox's label and the event area.
objEventSettings.FontFrameTitle = evtData.Label;
objEventSettings.EventArea = "Outgoing";
-- Setup the color swatch and populate it.
MikSBTOpt.SetupColorSwatch(objEventSettings:GetName() .. "ColorSwatch", MikSBTOpt.MSG_EVENT_COLOR_SWATCH_TOOLTIP, "EventSettings." .. objEventSettings.EventType .. ".FontSettings.Color");
MikSBTOpt.PopulateColorSwatch(objEventSettings:GetName() .. "ColorSwatch");
-- Setup and populate the event settings show checkbox.
MikSBTOpt.SetupCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox", evtData.Label, evtData.Tooltips.ShowCheckbox, "EventSettings." .. objEventSettings.EventType .. ".Show");
MikSBTOpt.PopulateCheckbox(objEventSettings:GetName() .. "ShowEventCheckbox");
-- Set the message label to the appropriate text and the editbox's tooltip.
local objMessageLabel = getglobal(objEventSettings:GetName() .. "MessageLabel");
if (objMessageLabel) then
-- Set the tooltip for the label.
objMessageLabel:GetParent().tooltipText = MikSBTOpt.MSG_EVENT_MESSAGE_LABEL_TOOLTIP;
if (objEventSettings.EventType ~= nil) then
objMessageLabel:SetText(MikSBT.GetOptionFromVarPath("EventSettings." .. objEventSettings.EventType .. ".Message"));
end
end
objEventSettings.EditboxTooltip = evtData.Tooltips.Editbox;
-- Setup the sticky checkbox for the event settings and populate it.
MikSBTOpt.SetupCheckbox(objEventSettings:GetName() .. "StickyEventCheckbox", nil, MikSBTOpt.MSG_EVENT_STICKY_CHECKBOX_TOOLTIP, "EventSettings." .. objEventSettings.EventType .. ".IsSticky");
MikSBTOpt.PopulateCheckbox(objEventSettings:GetName() .. "StickyEventCheckbox");
getglobal(objEventSettings:GetName() .. "StickyEventCheckbox"):Show();
-- Setup the edit font settings button for the event.
MikSBTOpt.SetupButton(objEventSettings:GetName() .. "EditFontSettingsButton", MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_LABEL, MikSBTOpt.MSG_EVENT_EDIT_FONT_SETTINGS_BUTTON_TOOLTIP);
-- Show the event settings.
objEventSettings:Show();
end
end
end
end
-- **********************************************************************************
-- This function populates the trigger event settings.
-- **********************************************************************************
function MikSBTOpt.PopulateTriggerEventSettings()
-- Hide the trigger event message editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab5FrameMessageEditbox");
-- Get the total number of events.
totalItems = MikSBTOpt.CountTriggers();
-- Get the trigger settings scroll frame and its offset.
local objFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab5FrameTriggersScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, TRIGGER_ITEMS_PER_PAGE, TRIGGER_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
local objTriggerEventSettings = nil;
-- Loop through all of the visible items.
for i = 1, TRIGGER_ITEMS_PER_PAGE do
objTriggerEventSettings = getglobal(OPTIONS_FRAME_NAME .. "Tab5FrameTrigger" .. i);
-- Make sure the trigger settings object exists.
if (objTriggerEventSettings) then
-- Check if there is not trigger settings data for the trigger settings slot.
if (i > totalItems) then
-- Hide the trigger settings.
objTriggerEventSettings:Hide();
-- There is data for the trigger settings slot.
else
-- Get the data for the trigger.
local triggerKey, triggerSettings = MikSBTOpt.GetTriggerSettings(i+skipCount);
-- Set the trigger key, font frame title to the checkbox's label and the event area.
objTriggerEventSettings.TriggerKey = triggerKey;
objTriggerEventSettings.FontFrameTitle = triggerSettings.EventSettings.Message;
objTriggerEventSettings.EventArea = "Trigger";
-- Setup the color swatch and populate it.
MikSBTOpt.SetupColorSwatch(objTriggerEventSettings:GetName() .. "ColorSwatch", MikSBTOpt.MSG_EVENT_COLOR_SWATCH_TOOLTIP, "Triggers." .. triggerKey .. ".EventSettings.FontSettings.Color");
MikSBTOpt.PopulateColorSwatch(objTriggerEventSettings:GetName() .. "ColorSwatch");
-- Setup and populate the trigger event settings enable checkbox.
MikSBTOpt.SetupCheckbox(objTriggerEventSettings:GetName() .. "EnableTriggerCheckbox", nil, MikSBTOpt.MSG_TRIGGER_ENABLE_TOOLTIP, "Triggers." .. triggerKey .. ".EventSettings.Show");
MikSBTOpt.PopulateCheckbox(objTriggerEventSettings:GetName() .. "EnableTriggerCheckbox");
-- Set the message label to the appropriate text and the editbox's tooltip.
local objMessageLabel = getglobal(objTriggerEventSettings:GetName() .. "MessageLabel");
if (objMessageLabel) then
-- Set the tooltip for the label.
objMessageLabel:GetParent().tooltipText = MikSBTOpt.MSG_TRIGGER_MESSAGE_LABEL_TOOLTIP;
objMessageLabel:SetText(triggerSettings.EventSettings.Message);
end
objTriggerEventSettings.EditboxTooltip = MikSBTOpt.MSG_TRIGGER_MESSAGE_EDITBOX_TOOLTIP;
-- Setup the sticky checkbox for the trigger event settings and populate it.
MikSBTOpt.SetupCheckbox(objTriggerEventSettings:GetName() .. "StickyEventCheckbox", nil, MikSBTOpt.MSG_TRIGGER_STICKY_CHECKBOX_TOOLTIP, "Triggers." .. triggerKey .. ".EventSettings.IsSticky");
MikSBTOpt.PopulateCheckbox(objTriggerEventSettings:GetName() .. "StickyEventCheckbox");
-- Setup the edit font settings button for the event.
MikSBTOpt.SetupButton(objTriggerEventSettings:GetName() .. "EditFontSettingsButton", MikSBTOpt.MSG_TRIGGER_EDIT_FONT_SETTINGS_BUTTON_LABEL, MikSBTOpt.MSG_TRIGGER_EDIT_FONT_SETTINGS_BUTTON_TOOLTIP);
-- Setup the edit trigger settings button for the event.
MikSBTOpt.SetupButton(objTriggerEventSettings:GetName() .. "EditTriggerSettingsButton", MikSBTOpt.MSG_TRIGGER_EDIT_TRIGGER_SETTINGS_BUTTON_LABEL, MikSBTOpt.MSG_TRIGGER_EDIT_TRIGGER_SETTINGS_BUTTON_TOOLTIP);
-- Setup the delete trigger button for the event.
MikSBTOpt.SetupButton(objTriggerEventSettings:GetName() .. "DeleteTriggerButton", "X", MikSBTOpt.MSG_TRIGGER_DELETE_TRIGGER_BUTTON_TOOLTIP);
-- Show the trigger settings.
objTriggerEventSettings:Show();
end
end
end
end
-- **********************************************************************************
-- This function populates the suppression settings.
-- **********************************************************************************
function MikSBTOpt.PopulateSuppressionSettings()
-- Hide the suppression editbox if it's shown.
MikSBTOpt.HideMessageEditbox(OPTIONS_FRAME_NAME .. "Tab6FrameMessageEditbox");
-- Get the total number of suppressions.
totalItems = MikSBTOpt.CountSuppressions();
-- Get the trigger settings scroll frame and its offset.
local objFrame = getglobal(OPTIONS_FRAME_NAME .. "Tab6FrameSuppressionsScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, SUPPRESSION_ITEMS_PER_PAGE, SUPPRESSION_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
-- Loop through all of the visible items.
for i = 1, SUPPRESSION_ITEMS_PER_PAGE do
objSuppressionItemSettings = getglobal(OPTIONS_FRAME_NAME .. "Tab6FrameSuppression" .. i);
-- Make sure the suppression settings object exists.
if (objSuppressionItemSettings) then
-- Check if there is not suppression settings data for the suppression settings slot.
if (i > totalItems) then
-- Hide the suppression settings.
objSuppressionItemSettings:Hide();
-- There is data for the suppression settings slot.
else
local suppressionKey, suppressionSettings = MikSBTOpt.GetSuppressionSettings(i+skipCount);
-- Set the suppression key.
objSuppressionItemSettings.SuppressionKey = suppressionKey;
-- Setup and populate the enable suppression checkbox.
MikSBTOpt.SetupCheckbox(objSuppressionItemSettings:GetName() .. "EnableSuppressionCheckbox", nil, MikSBTOpt.MSG_SUPPRESSION_ENABLE_TOOLTIP, "Suppressions." .. suppressionKey .. ".Enabled");
MikSBTOpt.PopulateCheckbox(objSuppressionItemSettings:GetName() .. "EnableSuppressionCheckbox");
-- Set the message label to the appropriate text and the editbox's tooltip.
local objMessageLabel = getglobal(objSuppressionItemSettings:GetName() .. "MessageLabel");
if (objMessageLabel) then
-- Set the tooltip for the label.
objMessageLabel:GetParent().tooltipText = MikSBTOpt.MSG_SUPPRESSION_MESSAGE_LABEL_TOOLTIP;
objMessageLabel:SetText(suppressionSettings.SearchPattern);
end
objSuppressionItemSettings.EditboxTooltip = MikSBTOpt.MSG_SUPPRESSION_MESSAGE_EDITBOX_TOOLTIP;
-- Setup the delete suppression button for the item.
MikSBTOpt.SetupButton(objSuppressionItemSettings:GetName() .. "DeleteSuppressionButton", "X", MikSBTOpt.MSG_SUPPRESSION_DELETE_SUPPRESSION_BUTTON_TOOLTIP);
-- Show the suppression settings.
objSuppressionItemSettings:Show();
end
end
end
end
-- **********************************************************************************
-- Returns the number of triggers defined.
-- **********************************************************************************
function MikSBTOpt.CountTriggers()
-- Declare a variable to count the number of triggers.
local numTriggers = 0;
-- Loop through all of the trigger entries.
for _, triggerSettings in MikSBT.CurrentProfile.Triggers do
numTriggers = numTriggers + 1;
end
-- Return the number of triggers.
return numTriggers;
end
-- **********************************************************************************
-- Returns the number of suppressions defined.
-- **********************************************************************************
function MikSBTOpt.CountSuppressions()
-- Declare a variable to count the number of suppressions.
local numSuppressions = 0;
-- Loop through all of the suppression entries.
for _, suppressionSettings in MikSBT.CurrentProfile.Suppressions do
numSuppressions = numSuppressions + 1;
end
-- Return the number of suppressions.
return numSuppressions;
end
-- **********************************************************************************
-- Returns the trigger settings for the passed trigger number.
-- **********************************************************************************
function MikSBTOpt.GetTriggerSettings(triggerNumber)
-- Declare a variable to count hold the number of the current trigger.
local curTrigger = 0;
-- Loop through all of the trigger entries.
for triggerKey, triggerSettings in MikSBT.CurrentProfile.Triggers do
curTrigger = curTrigger + 1;
-- Check if this is the requested trigger.
if (curTrigger == triggerNumber) then
return triggerKey, triggerSettings;
end
end
return nil;
end
-- **********************************************************************************
-- Returns the suppression settings for the passed suppression number.
-- **********************************************************************************
function MikSBTOpt.GetSuppressionSettings(suppressionNumber)
-- Declare a variable to count hold the number of the current suppression.
local curSuppression = 0;
-- Loop through all of the suppression entries.
for suppressionKey, suppressionSettings in MikSBT.CurrentProfile.Suppressions do
curSuppression = curSuppression + 1;
-- Check if this is the requested suppression.
if (curSuppression == suppressionNumber) then
return suppressionKey, suppressionSettings;
end
end
return nil;
end
-- **********************************************************************************
-- Called when one of the event message labels is clicked.
-- **********************************************************************************
function MikSBTOpt.EventMessageLabelOnClick()
-- Get the event settings frame.
local objEventSettings = this:GetParent();
-- Make sure the event type is set for the label and there is an event data index.
if (objEventSettings.EventType ~= nil) then
-- Get the clicked label and hide it.
local labelFrameName = this:GetName() .. "Label";
local objLabel = getglobal(labelFrameName);
objLabel:Hide();
-- Get the message editbox for the scroll area.
local editboxFrameName = objEventSettings:GetParent():GetName() .. "MessageEditbox";
local objEditbox = getglobal(editboxFrameName);
-- Hide the editbox to make sure everything is updated correctly.
objEditbox:Hide();
-- Show the editbox where the clicked label is, set the clicked label frame name for the editbox, and
-- set the previous text to the label's text.
objEditbox:Show();
objEditbox:ClearAllPoints();
objEditbox:SetPoint("TOPLEFT", this, "TOPLEFT");
objEditbox.ClickedLabelFrameName = labelFrameName;
objEditbox.PreviousText = objLabel:GetText();
-- Setup the event setting editbox and populate it.
MikSBTOpt.SetupEditbox(editboxFrameName, nil, MikSBTOpt.MSG_EVENT_MESSAGE_EDITBOX_TOOLTIP_PREFIX .. objEventSettings.EditboxTooltip, "EventSettings." .. objEventSettings.EventType .. ".Message");
MikSBTOpt.PopulateEditbox(editboxFrameName);
-- Set the focus to the editbox.
objEditbox:SetFocus();
end
end
-- **********************************************************************************
-- Called when one of the trigger message labels is clicked.
-- **********************************************************************************
function MikSBTOpt.TriggerMessageLabelOnClick()
-- Get the trigger event settings frame.
local objTriggerEventSettings = this:GetParent();
-- Make sure the trigger key is set for the label.
if (objTriggerEventSettings.TriggerKey ~= nil) then
-- Get the clicked label and hide it.
local labelFrameName = this:GetName() .. "Label";
local objLabel = getglobal(labelFrameName);
objLabel:Hide();
-- Get the message editbox.
local editboxFrameName = objTriggerEventSettings:GetParent():GetName() .. "MessageEditbox";
local objEditbox = getglobal(editboxFrameName);
-- Hide the editbox to make sure everything is updated correctly.
objEditbox:Hide();
-- Show the editbox where the clicked label is, set the clicked label frame name for the editbox, and
-- set the previous text to the label's text.
objEditbox:Show();
objEditbox:ClearAllPoints();
objEditbox:SetPoint("TOPLEFT", this, "TOPLEFT");
objEditbox.ClickedLabelFrameName = labelFrameName;
objEditbox.PreviousText = objLabel:GetText();
-- Setup the event setting editbox and populate it.
MikSBTOpt.SetupEditbox(editboxFrameName, nil, objTriggerEventSettings.EditboxTooltip, "Triggers." .. objTriggerEventSettings.TriggerKey .. ".EventSettings.Message");
MikSBTOpt.PopulateEditbox(editboxFrameName);
-- Set the focus to the editbox.
objEditbox:SetFocus();
end
end
-- **********************************************************************************
-- Called when one of the suppression message labels is clicked.
-- **********************************************************************************
function MikSBTOpt.SuppressionMessageLabelOnClick()
-- Get the suppression settings frame.
local objSuppressionSettings = this:GetParent();
-- Make sure the suppression key is set for the label.
if (objSuppressionSettings.SuppressionKey ~= nil) then
-- Get the clicked label and hide it.
local labelFrameName = this:GetName() .. "Label";
local objLabel = getglobal(labelFrameName);
objLabel:Hide();
-- Get the message editbox.
local editboxFrameName = objSuppressionSettings:GetParent():GetName() .. "MessageEditbox";
local objEditbox = getglobal(editboxFrameName);
-- Hide the editbox to make sure everything is updated correctly.
objEditbox:Hide();
-- Show the editbox where the clicked label is, set the clicked label frame name for the editbox, and
-- set the previous text to the label's text.
objEditbox:Show();
objEditbox:ClearAllPoints();
objEditbox:SetPoint("TOPLEFT", this, "TOPLEFT");
objEditbox.ClickedLabelFrameName = labelFrameName;
objEditbox.PreviousText = objLabel:GetText();
-- Setup the event setting editbox and populate it.
MikSBTOpt.SetupEditbox(editboxFrameName, nil, objSuppressionSettings.EditboxTooltip, "Suppressions." .. objSuppressionSettings.SuppressionKey .. ".SearchPattern");
MikSBTOpt.PopulateEditbox(editboxFrameName);
-- Set the focus to the editbox.
objEditbox:SetFocus();
end
end
-- **********************************************************************************
-- Hides the message editbox.
-- **********************************************************************************
function MikSBTOpt.HideMessageEditbox(editboxFrameName)
-- Check if the event message editbox is shown and hide it.
local objEditbox = getglobal(editboxFrameName);
if (objEditbox and objEditbox:IsVisible()) then
objEditbox:Hide();
end
end
-------------------------------------------------------------------------------------
-- Font settings functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Show master font settings.
-- **********************************************************************************
function MikSBTOpt.ShowMasterFontSettings()
-- Show the crit font settings controls.
MikSBTOpt.ShowCritFontControls();
-- Setup the normal font dropdown.
local key = "FontDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].Font, MikSBTOpt.FontSettingsDropdownOnClick, MikSBT.AVAILABLE_FONTS, "MasterFontSettings.Normal.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the normal font outline dropdown.
key = "FontOutlineDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].Outline, MikSBTOpt.FontSettingsDropdownOnClick, MikSBT.AVAILABLE_OUTLINES, "MasterFontSettings.Normal.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font dropdown.
key = "FontCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].FontCrit, MikSBTOpt.FontSettingsDropdownOnClick, MikSBT.AVAILABLE_FONTS, "MasterFontSettings.Crit.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font outline dropdown.
key = "FontOutlineCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].OutlineCrit, MikSBTOpt.FontSettingsDropdownOnClick, MikSBT.AVAILABLE_OUTLINES, "MasterFontSettings.Crit.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the normal font size slider.
key = "FontSizeSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].FontSize, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "MasterFontSettings.Normal.FontSize");
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font size slider.
key = "FontSizeCritSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Master"].FontSizeCrit, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "MasterFontSettings.Crit.FontSize");
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. key);
-- Hide the inherit font size and crit font size checkboxes.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):Hide();
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):Hide();
-- Show the font size and crit size sliders.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Show();
-- Show the font settings frame.
getglobal(FONT_SETTINGS_FRAME_NAME):Show();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Show blizzard font settings.
-- **********************************************************************************
function MikSBTOpt.ShowBlizzardFontSettings()
-- Hide the crit font settings controls.
MikSBTOpt.HideCritFontControls()
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
fontSettingsFrame.InheritedOutlineIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.OutlineIndex");
fontSettingsFrame.InheritedFontSize = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontSize");
-- Setup the normal font dropdown.
local key = "FontDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Blizzard"].Font, MikSBTOpt.FontSettingsDropdownOnClick, MikSBT.AVAILABLE_FONTS, "BlizzardFontSettings.Normal.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Hide the inherit font size and crit font size checkboxes.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):Hide();
-- Hide the dropdown button.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontOutlineDropdown"):Hide();
-- Show the font size and crit size sliders.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Hide();
-- Show the font settings frame.
getglobal(FONT_SETTINGS_FRAME_NAME):Show();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
MikSBT.Print("Restart the game or disconnect to apply Game Damage font.", 1, 0, 0)
end
-- **********************************************************************************
-- Show scroll area font settings .
-- **********************************************************************************
function MikSBTOpt.ShowScrollAreaFontSettings(scrollArea)
-- Get the font settings frame.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
-- Get the inherited font settings.
fontSettingsFrame.InheritedFontIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontIndex");
fontSettingsFrame.InheritedOutlineIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.OutlineIndex");
fontSettingsFrame.InheritedFontSize = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontSize");
fontSettingsFrame.InheritedFontCritIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.FontIndex");
fontSettingsFrame.InheritedOutlineCritIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.OutlineIndex");
fontSettingsFrame.InheritedFontSizeCrit = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.FontSize");
-- Show the crit font settings controls.
MikSBTOpt.ShowCritFontControls();
-- Setup the normal font dropdown.
local key = "FontDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].Font, MikSBTOpt.FontSettingsDropdownOnClick, availableFontsInherit, "DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the normal font outline dropdown.
key = "FontOutlineDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].Outline, MikSBTOpt.FontSettingsDropdownOnClick, availableOutlinesInherit, "DisplaySettings." .. scrollArea .. ".FontSettings.Normal.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font dropdown.
key = "FontCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].FontCrit, MikSBTOpt.FontSettingsDropdownOnClick, availableFontsInherit, "DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font outline dropdown.
key = "FontOutlineCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].OutlineCrit, MikSBTOpt.FontSettingsDropdownOnClick, availableOutlinesInherit, "DisplaySettings." .. scrollArea .. ".FontSettings.Crit.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Show the inherit font size and crit font size checkboxes.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):Show();
-- Setup the inherit normal font size checkbox.
key = "InheritFontSizeCheckbox";
MikSBTOpt.SetupCheckbox(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].InheritFontSize, "DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontSize");
-- Setup the inherit crit font size checkbox.
key = "InheritFontSizeCritCheckbox";
MikSBTOpt.SetupCheckbox(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].InheritFontSizeCrit, "DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontSize");
-- Setup the normal font size slider.
key = "FontSizeSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].FontSize, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontSize");
-- Setup the crit font size slider.
key = "FontSizeCritSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["ScrollArea"].FontSizeCrit, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontSize");
-- Check if the normal font size is inherited.
if (MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontSize") == 0) then
-- Check the inherited checkbox and hide the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(true);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Hide();
else
-- Uncheck the inherited checkbox and setup the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(false);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Show();
-- Populate the normal font size slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider");
end
-- Check if the critical font size is inherited.
if (MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontSize") == 0) then
-- Check the inherited checkbox and hide the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):SetChecked(true);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Hide();
else
-- Uncheck the inherited checkbox and setup the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):SetChecked(false);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Show();
-- Populate the crit font size slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider");
end
-- Show the font settings frame.
fontSettingsFrame:Show();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Show event font settings.
-- **********************************************************************************
function MikSBTOpt.ShowEventFontSettings(scrollArea, eventType)
-- Get the inherited font index.
local inheritedFontIndex = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontIndex");
if (inheritedFontIndex == 0) then
inheritedFontIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontIndex");
end
-- Get the inherited outline index.
local inheritedOutlineIndex = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Normal.OutlineIndex");
if (inheritedOutlineIndex == 0) then
inheritedOutlineIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.OutlineIndex");
end
-- Get the inherited font size.
local inheritedFontSize = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Normal.FontSize");
if (inheritedFontSize == 0) then
-- Get the font size from the scroll area and check if it's inherited from the master font size.
inheritedFontSize = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontSize");
end
-- Get the inherited crit font index.
local inheritedFontCritIndex = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontIndex");
if (inheritedFontCritIndex == 0) then
inheritedFontCritIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.FontIndex");
end
-- Get the inherited crit outline index.
local inheritedOutlineCritIndex = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Crit.OutlineIndex");
if (inheritedOutlineCritIndex == 0) then
inheritedOutlineCritIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.OutlineIndex");
end
-- Get the inherited crit font size.
local inheritedFontSizeCrit = MikSBT.GetOptionFromVarPath("DisplaySettings." .. scrollArea .. ".FontSettings.Crit.FontSize");
if (inheritedFontSizeCrit == 0) then
-- Get the font size from the scroll area and check if it's inherited from the master font size.
inheritedFontSizeCrit = MikSBT.GetOptionFromVarPath("MasterFontSettings.Crit.FontSize");
end
-- Get the font settings frame.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
-- Set the inherited settings to the frame.
fontSettingsFrame.InheritedFontIndex = inheritedFontIndex;
fontSettingsFrame.InheritedOutlineIndex = inheritedOutlineIndex;
fontSettingsFrame.InheritedFontSize = inheritedFontSize;
fontSettingsFrame.InheritedFontCritIndex = inheritedFontCritIndex;
fontSettingsFrame.InheritedOutlineCritIndex = inheritedOutlineCritIndex;
fontSettingsFrame.InheritedFontSizeCrit = inheritedFontSizeCrit;
-- Setup the normal font dropdown.
local key = "FontDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].Font, MikSBTOpt.FontSettingsDropdownOnClick, availableFontsInherit, "EventSettings." .. eventType .. ".FontSettings.Normal.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the normal font outline dropdown.
key = "FontOutlineDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].Outline, MikSBTOpt.FontSettingsDropdownOnClick, availableOutlinesInherit, "EventSettings." .. eventType .. ".FontSettings.Normal.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Show the inherit normal font size checkbox.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):Show();
-- Setup the inherit normal font size checkbox.
key = "InheritFontSizeCheckbox";
MikSBTOpt.SetupCheckbox(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].InheritFontSize, "EventSettings." .. eventType .. ".FontSettings.Normal.FontSize");
-- Setup the normal font size slider.
key = "FontSizeSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].FontSize, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "EventSettings." .. eventType .. ".FontSettings.Normal.FontSize");
-- Check if the normal font size is inherited.
if (MikSBT.GetOptionFromVarPath("EventSettings." .. eventType .. ".FontSettings.Normal.FontSize") == 0) then
-- Check the inherited checkbox and hide the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(true);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Hide();
else
-- Uncheck the inherited checkbox and setup the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(false);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Show();
-- Populate the normal font size slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider");
end
-- Check if the event type supports crits.
if (MikSBT.CurrentProfile.EventSettings[eventType].FontSettings.Crit ~= nil) then
-- Show the crit font settings controls.
MikSBTOpt.ShowCritFontControls();
-- Setup the crit font dropdown.
key = "FontCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].FontCrit, MikSBTOpt.FontSettingsDropdownOnClick, availableFontsInherit, "EventSettings." .. eventType .. ".FontSettings.Crit.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the crit font outline dropdown.
key = "FontOutlineCritDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].OutlineCrit, MikSBTOpt.FontSettingsDropdownOnClick, availableOutlinesInherit, "EventSettings." .. eventType .. ".FontSettings.Crit.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Show the inherit crit font size checkbox.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):Show();
-- Setup the inherit crit font size checkbox.
key = "InheritFontSizeCritCheckbox";
MikSBTOpt.SetupCheckbox(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].InheritFontSizeCrit, "EventSettings." .. eventType .. ".FontSettings.Crit.FontSize");
-- Setup the crit font size slider.
key = "FontSizeCritSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Event"].FontSizeCrit, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "EventSettings." .. eventType .. ".FontSettings.Crit.FontSize");
-- Check if the critical font size is inherited.
if (MikSBT.GetOptionFromVarPath("EventSettings." .. eventType .. ".FontSettings.Crit.FontSize") == 0) then
-- Check the inherited checkbox and hide the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):SetChecked(true);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Hide();
else
-- Uncheck the inherited checkbox and setup the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):SetChecked(false);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Show();
-- Populate the crit font size slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider");
end
-- The event type does not support crits.
else
-- Hide the crit font settings controls.
MikSBTOpt.HideCritFontControls();
end
-- Show the font settings frame.
fontSettingsFrame:Show();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Show trigger font settings.
-- **********************************************************************************
function MikSBTOpt.ShowTriggerFontSettings(triggerKey)
-- Get the inherited font index.
local inheritedFontIndex = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FontSettings.Normal.FontIndex");
if (inheritedFontIndex == 0) then
inheritedFontIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontIndex");
end
-- Get the inherited outline index.
local inheritedOutlineIndex = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FontSettings.Normal.OutlineIndex");
if (inheritedOutlineIndex == 0) then
inheritedOutlineIndex = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.OutlineIndex");
end
-- Get the inherited font size.
local inheritedFontSize = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FontSettings.Normal.FontSize");
if (inheritedFontSize == 0) then
-- Get the font size from the scroll area and check if it's inherited from the master font size.
inheritedFontSize = MikSBT.GetOptionFromVarPath("MasterFontSettings.Normal.FontSize");
end
-- Get the font settings frame.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
-- Set the inherited settings to the frame.
fontSettingsFrame.InheritedFontIndex = inheritedFontIndex;
fontSettingsFrame.InheritedOutlineIndex = inheritedOutlineIndex;
fontSettingsFrame.InheritedFontSize = inheritedFontSize;
-- Setup the normal font dropdown.
local key = "FontDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Trigger"].Font, MikSBTOpt.FontSettingsDropdownOnClick, availableFontsInherit, "Triggers." .. triggerKey .. ".EventSettings.FontSettings.Normal.FontIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Setup the normal font outline dropdown.
key = "FontOutlineDropdown";
MikSBTOpt.SetupDropdown(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.DROPDOWNS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Trigger"].Outline, MikSBTOpt.FontSettingsDropdownOnClick, availableOutlinesInherit, "Triggers." .. triggerKey .. ".EventSettings.FontSettings.Normal.OutlineIndex");
MikSBTOpt.PopulateDropdown(FONT_SETTINGS_FRAME_NAME .. key);
-- Show the inherit normal font size checkbox.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):Show();
-- Setup the inherit normal font size checkbox.
key = "InheritFontSizeCheckbox";
MikSBTOpt.SetupCheckbox(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.CHECKBOXES[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Trigger"].InheritFontSize, "Triggers." .. triggerKey .. ".EventSettings.FontSettings.Normal.FontSize");
-- Setup the normal font size slider.
key = "FontSizeSlider";
MikSBTOpt.SetupSlider(FONT_SETTINGS_FRAME_NAME .. key, MikSBTOpt.SLIDERS[key].Label, MikSBTOpt.FONT_SETTINGS_TOOLTIPS["Trigger"].FontSize, MIN_FONT_SIZE, MAX_FONT_SIZE, 2, "Triggers." .. triggerKey .. ".EventSettings.FontSettings.Normal.FontSize");
-- Check if the normal font size is inherited.
if (MikSBT.GetOptionFromVarPath("Triggers." .. triggerKey .. ".EventSettings.FontSettings.Normal.FontSize") == 0) then
-- Check the inherited checkbox and hide the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(true);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Hide();
else
-- Uncheck the inherited checkbox and setup the slider.
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCheckbox"):SetChecked(false);
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider"):Show();
-- Populate the normal font size slider.
MikSBTOpt.PopulateSlider(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider");
end
-- Hide the crit font settings controls.
MikSBTOpt.HideCritFontControls();
-- Show the font settings frame.
fontSettingsFrame:Show();
-- Update the font previews.
MikSBTOpt.UpdateFontPreviews();
end
-- **********************************************************************************
-- Updates the font previews with values selected.
-- **********************************************************************************
function MikSBTOpt.UpdateFontPreviews()
-- Get the font settings frame.
local fontSettingsFrame = getglobal(FONT_SETTINGS_FRAME_NAME);
-- Get the selected normal font index.
local fontIndex = UIDropDownMenu_GetSelectedValue(getglobal(FONT_SETTINGS_FRAME_NAME .. "FontDropdown"));
if (fontIndex == 0 or fontIndex == nil) then
fontIndex = fontSettingsFrame.InheritedFontIndex;
end
-- Get the selected normal outline index.
local outlineIndex = UIDropDownMenu_GetSelectedValue(getglobal(FONT_SETTINGS_FRAME_NAME .. "FontOutlineDropdown"));
if (outlineIndex == 0 or outlineIndex == nil) then
outlineIndex = fontSettingsFrame.InheritedOutlineIndex;
end
-- Check if the normal font size slider is shown.
local slider = getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeSlider");
local fontSize;
if (slider:IsShown()) then
-- Get the selected font size.
fontSize = slider:GetValue();
else
-- Get the inherited font size.
fontSize = fontSettingsFrame.InheritedFontSize;
end
-- Make sure the normal font index is valid.
if (fontIndex ~= nil) then
local previewText = getglobal(FONT_SETTINGS_FRAME_NAME .. "NormalPreviewText");
previewText:SetFont(MikSBT.AVAILABLE_FONTS[fontIndex].Path, fontSize, MikSBT.AVAILABLE_OUTLINES[outlineIndex].Style);
end
-- Check if crits are to be shown.
if (getglobal(FONT_SETTINGS_FRAME_NAME .. "CritPreview"):IsShown()) then
-- Get the selected crit font index.
local fontCritIndex = UIDropDownMenu_GetSelectedValue(getglobal(FONT_SETTINGS_FRAME_NAME .. "FontCritDropdown"));
if (fontCritIndex == 0) then
fontCritIndex = fontSettingsFrame.InheritedFontCritIndex;
end
-- Get the selected crit outline index.
local outlineCritIndex = UIDropDownMenu_GetSelectedValue(getglobal(FONT_SETTINGS_FRAME_NAME .. "FontOutlineCritDropdown"));
if (outlineCritIndex == 0) then
outlineCritIndex = fontSettingsFrame.InheritedOutlineCritIndex;
end
-- Check if the crit font size slider is shown.
local slider = getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider");
local fontSizeCrit;
if (slider:IsShown()) then
-- Get the selected crit font size.
fontSizeCrit = slider:GetValue();
else
-- Get the inherited crit font size.
fontSizeCrit = fontSettingsFrame.InheritedFontSizeCrit;
end
-- Make sure the crit font index is valid.
if (fontCritIndex ~= nil) then
local previewText = getglobal(FONT_SETTINGS_FRAME_NAME .. "CritPreviewText");
previewText:SetFont(MikSBT.AVAILABLE_FONTS[fontCritIndex].Path, fontSizeCrit, MikSBT.AVAILABLE_OUTLINES[outlineCritIndex].Style);
end
end
end
-- **********************************************************************************
-- Shows the crit font settings controls.
-- **********************************************************************************
function MikSBTOpt.ShowCritFontControls()
-- Show all of the crit font settings controls.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontCritDropdown"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontOutlineCritDropdown"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Show();
getglobal(FONT_SETTINGS_FRAME_NAME .. "CritPreview"):Show();
-- Move the normal font controls back to the left side.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontDropdown"):SetPoint("TOPLEFT", FONT_SETTINGS_FRAME_NAME, "TOPLEFT", 0, -60);
end
-- **********************************************************************************
-- Hides the crit font settings controls.
-- **********************************************************************************
function MikSBTOpt.HideCritFontControls()
-- Hide all of the crit font settings controls.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontCritDropdown"):Hide();
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontOutlineCritDropdown"):Hide();
getglobal(FONT_SETTINGS_FRAME_NAME .. "InheritFontSizeCritCheckbox"):Hide();
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontSizeCritSlider"):Hide();
getglobal(FONT_SETTINGS_FRAME_NAME .. "CritPreview"):Hide();
-- Center the normal font controls.
getglobal(FONT_SETTINGS_FRAME_NAME .. "FontDropdown"):SetPoint("TOPLEFT", FONT_SETTINGS_FRAME_NAME, "TOPLEFT", 85, -60);
end
-------------------------------------------------------------------------------------
-- Scroll area mover functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Setup and show the scroll area mover controls.
-- **********************************************************************************
function MikSBTOpt.ShowScrollAreaMoverFrames(scrollArea)
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Check if the original settings settings table hasn't been created yet and create it if not.
if (not controlFrame.MSBTOriginalSettings) then controlFrame.MSBTOriginalSettings = {}; end
-- Save the original incoming scroll area settings into the control frame.
controlFrame.MSBTOriginalSettings.IncomingAnimationStyle = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.AnimationStyle");
controlFrame.MSBTOriginalSettings.IncomingScrollDirection = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.ScrollDirection");
controlFrame.MSBTOriginalSettings.IncomingTextAlignIndex = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.FontSettings.TextAlignIndex");
controlFrame.MSBTOriginalSettings.IncomingScrollHeight = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.ScrollHeight");
controlFrame.MSBTOriginalSettings.IncomingXOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.FrameOffsets.x");
controlFrame.MSBTOriginalSettings.IncomingYOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Incoming.FrameOffsets.y");
-- Save the original outgoing scroll area settings into the control frame.
controlFrame.MSBTOriginalSettings.OutgoingAnimationStyle = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.AnimationStyle");
controlFrame.MSBTOriginalSettings.OutgoingScrollDirection = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.ScrollDirection");
controlFrame.MSBTOriginalSettings.OutgoingTextAlignIndex = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.FontSettings.TextAlignIndex");
controlFrame.MSBTOriginalSettings.OutgoingScrollHeight = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.ScrollHeight");
controlFrame.MSBTOriginalSettings.OutgoingXOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.FrameOffsets.x");
controlFrame.MSBTOriginalSettings.OutgoingYOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Outgoing.FrameOffsets.y");
-- Save the original notification scroll area settings into the control frame.
controlFrame.MSBTOriginalSettings.NotificationAnimationStyle = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.AnimationStyle");
controlFrame.MSBTOriginalSettings.NotificationScrollDirection = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.ScrollDirection");
controlFrame.MSBTOriginalSettings.NotificationTextAlignIndex = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FontSettings.TextAlignIndex");
controlFrame.MSBTOriginalSettings.NotificationScrollHeight = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.ScrollHeight");
controlFrame.MSBTOriginalSettings.NotificationXOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FrameOffsets.x");
controlFrame.MSBTOriginalSettings.NotificationYOffset = MikSBT.GetOptionFromVarPath("DisplaySettings.Notification.FrameOffsets.y");
-- Set the starting current settings.
controlFrame.MSBTCurrentSettings = MikSBT.CopyTable(controlFrame.MSBTOriginalSettings);
-- Select the starting scroll area based on the passed scroll area.
MikSBTOpt.PopulateDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollAreaDropdown", scrollArea);
MikSBTOpt.PopulateScrollAreaControls(scrollArea);
-- Get the scroll area mover frames for each scroll area.
local incomingFrame = getglobal(SCROLL_AREA_MOVER_INCOMING_FRAME_NAME);
local outgoingFrame = getglobal(SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME);
local notificationFrame = getglobal(SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME);
-- Set the tooltip for the scroll area mover frames.
incomingFrame.tooltipText = MikSBTOpt.FRAMES[SCROLL_AREA_MOVER_INCOMING_FRAME_NAME].Tooltip;
outgoingFrame.tooltipText = MikSBTOpt.FRAMES[SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME].Tooltip;
notificationFrame.tooltipText = MikSBTOpt.FRAMES[SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME].Tooltip;
-- Reposition the scroll area mover frames.
MikSBTOpt.RepositionScrollAreaMoverFrames();
-- Populates the scroll area mover coordinates.
MikSBTOpt.PopulateScrollAreaMoverCoordinates()
-- Show the scroll area mover frames.
controlFrame:Show();
incomingFrame:Show();
outgoingFrame:Show();
notificationFrame:Show();
-- Hide the options frame.
getglobal(OPTIONS_FRAME_NAME):Hide();
end
-- **********************************************************************************
-- Closes the scroll area mover controls and opens the options screen back up.
-- **********************************************************************************
function MikSBTOpt.HideScrollAreaMoverFrames()
-- Show the options frame.
getglobal(OPTIONS_FRAME_NAME):Show();
-- Hide the scroll area mover frames.
getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME):Hide();
getglobal(SCROLL_AREA_MOVER_INCOMING_FRAME_NAME):Hide();
getglobal(SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME):Hide();
getglobal(SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME):Hide();
end
-- **********************************************************************************
-- Repositions all of the scroll area mover frames with the values in the current
-- settings of the control frame.
-- **********************************************************************************
function MikSBTOpt.RepositionScrollAreaMoverFrames()
-- Get the scroll area mover control frame and all of the scroll area mover frames.
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
local incomingFrame = getglobal(SCROLL_AREA_MOVER_INCOMING_FRAME_NAME);
local outgoingFrame = getglobal(SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME);
local notificationFrame = getglobal(SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME);
-- Reposition the incoming scroll area frame.
incomingFrame:SetHeight(controlFrame.MSBTCurrentSettings.IncomingScrollHeight);
incomingFrame:ClearAllPoints();
incomingFrame:SetPoint("BOTTOM", UIParent, "CENTER", controlFrame.MSBTCurrentSettings.IncomingXOffset, controlFrame.MSBTCurrentSettings.IncomingYOffset);
-- Reposition the outgoing scroll area frame.
outgoingFrame:SetHeight(controlFrame.MSBTCurrentSettings.OutgoingScrollHeight);
outgoingFrame:ClearAllPoints();
outgoingFrame:SetPoint("BOTTOM", UIParent, "CENTER", controlFrame.MSBTCurrentSettings.OutgoingXOffset, controlFrame.MSBTCurrentSettings.OutgoingYOffset);
-- Reposition the notification scroll area frame.
notificationFrame:SetHeight(controlFrame.MSBTCurrentSettings.NotificationScrollHeight);
notificationFrame:ClearAllPoints();
notificationFrame:SetPoint("BOTTOM", UIParent, "CENTER", controlFrame.MSBTCurrentSettings.NotificationXOffset, controlFrame.MSBTCurrentSettings.NotificationYOffset);
-- Populate the scroll area mover coordinates.
MikSBTOpt.PopulateScrollAreaMoverCoordinates();
end
-- **********************************************************************************
-- Colorizes the scroll area mover frames.
-- **********************************************************************************
function MikSBTOpt.ColorizeScrollAreaMoverFrames(scrollArea)
-- Get the scroll area mover frames for each scroll area.
local incomingFrame = getglobal(SCROLL_AREA_MOVER_INCOMING_FRAME_NAME);
local outgoingFrame = getglobal(SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME);
local notificationFrame = getglobal(SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME);
-- Set the colors appropriately.
if (scrollArea == "Incoming") then
incomingFrame:SetBackdropColor(0.5, 0.05, 0.05, 1.0);
outgoingFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
notificationFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
elseif (scrollArea == "Outgoing") then
incomingFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
outgoingFrame:SetBackdropColor(0.5, 0.05, 0.05, 1.0);
notificationFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
elseif (scrollArea == "Notification") then
incomingFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
outgoingFrame:SetBackdropColor(0.8, 0.8, 0.8, 1.0);
notificationFrame:SetBackdropColor(0.5, 0.05, 0.05, 1.0);
end
end
-- **********************************************************************************
-- Populates the controls for the selected scroll area.
-- **********************************************************************************
function MikSBTOpt.PopulateScrollAreaControls(scrollArea)
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
MikSBTOpt.PopulateDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "AnimationStyleDropdown", controlFrame.MSBTCurrentSettings[scrollArea .. "AnimationStyle"]);
MikSBTOpt.PopulateDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollDirectionDropdown", controlFrame.MSBTCurrentSettings[scrollArea .. "ScrollDirection"]);
MikSBTOpt.PopulateDropdown(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "TextAlignDropdown", controlFrame.MSBTCurrentSettings[scrollArea .. "TextAlignIndex"]);
MikSBTOpt.PopulateSlider(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollHeightSlider", controlFrame.MSBTCurrentSettings[scrollArea .. "ScrollHeight"]);
MikSBTOpt.PopulateEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "XOffsetEditbox", controlFrame.MSBTCurrentSettings[scrollArea .. "XOffset"]);
MikSBTOpt.PopulateEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "YOffsetEditbox", controlFrame.MSBTCurrentSettings[scrollArea .. "YOffset"]);
-- Colorize the selected scroll area mover frame.
MikSBTOpt.ColorizeScrollAreaMoverFrames(scrollArea)
end
-- **********************************************************************************
-- Populates the scroll area mover labels with the scroll area's coordinates.
-- **********************************************************************************
function MikSBTOpt.PopulateScrollAreaMoverCoordinates()
-- Get the scroll area mover control frame.
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Populate the labels.
getglobal(SCROLL_AREA_MOVER_INCOMING_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_INCOMING].Label .. " (" .. controlFrame.MSBTCurrentSettings.IncomingXOffset .. ", " .. controlFrame.MSBTCurrentSettings.IncomingYOffset .. ")");
getglobal(SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_OUTGOING].Label .. " (" .. controlFrame.MSBTCurrentSettings.OutgoingXOffset .. ", " .. controlFrame.MSBTCurrentSettings.OutgoingYOffset .. ")");
getglobal(SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME .. "Title"):SetText(MikSBTOpt.TABS[TAB_INDEX_NOTIFICATION].Label .. " (" .. controlFrame.MSBTCurrentSettings.NotificationXOffset .. ", " .. controlFrame.MSBTCurrentSettings.NotificationYOffset .. ")");
-- Populate the x and y offset editboxes.
local scrollArea = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollAreaDropdown"));
MikSBTOpt.PopulateEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "XOffsetEditbox", controlFrame.MSBTCurrentSettings[scrollArea .. "XOffset"]);
MikSBTOpt.PopulateEditbox(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "YOffsetEditbox", controlFrame.MSBTCurrentSettings[scrollArea .. "YOffset"]);
end
-- **********************************************************************************
-- Save the coordinates of the scroll area mover to the control frame's current
-- settings.
-- **********************************************************************************
function MikSBTOpt.SaveScrollAreaMoverCoordinates(frameName)
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Get the UIParent center x and y coords.
local uiParentX, uiParentY = UIParent:GetCenter();
local xOffset = math.floor(this:GetCenter() - uiParentX);
local yOffset = math.ceil(this:GetBottom() - uiParentY);
-- Save the coordinates for the correct scroll area.
if (frameName == SCROLL_AREA_MOVER_INCOMING_FRAME_NAME) then
controlFrame.MSBTCurrentSettings.IncomingXOffset = xOffset;
controlFrame.MSBTCurrentSettings.IncomingYOffset = yOffset;
elseif (frameName == SCROLL_AREA_MOVER_OUTGOING_FRAME_NAME) then
controlFrame.MSBTCurrentSettings.OutgoingXOffset = xOffset;
controlFrame.MSBTCurrentSettings.OutgoingYOffset = yOffset;
elseif (frameName == SCROLL_AREA_MOVER_NOTIFICATION_FRAME_NAME) then
controlFrame.MSBTCurrentSettings.NotificationXOffset = xOffset;
controlFrame.MSBTCurrentSettings.NotificationYOffset = yOffset;
end
-- Populate the scroll area mover coordinates.
MikSBTOpt.PopulateScrollAreaMoverCoordinates();
end
-- **********************************************************************************
-- Save the values selected in the scroll area mover controls to the current settings
-- of the sroll area mover control frame.
-- **********************************************************************************
function MikSBTOpt.SaveScrollAreaControlsToCurrentSettings()
-- Get the currently selected scroll area and the scroll area mover control frame.
local scrollArea = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollAreaDropdown"));
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Set the control frame's current settings to the values in the controls.
controlFrame.MSBTCurrentSettings[scrollArea .. "AnimationStyle"] = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "AnimationStyleDropdown"));
controlFrame.MSBTCurrentSettings[scrollArea .. "ScrollDirection"] = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollDirectionDropdown"));
controlFrame.MSBTCurrentSettings[scrollArea .. "TextAlignIndex"] = UIDropDownMenu_GetSelectedValue(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "TextAlignDropdown"));
controlFrame.MSBTCurrentSettings[scrollArea .. "ScrollHeight"] = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "ScrollHeightSlider"):GetValue();
-- Get the x offset from the x offset editbox and make sure it's a number.
local xOffset = tonumber(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "XOffsetEditbox"):GetText());
if (xOffset ~= nil) then
controlFrame.MSBTCurrentSettings[scrollArea .. "XOffset"] = xOffset;
end
-- Get the y offset from the y offset editbox and make sure it's a number.
local yOffset = tonumber(getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME .. "YOffsetEditbox"):GetText());
if (yOffset ~= nil) then
controlFrame.MSBTCurrentSettings[scrollArea .. "YOffset"] = yOffset;
end
end
-- **********************************************************************************
-- Save the settings of the scroll area mover control to the profile for the
-- passed settings type.
-- **********************************************************************************
function MikSBTOpt.SaveScrollAreaSettings(settingsType)
-- Save the settings in the controls to the control frame's current settings.
MikSBTOpt.SaveScrollAreaControlsToCurrentSettings();
-- Get the scroll area mover control frame.
local controlFrame = getglobal(SCROLL_AREA_MOVER_CONTROL_FRAME_NAME);
-- Save the incoming scroll area settings into the profile.
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.AnimationStyle", controlFrame[settingsType].IncomingAnimationStyle);
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.ScrollDirection", controlFrame[settingsType].IncomingScrollDirection);
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.FontSettings.TextAlignIndex", controlFrame[settingsType].IncomingTextAlignIndex);
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.ScrollHeight", controlFrame[settingsType].IncomingScrollHeight);
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.FrameOffsets.x", controlFrame[settingsType].IncomingXOffset);
MikSBT.SetOptionFromVarPath("DisplaySettings.Incoming.FrameOffsets.y", controlFrame[settingsType].IncomingYOffset);
-- Save the outgoing scroll area settings into the profile.
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.AnimationStyle", controlFrame[settingsType].OutgoingAnimationStyle);
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.ScrollDirection", controlFrame[settingsType].OutgoingScrollDirection);
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.FontSettings.TextAlignIndex", controlFrame[settingsType].OutgoingTextAlignIndex);
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.ScrollHeight", controlFrame[settingsType].OutgoingScrollHeight);
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.FrameOffsets.x", controlFrame[settingsType].OutgoingXOffset);
MikSBT.SetOptionFromVarPath("DisplaySettings.Outgoing.FrameOffsets.y", controlFrame[settingsType].OutgoingYOffset);
-- Save the notification scroll area settings into the profile.
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.AnimationStyle", controlFrame[settingsType].NotificationAnimationStyle);
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.ScrollDirection", controlFrame[settingsType].NotificationScrollDirection);
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.FontSettings.TextAlignIndex", controlFrame[settingsType].NotificationTextAlignIndex);
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.ScrollHeight", controlFrame[settingsType].NotificationScrollHeight);
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.FrameOffsets.x", controlFrame[settingsType].NotificationXOffset);
MikSBT.SetOptionFromVarPath("DisplaySettings.Notification.FrameOffsets.y", controlFrame[settingsType].NotificationYOffset);
-- Reposition the animation frames.
MikSBT.RepositionAnimationFrames();
end
-- **********************************************************************************
-- Previews a test message in the new scroll area position.
-- **********************************************************************************
function MikSBTOpt.ScrollAreaMoverPreviewOnClick()
-- Save the current settings for all the scroll areas.
MikSBTOpt.SaveScrollAreaSettings("MSBTCurrentSettings");
-- Display the preview messages.
MikSBT.DisplayMessage(MikSBTOpt.MSG_SCROLL_AREA_PREVIEW_TEXT, MikSBT.DISPLAYTYPE_INCOMING, false, 255, 0, 0);
MikSBT.DisplayMessage(MikSBTOpt.MSG_SCROLL_AREA_PREVIEW_TEXT, MikSBT.DISPLAYTYPE_NOTIFICATION, false);
MikSBT.DisplayMessage(MikSBTOpt.MSG_SCROLL_AREA_PREVIEW_TEXT, MikSBT.DISPLAYTYPE_OUTGOING, false, 0, 0, 255);
end
-- **********************************************************************************
-- Called the save button on the scroll area mover is clicked.
-- **********************************************************************************
function MikSBTOpt.ScrollAreaMoverSaveOnClick()
-- Save the current settings for all the scroll areas.
MikSBTOpt.SaveScrollAreaSettings("MSBTCurrentSettings");
-- Show the options frame and hide the scroll area mover frames.
MikSBTOpt.HideScrollAreaMoverFrames();
end
-- **********************************************************************************
-- Cancels the changes made to the scroll area mover.
-- **********************************************************************************
function MikSBTOpt.ScrollAreaMoverCancelOnClick()
-- Save the original settings for all the scroll areas.
MikSBTOpt.SaveScrollAreaSettings("MSBTOriginalSettings");
-- Show the options frame and hide the scroll area mover frames.
MikSBTOpt.HideScrollAreaMoverFrames();
end
-------------------------------------------------------------------------------------
-- Trigger functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Sets up the available trigger events.
-- **********************************************************************************
function MikSBTOpt.SetupAvailableTriggerEvents()
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_PARTY_HITS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_PARTY_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE"); -- athenne add
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PARTY_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_SELF_HITS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_SELF_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_SELF_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_SELF_BUFF");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_PET_HITS");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_PET_MISSES");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_PET_DAMAGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_ITEM_ENCHANTMENTS");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_AURA_GONE_SELF");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HONOR_GAIN");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_FACTION_CHANGE");
table.insert(availableTriggerEvents, "CHAT_MSG_SKILL");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_XP_GAIN");
table.insert(availableTriggerEvents, "CHAT_MSG_COMBAT_HOSTILE_DEATH");
table.insert(availableTriggerEvents, "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE");
end
-- **********************************************************************************
-- Adds a new trigger.
-- **********************************************************************************
function MikSBTOpt.AddNewTrigger()
-- Hold the next available custom trigger number.
local nextTriggerNum = 0;
local slotFound = false;
-- Loop until an available slot is found.
while (true) do
-- Increment to the next trigger number.
nextTriggerNum = nextTriggerNum + 1;
if (not MikSBT.CurrentProfile.Triggers["MSBT_TRIGGER_CUSTOM" .. nextTriggerNum]) then
break;
end
end
-- Create the new default trigger.
MikSBT.CurrentProfile.Triggers["MSBT_TRIGGER_CUSTOM" .. nextTriggerNum] = {
EventSettings = {
Show = true,
Message = MikSBTOpt.MSG_TRIGGER_NEW_TRIGGER_DEFAULT_MESSAGE,
IsSticky = false,
FontSettings = {
Color = {r=1, g=0.502, b=0.502},
Normal = {FontIndex=0, OutlineIndex=0, FontSize=26},
},
},
TriggerSettings = {
TriggerType = 1,
Threshold = 40,
},
}
-- Reregister the trigger with the event helper.
MikSBT.RegisterTriggers();
-- Repopulate the trigger event settings so the new trigger shows up.
MikSBTOpt.PopulateTriggerEventSettings();
end
-- **********************************************************************************
-- Deletes the passed trigger.
-- **********************************************************************************
function MikSBTOpt.DeleteTrigger(triggerKey)
-- Remove the trigger.
MikSBT.CurrentProfile.Triggers[triggerKey] = nil;
-- Reregister the trigger with the event helper.
MikSBT.RegisterTriggers();
-- Repopulate the trigger event settings.
MikSBTOpt.PopulateTriggerEventSettings();
end
-- **********************************************************************************
-- Shows the trigger settings for the passed trigger key.
-- **********************************************************************************
function MikSBTOpt.ShowTriggerConfig(triggerKey)
-- Get the trigger configuration frame.
local triggerFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
-- Set the trigger key for the config frame.
triggerFrame.TriggerKey = triggerKey;
-- Get the trigger data for the passed trigger and make sure it exists.
local triggerData = MikSBT.CurrentProfile.Triggers[triggerKey];
if (triggerData) then
-- Set the title to the output message.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "Title"):SetText(triggerData.EventSettings.Message);
-- Check if all classes are selected.
if (not triggerData.TriggerSettings.Classes) then
-- Check the all classes checkbox and hide the individual class checkboxes.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "AllClassesCheckbox"):SetChecked(1);
MikSBTOpt.HideTriggerClassCheckboxes();
else
-- Uncheck the all classes checkbox and show the individual class checkboxes.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "AllClassesCheckbox"):SetChecked(0);
MikSBTOpt.ShowTriggerClassCheckboxes();
-- Set the correct individual class checkbox settings.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "DruidCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.DRUID);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "HunterCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.HUNTER);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "MageCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.MAGE);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PaladinCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.PALADIN);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PriestCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.PRIEST);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "RogueCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.ROGUE);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ShamanCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.SHAMAN);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarlockCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.WARLOCK);
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarriorCheckbox"):SetChecked(triggerData.TriggerSettings.Classes.WARRIOR);
end
-- Populate the trigger type.
MikSBTOpt.PopulateDropdown(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerTypeDropdown", triggerData.TriggerSettings.TriggerType);
-- Holds the Icon Texture.
local texture = "";
-- Check if there is a texture defined.
if (triggerData.Texture) then
texture = triggerData.Texture or "";
end
MikSBTOpt.PopulateEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "IconNameEditbox", texture);
-- Setup the trigger controls appropriately depending on the trigger type.
MikSBTOpt.SetupVariableTriggerControls(triggerKey, triggerData.TriggerSettings.TriggerType == MikCEH.TRIGGERTYPE_SEARCH_PATTERN);
-- Show the trigger settings.
triggerFrame:Show();
end
end
-- **********************************************************************************
-- Show or hides the search pattern controls on the trigger config frame.
-- **********************************************************************************
function MikSBTOpt.SetupVariableTriggerControls(triggerKey, showSearch)
-- Get the trigger configuration frame.
local triggerFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
-- Get the trigger data for the passed trigger and make sure it exists.
local triggerData = MikSBT.CurrentProfile.Triggers[triggerKey];
if (triggerData) then
-- Check if the search pattern controls should be shown.
if (showSearch) then
-- Resize the trigger frame.
triggerFrame:SetHeight(450);
-- Hide the threshold slider.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ThresholdSlider"):Hide();
-- TODO: Show the search pattern controls.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "EventsScrollFrame"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent1Checkbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent2Checkbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent3Checkbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent4Checkbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "StanceDropdown"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TextureHorizontalBarBottom"):Show();
-- Clear the selected trigger events.
if (not triggerFrame.SelectedTriggerEvents) then
triggerFrame.SelectedTriggerEvents = {};
else
MikCEH.EraseTable(triggerFrame.SelectedTriggerEvents);
end
-- Loop through all of the trigger events for the trigger.
if (triggerData.TriggerSettings.TriggerEvents) then
for _, triggerEvent in triggerData.TriggerSettings.TriggerEvents do
triggerFrame.SelectedTriggerEvents[triggerEvent] = true;
end
end
-- Populate the appropriate trigger events.
MikSBTOpt.PopulateAvailableTriggerEvents();
local stance = triggerData.TriggerSettings.Stance
if not stance then stance = 7 end
-- Populate the stance dropdown.
MikSBTOpt.PopulateDropdown(TRIGGER_CONFIGURATION_FRAME_NAME .. "StanceDropdown", stance);
-- Holds the search patterns.
local searchPattern1 = "";
local searchPattern2 = "";
-- Check if there are search patterns defined.
if (triggerData.TriggerSettings.SearchPatterns) then
searchPattern1 = triggerData.TriggerSettings.SearchPatterns[1] or "";
searchPattern2 = triggerData.TriggerSettings.SearchPatterns[2] or "";
end
-- Populate the search pattern settings.
MikSBTOpt.PopulateEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox", searchPattern1);
MikSBTOpt.PopulateEditbox(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox", searchPattern2);
else
-- Resize the trigger frame.
triggerFrame:SetHeight(270);
-- Show the threshold slider.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ThresholdSlider"):Show();
-- Hide the search pattern controls.
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "EventsScrollFrame"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent1Checkbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent2Checkbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent3Checkbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent4Checkbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "StanceDropdown"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TextureHorizontalBarBottom"):Hide();
-- Populate the threshold slider.
MikSBTOpt.PopulateSlider(TRIGGER_CONFIGURATION_FRAME_NAME .. "ThresholdSlider", triggerData.TriggerSettings.Threshold or 1);
end
end
end
-- **********************************************************************************
-- Hides the individual class checkboxes on the trigger config frame.
-- **********************************************************************************
function MikSBTOpt.HideTriggerClassCheckboxes()
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "DruidCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "HunterCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "MageCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PaladinCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PriestCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "RogueCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ShamanCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarlockCheckbox"):Hide();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarriorCheckbox"):Hide();
end
-- **********************************************************************************
-- Shows the individual class checkboxes on the trigger config frame.
-- **********************************************************************************
function MikSBTOpt.ShowTriggerClassCheckboxes()
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "DruidCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "HunterCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "MageCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PaladinCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PriestCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "RogueCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ShamanCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarlockCheckbox"):Show();
getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarriorCheckbox"):Show();
end
-- **********************************************************************************
-- Saves the settings in the trigger config frame to the appropriate trigger.
-- **********************************************************************************
function MikSBTOpt.SaveTriggerConfig()
-- Get the trigger configuration frame.
local triggerFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
-- Get the trigger data for the trigger that is being saved and make sure it exists.
local triggerData = MikSBT.CurrentProfile.Triggers[triggerFrame.TriggerKey];
if (triggerData) then
-- Check if the all classes checkbox is checked.
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "AllClassesCheckbox"):GetChecked()) then
-- Clear the selected classes table for the trigger to indicate all classes.
triggerData.TriggerSettings.Classes = nil;
-- The all classes checkbox is not checked.
else
-- Create a table to hold the selected classes.
local selectedClasses = {};
-- Set the class in the selected classes array if it's checked.
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "DruidCheckbox"):GetChecked()) then selectedClasses.DRUID = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "HunterCheckbox"):GetChecked()) then selectedClasses.HUNTER = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "MageCheckbox"):GetChecked()) then selectedClasses.MAGE = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PaladinCheckbox"):GetChecked()) then selectedClasses.PALADIN = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "PriestCheckbox"):GetChecked()) then selectedClasses.PRIEST = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "RogueCheckbox"):GetChecked()) then selectedClasses.ROGUE = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ShamanCheckbox"):GetChecked()) then selectedClasses.SHAMAN = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarlockCheckbox"):GetChecked()) then selectedClasses.WARLOCK = true; end
if (getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "WarriorCheckbox"):GetChecked()) then selectedClasses.WARRIOR = true; end
-- Save the selected classes for the trigger.
triggerData.TriggerSettings.Classes = selectedClasses;
end
-- Save the trigger type.
triggerData.TriggerSettings.TriggerType = UIDropDownMenu_GetSelectedValue(getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerTypeDropdown"));
-- Save the Icon Name
local texture = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "IconNameEditbox"):GetText();
if (texture) and (texture ~= "") then
triggerData.Texture = texture;
end
-- Check if the trigger type is search pattern.
if (triggerData.TriggerSettings.TriggerType == MikCEH.TRIGGERTYPE_SEARCH_PATTERN) then
-- Clear the threshold field.
triggerData.TriggerSettings.Threshold = nil;
local trigEvents = {};
for triggerEvent in triggerFrame.SelectedTriggerEvents do
table.insert(trigEvents, triggerEvent);
end
-- Save the selected trigger events.
triggerData.TriggerSettings.TriggerEvents = trigEvents;
-- Save the required stance.
if UIDropDownMenu_GetSelectedValue(getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "StanceDropdown")) ~= 7 then
triggerData.TriggerSettings.Stance = UIDropDownMenu_GetSelectedValue(getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "StanceDropdown"));
if triggerData.TriggerSettings.Stance > GetNumShapeshiftForms() or not GetShapeshiftFormInfo(triggerData.TriggerSettings.Stance) then
MikSBT.Print("No stance found for the selected requirement on this character, this trigger might never occur :o", 1, 1, 0);
MikSBT.Print("Also it's dangerous to go alone! take this. o-[====>", 1, 1, 0); --remind me that this is a beta release
end
else
triggerData.TriggerSettings.Stance = nil
end
-- Create a table to hold the search patterns.
local searchPatterns = {};
-- Get the first search pattern, check if it is set to anything, and add it to the search patterns table.
local searchPattern = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern1Editbox"):GetText();
if (searchPattern ~= "") then
table.insert(searchPatterns, searchPattern);
end
-- Get the second search pattern, check if it is set to anything, and add it to the search patterns table.
searchPattern = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "SearchPattern2Editbox"):GetText();
if (searchPattern ~= "") then
table.insert(searchPatterns, searchPattern);
end
-- Save the search patterns for the trigger.
triggerData.TriggerSettings.SearchPatterns = searchPatterns;
-- Trigger type is a threshold.
else
-- Clear the search pattern fields.
triggerData.TriggerSettings.TriggerEvents = nil;
triggerData.TriggerSettings.SearchPatterns = nil;
-- Save the threshold.
triggerData.TriggerSettings.Threshold = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "ThresholdSlider"):GetValue();
end
-- Reregister all of the triggers.
MikSBT.RegisterTriggers();
end
end
-- **********************************************************************************
-- Populates the available trigger events scroll frame.
-- **********************************************************************************
function MikSBTOpt.PopulateAvailableTriggerEvents()
local triggerFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME);
-- Get the total number of available trigger events.
local totalItems = table.getn(availableTriggerEvents);
-- Get the trigger settings scroll frame and its offset.
local objFrame = getglobal(TRIGGER_CONFIGURATION_FRAME_NAME .. "EventsScrollFrame");
FauxScrollFrame_Update(objFrame, totalItems, TRIGGER_EVENT_ITEMS_PER_PAGE, TRIGGER_EVENT_ITEM_HEIGHT);
local skipCount = FauxScrollFrame_GetOffset(objFrame);
-- Loop through all of the visible items.
for i = 1, TRIGGER_EVENT_ITEMS_PER_PAGE do
local checkboxName = TRIGGER_CONFIGURATION_FRAME_NAME .. "TriggerEvent" .. i .. "Checkbox";
local objCheckbox = getglobal(checkboxName);
local triggerEvent = availableTriggerEvents[i+skipCount];
-- Set the checkbox's name to the trigger event.
MikSBTOpt.SetupCheckbox(checkboxName, triggerEvent, nil, nil);
if (objCheckbox) then objCheckbox.TriggerEvent = triggerEvent; end
-- If the selected trigger events table exists get the appropriate value from it.
if (triggerFrame.SelectedTriggerEvents) then
MikSBTOpt.PopulateCheckbox(checkboxName, triggerFrame.SelectedTriggerEvents[triggerEvent] ~= nil);
-- Selected trigger events table doesn't exist so just uncheck the checkbox.
else
MikSBTOpt.PopulateCheckbox(checkboxName, false);
end
end
end
-------------------------------------------------------------------------------------
-- Suppression functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Adds a new suppression.
-- **********************************************************************************
function MikSBTOpt.AddNewSuppression()
-- Hold the next available custom suppression number.
local nextSuppressionNum = 0;
local slotFound = false;
-- Loop until an available slot is found.
while (true) do
-- Increment to the next suppression number.
nextSuppressionNum = nextSuppressionNum + 1;
if (not MikSBT.CurrentProfile.Suppressions["MSBT_SUPPRESSION_CUSTOM" .. nextSuppressionNum]) then
break;
end
end
-- Create the new default trigger.
MikSBT.CurrentProfile.Suppressions["MSBT_SUPPRESSION_CUSTOM" .. nextSuppressionNum] = {
Enabled = true,
SearchPattern = MikSBTOpt.MSG_SUPPRESSION_NEW_SUPPRESSION_DEFAULT_MESSAGE,
};
-- Repopulate the suppression settings so the new suppression shows up.
MikSBTOpt.PopulateSuppressionSettings();
end
-------------------------------------------------------------------------------------
-- Populate profile functions.
-------------------------------------------------------------------------------------
-- **********************************************************************************
-- Populates the options from the currently selected profile.
-- **********************************************************************************
function MikSBTOpt.PopulateProfileOptions()
-- Hide the font settings frame when profile options are populated.
getglobal(FONT_SETTINGS_FRAME_NAME):Hide();
-- Populate the Animation Step slider value.
MikSBTOpt.PopulateSlider(OPTIONS_FRAME_NAME .. "Tab1FrameAnimationStepSlider");
-- Populate the Show Partial Events checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameShowPartialEffectsCheckbox");
-- Populate the Use Sticky Crits checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameUseStickyCritsCheckbox");
-- Populate the Show Overheals checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameShowOverhealsCheckbox");
-- Populate the Show Game Damage checkbox and update it appropriately.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameShowGameDamageCheckbox");
MikSBT.SetOptionShowGameDamage(MikSBT.CurrentProfile.ShowGameDamage);
-- Populate the Show All Mana Gains checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameShowAllManaGainsCheckbox");
-- Populate the Low Health Sound checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameLowHealthSoundCheckbox");
-- Populate the Low Mana Sound checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameLowManaSoundCheckbox");
-- Populate the Resist Sound checkbox.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab1FrameResistSoundCheckbox");
-- Populate the scroll area show events checkboxes to the values in the profile.
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab2FrameShowEventsCheckbox");
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab3FrameShowEventsCheckbox");
MikSBTOpt.PopulateCheckbox(OPTIONS_FRAME_NAME .. "Tab4FrameShowEventsCheckbox");
-- Populate the incoming, outgoing, and notification event settings.
MikSBTOpt.PopulateIncomingEventSettings();
MikSBTOpt.PopulateOutgoingEventSettings();
MikSBTOpt.PopulateNotificationEventSettings();
-- Populate the trigger settings.
MikSBTOpt.PopulateTriggerEventSettings();
-- Populate the suppression settings.
MikSBTOpt.PopulateSuppressionSettings();
end