//////////////////////////////////////////////////////////////////////////// // // Crytek Engine Source File. // Copyright (C), Crytek Studios, 2001-2004. // ------------------------------------------------------------------------- // File name: PreferencesStdPages.cpp // Version: v1.00 // Created: 29/10/2003 by Timur. // Compilers: Visual Studio.NET 2003 // Description: // ------------------------------------------------------------------------- // History: // //////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "PreferencesPropertyPage.h" #include "PreferencesStdPages.h" #include "DisplaySettings.h" #include "Settings.h" ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_General : public CPreferencesPropertyPage { public: CVariableArray tableGeneral; CVariableArray tableUndo; CVariable undo_levels; CVariable previewPanel; CVariable treeBrowserPanel; public: virtual const char* GetCategory() { return "General Settings"; } virtual const char* GetTitle() { return "General"; } CPreferencesPage_General() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableGeneral,"General Settings" ); AddVariable( tableGeneral,previewPanel,"Show Geometry Preview Panel" ); AddVariable( tableGeneral,treeBrowserPanel,"Show Geometry Tree Browser Panel" ); AddVariable( tableUndo,"Undo" ); AddVariable( tableUndo,undo_levels,"Undo Levels" ); undo_levels.SetLimits( 0,10000 ); // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( undo_levels,gSettings.undoLevels,bGet ); CopyVar( previewPanel,gSettings.bPreviewGeometryWindow,bGet ); CopyVar( treeBrowserPanel,gSettings.bGeometryBrowserPanel,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_Files : public CPreferencesPropertyPage { public: CVariableArray tableFiles; CVariable files_Backup; CVariableArray tableTextEditor; CVariable textEditor_Script; CVariable textEditor_Shaders; ////////////////////////////////////////////////////////////////////////// // Autobackup table. CVariableArray tableAutoBackup; CVariable autobak_Time; CVariable autobak_RemindTime; CVariable autobak_Enabled; CVariable autobak_Filename; ////////////////////////////////////////////////////////////////////////// public: virtual const char* GetCategory() { return "General Settings"; } virtual const char* GetTitle() { return "Files"; } CPreferencesPage_Files() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableFiles,"Files" ); AddVariable( tableFiles,files_Backup,"Backup on Save" ); AddVariable( tableTextEditor,"Text Editors" ); AddVariable( tableFiles,textEditor_Script,"Scripts Text Editor" ); AddVariable( tableFiles,textEditor_Shaders,"Shaders Text Editor" ); ////////////////////////////////////////////////////////////////////////// // Autobackup table. AddVariable( tableAutoBackup,"Auto Backup" ); AddVariable( tableAutoBackup,autobak_Enabled,"Enable" ); AddVariable( tableAutoBackup,autobak_Time,"Auto Backup Interval (Minutes)" ); AddVariable( tableAutoBackup,autobak_Filename,"Auto Backup File Name" ); AddVariable( tableAutoBackup,autobak_RemindTime,"Auto Remind Every (Minutes)" ); ////////////////////////////////////////////////////////////////////////// // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( files_Backup,gSettings.bBackupOnSave,bGet ); CopyVar( textEditor_Script,gSettings.textEditorForScript,bGet ); CopyVar( textEditor_Shaders,gSettings.textEditorForShaders,bGet ); CopyVar( autobak_Enabled,gSettings.autoBackupEnabled,bGet ); CopyVar( autobak_Time,gSettings.autoBackupTime,bGet ); CopyVar( autobak_Filename,gSettings.autoBackupFilename,bGet ); CopyVar( autobak_RemindTime,gSettings.autoRemindTime,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_SSafe : public CPreferencesPropertyPage { public: CVariableArray tableSSafe; CVariable user; CVariable exeFile; CVariable databasePath; CVariable project; public: virtual const char* GetCategory() { return "General Settings"; } virtual const char* GetTitle() { return "Source Safe"; } CPreferencesPage_SSafe() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableSSafe,"Source Safe Settings" ); AddVariable( tableSSafe,user,"User Name" ); AddVariable( tableSSafe,exeFile,"Source Safe Executable",IVariable::DT_FILE ); AddVariable( tableSSafe,databasePath,"Path to Source Safe Database" ); AddVariable( tableSSafe,project,"Source Safe Project" ); // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( user,gSettings.ssafeParams.user,bGet ); CopyVar( exeFile,gSettings.ssafeParams.exeFile,bGet ); CopyVar( databasePath,gSettings.ssafeParams.databasePath,bGet ); CopyVar( project,gSettings.ssafeParams.project,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_AVIRecording : public CPreferencesPropertyPage { public: CVariableArray table; CVariable codec; CVariable frameRate; public: virtual const char* GetCategory() { return "General Settings"; } virtual const char* GetTitle() { return "AVI Encoding"; } CPreferencesPage_AVIRecording() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( table,"AVI Encoder Settings" ); AddVariable( table,codec,"Codec (4 chars)" ); AddVariable( table,frameRate,"Frame rate" ); // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( codec,gSettings.aviSettings.codec,bGet ); CopyVar( frameRate,gSettings.aviSettings.nFrameRate,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_ViewportGeneral : public CPreferencesPropertyPage { public: CVariableArray tableGeneral; CVariableArray tableDisplay; CVariableArray tableLabels; CVariable sync2DViews; CVariable defaultFOV; CVariable defaultAspectRatio; CVariable showSafeFrame; CVariable labelsOn; CVariable labelsDistance; CVariable displayTracks; CVariable displayLinks; CVariable alwaysShowRadiuses; CVariable alwaysShowPrefabBox; CVariable alwaysShowPrefabObjects; CVariable showBBoxes; public: virtual const char* GetCategory() { return "Viewports"; } virtual const char* GetTitle() { return "General"; } CPreferencesPage_ViewportGeneral() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableGeneral,"General Viewport Settings" ); AddVariable( tableDisplay,"Viewport Displaying" ); AddVariable( tableGeneral,sync2DViews,"Synchronize 2D Viewports" ); AddVariable( tableGeneral,defaultFOV,"Perspective View FOV",IVariable::DT_ANGLE ); AddVariable( tableGeneral,defaultAspectRatio,"Perspective View Aspect Ratio" ); AddVariable( tableDisplay,showSafeFrame,"Show Safe Frame" ); AddVariable( tableDisplay,displayLinks,"Display Object Links" ); AddVariable( tableDisplay,displayTracks,"Display Animation Tracks" ); AddVariable( tableDisplay,alwaysShowRadiuses,"Always Show Radiuses" ); AddVariable( tableDisplay,alwaysShowPrefabBox,"Always Show Prefab Bounds" ); AddVariable( tableDisplay,alwaysShowPrefabObjects,"Always Show Prefab Objects" ); AddVariable( tableDisplay,showBBoxes,"Show Bounding Boxes" ); ////////////////////////////////////////////////////////////////////////// AddVariable( tableLabels,"Text Labels" ); AddVariable( tableLabels,labelsOn,"Enabled" ); AddVariable( tableLabels,labelsDistance,"Distance" ); labelsDistance.SetLimits( 0,100000 ); ////////////////////////////////////////////////////////////////////////// // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CDisplaySettings *ds = GetIEditor()->GetDisplaySettings(); if (bGet) { labelsOn = ds->IsDisplayLabels(); labelsDistance = ds->GetLabelsDistance(); displayTracks = ds->IsDisplayTracks(); displayLinks = ds->IsDisplayLinks(); showBBoxes = (ds->GetRenderFlags() & RENDER_FLAG_BBOX) == RENDER_FLAG_BBOX; } else { ds->DisplayLabels( labelsOn ); ds->SetLabelsDistance( labelsDistance ); ds->DisplayTracks( displayTracks ); ds->DisplayLinks( displayLinks ); if (showBBoxes) ds->SetRenderFlags( ds->GetRenderFlags() | RENDER_FLAG_BBOX ); else ds->SetRenderFlags( ds->GetRenderFlags() & (~RENDER_FLAG_BBOX) ); } CopyVar( alwaysShowRadiuses,gSettings.viewports.bAlwaysShowRadiuses,bGet ); CopyVar( alwaysShowPrefabBox,gSettings.viewports.bAlwaysDrawPrefabBox,bGet ); CopyVar( alwaysShowPrefabObjects,gSettings.viewports.bAlwaysDrawPrefabInternalObjects,bGet ); CopyVar( sync2DViews,gSettings.viewports.bSync2DViews,bGet ); CopyVar( defaultFOV,gSettings.viewports.fDefaultFov,bGet ); CopyVar( defaultAspectRatio,gSettings.viewports.fDefaultAspectRatio,bGet ); CopyVar( showSafeFrame,gSettings.viewports.bShowSafeFrame,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_ViewportGizmo : public CPreferencesPropertyPage { public: CVariableArray tableGizmo; CVariableArray tableHelpers; CVariable axisGizmoSize; CVariable axisGizmoText; CVariable axisGizmoMaxCount; CVariable helpersGlobalScale; public: virtual const char* GetCategory() { return "Viewports"; } virtual const char* GetTitle() { return "Gizmos"; } CPreferencesPage_ViewportGizmo() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableGizmo,"Axis Gizmo" ); AddVariable( tableGizmo,axisGizmoSize,"Axis Gizmo Size" ); AddVariable( tableGizmo,axisGizmoText,"Text Labels on Axis Gizmo" ); AddVariable( tableGizmo,axisGizmoMaxCount,"Max Count of Axis Gizmos" ); ////////////////////////////////////////////////////////////////////////// // Helpers table. AddVariable( tableHelpers,"Helpers" ); AddVariable( tableHelpers,helpersGlobalScale,"Helpers Scale" ); helpersGlobalScale.SetLimits( 0.01f,100 ); ////////////////////////////////////////////////////////////////////////// // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( axisGizmoSize,gSettings.gizmo.axisGizmoSize,bGet ); CopyVar( axisGizmoText,gSettings.gizmo.axisGizmoText,bGet ); CopyVar( axisGizmoMaxCount,gSettings.gizmo.axisGizmoMaxCount,bGet ); CopyVar( helpersGlobalScale,gSettings.gizmo.helpersScale,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Specific preferences pages. ////////////////////////////////////////////////////////////////////////// class CPreferencesPage_ViewportMovement : public CPreferencesPropertyPage { public: CVariableArray tableCamera; CVariable camMoveSpeed; CVariable camFastMoveSpeed; public: virtual const char* GetCategory() { return "Viewports"; } virtual const char* GetTitle() { return "Movement"; } CPreferencesPage_ViewportMovement() { ////////////////////////////////////////////////////////////////////////// // File table. AddVariable( tableCamera,"Camera Movement Settings" ); AddVariable( tableCamera,camMoveSpeed,"Camera Movement Speed" ); AddVariable( tableCamera,camFastMoveSpeed,"Fast Movement Scale (holding Shift)" ); // Get settings. UpdateSettings( true ); } virtual void OnApply() { UpdateSettings( false ); } ////////////////////////////////////////////////////////////////////////// void UpdateSettings( bool bGet ) { CopyVar( camMoveSpeed,gSettings.cameraMoveSpeed,bGet ); CopyVar( camFastMoveSpeed,gSettings.cameraFastMoveSpeed,bGet ); } ////////////////////////////////////////////////////////////////////////// }; ////////////////////////////////////////////////////////////////////////// // Implementation of ClassDesc for standart Editor preferences. ////////////////////////////////////////////////////////////////////////// HRESULT CStdPreferencesClassDesc::QueryInterface( const IID &riid, void **ppvObj ) { if (riid == __uuidof(IPreferencesPageCreator)) { *ppvObj = (IPreferencesPageCreator*)this; return S_OK; } return E_NOINTERFACE; } ////////////////////////////////////////////////////////////////////////// ULONG CStdPreferencesClassDesc::AddRef() { m_refCount++; return m_refCount; }; ////////////////////////////////////////////////////////////////////////// ULONG CStdPreferencesClassDesc::Release() { ULONG refs = --m_refCount; if (m_refCount <= 0) delete this; return refs; } ////////////////////////////////////////////////////////////////////////// REFGUID CStdPreferencesClassDesc::ClassID() { // {95FE3251-796C-4e3b-82F0-AD35F7FFA267} static const GUID guid = { 0x95fe3251, 0x796c, 0x4e3b, { 0x82, 0xf0, 0xad, 0x35, 0xf7, 0xff, 0xa2, 0x67 } }; return guid; } ////////////////////////////////////////////////////////////////////////// int CStdPreferencesClassDesc::GetPagesCount() { return 6; } IPreferencesPage* CStdPreferencesClassDesc::CreatePage( int index,const CRect &rc,CWnd *pParentWnd ) { CPreferencesPropertyPage *pPage = 0; switch (index) { ////////////////////////////////////////////////////////////////////////// case 0: pPage = new CPreferencesPage_General(); break; ////////////////////////////////////////////////////////////////////////// case 1: pPage = new CPreferencesPage_Files(); break; ////////////////////////////////////////////////////////////////////////// case 2: pPage = new CPreferencesPage_SSafe(); break; ////////////////////////////////////////////////////////////////////////// case 3: pPage = new CPreferencesPage_AVIRecording(); break; ////////////////////////////////////////////////////////////////////////// case 4: pPage = new CPreferencesPage_ViewportGeneral(); break; ////////////////////////////////////////////////////////////////////////// case 5: pPage = new CPreferencesPage_ViewportMovement(); break; ////////////////////////////////////////////////////////////////////////// case 6: pPage = new CPreferencesPage_ViewportGizmo(); break; } if (pPage) { if (pPage->Create( rc,pParentWnd ) != TRUE) { delete pPage; return 0; } } return pPage; }