-- ================================================================================ --
-- EMA - ( Ebony's MultiBoxing Assistant ) --
-- Current Author: Jennifer Cally (Ebony) --
-- --
-- License: All Rights Reserved 2018-2020 Jennifer Cally --
-- --
-- Some Code Used from "Jamba" that is --
-- Released under the MIT License --
-- "Jamba" Copyright 2008-2015 Michael "Jafula" Miller --
-- --
-- ================================================================================ --
-- Create the addon using AceAddon-3.0 and embed some libraries.
local EMA = LibStub( "AceAddon-3.0" ):NewAddon(
"Sync",
"Module-1.0",
"AceConsole-3.0",
"AceEvent-3.0",
"AceHook-3.0",
"AceTimer-3.0"
)
-- Get the EMA Utilities Library.
local EMAUtilities = LibStub:GetLibrary( "EbonyUtilities-1.0" )
local EMAHelperSettings = LibStub:GetLibrary( "EMAHelperSettings-1.0" )
-- Constants and Locale for this module.
EMA.moduleName = "Sync"
EMA.settingsDatabaseName = "SyncProfileDB"
EMA.chatCommand = "ema-Sync"
local L = LibStub( "AceLocale-3.0" ):GetLocale( "Core" )
EMA.parentDisplayName = L["SYNC"]
EMA.moduleDisplayName = L["SYNC"]
-- Settings - the values to store and their defaults for the settings database.
EMA.settings = {
profile = {
mountWithTeam = false,
dismountWithTeam = false,
dismountWithMaster = false,
mountInRange = false,
--messageArea = EMAApi.DefaultMessageArea(),
warningArea = EMAApi.DefaultWarningArea()
},
}
-- Configuration.
function EMA:GetConfiguration()
local configuration = {
name = EMA.moduleDisplayName,
handler = EMA,
type = 'group',
childGroups = "tab",
get = "EMAConfigurationGetSetting",
set = "EMAConfigurationSetSetting",
args = {
config = {
type = "input",
name = L["OPEN_CONFIG"],
desc = L["OPEN_CONFIG_HELP"],
usage = "/ema-sync config",
get = false,
set = "",
},
push = {
type = "input",
name = L["Push Settings"],
desc = L["Push the Mount settings to all characters in the team."],
usage = "/EMA-sync push",
get = false,
set = "EMASendSettings",
order = 4,
guiHidden = true,
},
},
}
return configuration
end
-------------------------------------------------------------------------------------------------------------
-- Command this module sends.
-------------------------------------------------------------------------------------------------------------
EMA.COMMAND_MOUNT_ME = "EMAMountMe"
EMA.COMMAND_MOUNT_DISMOUNT = "EMAMountDisMount"
-------------------------------------------------------------------------------------------------------------
-- Messages module sends.
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-- Addon initialization, enabling and disabling.
-------------------------------------------------------------------------------------------------------------
-- Initialise the module.
function EMA:OnInitialize()
-- Create the settings control.
EMA:SettingsCreate()
-- Initialse the EMAModule part of this module.
EMA:EMAModuleInitialize( EMA.settingsControl.widgetSettings.frame )
-- Populate the settings.
EMA:SettingsRefresh()
-- BlizzUI Frames
EMA:CreateEMAInterFaceSyncFrame()
end
-- Called when the addon is enabled.
function EMA:OnEnable()
-- EMA:RegisterEvent("PLAYER_REGEN_ENABLED")
EMA:HookScript( InterfaceOptionsFrame, "OnShow", "InterfaceOptionsFrameOnShow" )
EMA:RegisterMessage( EMAApi.MESSAGE_MESSAGE_AREAS_CHANGED, "OnMessageAreasChanged" )
end
-- Called when the addon is disabled.
function EMA:OnDisable()
-- AceHook-3.0 will tidy up the hooks for us.
end
function EMA:SettingsCreate()
EMA.settingsControl = {}
-- Create the settings panel.
EMAHelperSettings:CreateSettings(
EMA.settingsControl,
EMA.moduleDisplayName,
EMA.parentDisplayName,
EMA.SettingsPushSettingsClick
)
local bottomOfInfo = EMA:SettingsCreateMount( EMAHelperSettings:TopOfSettings() )
EMA.settingsControl.widgetSettings.content:SetHeight( -bottomOfInfo )
-- Help
local helpTable = {}
EMAHelperSettings:CreateHelp( EMA.settingsControl, helpTable, EMA:GetConfiguration() )
end
function EMA:SettingsPushSettingsClick( event )
EMA:EMASendSettings()
end
function EMA:SettingsCreateMount( top )
local checkBoxHeight = EMAHelperSettings:GetCheckBoxHeight()
local left = EMAHelperSettings:LeftOfSettings()
local headingHeight = EMAHelperSettings:HeadingHeight()
local headingWidth = EMAHelperSettings:HeadingWidth( false )
local dropdownHeight = EMAHelperSettings:GetDropdownHeight()
local verticalSpacing = EMAHelperSettings:GetVerticalSpacing()
local movingTop = top
EMAHelperSettings:CreateHeading( EMA.settingsControl, L["PH"], movingTop, false )
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxMountWithTeam = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["PH"],
EMA.SettingsToggleMountWithTeam,
L["PH"]
)
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxDismountWithTeam = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["PH"],
EMA.SettingsToggleDisMountWithTeam,
L["PH"]
)
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxDismountWithMaster = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["PH"],
EMA.SettingsToggleDisMountWithMaster,
L["PH"]
)
movingTop = movingTop - headingHeight
EMA.settingsControl.checkBoxMountInRange = EMAHelperSettings:CreateCheckBox(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["PH"],
EMA.SettingsToggleMountInRange,
L["PH"]
)
-- DO WE NEED THIS?
-- movingTop = movingTop - checkBoxHeight
-- EMA.settingsControl.dropdownMessageArea = EMAHelperSettings:CreateDropdown(
-- EMA.settingsControl,
-- headingWidth,
-- left,
-- movingTop,
-- L["Message Area"]
-- )
-- EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() )
-- EMA.settingsControl.dropdownMessageArea:SetCallback( "OnValueChanged", EMA.SettingsSetMessageArea )
movingTop = movingTop - checkBoxHeight
EMA.settingsControl.dropdownWarningArea = EMAHelperSettings:CreateDropdown(
EMA.settingsControl,
headingWidth,
left,
movingTop,
L["Send Warning Area"]
)
EMA.settingsControl.dropdownWarningArea:SetList( EMAApi.MessageAreaList() )
EMA.settingsControl.dropdownWarningArea:SetCallback( "OnValueChanged", EMA.SettingsSetWarningArea )
movingTop = movingTop - dropdownHeight - verticalSpacing
return movingTop
end
function EMA:OnMessageAreasChanged( message )
--EMA.settingsControl.dropdownMessageArea:SetList( EMAApi.MessageAreaList() )
EMA.settingsControl.dropdownWarningArea:SetList( EMAApi.MessageAreaList() )
end
function EMA:SettingsSetWarningArea( event, value )
EMA.db.warningArea = value
EMA:SettingsRefresh()
end
--function EMA:SettingsSetMessageArea( event, value )
-- EMA.db.messageArea = value
-- EMA:SettingsRefresh()
--end
function EMA:SettingsToggleMountWithTeam( event, checked )
EMA.db.mountWithTeam = checked
EMA:SettingsRefresh()
end
function EMA:SettingsToggleDisMountWithTeam( event, checked )
EMA.db.dismountWithTeam = checked
EMA:SettingsRefresh()
end
function EMA:SettingsToggleDisMountWithMaster( event, checked )
EMA.db.dismountWithMaster = checked
EMA:SettingsRefresh()
end
function EMA:SettingsToggleMountInRange( event, checked )
EMA.db.mountInRange = checked
EMA:SettingsRefresh()
end
-- Settings received.
function EMA:EMAOnSettingsReceived( characterName, settings )
if characterName ~= EMA.characterName then
-- Update the settings.
EMA.db.mountWithTeam = settings.mountWithTeam
EMA.db.dismountWithTeam = settings.dismountWithTeam
EMA.db.dismountWithMaster = settings.dismountWithMaster
EMA.db.mountInRange = settings.mountInRange
EMA.db.messageArea = settings.messageArea
EMA.db.warningArea = settings.warningArea
-- Refresh the settings.
EMA:SettingsRefresh()
-- Tell the player.
EMA:Print( L["Settings received from A."]( characterName ) )
end
end
function EMA:BeforeEMAProfileChanged()
end
function EMA:OnEMAProfileChanged()
EMA:SettingsRefresh()
end
function EMA:SettingsRefresh()
EMA.settingsControl.checkBoxMountWithTeam:SetValue( EMA.db.mountWithTeam )
EMA.settingsControl.checkBoxDismountWithTeam:SetValue( EMA.db.dismountWithTeam )
EMA.settingsControl.checkBoxDismountWithMaster:SetValue( EMA.db.dismountWithMaster )
EMA.settingsControl.checkBoxMountInRange:SetValue( EMA.db.mountInRange )
--EMA.settingsControl.dropdownMessageArea:SetValue( EMA.db.messageArea )
EMA.settingsControl.dropdownWarningArea:SetValue( EMA.db.warningArea )
-- Set state.
--EMA.settingsControl.checkBoxMountWithTeam:SetDisabled( not EMA.db.mountWithTeam )
EMA.settingsControl.checkBoxDismountWithTeam:SetDisabled( not EMA.db.mountWithTeam )
EMA.settingsControl.checkBoxDismountWithMaster:SetDisabled( not EMA.db.dismountWithTeam or not EMA.db.mountWithTeam )
EMA.settingsControl.checkBoxMountInRange:SetDisabled( not EMA.db.mountWithTeam )
end
-------------------------------------------------------------------------------------------------------------
-- EMASync functionality.
-------------------------------------------------------------------------------------------------------------
--Frames Buttons
function EMA:ShowTooltip(frame, show, text)
if show then
GameTooltip:SetOwner(frame, "ANCHOR_TOP")
GameTooltip:SetPoint("TOPLEFT", frame, "TOPRIGHT", 16, 0)
GameTooltip:ClearLines()
GameTooltip:AddLine( text , 1, 0.82, 0, 1)
GameTooltip:Show()
else
GameTooltip:Hide()
end
end
function EMA:CreateEMAInterFaceSyncFrame()
EMAInterFaceSyncFrame = CreateFrame( "Frame", "InterFaceSyncFrame", InterfaceOptionsFrame )
local frame = EMAInterFaceSyncFrame
frame:SetWidth( 110 )
frame:SetHeight( 30 )
frame:SetFrameStrata( "HIGH" )
frame:SetToplevel( true )
frame:SetClampedToScreen( true )
frame:EnableMouse( true )
frame:SetMovable( true )
frame:ClearAllPoints()
frame:SetPoint("TOPRIGHT", InterfaceOptionsFrame, "TOPRIGHT", -5, -8 )
--[[
frame:SetBackdrop( {
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
tile = true, tileSize = 15, edgeSize = 15,
insets = { left = 5, right = 5, top = 5, bottom = 5 }
} )
]]
table.insert( UISpecialFrames, "EMAInterFaceSyncFrame" )
local syncButton = CreateFrame( "Button", "syncButton", frame, "UIPanelButtonTemplate" )
syncButton:SetScript( "OnClick", function() EMA:DoSyncInterfaceSettings() end )
syncButton:SetPoint( "TOPLEFT", frame, "TOPLEFT", 10 , -5)
syncButton:SetHeight( 20 )
syncButton:SetWidth( 90 )
syncButton:SetText( L["SYNC"] )
syncButton:SetScript("OnEnter", function(self) EMA:ShowTooltip(syncButton, true, L["SYNC"] ) end)
syncButton:SetScript("OnLeave", function(self) GameTooltip:Hide() end)
syncButtonFrameButton = syncButton
end
function EMA:InterfaceOptionsFrameOnShow()
--EMA:Print("test")
-- This sorts out hooking on L or marcioMenu button
--if EMA.db.showEMAQuestLogWithWoWQuestLog == true then
if InterfaceOptionsFrame:IsVisible() then
EMA:ToggleShowSyncInterfaceFrame( true )
else
EMA:ToggleShowSyncInterfaceFrame( false )
end
--end
end
function EMA:ToggleShowSyncInterfaceFrame( show )
if show == true then
EMAInterFaceSyncFrame:Show()
else
EMAInterFaceSyncFrame:Hide()
end
end
function EMA:DoSyncInterfaceSettings()
EMA:Print("[PH] Button Does Nothing" )
end
-- COMMS
-- A EMA command has been received.
function EMA:EMAOnCommandReceived( characterName, commandName, ... )
if characterName ~= self.characterName then
--[[
if commandName == EMA.COMMAND_MOUNT_ME then
--EMA:Print("command")
EMA:TeamMount( characterName, ... )
end
]]
end
end