diff --git a/Bindings.xml b/Bindings.xml new file mode 100644 index 0000000..69e5b35 --- /dev/null +++ b/Bindings.xml @@ -0,0 +1,141 @@ + + + + + + if( COE.Initialized ) then + COE:ToggleConfigFrame(); + end + + + + + if( COE.Initialized ) then + COE_Heal:BestHeal(); + end + + + if( COE.Initialized ) then + COE_Heal:BattleHeal(); + end + + + + + if( COE.Initialized ) then + COE_Totem:ThrowAdvisedTotem(); + end + + + + + if( COE.Initialized ) then + COE_Totem:ThrowAdvisedTotem(); + end + + + + + if( COE.Initialized ) then + COE_Totem:SwitchToNextSet(); + end + + + if( COE.Initialized ) then + COE_Totem:ThrowSet(); + end + + + if( COE.Initialized ) then + COE_Totem:ResetSetCycle(); + end + + + + + COE_Totem:ThrowTotem( "Earth", 1 ); + + + COE_Totem:ThrowTotem( "Earth", 2 ); + + + COE_Totem:ThrowTotem( "Earth", 3 ); + + + COE_Totem:ThrowTotem( "Earth", 4 ); + + + COE_Totem:ThrowTotem( "Earth", 5 ); + + + + + COE_Totem:ThrowTotem( "Fire", 1 ); + + + COE_Totem:ThrowTotem( "Fire", 2 ); + + + COE_Totem:ThrowTotem( "Fire", 3 ); + + + COE_Totem:ThrowTotem( "Fire", 4 ); + + + COE_Totem:ThrowTotem( "Fire", 5 ); + + + + + COE_Totem:ThrowTotem( "Water", 1 ); + + + COE_Totem:ThrowTotem( "Water", 2 ); + + + COE_Totem:ThrowTotem( "Water", 3 ); + + + COE_Totem:ThrowTotem( "Water", 4 ); + + + COE_Totem:ThrowTotem( "Water", 5 ); + + + COE_Totem:ThrowTotem( "Water", 6 ); + + + + + COE_Totem:ThrowTotem( "Air", 1 ); + + + COE_Totem:ThrowTotem( "Air", 2 ); + + + COE_Totem:ThrowTotem( "Air", 3 ); + + + COE_Totem:ThrowTotem( "Air", 4 ); + + + COE_Totem:ThrowTotem( "Air", 5 ); + + + COE_Totem:ThrowTotem( "Air", 6 ); + + + COE_Totem:ThrowTotem( "Air", 7 ); + + + \ No newline at end of file diff --git a/COE_Config.lua b/COE_Config.lua new file mode 100644 index 0000000..b16389f --- /dev/null +++ b/COE_Config.lua @@ -0,0 +1,1412 @@ +--[[ + + CALL OF ELEMENTS + The All-In-One Shaman Addon + + by Wyverex (2006) + + + Configuration Dialog + +]] + +if( not COE_Config ) then + COE_Config = {}; +end + + +--[[ ---------------------------------------------------------------- + COE_Config.CurrentPanel and COE_Config.CurrentSubPanel contain + the button names for the currently active panel and subpanel + in the confiuration dialog +-------------------------------------------------------------------]] +COE_Config["CurrentPanel"] = "COE_ConfigTotemTab"; +COE_Config["CurrentSubPanel"] = "COE_ConfigTotemTotemBar"; + + +--[[ ---------------------------------------------------------------- + COE_Config.Options contains all registered option defaults +-------------------------------------------------------------------]] +COE_Config["Options"] = {}; +COE_Config["ConfigureSetsMode"] = false; +COE_Config["ConfigureBarMode"] = false; +COE_Config["ConfigureOrderMode"] = false; +COE_Config["CurrentOrderTotem"] = nil; + +COEOPT_ENABLETOTEMBAR = 1; +COEOPT_HIDEBACKDROP = 2; +COEOPT_ENABLETIMERS = 3; +COEOPT_TIMERNOTIFICATIONS = 4; +COEOPT_TTALIGNMENT = 5; +COEOPT_DISPLAYMODE = 6; +COEOPT_DISPLAYALIGN = 7; +COEOPT_ADVISOR = 8; +COEOPT_ENABLESETS = 9; +COEOPT_ACTIVESET = 10; +COEOPT_AUTOSWITCH = 11; +COEOPT_FIXBAR = 12; +COEOPT_VERSION = 13; +COEOPT_OVERRIDESET = 14; +COEOPT_CURRENTFRAME = 15; +COEOPT_DIRECTION = 16; +COEOPT_FRAMEMODE = 17; +COEOPT_FLEXCOUNT = 18; +COEOPT_SCALING = 19; +COEOPT_TIMERFRAME = 20; +COEOPT_OVERRIDERANK = 21; +COEOPT_GROUPBARS = 22; +COEOPT_FRAMETIMERSONLY = 23; + +COEMODE_ALLTOTEMS = 1; +COEMODE_TIMERSONLY = 2; +COEMODE_ACTIVESET = 3; + +COEMODE_BOX = 1; +COEMODE_VERTICAL = 2; +COEMODE_HORIZONTAL = 3; + +COEMODE_NOOVERRIDE = 1; +COEMODE_OVERRIDESHIFT = 2; +COEMODE_OVERRIDEALT = 3; +COEMODE_OVERRIDECTRL = 4; + +--[[ ---------------------------------------------------------------- + COE_Config.Defaults contains the default values of all + saved variables +-------------------------------------------------------------------]] +COE_Config.Defaults = { +[COEOPT_ENABLETOTEMBAR] = 1; +[COEOPT_HIDEBACKDROP] = 1; +[COEOPT_ENABLETIMERS] = 1; +[COEOPT_TIMERNOTIFICATIONS] = 1; +[COEOPT_TTALIGNMENT] = 2; +[COEOPT_DISPLAYMODE] = 1; +[COEOPT_DISPLAYALIGN] = 1; +[COEOPT_ADVISOR] = 1; +[COEOPT_ENABLESETS] = 1; +[COEOPT_ACTIVESET] = 10; +[COEOPT_AUTOSWITCH] = 1; +[COEOPT_FIXBAR] = 0; +[COEOPT_OVERRIDESET] = 1; +[COEOPT_CURRENTFRAME] = "Earth"; +[COEOPT_SCALING] = 1.0; +[COEOPT_TIMERFRAME] = 0; +[COEOPT_OVERRIDERANK] = 1; +[COEOPT_GROUPBARS] = 0; +[COEOPT_FRAMETIMERSONLY] = 0; +} + +--[[ ---------------------------------------------------------------- + COE_Config.Saved contains all saved variables +-------------------------------------------------------------------]] +COE_Saved = { +[COEOPT_ENABLETOTEMBAR] = 1; +[COEOPT_HIDEBACKDROP] = 1; +[COEOPT_ENABLETIMERS] = 1; +[COEOPT_TIMERNOTIFICATIONS] = 1; +[COEOPT_TTALIGNMENT] = 2; +[COEOPT_DISPLAYMODE] = 1; +[COEOPT_DISPLAYALIGN] = 1; +[COEOPT_ADVISOR] = 1; +[COEOPT_ENABLESETS] = 1; +[COEOPT_ACTIVESET] = 10; +[COEOPT_AUTOSWITCH] = 1; +[COEOPT_FIXBAR] = 0; +[COEOPT_OVERRIDESET] = 1; +[COEOPT_CURRENTFRAME] = "Earth"; +[COEOPT_SCALING] = 1.0; +[COEOPT_TIMERFRAME] = 0; +[COEOPT_OVERRIDERANK] = 1; +[COEOPT_GROUPBARS] = 0; +[COEOPT_FRAMETIMERSONLY] = 0; +} + + +--[[ ---------------------------------------------------------------- + COE_SavedTotemSets holds the default set and the PVP sets + COE_CustomTotemSets holds the player-defined custom sets +-------------------------------------------------------------------]] +COE_SavedTotemSets = { +{ Name = COEUI_PVPSETS[1], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[2], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[3], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[4], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[5], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[6], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[7], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[8], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_PVPSETS[9], Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +{ Name = COEUI_DEFAULTSET, Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } }; +}; + +COE_CustomTotemSets = { n = 0 }; + +COESET_DEFAULT = 10; + + +--[[ ---------------------------------------------------------------- + COE_DisplayedTotems stores the visibility option for each + totem when in "All Totems" display mode +-------------------------------------------------------------------]] +COE_DisplayedTotems = { }; + + +--[[ ---------------------------------------------------------------- + COE_TotemBars stores the alignment options of the totem bars +-------------------------------------------------------------------]] +COE_TotemBars = { +Earth = { Direction = "Left", Mode = "Flex", FlexCount = 1 }, +Fire = { Direction = "Right", Mode = "Flex", FlexCount = 1 }, +Water = { Direction = "Left", Mode = "Flex", FlexCount = 1 }, +Air = { Direction = "Right", Mode = "Flex", FlexCount = 1 }, +}; + +COE_Element = { "Earth", "Fire", "Water", "Air" }; +COE_Direction = { "Up", "Down", "Left", "Right" }; +COE_FrameMode = { "Closed", "Open", "Flex", "Hidden" }; + + +--[[ ============================================================================================= + + I N T E R F A C E + +================================================================================================]] + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnFrameLoad + + PURPOSE: Registers all options +-------------------------------------------------------------------]] +function COE_Config:OnFrameLoad() + + if( not COE.Initialized ) then + return; + end + + this:SetBackdropBorderColor( 0, 0, 0 ); + this:SetBackdropColor( 0, 0, 0 ); + + -- make the dialog draggable + -- -------------------------- + this:RegisterForDrag( "LeftButton" ); + + -- totem options + -- -------------- + COE_Config:RegisterOption( COEOPT_ENABLETOTEMBAR, 'check', COEOptionEnableTotemBar, COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) ); + COE_Config:RegisterOption( COEOPT_ENABLETIMERS, 'check', COEOptionEnableTimers, COE_Config:GetSaved( COEOPT_ENABLETIMERS ) ); + COE_Config:RegisterOption( COEOPT_TIMERNOTIFICATIONS, 'check', nil, COE_Config:GetSaved( COEOPT_TIMERNOTIFICATIONS ) ); + COE_Config:RegisterOption( COEOPT_TTALIGNMENT, 'combo', nil, COE_Config:GetSaved( COEOPT_TTALIGNMENT ), COEOptionTTAlignmentInit ); + COE_Config:RegisterOption( COEOPT_DISPLAYMODE, 'combo', nil, COE_Config:GetSaved( COEOPT_DISPLAYMODE ), COEOptionDisplayModeInit ); + COE_Config:RegisterOption( COEOPT_ADVISOR, 'check', COEOptionEnableAdvisor, COE_Config:GetSaved( COEOPT_ADVISOR ) ); + COE_Config:RegisterOption( COEOPT_ENABLESETS, 'check', COEOptionEnableSets, COE_Config:GetSaved( COEOPT_ENABLESETS ) ); + COE_Config:RegisterOption( COEOPT_AUTOSWITCH, 'check', COEOptionEnableAutoSwitch, COE_Config:GetSaved( COEOPT_AUTOSWITCH ) ); + COE_Config:RegisterOption( COEOPT_ACTIVESET, 'combo', nil, COE_Config:GetSaved( COEOPT_ACTIVESET ), COEOptionActiveSetInit ); + COE_Config:RegisterOption( COEOPT_FIXBAR, 'check', nil, COE_Config:GetSaved( COEOPT_FIXBAR ) ); + COE_Config:RegisterOption( COEOPT_CURRENTFRAME, 'combo', nil, COE_Config:GetSaved( COEOPT_CURRENTFRAME ), COEOptionCurrentFrameInit ); + COE_Config:RegisterOption( COEOPT_DIRECTION, 'combo', nil, nil, COEOptionDirectionInit, true ); + COE_Config:RegisterOption( COEOPT_FRAMEMODE, 'combo', nil, nil, COEOptionFrameModeInit, true ); + COE_Config:RegisterOption( COEOPT_FLEXCOUNT, 'slider', COEOptionFlexCountChange, nil, COEOptionFlexCountShow, true ); + COE_Config:RegisterOption( COEOPT_SCALING, 'slider', COEOptionScalingChange, nil, COEOptionScalingShow ); + COE_Config:RegisterOption( COEOPT_TIMERFRAME, 'check', COEOptionEnableTimerFrame, COE_Config:GetSaved( COEOPT_TIMERFRAME ) ); + COE_Config:RegisterOption( COEOPT_DISPLAYALIGN, 'combo', nil, COE_Config:GetSaved( COEOPT_DISPLAYALIGN ), COEOptionDisplayAlignInit ); + COE_Config:RegisterOption( COEOPT_OVERRIDERANK, 'combo', nil, COE_Config:GetSaved( COEOPT_OVERRIDERANK ), COEOptionOverrideRankInit ); + COE_Config:RegisterOption( COEOPT_GROUPBARS, 'check', COEOptionGroupBars, COE_Config:GetSaved( COEOPT_GROUPBARS ) ); + COE_Config:RegisterOption( COEOPT_FRAMETIMERSONLY, 'check', nil, COE_Config:GetSaved( COEOPT_FRAMETIMERSONLY ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:CloseDialog + + PURPOSE: Ends totem set configuration and closes the dialog +-------------------------------------------------------------------]] +function COE_Config:CloseDialog() + + COE_Config:ConfigureBar( false ); + COE_Config:ConfigureOrder( false ); + COE_Config:ConfigureSet( false ); + COE_ConfigFrame:Hide(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnTabButtonClick + + PURPOSE: Shows the panel corresponding to the button +-------------------------------------------------------------------]] +function COE_Config:OnTabButtonClick() + + -- do nothing if this is already + -- active panel + -- ------------------------------ + if( COE_Config.CurrentPanel == this:GetName() ) then + this:SetChecked( true ); + return; + end + + -- first uncheck old button + -- and hide the panel + -- ------------------------- + getglobal( COE_Config.CurrentPanel ):SetChecked( false ); + getglobal( COE_Config.CurrentPanel .. "Panel" ):Hide(); + + -- then check this button + -- and show the panel + -- ----------------------- + this:SetChecked( true ); + getglobal( this:GetName() .. "Panel" ):Show(); + + COE_Config.CurrentPanel = this:GetName(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnConfigElementLoad + + PURPOSE: Sets the localized element text +-------------------------------------------------------------------]] +function COE_Config:OnConfigElementLoad( element ) + + if( not COE.Initialized ) then + return; + end + + if( COEUI_STRINGS[this:GetName()] ) then + element:SetText( COEUI_STRINGS[this:GetName()] ); + else + element:SetText( COESTR_UI_NOTASSIGNED ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnConfigElementEnter + + PURPOSE: Shows the tooltip for the config element +-------------------------------------------------------------------]] +function COE_Config:OnConfigElementEnter() + + if( COEUI_TOOLTIPS[this:GetName()] ) then + GameTooltip:SetOwner( this, "ANCHOR_RIGHT" ); + GameTooltip:SetText( COEUI_TOOLTIPS[this:GetName()], 1.0, 1.0, 1.0 ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnConfigElementLeave + + PURPOSE: Hides the tooltip for the config element +-------------------------------------------------------------------]] +function COE_Config:OnConfigElementLeave() + + GameTooltip:Hide(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnSubTabButtonClick + + PURPOSE: Shows the sub panel corresponding to the button +-------------------------------------------------------------------]] +function COE_Config:OnSubTabButtonClick( button ) + + -- do nothing if this is already + -- active panel + -- ------------------------------ + if( COE_Config.CurrentSubPanel == button:GetName() ) then + return; + end + + -- first hide the old panel + -- ------------------------- + getglobal( COE_Config.CurrentSubPanel .. "Panel" ):Hide(); + + -- then show the new panel + -- ------------------------ + getglobal( button:GetName() .. "Panel" ):Show(); + + if( button:GetName() == "COE_ConfigTotemTotemSets" ) then + COE_Config:ActivateSet( COE_Config:GetSaved( COEOPT_ACTIVESET ) ); + end + + COE_Config.CurrentSubPanel = button:GetName(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnCheckBoxShow + + PURPOSE: Sets the checked state depending on the current + option value and call the associated function to update + the state +-------------------------------------------------------------------]] +function COE_Config:OnCheckBoxShow() + + -- set check state + -- ---------------- + this:SetChecked( COE_Config:GetSaved( this:GetID() ) ); + + -- call function + -- -------------- + if( COE_Config.Options[this:GetID()].Func ) then + COE_Config.Options[this:GetID()].Func(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnCheckBoxClick + + PURPOSE: Toggles the associated option +-------------------------------------------------------------------]] +function COE_Config:OnCheckBoxClick() + + if( COE_Config.Options[this:GetID()] ) then + local option = COE_Config.Options[this:GetID()]; + + -- execute function and store new value + -- ------------------------------------- + if( COE_Config:GetSaved( this:GetID() ) == 1 ) then + COE_Config:SetOption( this:GetID(), 0 ); + else + COE_Config:SetOption( this:GetID(), 1 ); + end + + if( option.Func ) then + option.Func(); + end + else + COE:DebugMessage( "No ID assigned" ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:EnableCheckBox + + PURPOSE: Enables a check box and sets the text color to the + normal text color +-------------------------------------------------------------------]] +function COE_Config:EnableCheckBox( element ) + + element:Enable(); + getglobal( element:GetName() .. "Text" ):SetTextColor( NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:DisableCheckBox + + PURPOSE: Disables a check box and sets the text color to gray +-------------------------------------------------------------------]] +function COE_Config:DisableCheckBox( element ) + + element:Disable(); + getglobal( element:GetName() .. "Text" ):SetTextColor( GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnComboBoxShow + + PURPOSE: Initializes the combo box content +-------------------------------------------------------------------]] +function COE_Config:OnComboBoxShow() + + if( COE_Config.Options[this:GetID()] ) then + UIDropDownMenu_Initialize( this, COE_Config.Options[this:GetID()].InitFunc ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:EnableComboBox + + PURPOSE: Enables a combo box and sets the text color to the + normal text color +-------------------------------------------------------------------]] +function COE_Config:EnableComboBox( element ) + + getglobal( element:GetName() .. "CB" ):Show(); + getglobal( element:GetName() .. "LeftText" ):SetTextColor( NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:DisableComboBox + + PURPOSE: Disables a combo box and sets the text color to gray +-------------------------------------------------------------------]] +function COE_Config:DisableComboBox( element ) + + getglobal( element:GetName() .. "CB" ):Hide(); + getglobal( element:GetName() .. "LeftText" ):SetTextColor( GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnSliderShow + + PURPOSE: Sets the slider texts and values +-------------------------------------------------------------------]] +function COE_Config:OnSliderShow() + + if( COE_Config.Options[this:GetID()] ) then + COE_Config.Options[this:GetID()].InitFunc(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:OnSliderChange + + PURPOSE: Sets the new value +-------------------------------------------------------------------]] +function COE_Config:OnSliderChange() + + if( COE_Config.Options[this:GetID()] ) then + COE_Config.Options[this:GetID()].Func(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:ConfigureBar + + PURPOSE: Switches between set bar configuration modes +-------------------------------------------------------------------]] +function COE_Config:ConfigureBar( mode ) + + if( mode == nil ) then + mode = not COE.ConfigureBarMode; + end + + if( mode ) then + COE_Config:ConfigureOrder( false ); + COE_Config:ConfigureSet( false ); + COE.ConfigureBarMode = true; + COE_OptionConfigureBar:SetText( COEUI_STRINGS["COE_OptionStopConfigureSet"] ); + else + COE.ConfigureBarMode = false; + COE_OptionConfigureBar:SetText( COEUI_STRINGS["COE_OptionConfigureBar"] ); + end + + COE_Totem:Invalidate( COEEarthFrame, true, true, true ); + COE_Totem:Invalidate( COEFireFrame, true, true, true ); + COE_Totem:Invalidate( COEWaterFrame, true, true, true ); + COE_Totem:Invalidate( COEAirFrame, true, true, true ); +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:ConfigureOrder + + PURPOSE: Switches between set bar configuration modes +-------------------------------------------------------------------]] +function COE_Config:ConfigureOrder( mode ) + + if( mode == nil ) then + mode = not COE.ConfigureOrderMode; + end + + if( mode ) then + COE_Config:ConfigureBar( false ); + COE_Config:ConfigureSet( false ); + COE.ConfigureOrderMode = true; + COE_OptionConfigureOrder:SetText( COEUI_STRINGS["COE_OptionStopConfigureSet"] ); + else + COE.ConfigureOrderMode = false; + COE_Config.ConfigureOrderTotem = nil; + COE_OptionConfigureOrder:SetText( COEUI_STRINGS["COE_OptionConfigureOrder"] ); + end + + COE_Totem:Invalidate( COEEarthFrame, true, true, true ); + COE_Totem:Invalidate( COEFireFrame, true, true, true ); + COE_Totem:Invalidate( COEWaterFrame, true, true, true ); + COE_Totem:Invalidate( COEAirFrame, true, true, true ); +end + + +--[[ ============================================================================================= + + O P T I O N S + +================================================================================================]] + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableTotemBar + + PURPOSE: Update the totem bar frame to reflect the change and + set availability of dependent options +-------------------------------------------------------------------]] +function COEOptionEnableTotemBar() + + -- this call is needed if the bar was invisible + -- --------------------------------------------- + COE_Totem:UpdateAllFrames(); + + if( COE_Config:GetSaved( COEOPT_ENABLETOTEMBAR ) == 1 ) then + COE_ConfigTotemTotemBar:Enable(); + COE_ConfigTotemTotemOptions:Enable(); + COE_ConfigTotemTotemSets:Enable(); + + COE_Config:EnableCheckBox( COE_OptionFixBar ); + COE_Config:EnableCheckBox( COE_OptionGroupBars ); + COE_Config:EnableComboBox( COE_OptionTTAlignment ); + COE_Config:EnableComboBox( COE_OptionDisplayMode ); + COE_OptionConfigureBar:Enable(); + COE_OptionConfigureOrder:Enable(); + COE_Config:EnableComboBox( COE_OptionCurrentFrame ); + COE_Config:EnableComboBox( COE_OptionDirection ); + COE_Config:EnableComboBox( COE_OptionFrameMode ); + COE_OptionFlexCount:Show(); + else + COE_ConfigTotemTotemBar:Disable(); + COE_ConfigTotemTotemOptions:Disable(); + COE_ConfigTotemTotemSets:Disable(); + + COE_Config:OnSubTabButtonClick( COE_ConfigTotemTotemBar ); + + COE_Config:DisableCheckBox( COE_OptionFixBar ); + COE_Config:DisableCheckBox( COE_OptionGroupBars ); + COE_Config:DisableComboBox( COE_OptionTTAlignment ); + COE_Config:DisableComboBox( COE_OptionDisplayMode ); + COE_Config:ConfigureSet( false ); + COE_Config:ConfigureBar( false ); + COE_Config:ConfigureOrder( false ); + COE_OptionConfigureBar:Disable(); + COE_OptionConfigureOrder:Disable(); + COE_Config:DisableComboBox( COE_OptionCurrentFrame ); + COE_Config:DisableComboBox( COE_OptionDirection ); + COE_Config:DisableComboBox( COE_OptionFrameMode ); + COE_OptionFlexCount:Hide(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableTimers + + PURPOSE: Disable dependent elements +-------------------------------------------------------------------]] +function COEOptionEnableTimers() + + if( COE_Config:GetSaved( COEOPT_ENABLETIMERS ) == 0 ) then + -- disable dependent elements + -- --------------------------- + COE_Config:DisableCheckBox( COE_OptionEnableTimerNotifications ); + COE_Config:DisableCheckBox( COE_OptionEnableTimerFrame ); + COE_Config:DisableComboBox( COE_OptionDisplayAlignment ); + COE_Config:DisableCheckBox( COE_OptionFrameTimersOnly ); + COETimerFrame:Hide(); + else + COE_Config:EnableCheckBox( COE_OptionEnableTimerNotifications ); + COE_Config:EnableCheckBox( COE_OptionEnableTimerFrame ); + COE_Config:EnableComboBox( COE_OptionDisplayAlignment ); + COE_Config:EnableCheckBox( COE_OptionFrameTimersOnly ); + + if( COE_Config:GetSaved( COEOPT_TIMERFRAME ) == 1 ) then + COETimerFrame:Show(); + end + end +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionTTAlignmentInit + + PURPOSE: Fills the Tooltip Alignment combo box +-------------------------------------------------------------------]] +function COEOptionTTAlignmentInit() + + local i; + for i = 1, table.getn( COEUI_TTALIGN ) do + UIDropDownMenu_AddButton( { text = COEUI_TTALIGN[i][2]; func = COEOptionTTAlignmentClick } ); + end + UIDropDownMenu_SetSelectedID( COE_OptionTTAlignmentCB, COE_Config:GetSaved( COEOPT_TTALIGNMENT ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionTTAlignmentClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionTTAlignmentClick() + + UIDropDownMenu_SetSelectedID( COE_OptionTTAlignmentCB, this:GetID() ); + COE_Config:SetOption( COEOPT_TTALIGNMENT, this:GetID() ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDisplayModeInit + + PURPOSE: Fills the Display Mode combo box +-------------------------------------------------------------------]] +function COEOptionDisplayModeInit() + + local i; + for i = 1, table.getn( COEUI_DISPLAYMODE ) do + UIDropDownMenu_AddButton( { text = COEUI_DISPLAYMODE[i]; func = COEOptionDisplayModeClick } ); + end + UIDropDownMenu_SetSelectedID( COE_OptionDisplayModeCB, COE_Config:GetSaved( COEOPT_DISPLAYMODE ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDisplayModeClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionDisplayModeClick() + + UIDropDownMenu_SetSelectedID( COE_OptionDisplayModeCB, this:GetID() ); + COE_Config:SetOption( COEOPT_DISPLAYMODE, this:GetID() ); + + -- reconfigure totems + -- ------------------- + COETotemFrame.Reconfigure = true; + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableSets() + + PURPOSE: Set availability of the set buttons +-------------------------------------------------------------------]] +function COEOptionEnableSets() + + if( COE_Config:GetSaved( COEOPT_ENABLESETS ) == 1 ) then + COE_Config:EnableCheckBox( COE_OptionEnableAutoSwitch ); + COE_Config:EnableComboBox( COE_OptionActiveSet ); + COE_OptionConfigureSet:Enable(); + COE_OptionSetName:Show(); + else + COE_Config:DisableCheckBox( COE_OptionEnableAutoSwitch ); + COE_Config:DisableComboBox( COE_OptionActiveSet ); + COE_OptionConfigureSet:Disable(); + COE_OptionSetName:Hide(); + + COE_Config:ActivateSet( COESET_DEFAULT ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableAdvisor() + + PURPOSE: Schedules the advisor check if enabled +-------------------------------------------------------------------]] +function COEOptionEnableAdvisor() + + if( COE_Config:GetSaved( COEOPT_ADVISOR ) == 1 ) then + -- schedule only if not already scheduled to prevent + -- rescheduling on config dialog display + -- -------------------------------------------------- + if( not Chronos.isScheduledByName( "COEAdvise" ) ) then + Chronos.scheduleByName( "COEAdvise", COE.AdvisorInterval, COESched_RunAdvisor ); + end + else + Chronos.unscheduleByName( "COEAdvise" ); + COE.CleansingTotems.Tremor.Warn = false; + COE.CleansingTotems.Disease.Warn = false; + COE.CleansingTotems.Poison.Warn = false; + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableAutoSwitch() + + PURPOSE: Refill the Active Set combo box +-------------------------------------------------------------------]] +function COEOptionEnableAutoSwitch() + + if( COE_Config:GetSaved( COEOPT_AUTOSWITCH ) == 0 and + COE_Config:GetSaved( COEOPT_ACTIVESET ) <= COESET_DEFAULT ) then + + -- switch to default set + -- ---------------------- + COE_Config:ActivateSet( COESET_DEFAULT ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionActiveSetInit + + PURPOSE: Fills the Active Set combo box +-------------------------------------------------------------------]] +function COEOptionActiveSetInit() + + local i; + + -- pvp sets + -- --------- + if( COE_Config:GetSaved( COEOPT_AUTOSWITCH ) == 1 ) then + for i = 1, table.getn( COEUI_PVPSETS ) do + UIDropDownMenu_AddButton( { text = COEUI_PVPSETS[i]; func = COEOptionActiveSetClick; value = i } ); + end + end + + -- default set + -- ------------ + UIDropDownMenu_AddButton( { text = COEUI_DEFAULTSET; func = COEOptionActiveSetClick; value = COESET_DEFAULT } ); + + -- custom sets + -- ------------ + for i = 1, table.getn( COE_CustomTotemSets ) do + UIDropDownMenu_AddButton( { text = COE_CustomTotemSets[i].Name; func = COEOptionActiveSetClick; value = COESET_DEFAULT + i } ); + end + + -- select the activated set + -- ------------------------- + UIDropDownMenu_SetSelectedValue( COE_OptionActiveSetCB, COE_Config:GetSaved( COEOPT_ACTIVESET ) ); + + COE_Config:SetSetButtonStates(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionActiveSetClick + + PURPOSE: Activates the chosen totem set +-------------------------------------------------------------------]] +function COEOptionActiveSetClick() + + COE_Config:ActivateSet( this.value ); + + -- reset set cycle + -- ---------------- + COE_Totem:ResetSetCycle(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionCurrentFrameInit + + PURPOSE: Fills the Configure Bar combo box +-------------------------------------------------------------------]] +function COEOptionCurrentFrameInit() + + local i; + for i = 1, table.getn( COEUI_CURRENTFRAME ) do + UIDropDownMenu_AddButton( { text = COEUI_CURRENTFRAME[i]; func = COEOptionCurrentFrameClick; value = COE_Element[i] } ); + end + UIDropDownMenu_SetSelectedValue( COE_OptionCurrentFrameCB, COE_Config:GetSaved( COEOPT_CURRENTFRAME ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionCurrentFrameClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionCurrentFrameClick() + + UIDropDownMenu_SetSelectedID( COE_OptionCurrentFrameCB, this:GetID() ); + COE_Config:SetOption( COEOPT_CURRENTFRAME, this.value ); + + -- show associated options + -- ------------------------ + UIDropDownMenu_Initialize( COE_OptionDirectionCB, COEOptionDirectionInit ); + UIDropDownMenu_Initialize( COE_OptionFrameModeCB, COEOptionFrameModeInit ); + COEOptionFlexCountShow(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDirectionInit + + PURPOSE: Fills the Configure Bar combo box +-------------------------------------------------------------------]] +function COEOptionDirectionInit() + + local i; + for i = 1, table.getn( COEUI_DIRECTION ) do + UIDropDownMenu_AddButton( { text = COEUI_DIRECTION[i]; func = COEOptionDirectionClick; value = COE_Direction[i]} ); + end + local dir = COE_TotemBars[COE_Config:GetSaved( COEOPT_CURRENTFRAME )].Direction; + UIDropDownMenu_SetSelectedValue( COE_OptionDirectionCB, dir ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDirectionClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionDirectionClick() + + UIDropDownMenu_SetSelectedID( COE_OptionDirectionCB, this:GetID() ); + COE_TotemBars[COE_Config:GetSaved( COEOPT_CURRENTFRAME )].Direction = this.value; + + -- set the frame parameters + -- ------------------------- + local frame = getglobal( "COE" .. COE_Config:GetSaved( COEOPT_CURRENTFRAME ) .. "Frame" ); + COE_Totem:SetFrameDirection( frame, this.value ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionFrameModeInit + + PURPOSE: Fills the Frame mode combo box +-------------------------------------------------------------------]] +function COEOptionFrameModeInit() + + local i; + for i = 1, table.getn( COEUI_FRAMEMODE ) do + UIDropDownMenu_AddButton( { text = COEUI_FRAMEMODE[i]; func = COEOptionFrameModeClick; value = COE_FrameMode[i]} ); + end + local mode = COE_TotemBars[COE_Config:GetSaved( COEOPT_CURRENTFRAME )].Mode; + UIDropDownMenu_SetSelectedValue( COE_OptionFrameModeCB, mode ); + + -- show the slider if appropriate + -- ------------------------------- + if( mode == "Flex" ) then + COE_OptionFlexCount:Show(); + else + COE_OptionFlexCount:Hide(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionFrameModeClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionFrameModeClick() + + UIDropDownMenu_SetSelectedID( COE_OptionFrameModeCB, this:GetID() ); + COE_TotemBars[COE_Config:GetSaved( COEOPT_CURRENTFRAME )].Mode = this.value; + + -- set the frame parameters + -- ------------------------- + local frame = getglobal( "COE" .. COE_Config:GetSaved( COEOPT_CURRENTFRAME ) .. "Frame" ); + frame.Mode = this.value; + + -- show the slider if appropriate + -- ------------------------------- + if( this.value == "Flex" ) then + COE_OptionFlexCount:Show(); + else + COE_OptionFlexCount:Hide(); + end + + -- force frame update + -- ------------------- + COE_Totem:UpdateAllFrames(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionFlexCountShow() + + PURPOSE: Sets the slider texts and values +-------------------------------------------------------------------]] +function COEOptionFlexCountShow() + + local element = COE_Config:GetSaved( COEOPT_CURRENTFRAME ); + + -- set values + -- ----------- + COE_OptionFlexCount:SetMinMaxValues( 1, COE.MaxTotems[element] ); + COE_OptionFlexCount:SetValue( COE_TotemBars[element].FlexCount ); + COE_OptionFlexCount:SetValueStep( 1 ); + + -- set texts + -- ---------- + getglobal( COE_OptionFlexCount:GetName() .. "Low" ):SetText( 1 ); + getglobal( COE_OptionFlexCount:GetName() .. "High" ):SetText( COE.MaxTotems[element] ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionFlexCountChange() + + PURPOSE: Stores the option and updates the display +-------------------------------------------------------------------]] +function COEOptionFlexCountChange() + + local element = COE_Config:GetSaved( COEOPT_CURRENTFRAME ); + + COE_TotemBars[element].FlexCount = COE_OptionFlexCount:GetValue(); + + -- set the frame parameters + -- ------------------------- + local frame = getglobal( "COE" .. element .. "Frame" ); + frame.FlexCount = COE_TotemBars[element].FlexCount; + COE_Totem:Invalidate( frame, false, true, true ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionScalingShow() + + PURPOSE: Sets the slider texts and values +-------------------------------------------------------------------]] +function COEOptionScalingShow() + + -- set values + -- ----------- + COE_OptionScaling:SetMinMaxValues( 0.64, 1.2 ); + COE_OptionScaling:SetValue( COE_Config:GetSaved( COEOPT_SCALING ) ); + COE_OptionScaling:SetValueStep( 0.01 ); + + -- set texts + -- ---------- + getglobal( COE_OptionScaling:GetName() .. "Low" ):SetText( 0.64 ); + getglobal( COE_OptionScaling:GetName() .. "High" ):SetText( 1.2 ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionScalingChange() + + PURPOSE: Stores the option and updates the display +-------------------------------------------------------------------]] +function COEOptionScalingChange() + + COE_Config:SetOption( COEOPT_SCALING, COE_OptionScaling:GetValue() ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionEnableTimerFrame() + + PURPOSE: Sets the visibility of the timer frame +-------------------------------------------------------------------]] +function COEOptionEnableTimerFrame() + + if( COE_Config:GetSaved( COEOPT_TIMERFRAME ) == 1 ) then + COETimerFrame:Show(); + else + COETimerFrame:Hide(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDisplayAlignInit + + PURPOSE: Fills the Display Alignment combo box +-------------------------------------------------------------------]] +function COEOptionDisplayAlignInit() + + local i; + for i = 1, table.getn( COEUI_DISPLAYALIGN ) do + UIDropDownMenu_AddButton( { text = COEUI_DISPLAYALIGN[i]; func = COEOptionDisplayAlignClick } ); + end + UIDropDownMenu_SetSelectedID( COE_OptionDisplayAlignmentCB, COE_Config:GetSaved( COEOPT_DISPLAYALIGN ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionDisplayAlignClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionDisplayAlignClick() + + UIDropDownMenu_SetSelectedID( COE_OptionDisplayAlignmentCB, this:GetID() ); + COE_Config:SetOption( COEOPT_DISPLAYALIGN, this:GetID() ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionOverrideRankInit + + PURPOSE: Fills the Rank 1 modifier combo box +-------------------------------------------------------------------]] +function COEOptionOverrideRankInit() + + local i; + for i = 1, table.getn( COEUI_OVERRIDERANK ) do + UIDropDownMenu_AddButton( { text = COEUI_OVERRIDERANK[i]; func = COEOptionOverrideRankClick } ); + end + UIDropDownMenu_SetSelectedID( COE_OptionOverrideRankCB, COE_Config:GetSaved( COEOPT_OVERRIDERANK ) ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionOverrideRankClick() + + PURPOSE: Selects the clicked button and stores the option +-------------------------------------------------------------------]] +function COEOptionOverrideRankClick() + + UIDropDownMenu_SetSelectedID( COE_OptionOverrideRankCB, this:GetID() ); + COE_Config:SetOption( COEOPT_OVERRIDERANK, this:GetID() ); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COEOptionGroupBars() + + PURPOSE: Stores the relative frame positions when enabled +-------------------------------------------------------------------]] +function COEOptionGroupBars() + + if( COE_Config:GetSaved( COEOPT_GROUPBARS ) == 1 ) then + COE_Totem:UpdateFrameCoordinates(); + end + +end + + +--[[ ============================================================================================= + + T O T E M S E T S + +================================================================================================]] + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:ActivateSet + + PURPOSE: Activates the specified set and shows its options +-------------------------------------------------------------------]] +function COE_Config:ActivateSet( index ) + + -- save setting + -- ------------- + COE_Config:SetOption( COEOPT_ACTIVESET, index ); + + -- update drop down + -- ----------------- + UIDropDownMenu_Initialize( COE_OptionActiveSetCB, COE_Config.Options[COEOPT_ACTIVESET].InitFunc ); + + -- update cast order + -- ------------------ + if( index <= COESET_DEFAULT ) then + set = COE_SavedTotemSets[index]; + else + set = COE_CustomTotemSets[index - COESET_DEFAULT]; + end + + local i; + for i = 1, 4 do + getglobal( "COE_OptionCastOrder" .. i .. "Text" ):SetText( set.CastOrder[i] ); + end + + -- reconfigure totem bar + -- ---------------------- + COE_Totem:Invalidate( COEEarthFrame, true, true, true ); + COE_Totem:Invalidate( COEFireFrame, true, true, true ); + COE_Totem:Invalidate( COEWaterFrame, true, true, true ); + COE_Totem:Invalidate( COEAirFrame, true, true, true ); + COETotemFrame.Reconfigure = true; + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:SetSetButtonStates + + PURPOSE: Sets the availablitity of the options in the totem + sets sup panel +-------------------------------------------------------------------]] +function COE_Config:SetSetButtonStates() + + -- set button states + -- ------------------ + if( UIDropDownMenu_GetSelectedValue( COE_OptionActiveSetCB ) <= COESET_DEFAULT ) then + + -- set not removable + -- ------------------ + COE_OptionDeleteSet:Disable(); + else + + -- set is removable + -- ----------------- + COE_OptionDeleteSet:Enable(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:NewSetTextChanged + + PURPOSE: Enabled the New Set button only if text is entered +-------------------------------------------------------------------]] +function COE_Config:NewSetTextChanged() + + if( this:GetText() ~= "" ) then + COE_OptionNewSet:Enable(); + else + COE_OptionNewSet:Disable(); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:NewTotemSet + + PURPOSE: Creates a new totem set with the specified name +-------------------------------------------------------------------]] +function COE_Config:NewTotemSet() + + COE_OptionSetName:ClearFocus(); + + local name = COE_OptionSetName:GetText(); + if( name and name ~= "" ) then + local setcount = table.getn( COE_CustomTotemSets ); + + -- create new set + -- --------------- + table.insert( COE_CustomTotemSets, { Name = name, Earth = "", Fire = "", Water = "", Air = "", + CastOrder = { COESTR_ELEMENT_EARTH, COESTR_ELEMENT_FIRE, COESTR_ELEMENT_WATER, COESTR_ELEMENT_AIR } } ); + + -- activate set + -- ------------- + COE_Config:ActivateSet( COESET_DEFAULT + setcount + 1 ); + + -- rescan totem sets + -- ------------------ + COE:InitTotemSets(); + + -- clear the edit box + -- ------------------- + COE_OptionSetName:SetText( "" ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:DeleteTotemSet + + PURPOSE: Deletes the current custom set +-------------------------------------------------------------------]] +function COE_Config:DeleteTotemSet() + + local set = UIDropDownMenu_GetSelectedValue( COE_OptionActiveSetCB ); + + if( set <= COESET_DEFAULT ) then + return; + end + + set = set - COESET_DEFAULT; + + -- delete set + -- ----------- + table.remove( COE_CustomTotemSets, set ); + + -- set default set as active + -- -------------------------- + COE_Config:ActivateSet( COESET_DEFAULT ); + + -- rescan totem sets + -- ------------------ + COE:InitTotemSets(); + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:ConfigureSet + + PURPOSE: Switches between set configuration modes +-------------------------------------------------------------------]] +function COE_Config:ConfigureSet( mode ) + + if( mode == nil ) then + mode = not COE.ConfigureSetsMode; + end + + if( mode ) then + COE_Config:ConfigureBar( false ); + COE_Config:ConfigureOrder( false ); + COE.ConfigureSetsMode = true; + COE_OptionConfigureSet:SetText( COEUI_STRINGS["COE_OptionStopConfigureSet"] ); + else + COE.ConfigureSetsMode = false; + COE_OptionConfigureSet:SetText( COEUI_STRINGS["COE_OptionConfigureSet"] ); + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:DoCastOrder + + PURPOSE: Increases or decreases the cast order of the + associated element in this set depending on the + direction parameter (up/down) +-------------------------------------------------------------------]] +function COE_Config:DoCastOrder( up ) + + -- get id first + -- ------------- + local id = this:GetParent():GetID(); + + -- already the first/last element? + -- -------------------------------- + if( (up and id == 1) or (not up and id == 4) ) then + return; + end + + -- get the other element id + -- ------------------------- + local otherid; + if( up ) then + otherid = id - 1; + else + otherid = id + 1; + end + + --======================================= + -- swap element with the next one + --======================================= + + local activeset = COE_Config:GetSaved( COEOPT_ACTIVESET ); + local swap; + + -- swap in internal set + -- since the cast order is stored by reference + -- in the saved set, we only need to swap it here + -- ----------------------------------------------- + swap = COE.TotemSets[activeset].CastOrder[otherid]; + COE.TotemSets[activeset].CastOrder[otherid] = COE.TotemSets[activeset].CastOrder[id]; + COE.TotemSets[activeset].CastOrder[id] = swap; + + -- swap labels + -- ------------ + local thistext = getglobal( "COE_OptionCastOrder" .. id .. "Text" ); + local othertext = getglobal( "COE_OptionCastOrder" .. otherid .. "Text" ); + + swap = othertext:GetText(); + othertext:SetText( thistext:GetText() ); + thistext:SetText( swap ); + +end + + +--[[ ============================================================================================= + + L O G I C + +================================================================================================]] + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:RegisterOption + + PURPOSE: Registers a checkbox or combobox for the configuration + dialog along with function to be executed and saved + variables + + PARAMS: id - id of the frame (the unique option id) + type - 'check', 'combo' or 'slider' + func - function pointer for OnClick or OnChange + value - initial value (saved variable) + initfunc - function pointer for combobox initialization + / slider show + skip - if true, the option is not saved +-------------------------------------------------------------------]] +function COE_Config:RegisterOption( id, type, func, value, initfunc, skip ) + + -- check if the type is valid + -- --------------------------- + if( type ~= 'check' and type ~= 'combo' and type ~= 'slider' ) then + return; + end + + -- store option + -- ------------- + COE_Config.Options[id] = { Type = type, Func = func, InitFunc = initfunc }; + + -- store saved variable + -- --------------------- + if( not skip ) then + COE_Saved[id] = value; + end + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:SetOption + + PURPOSE: Stores the new value in the options and saved + variables table +-------------------------------------------------------------------]] +function COE_Config:SetOption( id, value ) + + COE_Saved[id] = value; + +end + + +--[[ ---------------------------------------------------------------- + METHOD: COE_Config:GetSaved + + PURPOSE: Retrieves the value from the saved variables or uses + the default value if it cannot find it there +-------------------------------------------------------------------]] +function COE_Config:GetSaved( id ) + + if( COE_Saved[id] ) then + return COE_Saved[id]; + elseif( COE_Config.Defaults[id] ) then + return COE_Config.Defaults[id]; + else + return nil; + end + +end \ No newline at end of file diff --git a/COE_Config.xml b/COE_Config.xml new file mode 100644 index 0000000..e62e2a3 --- /dev/null +++ b/COE_Config.xml @@ -0,0 +1,565 @@ + +