/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/Commando/systemsettings.cpp $* * * * $Author:: Byon_g $* * * * $Modtime:: 2/21/02 10:49a $* * * * $Revision:: 38 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "systemsettings.h" #include "registry.h" //#include "menuentry.h" #include "_globals.h" #include "combat.h" #include "pscene.h" #include "consolefunction.h" #include "ccamera.h" #include "phys.h" #include "dx8wrapper.h" #include "dx8caps.h" #include "surfaceeffects.h" #include "dlgconfigvideotab.h" #include "wwstring.h" /* ** */ DynamicVectorClass SystemSettings::SettingList; /* ** */ void SystemSettings::Apply_All( void ) { for ( int index = 0; index < SettingList.Count(); index++ ) { SettingList[ index ]->Apply(); } } /* ** */ void SystemSettings::Registry_Save( const char * sub_key ) { RegistryClass registry( sub_key ); if ( registry.Is_Valid() ) { for ( int index = 0; index < SettingList.Count(); index++ ) { SettingList[ index ]->Registry_Save( registry ); } } } void SystemSettings::Registry_Load( const char * sub_key ) { RegistryClass registry( sub_key ); if ( registry.Is_Valid() ) { for ( int index = 0; index < SettingList.Count(); index++ ) { SettingList[ index ]->Registry_Load( registry ); } } } /* ** */ void SystemSettings::Add_Console_Functions( DynamicVectorClass & list ) { #ifdef WWDEBUG for ( int index = 0; index < SettingList.Count(); index++ ) { list.Add( SettingList[ index ]->Create_Console_Function() ); } #endif } /** BOOL ENTRY *********************************************************************************/ class ConsoleFunctionSettingBool : public ConsoleFunctionClass { public: ConsoleFunctionSettingBool( SystemSettingEntryBool * entry ) : Entry( entry ) {} virtual const char * Get_Name( void ) { return Entry->Get_Name(); } virtual const char * Get_Help( void ) { return Entry->Get_Help(); } virtual void Activate( const char * input ) { Entry->Set_State( !Entry->Get_State() ); Print( "%s %s\n", Entry->Get_Name(), Entry->Get_State() ? "ON" : "OFF" ); } private: SystemSettingEntryBool * Entry; }; SystemSettingEntryBool::SystemSettingEntryBool( void ) : State( false ) { } void SystemSettingEntryBool::Apply( void ) { State = Get_Bool(); } void SystemSettingEntryBool::Registry_Save( RegistryClass & registry ) { registry.Set_Bool( Get_Name(), Get_State() ); } void SystemSettingEntryBool::Registry_Load( RegistryClass & registry ) { State = Get_Bool(); Set_State( registry.Get_Bool( Get_Name(), Get_State() ) ); } ConsoleFunctionClass * SystemSettingEntryBool::Create_Console_Function() { return new ConsoleFunctionSettingBool( this ); } bool SystemSettingEntryBool::Get_State( void ) { return State; } void SystemSettingEntryBool::Set_State( bool state ) { State = state; Set_Bool( State ); State = Get_Bool(); } /** SLIDER ENTRY *********************************************************************************/ class ConsoleFunctionSettingSlider : public ConsoleFunctionClass { public: ConsoleFunctionSettingSlider( SystemSettingEntrySlider * entry ) : Entry( entry ) {} virtual const char * Get_Name( void ) { return Entry->Get_Name(); } virtual const char * Get_Help( void ) { return Entry->Get_Help(); } virtual void Activate( const char * input ) { Entry->Set_Value( atoi( input ) ); Print( "%s = %d\n", Entry->Get_Name(), Entry->Get_Value() ); } private: SystemSettingEntrySlider * Entry; }; SystemSettingEntrySlider::SystemSettingEntrySlider( void ) : Value( 0 ), Min( 0 ), Max ( 10 ), StepSize( 1 ) { } void SystemSettingEntrySlider::Apply( void ) { Value = Get_Slider(); } void SystemSettingEntrySlider::Registry_Save( RegistryClass & registry ) { registry.Set_Int( Get_Name(), Get_Value() ); } void SystemSettingEntrySlider::Registry_Load( RegistryClass & registry ) { Set_Value( registry.Get_Int( Get_Name(), Get_Value() ) ); } ConsoleFunctionClass * SystemSettingEntrySlider::Create_Console_Function() { return new ConsoleFunctionSettingSlider( this ); } int SystemSettingEntrySlider::Get_Value( void ) { return Value; } void SystemSettingEntrySlider::Set_Value( int value ) { Value = (value > Max ) ? Max : ((value < Min) ? Min : value); Set_Slider( Value ); Value = Get_Slider(); } /** ENUM ENTRY *********************************************************************************/ class ConsoleFunctionSettingEnum : public ConsoleFunctionClass { public: ConsoleFunctionSettingEnum( SystemSettingEntryEnum * entry ) : Entry( entry ) {} virtual const char * Get_Name( void ) { return Entry->Get_Name(); } virtual const char * Get_Help( void ) { return Entry->Get_Help(); } virtual void Activate( const char * input ) { Entry->Set_Selection( input ); Print( "%s = %s\n", Entry->Get_Name(), Entry->Get_Enum_Name( Entry->Get_Selection() ) ); } private: SystemSettingEntryEnum * Entry; }; SystemSettingEntryEnum::SystemSettingEntryEnum( void ) : Selection( 0 ) { } void SystemSettingEntryEnum::Apply( void ) { Selection = Get_Enum(); } void SystemSettingEntryEnum::Registry_Save( RegistryClass & registry ) { registry.Set_Int( Get_Name(), Get_Selection() ); } void SystemSettingEntryEnum::Registry_Load( RegistryClass & registry ) { Set_Selection( registry.Get_Int( Get_Name(), Get_Selection() ) ); } ConsoleFunctionClass * SystemSettingEntryEnum::Create_Console_Function() { return new ConsoleFunctionSettingEnum( this ); } int SystemSettingEntryEnum::Get_Selection( void ) { return Selection; } void SystemSettingEntryEnum::Set_Selection( int selection ) { Selection = (selection >= Get_Enum_Count() ) ? Get_Enum_Count()-1 : ((selection < 0) ? 0 : selection); Set_Enum( Selection ); Selection = Get_Enum(); } void SystemSettingEntryEnum::Set_Selection( const char * name ) { bool found = false; for ( int i = 0; i < Get_Enum_Count(); i++ ) { if ( stricmp( name, Get_Enum_Name( i ) ) == 0 ) { Set_Selection( i ); found = true; } } if ( !found ) { Set_Selection( atoi( name ) ); } } /***********************************************************************************************/ class SystemSettingEntryStaticProjectors : public SystemSettingEntryBool { public: const char * Get_Name( void ) { return "Static_Projectors"; } const char * Get_Help( void ) { return "STATIC_PROJECTORS - toggles static projectors."; } virtual bool Get_Bool( void ) { if ( COMBAT_SCENE ) return COMBAT_SCENE->Are_Static_Projectors_Enabled(); return State; } virtual void Set_Bool( bool state ) { if ( COMBAT_SCENE ) COMBAT_SCENE->Enable_Static_Projectors( state ); } }; /***********************************************************************************************/ class SystemSettingEntryDynamicProjectors : public SystemSettingEntryBool { public: const char * Get_Name( void ) { return "Dynamic_Projectors"; } const char * Get_Help( void ) { return "DYNAMIC_PROJECTORS - toggles dynamic projectors."; } virtual bool Get_Bool( void ) { if ( COMBAT_SCENE ) return COMBAT_SCENE->Are_Dynamic_Projectors_Enabled(); return State; } virtual void Set_Bool( bool state ) { if ( COMBAT_SCENE ) COMBAT_SCENE->Enable_Dynamic_Projectors( state ); } }; /***********************************************************************************************/ class SystemSettingEntryWeaponHelp : public SystemSettingEntryBool { public: const char * Get_Name( void ) { return "Enable_Weapon_Help"; } const char * Get_Help( void ) { return "ENABLE_WEAPON_HELP - toggles weapon aiming help."; } virtual bool Get_Bool( void ) { if ( COMBAT_CAMERA ) return COMBAT_CAMERA->Is_Weapon_Help_Enabled(); return State; } virtual void Set_Bool( bool state ) { if ( COMBAT_CAMERA ) COMBAT_CAMERA->Enable_Weapon_Help( state ); } }; /***********************************************************************************************/ class SystemSettingEntryAutoTransitions : public SystemSettingEntryBool { public: const char * Get_Name( void ) { return "Enable_Auto_Transitions"; } const char * Get_Help( void ) { return "ENABLE_AUTO_TRANSITIONS - toggles automatic doors and transitions."; } virtual bool Get_Bool( void ) { return CombatManager::Are_Transitions_Automatic(); } virtual void Set_Bool( bool state ) { CombatManager::Set_Transitions_Automatic( state ); } }; /***********************************************************************************************/ class SystemSettingEntryGammaLevel : public SystemSettingEntrySlider { public: SystemSettingEntryGammaLevel( void ) { Set_Range( GAMMA_SLIDER_MIN, GAMMA_SLIDER_MAX ); Set_Step_Size( 1 ); Set_Value( GAMMA_SLIDER_DEFAULT ); } const char * Get_Name( void ) { return "Gamma_Correction"; } const char * Get_Help( void ) { formatstring.Format ("GAMMA_CORRECTION [%d..%d] - Adjusts gamma correction curve for the display.", GAMMA_SLIDER_MIN, GAMMA_SLIDER_MAX); return (formatstring); } int Get_Slider( void ) { Value = DlgConfigVideoTabClass::Get_Gamma (); return Value; } void Set_Slider( int value ) { DlgConfigVideoTabClass::Set_Gamma (value); } void Registry_Save ( RegistryClass & registry ) { registry.Set_Int (Get_Name (), Get_Slider ()); } protected: StringClass formatstring; }; /***********************************************************************************************/ class SystemSettingEntryBrightnessLevel : public SystemSettingEntrySlider { public: SystemSettingEntryBrightnessLevel( void ) { Set_Range( BRIGHTNESS_SLIDER_MIN, BRIGHTNESS_SLIDER_MAX ); Set_Step_Size( 1 ); Set_Value( BRIGHTNESS_SLIDER_DEFAULT ); } const char * Get_Name( void ) { return "Brightness"; } const char * Get_Help( void ) { formatstring.Format ("BRIGHTNESS [%d..%d] - Adjusts brightness for the display.", BRIGHTNESS_SLIDER_MIN, BRIGHTNESS_SLIDER_MAX); return (formatstring); } int Get_Slider( void ) { Value = DlgConfigVideoTabClass::Get_Brightness (); return Value; } void Set_Slider( int value ) { DlgConfigVideoTabClass::Set_Brightness (value); } void Registry_Save ( RegistryClass & registry ) { registry.Set_Int (Get_Name (), Get_Slider ()); } protected: StringClass formatstring; }; /***********************************************************************************************/ class SystemSettingEntryContrastLevel : public SystemSettingEntrySlider { public: SystemSettingEntryContrastLevel( void ) { Set_Range( CONTRAST_SLIDER_MIN, CONTRAST_SLIDER_MAX ); Set_Step_Size( 1 ); Set_Value( CONTRAST_SLIDER_DEFAULT ); } const char * Get_Name( void ) { return "Contrast"; } const char * Get_Help( void ) { formatstring.Format ("CONTRAST [%d..%d] - Adjusts contrast for the display.", CONTRAST_SLIDER_MIN, CONTRAST_SLIDER_MAX); return (formatstring); } int Get_Slider( void ) { Value = DlgConfigVideoTabClass::Get_Contrast (); return Value; } void Set_Slider( int value ) { DlgConfigVideoTabClass::Set_Contrast (value); } void Registry_Save ( RegistryClass & registry ) { registry.Set_Int (Get_Name (), Get_Slider ()); } protected: StringClass formatstring; }; /***********************************************************************************************/ class SystemSettingEntryTextureResolution : public SystemSettingEntrySlider { public: SystemSettingEntryTextureResolution( void ) { Set_Range( 0, 7 ); Set_Step_Size( 1 ); Set_Value( 0 ); } const char * Get_Name( void ) { return "Texture_Resolution"; } const char * Get_Help( void ) { return "TEXTURE_RESOLUTION [0..7] - sets the texture resolution."; } virtual int Get_Slider( void ) { return WW3D::Get_Texture_Reduction(); } virtual void Set_Slider( int value ) { if ( WW3D::Get_Texture_Reduction() != value ) { WW3D::Set_Texture_Reduction( value ); } } }; /***********************************************************************************************/ class SystemSettingEntryDynamicLODBudget : public SystemSettingEntrySlider { public: SystemSettingEntryDynamicLODBudget( void ) { Set_Range( 100, 100000 ); Set_Step_Size( 100 ); Set_Value( 10000 ); } const char * Get_Name( void ) { return "Dynamic_LOD_Budget"; } const char * Get_Help( void ) { return "DYNAMIC_LOD_BUDGET - sets the Dynamic LOD Budget."; } virtual int Get_Slider( void ) { int scount,dcount = Value; if ( PhysicsSceneClass::Get_Instance() ) { PhysicsSceneClass::Get_Instance()->Get_Polygon_Budgets(&scount,&dcount); } return dcount; } virtual void Set_Slider( int value ) { if ( PhysicsSceneClass::Get_Instance() ) { int scount,dcount; PhysicsSceneClass::Get_Instance()->Get_Polygon_Budgets(&scount,&dcount); PhysicsSceneClass::Get_Instance()->Set_Polygon_Budgets(scount,value); } } }; /***********************************************************************************************/ class SystemSettingEntryStaticLODBudget : public SystemSettingEntrySlider { public: SystemSettingEntryStaticLODBudget( void ) { Set_Range( 100, 10000 ); Set_Step_Size( 100 ); Set_Value( 3000 ); } const char * Get_Name( void ) { return "Static_LOD_Budget"; } const char * Get_Help( void ) { return "STATIC_LOD_BUDGET - sets the Static LOD Budget."; } virtual int Get_Slider( void ) { int dcount,scount = Value; if ( PhysicsSceneClass::Get_Instance() ) { PhysicsSceneClass::Get_Instance()->Get_Polygon_Budgets(&scount,&dcount); } return scount; } virtual void Set_Slider( int value ) { if ( PhysicsSceneClass::Get_Instance() ) { int scount,dcount; PhysicsSceneClass::Get_Instance()->Get_Polygon_Budgets(&scount,&dcount); PhysicsSceneClass::Get_Instance()->Set_Polygon_Budgets(value,dcount); } } }; /***********************************************************************************************/ class SystemSettingEntryShadowMode : public SystemSettingEntryEnum { public: const char * Get_Name( void ) { return "Shadow_Mode"; } const char * Get_Help( void ) { return "SHADOW_MODE - 0=none 1=blobs 2=blobs+ 3=projected textures"; } virtual int Get_Enum( void ) { if (COMBAT_SCENE) return COMBAT_SCENE->Get_Shadow_Mode(); return Selection; } virtual void Set_Enum( int selection ) { if (COMBAT_SCENE) COMBAT_SCENE->Set_Shadow_Mode( (PhysicsSceneClass::ShadowEnum)selection ); } virtual int Get_Enum_Count( void ) { return 4; } virtual const char * Get_Enum_Name( int selection ) { static const char * names[ 4 ] = { "None", "Blobs", "Blobs+", "Projections" }; return names[ selection ]; } }; /***********************************************************************************************/ class SystemSettingEntrySurfaceEffectDetail: public SystemSettingEntryEnum { public: const char * Get_Name( void ) { return "Surface_Effect_Detail"; } const char * Get_Help( void ) { return "SURFACE_EFFECT_DETAIL - 0=off 1=no emitters 2=full"; } virtual int Get_Enum( void ) { return SurfaceEffectsManager::Get_Mode (); } virtual void Set_Enum( int value ) { SurfaceEffectsManager::Set_Mode ((SurfaceEffectsManager::MODE)value); } virtual int Get_Enum_Count( void ) { return 3; } virtual const char * Get_Enum_Name( int selection ) { static const char * names[ 3 ] = { "Off", "No Emitters", "Full" }; return names[ selection ]; } }; /***********************************************************************************************/ class SystemSettingEntryMeshDrawMode : public SystemSettingEntryEnum { static const char * names[7]; public: const char * Get_Name( void ) { return "Mesh_Draw_Mode"; } const char * Get_Help( void ) { return "MESH_DRAW_MODE - 0=old 1=new 2=debug 3=debug clip 4=box 5=none 6=dx8 only"; } virtual int Get_Enum( void ) { return WW3D::Get_Mesh_Draw_Mode(); } virtual void Set_Enum( int selection ) { WW3D::Set_Mesh_Draw_Mode( (WW3D::MeshDrawModeEnum) selection ); } virtual int Get_Enum_Count( void ) { return sizeof(names)/sizeof(char*); } virtual const char * Get_Enum_Name( int selection ) { WWASSERT(selection>=0 && selection - 0=disabled 1=enabled 2=force"; } virtual int Get_Enum( void ) { return WW3D::Get_NPatches_Gap_Filling_Mode(); } virtual void Set_Enum( int selection ) { WW3D::Set_NPatches_Gap_Filling_Mode( (WW3D::NPatchesGapFillingModeEnum) selection ); } virtual int Get_Enum_Count( void ) { return sizeof(names)/sizeof(char*); } virtual const char * Get_Enum_Name( int selection ) { WWASSERT(selection>=0 && selection - 1=default, 8=max"; } virtual int Get_Enum( void ) { return WW3D::Get_NPatches_Level(); } virtual void Set_Enum( int selection ) { WW3D::Set_NPatches_Level( selection ); if (DX8Wrapper::Get_Current_Caps() && !DX8Wrapper::Get_Current_Caps()->Support_NPatches()) { Name="NPatches (NOT SUPPORTED BY HARDWARE)"; } } virtual int Get_Enum_Count( void ) { return sizeof(names)/sizeof(char*); } virtual const char * Get_Enum_Name( int selection ) { WWASSERT(selection>=0 && selection - 0=vertex 1=multi-pass 2=multi-texture."; } virtual int Get_Enum( void ) { return WW3D::Get_Prelit_Mode(); } virtual void Set_Enum( int selection ) { if ( WW3D::Supports_Prelit_Mode( (WW3D::PrelitModeEnum) selection ) ) { WW3D::Set_Prelit_Mode( (WW3D::PrelitModeEnum) selection ); } } virtual int Get_Enum_Count( void ) { return 3; } virtual const char * Get_Enum_Name( int selection ) { static const char * names[ 3 ] = { "Vertex", "Multi-pass", "Multi-texture" }; return names[ selection ]; } }; /***********************************************************************************************/ class SystemSettingEntryTextureFilterMode : public SystemSettingEntryEnum { public: const char * Get_Name( void ) { return "Texture_Filter_Mode"; } const char * Get_Help( void ) { return "TEXTURE_FILTER_MODE - 0=bilinear 1=trilinear 2=anisotropic."; } virtual int Get_Enum( void ) { return WW3D::Get_Texture_Filter(); } virtual void Set_Enum( int selection ) { WW3D::Set_Texture_Filter( selection ); } virtual int Get_Enum_Count( void ) { return 3; } virtual const char * Get_Enum_Name( int selection ) { static const char * names[ 3 ] = { "Bilinear", "Trilinear", "Anisotropic" }; return names[ selection ]; } }; /***********************************************************************************************/ class SystemSettingEntryDifficulty : public SystemSettingEntryEnum { public: SystemSettingEntryDifficulty( void ) { Selection = Get_Enum(); } const char * Get_Name( void ) { return "Difficulty"; } const char * Get_Help( void ) { return "DIFFICULTY [0..2] - sets the difficulty level."; } virtual int Get_Enum( void ) { return CombatManager::Get_Difficulty_Level(); } virtual void Set_Enum( int value ) { CombatManager::Set_Difficulty_Level( value ); } virtual int Get_Enum_Count( void ) { return 3; } virtual const char * Get_Enum_Name( int selection ) { static const char * names[ 3 ] = { "Easy", "Average", "Difficult" }; return names[ selection ]; } }; /***********************************************************************************************/ void SystemSettings::Init( void ) { Add_Setting( new SystemSettingEntryStaticProjectors ); Add_Setting( new SystemSettingEntryDynamicProjectors ); Add_Setting( new SystemSettingEntryTextureResolution ); Add_Setting( new SystemSettingEntryDynamicLODBudget ); Add_Setting( new SystemSettingEntryStaticLODBudget ); Add_Setting( new SystemSettingEntryShadowMode ); Add_Setting( new SystemSettingEntryPrelitMode ); Add_Setting( new SystemSettingEntryMeshDrawMode ); Add_Setting( new SystemSettingEntryNPatches ); Add_Setting( new SystemSettingEntryNPatchGapFillingMode ); // Add_Setting( new SystemSettingEntryTextureCompressionMode ); Add_Setting( new SystemSettingEntryTextureFilterMode ); // Add_Setting( new SystemSettingEntryTextureThumbnailMode ); // Add_Setting( new SystemSettingEntryWeaponHelp ); Add_Setting( new SystemSettingEntryAutoTransitions ); Add_Setting( new SystemSettingEntryDifficulty ); Add_Setting( new SystemSettingEntrySurfaceEffectDetail ) ; Add_Setting( new SystemSettingEntryGammaLevel ) ; Add_Setting( new SystemSettingEntryBrightnessLevel ) ; Add_Setting( new SystemSettingEntryContrastLevel ) ; Registry_Load( APPLICATION_SUB_KEY_NAME_SYSTEM_SETTINGS ); } void SystemSettings::Shutdown( void ) { Registry_Save( APPLICATION_SUB_KEY_NAME_SYSTEM_SETTINGS ); /* ** Free the system setting so they don't look like memory leaks when we exit. ST - 6/11/2001 8:32PM */ while (SettingList.Count()) { delete SettingList[0]; SettingList.Delete(0); } } /* #if DEADMENU // // // MenuEntryClass * SystemSettings::Create_Menu_Entry( const char * setting_name ) { for ( int index = 0; index < SettingList.Count(); index++ ) { if ( !stricmp( SettingList[ index ]->Get_Name(), setting_name ) ) { MenuEntryClass * entry = SettingList[ index ]->Create_Menu_Entry(); if ( entry ) { entry->Set_Name( setting_name ); } return entry; } } return NULL; } #endif //DEADMENU #if DEADMENU class MenuEntrySettingBool : public MenuEntryToggleClass { public: MenuEntrySettingBool( SystemSettingEntryBool * entry ) : Entry( entry ) {} virtual bool Get_State( void ) { return Entry->Get_State(); } virtual void Toggle( void ) { Entry->Set_State( !Entry->Get_State() ); } private: SystemSettingEntryBool * Entry; }; #endif // DEADMENU #if DEADMENU MenuEntryClass * SystemSettingEntryBool::Create_Menu_Entry( void ) { return new MenuEntrySettingBool( this ); } #endif // DEADMENU #if DEADMENU class MenuEntrySettingSlider : public MenuEntryIntSliderClass { public: MenuEntrySettingSlider( SystemSettingEntrySlider * entry ) : Entry( entry ) {} virtual int Get_Value( void ) { return Entry->Get_Value(); } virtual void Set_Value( int value ) { Entry->Set_Value( value ); } virtual int Get_Step_Size( void ) { return Entry->Get_Step_Size(); } private: SystemSettingEntrySlider * Entry; }; #endif // DEADMENU #if DEADMENU MenuEntryClass * SystemSettingEntrySlider::Create_Menu_Entry( void ) { return new MenuEntrySettingSlider( this ); } #endif // DEADMENU #if DEADMENU class MenuEntrySettingEnum : public MenuEntryEnumClass { public: MenuEntrySettingEnum( SystemSettingEntryEnum * entry ) : Entry( entry ) {} virtual const char * Get_Selection_Name( void ) { return Entry->Get_Enum_Name( Entry->Get_Selection() ); } virtual void Activate( void ) { int selection = Entry->Get_Selection() + 1; if ( selection == Entry->Get_Enum_Count() ) { selection = 0; } Entry->Set_Selection( selection ); } private: SystemSettingEntryEnum * Entry; }; #endif // DEADMENU #if DEADMENU MenuEntryClass * SystemSettingEntryEnum::Create_Menu_Entry( void ) { return new MenuEntrySettingEnum( this ); } #endif // DEADMENU */