--[[ 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