// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h" #include "MainFrm.h" #include "CryEdit.h" #include "CryEditDoc.h" #include "TerrainDialog.h" #include "MainTools.h" #include "TerrainPanel.h" #include "PanelDisplayHide.h" #include "PanelDisplayRender.h" #include "PanelDisplayLayer.h" #include "Mission.h" #include "ViewManager.h" #include "LayoutWnd.h" #include "ExternalTools.h" #include "Settings.h" #include "PropertiesPanel.h" #include "Objects\ObjectManager.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define IDW_VIEW_EDITMODE_BAR AFX_IDW_CONTROLBAR_FIRST+10 #define IDW_VIEW_OBJECT_BAR AFX_IDW_CONTROLBAR_FIRST+11 #define IDW_VIEW_MISSION_BAR AFX_IDW_CONTROLBAR_FIRST+12 #define IDW_VIEW_TERRAIN_BAR AFX_IDW_CONTROLBAR_FIRST+13 #define IDW_VIEW_AVI_RECORD_BAR AFX_IDW_CONTROLBAR_FIRST+14 #define IDW_VIEW_ROLLUP_BAR AFX_IDW_CONTROLBAR_FIRST+20 #define IDW_VIEW_CONSOLE_BAR AFX_IDW_CONTROLBAR_FIRST+21 #define IDW_VIEW_INFO_BAR AFX_IDW_CONTROLBAR_FIRST+22 #define IDW_VIEW_TRACKVIEW_BAR AFX_IDW_CONTROLBAR_FIRST+23 #define IDW_VIEW_DIALOGTOOL_BAR AFX_IDW_CONTROLBAR_FIRST+24 #define IDW_VIEW_DATABASE_BAR AFX_IDW_CONTROLBAR_FIRST+25 #define BAR_SECTION _T("Bars") #define AUTOSAVE_TIMER_EVENT 200 #define AUTOREMIND_TIMER_EVENT 201 ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CXTFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CXTFrameWnd) ON_WM_CREATE() ON_COMMAND_EX(ID_VIEW_MENUBAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(ID_VIEW_MENUBAR, OnUpdateControlBarMenu) ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_EDITMODE_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_EDITMODE_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_OBJECT_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_OBJECT_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_MISSION_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_MISSION_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_TERRAIN_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_TERRAIN_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_AVI_RECORD_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_AVI_RECORD_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_ROLLUP_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_ROLLUP_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_CONSOLE_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_CONSOLE_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_INFO_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_INFO_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_TRACKVIEW_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_TRACKVIEW_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_DATABASE_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_DATABASE_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(IDW_VIEW_DIALOGTOOL_BAR, OnBarCheck ) ON_UPDATE_COMMAND_UI(IDW_VIEW_DIALOGTOOL_BAR, OnUpdateControlBarMenu) //ON_COMMAND_EX(ID_VIEW_ROLLUPBAR, OnBarCheck ) //ON_UPDATE_COMMAND_UI(ID_VIEW_ROLLUPBAR, OnUpdateControlBarMenu) //ON_COMMAND_EX(ID_VIEW_CONSOLEWINDOW, OnBarCheck ) //ON_UPDATE_COMMAND_UI(ID_VIEW_CONSOLEWINDOW, OnUpdateControlBarMenu) //ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck ) //ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu) ON_COMMAND(ID_SOUND_PRESETS, OnSoundPresets) ON_COMMAND(ID_EAX_PRESETS, OnEAXPresets) ON_COMMAND(ID_SOUND_SHOWMUSICINFO, OnMusicInfo) ON_UPDATE_COMMAND_UI(ID_VIEW_XPLOOK, OnUpdateXPLook) ON_COMMAND(ID_VIEW_XPLOOK, OnXPLook) // Sent by Progress bar cancel button. ON_COMMAND(ID_PROGRESSBAR_CANCEL, OnProgressBarCancel) // ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateToolbar) // ON_UPDATE_COMMAND_UI(ID_VIEW_ROLLUPBAR, OnUpdateRollUpBar) // ON_UPDATE_COMMAND_UI(ID_VIEW_CONSOLEWINDOW, OnUpdateConsole) // ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateStatusBar) // ON_UPDATE_COMMAND_UI(ID_VIEW_TRACKVIEW, OnUpdateTrackView) //ON_COMMAND(ID_VIEW_ROLLUPBAR, OnRollUpBar) //ON_COMMAND(ID_VIEW_CONSOLEWINDOW, OnConsoleWindow) //ON_COMMAND(ID_VIEW_TOOLBAR, OnToolbar) //ON_COMMAND(ID_VIEW_STATUS_BAR, OnStatusBar) //ON_COMMAND(ID_VIEW_TRACKVIEW, OnTrackView) ON_CBN_SELENDOK( IDC_MISSION,OnMissionChanged ) ON_CBN_SELENDCANCEL( IDC_MISSION,OnMissionCancelChanged ) ON_CBN_DROPDOWN( IDC_MISSION,OnMissionDropDown ) ON_WM_SIZE() ON_WM_COPYDATA() ON_WM_CLOSE() ON_WM_TIMER() ON_COMMAND(ID_EDIT_NEXTSELECTIONMASK, OnEditNextSelectionMask) END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { m_bXPLook = true; m_autoSaveTimer = 0; m_autoRemindTimer = 0; ////////////////////////////////////////////////////////////////////////// m_currentMission = 0; m_currentLayer = 0; m_terrainPanel = 0; m_mainTools = 0; m_consoleVisible = false; m_gridSize = -1; m_layoutWnd = 0; // Enable/Disable XP GUI Mode CXTRegistryManager regMgr; xtAfxData.bXPMode = regMgr.GetProfileInt(_T("Settings"), _T("bXPMode"), TRUE); // Enable/Disable Menu Shadows xtAfxData.bMenuShadows = TRUE; } CMainFrame::~CMainFrame() { if (m_layoutWnd) delete m_layoutWnd; m_layoutWnd = 0; CLogFile::WriteLine("Main frame destroied"); } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; ////////////////////////////////////////////////////////////////////////// // Start autosave timer. ////////////////////////////////////////////////////////////////////////// if (gSettings.autoBackupTime > 0 && gSettings.autoBackupEnabled) m_autoSaveTimer = SetTimer( AUTOSAVE_TIMER_EVENT,gSettings.autoBackupTime*1000*60,0 ); if (gSettings.autoRemindTime > 0) m_autoRemindTimer = SetTimer( AUTOREMIND_TIMER_EVENT,gSettings.autoRemindTime*1000*60,0 ); ////////////////////////////////////////////////////////////////////////// // Load state. ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create Menu. VERIFY(m_wndMenuBar.CreateEx(this, TBSTYLE_TRANSPARENT| TBSTYLE_FLAT) ); VERIFY(m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create ReBar. m_wndReBar.Create(this,RBS_BANDBORDERS|RBS_VARHEIGHT|RBS_DBLCLKTOGGLE); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create the status bar VERIFY(m_wndStatusBar.Create(this) ); VERIFY(m_wndStatusBar.SetIndicators( indicators,sizeof(indicators)/sizeof(UINT) ) ); ////////////////////////////////////////////////////////////////////////// DWORD dwToolBarFlags = WS_CHILD|WS_VISIBLE|CBRS_ALIGN_ANY|CBRS_TOOLTIPS|CBRS_FLYBY; CRect nullRc(0,0,0,0); ////////////////////////////////////////////////////////////////////////// // Create standart toolbar. VERIFY(m_wndToolBar.CreateEx(this, TBSTYLE_TRANSPARENT|TBSTYLE_FLAT,dwToolBarFlags )); LoadTrueColorToolbar(m_wndToolBar,IDR_MAINFRAME); m_wndToolBar.SetWindowText( _T("Standart ToolBar") ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// VERIFY(m_wndTerrainToolBar.CreateEx(this, TBSTYLE_TRANSPARENT|TBSTYLE_FLAT|TBSTYLE_LIST,dwToolBarFlags,nullRc,IDW_VIEW_TERRAIN_BAR ) ); LoadTrueColorToolbar(m_wndTerrainToolBar,IDR_TERRAIN_BAR); m_wndTerrainToolBar.SetButtonText( m_wndTerrainToolBar.CommandToIndex(ID_TERRAIN),_T("Terrain") ); m_wndTerrainToolBar.SetButtonText( m_wndTerrainToolBar.CommandToIndex(ID_GENERATORS_TEXTURE),_T("Texture") ); m_wndTerrainToolBar.SetButtonText( m_wndTerrainToolBar.CommandToIndex(ID_GENERATORS_LIGHTING),_T("Lighting") ); m_wndTerrainToolBar.SetWindowText( _T("Terrain ToolBar") ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// VERIFY(m_wndAvoToolBar.CreateEx(this, TBSTYLE_TRANSPARENT|TBSTYLE_FLAT|TBSTYLE_LIST,dwToolBarFlags,nullRc,IDW_VIEW_AVI_RECORD_BAR ) ); LoadTrueColorToolbar(m_wndAvoToolBar,IDR_AVI_RECORDER_BAR); m_wndAvoToolBar.SetWindowText( _T("AVI Recorder ToolBar") ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create EditMode Toolbar. VERIFY(m_editModeBar.Create( this,dwToolBarFlags,IDW_VIEW_EDITMODE_BAR )); m_editModeBar.SetWindowText( _T("EditMode ToolBar") ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Object Modify Toolbar VERIFY(m_objectModifyBar.CreateEx( this,TBSTYLE_TRANSPARENT|TBSTYLE_FLAT,dwToolBarFlags,nullRc,IDW_VIEW_OBJECT_BAR )); LoadTrueColorToolbar(m_objectModifyBar,IDR_OBJECT_MODIFY); m_objectModifyBar.SetWindowText( _T("Object ToolBar") ); ////////////////////////////////////////////////////////////////////////// // Initialize Mission ToolBar. ////////////////////////////////////////////////////////////////////////// CreateMissionsBar(); ////////////////////////////////////////////////////////////////////////// // Create the RollupBar. CreateRollupBar(); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create console. // Create the console m_wndConsoleBar.Create( this,IDW_VIEW_CONSOLE_BAR,_T("Log"),CSize(500,70),CBRS_BOTTOM ); m_cConsole.Create( NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&m_wndConsoleBar,m_wndConsoleBar.GetDlgCtrlID() ); m_wndConsoleBar.SetChild( &m_cConsole ); //m_wndConsoleBar.SetInitDesiredSizeHorizontal( CSize(500, 70) ); //m_wndConsoleBar.SetInitDesiredSizeFloating( CSize(300, 400) ); //m_wndConsoleBar.SetInitDesiredSizeVertical( CSize(300, 400) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create TackView. ////////////////////////////////////////////////////////////////////////// //m_wndTrackViewBar.Create( _T("TrackView"),this,IDW_VIEW_TRACKVIEW_BAR ); m_wndTrackViewBar.Create( this,IDW_VIEW_TRACKVIEW_BAR,_T("TrackView"),CSize(500,300),CBRS_BOTTOM ); m_wndTrackView.Create( CTrackViewDialog::IDD,&m_wndTrackViewBar ); m_wndTrackViewBar.SetChild( &m_wndTrackView ); ShowControlBar(&m_wndTrackViewBar, FALSE, TRUE); //m_wndTrackViewBar.SetInitDesiredSizeHorizontal( CSize(500,300) ); //m_wndTrackViewBar.SetInitDesiredSizeFloating( CSize(500,300) ); //m_wndTrackViewBar.SetInitDesiredSizeVertical( CSize(400,300) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create DataBase Dialog. ////////////////////////////////////////////////////////////////////////// m_wndDataBaseBar.Create( this,IDW_VIEW_DATABASE_BAR,_T("DataBaseView"),CSize(500,300),CBRS_BOTTOM ); //m_wndDataBase.Create( CDataBaseDialog::IDD,&m_wndDataBaseBar ); CRect rc(0,0,600,400); m_wndDataBase.Create( CDataBaseDialog::IDD,&m_wndDataBaseBar ); //m_wndDataBase.CreateEx( 0,"Dialog",NULL,WS_POPUP|WS_VISIBLE,rc,&m_wndDataBaseBar,m_wndDataBaseBar.GetDlgCtrlID() ); m_wndDataBaseBar.SetChild( &m_wndDataBase ); ShowControlBar(&m_wndDataBaseBar, FALSE, TRUE); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create Sound-Preset-Ed m_wndSoundPresets.Create(CSoundPresetsDlg::IDD, this); ////////////////////////////////////////////////////////////////////////// // Create Sound-Preset-Ed m_wndEAXPresets.Create(CEAXPresetsDlg::IDD, this); ////////////////////////////////////////////////////////////////////////// // Create Music-Info-Dlg m_wndMusicInfo.Create(CMusicInfoDlg::IDD, this); ////////////////////////////////////////////////////////////////////////// // Create info bar. m_infoBarHolder.Create( this, CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY,IDW_VIEW_INFO_BAR ); m_infoBarHolder.EnableDocking( CBRS_ALIGN_BOTTOM ); ////////////////////////////////////////////////////////////////////////// m_wndReBar.AddBar( &m_wndToolBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP ); m_wndReBar.AddBar( &m_editModeBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP ); m_wndReBar.AddBar( &m_objectModifyBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP ); m_wndReBar.AddBar( &m_missionToolBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP|RBBS_BREAK ); m_wndReBar.AddBar( &m_wndTerrainToolBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP ); m_wndReBar.AddBar( &m_wndAvoToolBar,0,0,RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP ); ////////////////////////////////////////////////////////////////////////// // AVI Tool bar is not visible by default. ShowControlBar( &m_wndAvoToolBar,FALSE,0 ); // Set size of edit mode bar in ReBar control. REBARBANDINFO rbi; ZeroStruct(rbi); rbi.fMask = RBBIM_SIZE|RBBIM_CHILDSIZE|RBBIM_IDEALSIZE; rbi.cbSize = sizeof(rbi); m_wndReBar.GetReBarCtrl().GetBandInfo( 1,&rbi ); rbi.cx = rbi.cx + 40; rbi.cxMinChild = rbi.cx; rbi.cxIdeal = rbi.cx + 50; m_wndReBar.GetReBarCtrl().SetBandInfo( 1,&rbi ); // TODO: Remove this if you don't want tool tips //m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); //m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); //m_wndReBar.SetBarStyle(m_wndReBar.GetBarStyle() | CBRS_BORDER_ANY ); m_wndConsoleBar.EnableDockingEx(CBRS_ALIGN_ANY, CBRS_XT_ALL_FLAT|CBRS_XT_GRIPPER_GRAD); m_wndRollUpBar.EnableDockingEx(CBRS_ALIGN_ANY, CBRS_XT_ALL_FLAT|CBRS_XT_GRIPPER_GRAD); m_wndTrackViewBar.EnableDockingEx(CBRS_ALIGN_ANY, CBRS_XT_ALL_FLAT|CBRS_XT_GRIPPER_GRAD); m_wndDataBaseBar.EnableDockingEx(CBRS_ALIGN_ANY, CBRS_XT_ALL_FLAT|CBRS_XT_GRIPPER_GRAD); //EnableDockingEx(CBRS_ALIGN_ANY, CBRS_XT_SEMIFLAT ); EnableDockingEx(CBRS_ALIGN_TOP, CBRS_XT_SEMIFLAT ); EnableDockingEx(CBRS_ALIGN_RIGHT, CBRS_XT_SEMIFLAT ); EnableDockingEx(CBRS_ALIGN_LEFT, CBRS_XT_SEMIFLAT ); EnableDockingEx(CBRS_ALIGN_BOTTOM, CBRS_XT_SEMIFLAT ); DockControlBar(&m_infoBarHolder); DockControlBar(&m_wndConsoleBar); DockControlBar(&m_wndRollUpBar); DockControlBar(&m_wndTrackViewBar); DockControlBar(&m_wndDataBaseBar); #ifndef WIN64 UINT toolbarIds[] = { IDR_MAINFRAME,IDR_EDIT_MODE,IDR_MISSION_BAR,IDR_OBJECT_MODIFY,IDR_TERRAIN_BAR }; InstallCoolMenus( toolbarIds,_countof(toolbarIds) ); #endif if (m_wndReBar.m_hWnd) m_wndReBar.LoadState(BAR_SECTION); if (IsPreview()) { // Hide all menus. ShowControlBar( &m_wndMenuBar,FALSE,0 ); ShowControlBar( &m_wndReBar,FALSE,0 ); ShowControlBar( &m_wndTrackViewBar,FALSE,0 ); ShowControlBar( &m_wndDataBaseBar,FALSE,0 ); } else { // Update tools menu, UpdateTools(); } ////////////////////////////////////////////////////////////////////////// // Load toolbar buttons for main menu. /* m_DefaultNewMenu.LoadToolBar(IDR_MAINFRAME); m_DefaultNewMenu.LoadToolBar(IDR_EDIT_MODE); m_DefaultNewMenu.LoadToolBar(IDR_MISSION_BAR); m_DefaultNewMenu.LoadToolBar(IDR_OBJECT_MODIFY); */ /* //////////////////////////////////////////////////////////////////////// // Create and set up all control bars // WARNING! Creation order of controls is very important for the look. //////////////////////////////////////////////////////////////////////// HICON hIcon = LoadIcon( AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_SMALLICON) ); SetIcon( hIcon,FALSE ); ////////////////////////////////////////////////////////////////////////// CWinApp * pApp = ::AfxGetApp(); ASSERT( pApp != NULL ); ASSERT( pApp->m_pszRegistryKey != NULL ); ASSERT( pApp->m_pszRegistryKey[0] != _T('\0') ); ASSERT( pApp->m_pszProfileName != NULL ); ASSERT( pApp->m_pszProfileName[0] != _T('\0') ); ASSERT( pApp->m_pszProfileName != NULL ); VERIFY( g_CmdManager->ProfileSetup( pApp->m_pszProfileName, GetSafeHwnd() ) ); VERIFY( g_CmdManager->UpdateFromMenu( pApp->m_pszProfileName, IDR_MAINFRAME ) ); m_bXPLook = pApp->GetProfileInt("Window","XPLook",1) != 0; // Turn off menu expanding. CExtPopupMenuWnd::g_bMenuExpanding = false; CExtPopupMenuWnd::g_bMenuHighlightRarely = false; CExtPopupMenuWnd::g_bMenuExpandAnimation = false; CExtPopupMenuWnd::g_DefAnimationType = CExtPopupMenuWnd::__AT_NONE; if (m_bXPLook) { // Install XP paint manager. if (!g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) ) VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManagerXP ) ); CExtPopupMenuWnd::g_bMenuWithShadows = true; } else { // Install w2k paint manager. if (g_PaintManager->IsKindOf( RUNTIME_CLASS(CExtPaintManagerXP) ) ) VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManager ) ); CExtPopupMenuWnd::g_bMenuWithShadows = false; } ////////////////////////////////////////////////////////////////////////// // Create Menu. VERIFY( m_wndMenuBar.Create( NULL,this,ID_VIEW_MENUBAR ) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create the status bar VERIFY( m_wndStatusBar.Create(this) ); VERIFY( m_wndStatusBar.SetIndicators( indicators,sizeof(indicators)/sizeof(UINT) ) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create standart toolbar. VERIFY( m_wndToolBar.Create( _T("Standart"),this,AFX_IDW_TOOLBAR ) ); VERIFY( m_wndToolBar.LoadToolBar(IDR_MAINFRAME) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// VERIFY( m_wndTerrainToolBar.Create( _T("TerrainTools"),this,IDW_VIEW_TERRAIN_BAR ) ); VERIFY( m_wndTerrainToolBar.LoadToolBar(IDR_TERRAIN_BAR) ); CExtCmdManager::cmd_t * p_cmd; p_cmd = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName,ID_TERRAIN ); ASSERT( p_cmd != 0 ); p_cmd->m_sToolbarText = "Terrain"; p_cmd = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName,ID_GENERATORS_TEXTURE ); ASSERT( p_cmd != 0 ); p_cmd->m_sToolbarText = "Texture"; p_cmd = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName,ID_GENERATORS_LIGHTING ); ASSERT( p_cmd != 0 ); p_cmd->m_sToolbarText = "Lighting"; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create EditMode Toolbar. m_editModeBar.Create( _T("EditMode"),this,IDW_VIEW_EDITMODE_BAR ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Object Modify Toolbar m_objectModifyBar.Create( _T("Object"),this,IDW_VIEW_OBJECT_BAR ); m_objectModifyBar.LoadToolBar( IDR_OBJECT_MODIFY ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Initialize Mission ToolBar. ////////////////////////////////////////////////////////////////////////// CreateMissionsBar(); ////////////////////////////////////////////////////////////////////////// // Create the RollupBar. CreateRollupBar(); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create console. // Create the console m_wndConsoleBar.Create( _T("Log"),this,IDW_VIEW_CONSOLE_BAR ); m_cConsole.Create( NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&m_wndConsoleBar,m_wndConsoleBar.GetDlgCtrlID() ); m_wndConsoleBar.SetInitDesiredSizeHorizontal( CSize(500, 70) ); m_wndConsoleBar.SetInitDesiredSizeFloating( CSize(300, 400) ); m_wndConsoleBar.SetInitDesiredSizeVertical( CSize(300, 400) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create TackView. ////////////////////////////////////////////////////////////////////////// m_wndTrackViewBar.Create( _T("TrackView"),this,IDW_VIEW_TRACKVIEW_BAR ); m_wndTrackView.Create( CTrackViewDialog::IDD,&m_wndTrackViewBar ); m_wndTrackViewBar.SetInitDesiredSizeHorizontal( CSize(500,300) ); m_wndTrackViewBar.SetInitDesiredSizeFloating( CSize(500,300) ); m_wndTrackViewBar.SetInitDesiredSizeVertical( CSize(400,300) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Create Sound-Preset-Ed m_wndSoundPresets.Create(CSoundPresetsDlg::IDD, this); ////////////////////////////////////////////////////////////////////////// // Create info bar. m_infoBarHolder.Create( this, CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY,IDW_VIEW_INFO_BAR ); m_infoBarHolder.EnableDocking( CBRS_ALIGN_BOTTOM ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Docking. ////////////////////////////////////////////////////////////////////////// m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_editModeBar.EnableDocking(CBRS_ALIGN_ANY); m_objectModifyBar.EnableDocking(CBRS_ALIGN_ANY); m_missionToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndRollUpBar.EnableDocking(CBRS_ALIGN_ANY); m_wndConsoleBar.EnableDocking(CBRS_ALIGN_ANY); m_wndTrackViewBar.EnableDocking(CBRS_ALIGN_ANY); m_wndTerrainToolBar.EnableDocking(CBRS_ALIGN_ANY); // This is correct priority order. CExtControlBar::FrameEnableDocking(this,CBRS_ALIGN_TOP); CExtControlBar::FrameEnableDocking(this,CBRS_ALIGN_RIGHT); CExtControlBar::FrameEnableDocking(this,CBRS_ALIGN_LEFT); CExtControlBar::FrameEnableDocking(this,CBRS_ALIGN_BOTTOM); DockControlBar(&m_wndMenuBar); DockControlBar(&m_wndToolBar); RecalcLayout(); CRect wrAlredyDockedBar; m_wndToolBar.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 1, 0 ); DockControlBar(&m_editModeBar,AFX_IDW_DOCKBAR_TOP,&wrAlredyDockedBar); RecalcLayout(); m_editModeBar.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 1, 0 ); DockControlBar(&m_objectModifyBar,AFX_IDW_DOCKBAR_TOP,&wrAlredyDockedBar); RecalcLayout(); m_objectModifyBar.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 1, 0 ); DockControlBar(&m_missionToolBar,AFX_IDW_DOCKBAR_TOP,&wrAlredyDockedBar); RecalcLayout(); m_missionToolBar.GetWindowRect( &wrAlredyDockedBar ); wrAlredyDockedBar.OffsetRect( 1, 0 ); DockControlBar(&m_wndTerrainToolBar,AFX_IDW_DOCKBAR_TOP,&wrAlredyDockedBar); //CRect rc(1,1,328, 300); DockControlBar(&m_wndRollUpBar,AFX_IDW_DOCKBAR_RIGHT); DockControlBar(&m_infoBarHolder,AFX_IDW_DOCKBAR_BOTTOM); DockControlBar(&m_wndConsoleBar,AFX_IDW_DOCKBAR_BOTTOM); DockControlBar(&m_wndTrackViewBar,AFX_IDW_DOCKBAR_BOTTOM); ShowControlBar( &m_wndTrackViewBar,FALSE,0 ); RecalcLayout(); /* // Create rebar. m_ReBar.Create( this,RBS_BANDBORDERS|RBS_AUTOSIZE ); EnableDocking(CBRS_ALIGN_TOP); EnableDocking(CBRS_ALIGN_LEFT); EnableDocking(CBRS_ALIGN_RIGHT); EnableDocking(CBRS_ALIGN_BOTTOM); // Create the console m_cConsole.Create("Console", this, CSize(500, 70),TRUE, AFX_IDW_CONTROLBAR_FIRST + 32); m_cConsole.SetBarStyle(m_cConsole.GetBarStyle() |CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_cConsole.EnableDocking(CBRS_ALIGN_ANY); if (!GetIEditor()->IsInPreviewMode()) { m_wndTrackView.Create( "TrackView",this,CSize(500,300),TRUE,AFX_IDW_CONTROLBAR_FIRST + 33 ); ShowControlBar( &m_wndTrackView, FALSE,FALSE ); m_wndTrackView.SetBarStyle(m_cConsole.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC ); m_wndTrackView.EnableDocking( CBRS_ALIGN_BOTTOM|CBRS_ALIGN_TOP ); } // Create the standard toolbar m_wndToolBar.CreateEx( &m_ReBar, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC|CBRS_ALIGN_TOP); m_wndToolBar.LoadToolBar(IDR_MAINFRAME); // m_ReBar.AddBar( &m_wndToolBar,RGB(0,0,0),RGB(255,255,255),"Main" ); m_ReBar.AddBar( &m_wndToolBar ); // Add editmode toolbar. m_editModeBar.Create( &m_ReBar, WS_CHILD|WS_VISIBLE|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_FIXED|CBRS_ALIGN_TOP); m_ReBar.AddBar( &m_editModeBar ); REBARBANDINFO rbi; ZeroStruct(rbi); rbi.fMask = RBBIM_SIZE|RBBIM_CHILDSIZE|RBBIM_IDEALSIZE; rbi.cbSize = sizeof(rbi); m_ReBar.GetReBarCtrl().GetBandInfo( 1,&rbi ); rbi.cx = rbi.cx + 80; rbi.cxMinChild = rbi.cx; rbi.cxIdeal = rbi.cx + 50; m_ReBar.GetReBarCtrl().SetBandInfo( 1,&rbi ); //m_tools.CreateEx( this, CCS_VERT, WS_BORDER|WS_CHILD|WS_VISIBLE|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC|CBRS_ORIENT_VERT); //m_tools.LoadToolBar( IDR_EDIT_MODE1 ); //m_tools.EnableDocking(CBRS_ALIGN_LEFT); m_objectModifyBar.CreateEx( &m_ReBar, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_FIXED|CBRS_ALIGN_TOP); m_objectModifyBar.LoadToolBar( IDR_OBJECT_MODIFY ); m_ReBar.AddBar( &m_objectModifyBar ); InitMissionsBar(); // Create the dialog bar at the top of the window m_cDialogBar.Create(this, IDD_DIALOGBAR, CBRS_ALIGN_BOTTOM, AFX_IDW_DIALOGBAR); m_ReBar.AddBar( &m_cDialogBar ); //m_infoBar.Create(this, CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY, CInfoBar::IDD); m_infoBarHolder.Create(this, CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY,AFX_IDW_CONTROLBAR_FIRST + 34 ); m_infoBarHolder.EnableDocking( CBRS_ALIGN_BOTTOM ); //m_infoBarHolder.Create( CInfoBarHolder::IDD, this ); // Create the rollup bar m_wndRollUp.Create("RollupBar", this, CSize(228, 300),TRUE, AFX_IDW_CONTROLBAR_FIRST + 64); // Set styles of the rollup bar DWORD oldStyle = m_wndRollUp.GetBarStyle(); m_wndRollUp.SetBarStyle( CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC|CBRS_ALIGN_RIGHT ); m_wndRollUp.EnableDocking(CBRS_ALIGN_ANY); // Create our RollupCtrl into DialogBar and register it m_objectRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_OBJECTS,&m_objectRollupCtrl); m_terrainRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_TERRAIN,&m_terrainRollupCtrl ); m_displayRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_DISPLAY,&m_displayRollupCtrl ); // Dock stuff. DockControlBar(&m_wndRollUp, AFX_IDW_DOCKBAR_RIGHT); DockControlBar(&m_cConsole, AFX_IDW_DOCKBAR_BOTTOM); if (m_wndTrackView.m_hWnd) DockControlBar(&m_wndTrackView, AFX_IDW_DOCKBAR_BOTTOM); //FloatControlBar(&m_cConsole, CPoint(100,80),CBRS_ALIGN_TOP ); if (!GetIEditor()->IsInPreviewMode()) { // Insert the main rollup m_mainTools = new CMainTools; m_mainTools->Create(MAKEINTRESOURCE(CMainTools::IDD),this); m_objectRollupCtrl.InsertPage("Objects",m_mainTools); // m_objectRollupCtrl.InsertPage("Main Tools",MAKEINTRESOURCE(CMainTools::IDD),RUNTIME_CLASS(CMainTools) ); m_terrainPanel = new CTerrainPanel(this); m_terrainRollupCtrl.InsertPage("Terrain",m_terrainPanel ); CPanelDisplayHide *hidePanel = new CPanelDisplayHide(this); m_displayRollupCtrl.InsertPage("Hide by Category",hidePanel ); CPanelDisplayRender *renderPanel = new CPanelDisplayRender(this); m_displayRollupCtrl.InsertPage("Render Settings",renderPanel ); CPanelDisplayLayer *layerPanel = new CPanelDisplayLayer(this); m_displayRollupCtrl.InsertPage( "Layers Settings",layerPanel ); m_objectRollupCtrl.ExpandAllPages( TRUE ); m_terrainRollupCtrl.ExpandAllPages(TRUE); m_displayRollupCtrl.ExpandAllPages(TRUE); } SelectRollUpBar( ROLLUP_OBJECTS ); //FloatControlBar(&m_editModeBar, CPoint(100,80),CBRS_ALIGN_TOP ); if (GetIEditor()->IsInPreviewMode()) { m_ReBar.ShowWindow( SW_HIDE ); SetMenu( NULL ); } */ /* if (!IsPreview()) { ////////////////////////////////////////////////////////////////////////// VERIFY( g_CmdManager->SetBasicCommands( pApp->m_pszProfileName,g_statBasicCommands ) ); CExtControlBar::ProfileBarStateLoad( this, pApp->m_pszRegistryKey, pApp->m_pszProfileName, pApp->m_pszProfileName, &m_dataFrameWP ); ////////////////////////////////////////////////////////////////////////// } else { CExtControlBar::ProfileBarStateLoad( this,pApp->m_pszRegistryKey,pApp->m_pszProfileName,"Preview",&m_dataFrameWP); // Hide all menus. ShowControlBar( &m_wndMenuBar,FALSE,0 ); ShowControlBar( &m_wndToolBar,FALSE,0 ); ShowControlBar( &m_editModeBar,FALSE,0 ); ShowControlBar( &m_missionToolBar,FALSE,0 ); ShowControlBar( &m_objectModifyBar,FALSE,0 ); ShowControlBar( &m_wndTrackViewBar,FALSE,0 ); ShowControlBar( &m_wndTerrainToolBar,FALSE,0 ); } */ m_bXPLook = xtAfxData.bXPMode; return 0; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::LoadTrueColorToolbar( CXTToolBar &bar,UINT nImageResource ) { CBitmap toolbarBitmap; CImageList toolbarImageList; VERIFY(bar.LoadToolBar(nImageResource)); /* ////////////////////////////////////////////////////////////////////////// // Use 24Bit toolbars. ////////////////////////////////////////////////////////////////////////// toolbarBitmap.LoadBitmap(nImageResource); toolbarImageList.Create(16, 15, ILC_COLORDDB|ILC_MASK, 13, 1); toolbarImageList.Add(&toolbarBitmap,TOOLBAR_TRANSPARENT_COLOR); bar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)toolbarImageList.m_hImageList); */ } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnSoundPresets() { m_wndSoundPresets.ShowWindow(true); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnEAXPresets() { m_wndEAXPresets.ShowWindow(true); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnMusicInfo() { m_wndMusicInfo.ShowWindow(true); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { //if( m_wndMenuBar.TranslateMainFrameMessage(pMsg) ) // return TRUE; return CXTFrameWnd::PreTranslateMessage(pMsg); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::DestroyWindow() { if (m_autoSaveTimer) KillTimer( m_autoSaveTimer ); if (m_autoRemindTimer) KillTimer( m_autoRemindTimer ); SaveConfig(); return CXTFrameWnd::DestroyWindow(); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::SaveConfig() { CXTRegistryManager regMgr; regMgr.WriteProfileInt(_T("Settings"), _T("bXPMode"), xtAfxData.bXPMode); // Save frame window size and position. m_wndPosition.SaveWindowPos(this); if (!IsPreview()) { m_wndReBar.SaveState(BAR_SECTION); // Save control bar postion. SaveBarState(_T("Bar State")); if (m_layoutWnd) m_layoutWnd->SaveConfig(); } } ////////////////////////////////////////////////////////////////////////// // WARNING uses undocumented MFC code!!! ////////////////////////////////////////////////////////////////////////// void CMainFrame::DockControlBarNextTo(CControlBar* pBar, CControlBar* pTargetBar) { ASSERT(pBar != NULL); ASSERT(pTargetBar != NULL); ASSERT(pBar != pTargetBar); // the neighbour must be already docked CDockBar* pDockBar = pTargetBar->m_pDockBar; ASSERT(pDockBar != NULL); UINT nDockBarID = pTargetBar->m_pDockBar->GetDlgCtrlID(); ASSERT(nDockBarID != AFX_IDW_DOCKBAR_FLOAT); bool bHorz = (nDockBarID == AFX_IDW_DOCKBAR_TOP || nDockBarID == AFX_IDW_DOCKBAR_BOTTOM); // dock normally (inserts a new row) DockControlBar(pBar, nDockBarID); // delete the new row (the bar pointer and the row end mark) pDockBar->m_arrBars.RemoveAt(pDockBar->m_arrBars.GetSize() - 1); pDockBar->m_arrBars.RemoveAt(pDockBar->m_arrBars.GetSize() - 1); // find the target bar for (int i = 0; i < pDockBar->m_arrBars.GetSize(); i++) { void* p = pDockBar->m_arrBars[i]; if (p == pTargetBar) // and insert the new bar after it pDockBar->m_arrBars.InsertAt(i + 1, pBar); } // move the new bar into position CRect rBar; pTargetBar->GetWindowRect(rBar); rBar.OffsetRect(bHorz ? 1 : 0, bHorz ? 0 : 1); pBar->MoveWindow(rBar); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::VerifyBarState( CDockState &state ) { for (int i = 0; i < state.m_arrBarInfo.GetSize(); i++) { CControlBarInfo* pInfo = (CControlBarInfo*)state.m_arrBarInfo[i]; ASSERT(pInfo != NULL); int nDockedCount = pInfo->m_arrBarID.GetSize(); if (nDockedCount > 0) { // dockbar for (int j = 0; j < nDockedCount; j++) { UINT_PTR nID = (UINT_PTR) pInfo->m_arrBarID[j]; if (nID == 0) continue; // row separator if (nID > 0xFFFF) nID &= 0xFFFF; // placeholder - get the ID if (GetControlBar(nID) == NULL) return FALSE; } } if (!pInfo->m_bFloating) // floating dockbars can be created later if (GetControlBar(pInfo->m_nBarID) == NULL) return FALSE; // invalid bar ID } return TRUE; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::CreateRollupBar() { CSize sz(220,500); CRect rc(CPoint(0,0),sz); m_wndRollUpBar.Create( this,IDW_VIEW_ROLLUP_BAR,_T("RollupBar"),sz,CBRS_RIGHT ); //m_wndRollUpBar.Create( _T("RollupBar"),this,IDW_VIEW_ROLLUP_BAR ); //m_wndRollUpBar.SetInitDesiredSizeVertical(sz); //m_wndRollUpBar.SetInitDesiredSizeFloating(sz); m_wndRollUp.Create( NULL,NULL,WS_CHILD|WS_VISIBLE,rc,&m_wndRollUpBar,m_wndRollUpBar.GetDlgCtrlID() ); m_wndRollUpBar.SetChild( &m_wndRollUp ); ////////////////////////////////////////////////////////////////////////// // Create our RollupCtrl into DialogBar and register it m_objectRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_OBJECTS,&m_objectRollupCtrl); m_terrainRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_TERRAIN,&m_terrainRollupCtrl ); m_displayRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_DISPLAY,&m_displayRollupCtrl ); m_layersRollupCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(4, 4, 187, 362), &m_wndRollUp, NULL); m_wndRollUp.SetRollUpCtrl( ROLLUP_LAYERS,&m_layersRollupCtrl ); ////////////////////////////////////////////////////////////////////////// if (!IsPreview()) { // Insert the main rollup m_mainTools = new CMainTools; m_mainTools->Create(MAKEINTRESOURCE(CMainTools::IDD),this); m_objectRollupCtrl.InsertPage("Objects",m_mainTools); // m_objectRollupCtrl.InsertPage("Main Tools",MAKEINTRESOURCE(CMainTools::IDD),RUNTIME_CLASS(CMainTools) ); m_terrainPanel = new CTerrainPanel(this); m_terrainRollupCtrl.InsertPage("Terrain",m_terrainPanel ); CPanelDisplayHide *hidePanel = new CPanelDisplayHide(this); m_displayRollupCtrl.InsertPage("Hide by Category",hidePanel ); CPanelDisplayRender *renderPanel = new CPanelDisplayRender(this); m_displayRollupCtrl.InsertPage("Render Settings",renderPanel ); CPanelDisplayLayer *layerPanel = new CPanelDisplayLayer(this); m_layersRollupCtrl.InsertPage( "Layers Settings",layerPanel ); m_objectRollupCtrl.ExpandAllPages( TRUE ); m_terrainRollupCtrl.ExpandAllPages(TRUE); m_displayRollupCtrl.ExpandAllPages(TRUE); m_layersRollupCtrl.ExpandAllPages(TRUE); SelectRollUpBar( ROLLUP_OBJECTS ); } else { // Hide all menus. } } ////////////////////////////////////////////////////////////////////////// void CMainFrame::CreateMissionsBar() { DWORD dwToolBarFlags = WS_CHILD|WS_VISIBLE|CBRS_ALIGN_ANY|CBRS_TOOLTIPS|CBRS_FLYBY; CRect nullRc(0,0,0,0); m_missionToolBar.CreateEx( this,TBSTYLE_TRANSPARENT|TBSTYLE_FLAT,dwToolBarFlags,CRect(0,0,0,0),IDW_VIEW_MISSION_BAR ); m_missionToolBar.LoadToolBar(IDR_MISSION_BAR); m_missionToolBar.SetWindowText( _T("Mission ToolBar") ); ////////////////////////////////////////////////////////////////////////// // Use 24Bit toolbar. CImageList toolbarImageList; CBitmap toolbarBitmap; toolbarBitmap.LoadBitmap(IDR_MISSION_BAR); toolbarImageList.Create(16, 15, ILC_COLORDDB|ILC_MASK, 13, 1); toolbarImageList.Add(&toolbarBitmap,TOOLBAR_TRANSPARENT_COLOR); m_objectModifyBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)toolbarImageList.m_hImageList); ////////////////////////////////////////////////////////////////////////// // Create controls in the mission bar CRect rect(0,0,100,200); // Get the index of the keyframe slider position in the toolbar int iIndex = m_missionToolBar.CommandToIndex(IDC_MISSION); assert( iIndex >= 0 ); m_missions.Create( WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST|CBS_SORT,rect,this,IDC_MISSION ); m_missions.SetParent( &m_missionToolBar ); m_missionToolBar.InsertControl( &m_missions ); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnMissionUpdate() { } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnMissionChanged() { if (IsPreview()) return; int sel = m_missions.GetCurSel(); if (sel != LB_ERR) { CString str; m_missions.GetLBText( sel,str ); CCryEditDoc *doc = (CCryEditDoc*)GetActiveDocument(); CMission *mission = doc->FindMission(str); if (mission) { doc->SetCurrentMission( mission ); m_currentMission = 0; } } } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnMissionCancelChanged() { if (IsPreview()) return; CCryEditDoc *doc = GetIEditor()->GetDocument(); if (!doc) return; int sel = m_missions.FindStringExact( -1,doc->GetCurrentMission()->GetName() ); if (sel != LB_ERR) m_missions.SetCurSel(sel); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnMissionDropDown() { // When mission control is about to display all missions items. m_missions.ResetContent(); CCryEditDoc *doc = GetIEditor()->GetDocument(); if (!doc) return; for (int i = 0; i < doc->GetMissionCount(); i++) { m_missions.AddString( doc->GetMission(i)->GetName() ); } int sel = m_missions.FindStringExact( -1,doc->GetCurrentMission()->GetName() ); if (sel != LB_ERR) m_missions.SetCurSel(sel); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { // Use our own window class (Needed to dected single application instance). cs.lpszClass = _T("CryEditorClass"); // Init the window with the lowest possible resolution cs.cx = 800; cs.cy = 600; cs.x = 10; cs.y = 10; if( !CXTFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.dwExStyle = 0; //cs.lpszClass = AfxRegisterWndClass( 0, NULL, NULL,AfxGetApp()->LoadIcon(IDR_MAINFRAME)); //cs.style &= ~FWS_ADDTOTITLE; return TRUE; } void CMainFrame::IdleUpdate() { if (m_infoBarHolder.m_hWnd) m_infoBarHolder.IdleUpdate(); IEditor *iface = GetIEditor(); if (IsPreview()) return; if (m_wndTrackView.m_hWnd) { m_wndTrackView.Update(); } if (m_wndDataBase.m_hWnd) m_wndDataBase.Update(); if (m_terrainPanel) { if (::IsWindowVisible(m_terrainPanel->GetSafeHwnd())) m_terrainPanel->OnIdleUpdate(); } if (GetIEditor()->GetSelection()->GetName() != m_selectionName) { m_selectionName = GetIEditor()->GetSelection()->GetName(); SetSelectionName( m_selectionName ); } if (m_missions.m_hWnd) { CCryEditDoc *doc = GetIEditor()->GetDocument(); if (doc->GetCurrentMission() != m_currentMission) { m_currentMission = GetIEditor()->GetDocument()->GetCurrentMission(); //CString str; //m_missions.SetWindowText( m_currentMission->GetName() ); if (m_missions.m_hWnd) { m_missions.ResetContent(); for (int i = 0; i < doc->GetMissionCount(); i++) { m_missions.AddString( doc->GetMission(i)->GetName() ); } int sel = m_missions.FindStringExact( -1,m_currentMission->GetName() ); if (sel != LB_ERR) m_missions.SetCurSel(sel); } } } if (m_editModeBar.m_hWnd) { if (iface->GetObjectManager()->GetLayersManager()->GetCurrentLayer() != m_currentLayer) { m_currentLayer = iface->GetObjectManager()->GetLayersManager()->GetCurrentLayer(); m_editModeBar.SetCurrentLayer( m_currentLayer->GetName() ); RecalcLayout(); } float gridSize = iface->GetViewManager()->GetGrid()->size; if (gridSize != m_gridSize) { m_gridSize = gridSize; m_editModeBar.SetGridSize( m_gridSize ); RecalcLayout(); } } } void CMainFrame::UncheckMainTools() { if (m_mainTools) { m_mainTools->UncheckAll(); } } void CMainFrame::DockControlBarLeftOf(CControlBar *Bar, CControlBar *LeftOf) { //////////////////////////////////////////////////////////////////////// // Dock a control bar left of another //////////////////////////////////////////////////////////////////////// CRect rect; DWORD dw; UINT n; // Get MFC to adjust the dimensions of all docked ToolBars // so that GetWindowRect will be accurate RecalcLayout(TRUE); LeftOf->GetWindowRect(&rect); rect.OffsetRect(1, 0); dw = LeftOf->GetBarStyle(); n = 0; n = (dw & CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n; n = (dw & CBRS_ALIGN_BOTTOM && n == 0) ? AFX_IDW_DOCKBAR_BOTTOM : n; n = (dw & CBRS_ALIGN_LEFT && n == 0) ? AFX_IDW_DOCKBAR_LEFT : n; n = (dw & CBRS_ALIGN_RIGHT && n == 0) ? AFX_IDW_DOCKBAR_RIGHT : n; // When we take the default parameters on rect, DockControlBar will dock // each Toolbar on a seperate line. By calculating a rectangle, we // are simulating a Toolbar being dragged to that location and docked. DockControlBar(Bar, n, &rect); } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CXTFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CXTFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers void CMainFrame::OnSize(UINT nType, int cx, int cy) { CXTFrameWnd::OnSize(nType, cx, cy); } void CMainFrame::OnUpdateToolbar(CCmdUI* pCmdUI) { //pCmdUI->SetCheck(m_ReBar.IsWindowVisible()); } void CMainFrame::OnToolbar() { //ShowControlBar(&m_ReBar, !m_ReBar.IsWindowVisible(), FALSE); } void CMainFrame::OnUpdateConsole(CCmdUI* pCmdUI) { //pCmdUI->SetCheck(m_cConsole.IsWindowVisible()); } void CMainFrame::OnConsoleWindow() { /* if (GetIEditor()->IsInGameMode()) return; // Control the visibility of the console ShowControlBar(&m_cConsole, !m_cConsole.IsVisible(), FALSE); if (m_cConsole.IsVisible()) { m_cConsole.SetInputFocus(); } */ } bool CMainFrame::ShowConsole( bool enable ) { /* // Control the visibility of the console if (m_cConsole.IsFloating()) { ShowControlBar(&m_cConsole, enable, FALSE); bool result = m_consoleVisible; m_consoleVisible = enable; } m_consoleVisible = true; */ return true; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnUpdateTrackView(CCmdUI* pCmdUI) { //pCmdUI->SetCheck(m_wndTrackView.IsWindowVisible()); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnTrackView() { //ShowControlBar(&m_wndTrackView, !m_wndTrackView.IsVisible(), FALSE); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnUpdateStatusBar(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_wndStatusBar.IsWindowVisible()); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnStatusBar() { ShowControlBar(&m_wndStatusBar, !m_wndStatusBar.IsVisible(), TRUE); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnUpdateRollUpBar(CCmdUI* pCmdUI) { //pCmdUI->SetCheck(m_wndRollUp.IsWindowVisible()); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnRollUpBar() { //ShowControlBar(&m_wndRollUp, !m_wndRollUp.IsVisible(), FALSE); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class //m_layoutWnd.Create( this,2,2,CSize(10,10),pContext ); m_layoutWnd = new CLayoutWnd; CRect rc; m_layoutWnd->CreateEx( 0,NULL,NULL,WS_CHILD|WS_VISIBLE,rc,this,AFX_IDW_PANE_FIRST ); if (IsPreview()) { m_layoutWnd->CreateLayout( ET_Layout0,true,ET_ViewportModel ); } else { if (!m_layoutWnd->LoadConfig()) m_layoutWnd->CreateLayout( ET_Layout2 ); } return TRUE; //return CXTFrameWnd::OnCreateClient(lpcs, pContext); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { // TODO: Add your message handler code here and/or call default if (pCopyDataStruct->dwData = 100 && pCopyDataStruct->lpData != NULL) { char str[1024]; memcpy( str,pCopyDataStruct->lpData,pCopyDataStruct->cbData ); str[pCopyDataStruct->cbData] = 0; // Load this file. ((CCryEditApp*)AfxGetApp())->LoadFile( str ); } return CXTFrameWnd::OnCopyData(pWnd, pCopyDataStruct); } ////////////////////////////////////////////////////////////////////////// CString CMainFrame::GetSelectionName() { return m_editModeBar.GetSelection(); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::AddSelectionName( const CString &name ) { m_editModeBar.AddSelection( name ); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::RemoveSelectionName( const CString &name ) { m_editModeBar.RemoveSelection( name ); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::SetSelectionName( const CString &name ) { if (m_editModeBar.m_hWnd) m_editModeBar.SetSelection( name ); } ////////////////////////////////////////////////////////////////////////// int CMainFrame::SelectRollUpBar( int rollupBarId ) { if (m_wndRollUp.m_hWnd) m_wndRollUp.Select( rollupBarId ); return rollupBarId; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnClose() { if (!GetIEditor()->GetDocument()->CanCloseFrame(this)) return; GetIEditor()->GetDocument()->SetModifiedFlag(FALSE); GetIEditor()->GetSystem()->Quit(); // Close all edit panels. GetIEditor()->ClearSelection(); GetIEditor()->SetEditTool(0); GetIEditor()->GetObjectManager()->EndEditParams(); SaveConfig(); CXTFrameWnd::OnClose(); } ////////////////////////////////////////////////////////////////////////// CRollupCtrl* CMainFrame::GetRollUpControl( int rollupBarId ) { if (m_hWnd == 0) return 0; if (rollupBarId == ROLLUP_OBJECTS) { return &m_objectRollupCtrl; } else if (rollupBarId == ROLLUP_TERRAIN) { return &m_terrainRollupCtrl; } else if (rollupBarId == ROLLUP_DISPLAY) { return &m_displayRollupCtrl; } else if (rollupBarId == ROLLUP_LAYERS) { return &m_layersRollupCtrl; } // Default. return &m_objectRollupCtrl; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::EnableProgressBar( bool bEnable ) { m_infoBarHolder.EnableProgressBar(bEnable); } ////////////////////////////////////////////////////////////////////////// CInfoProgressBar* CMainFrame::GetProgressBar() { return m_infoBarHolder.GetProgressBar(); }; ////////////////////////////////////////////////////////////////////////// CTrackViewDialog* CMainFrame::GetTrackView() { return &m_wndTrackView; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::SetStatusText( LPCTSTR pszText) { if (m_wndStatusBar.m_hWnd) m_wndStatusBar.SetPaneText(0, pszText); }; ////////////////////////////////////////////////////////////////////////// void CMainFrame::ActivateFrame(int nCmdShow) { CXTFrameWnd::ActivateFrame(nCmdShow); } void CMainFrame::ShowWindowEx(int nCmdShow) { if (!IsPreview()) { // Restore control bar postion. LoadBarState(_T("Bar State")); } // Restore frame window size and position. if (!m_wndPosition.LoadWindowPos(this)) { nCmdShow = m_wndPosition.showCmd; } CXTFrameWnd::ShowWindow(nCmdShow); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnXPLook() { xtAfxData.bXPMode = !xtAfxData.bXPMode; m_bXPLook = xtAfxData.bXPMode; RedrawWindow( NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN ); /* m_bXPLook = !m_bXPLook; if (m_bXPLook) { // Install XP paint manager. VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManagerXP ) ); CExtPopupMenuWnd::g_bMenuWithShadows = true; } else { // Install w2k paint manager. VERIFY( g_PaintManager.InstallPaintManager( new CExtPaintManager ) ); CExtPopupMenuWnd::g_bMenuWithShadows = false; } RecalcLayout(); RedrawWindow( NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_FRAME|RDW_ALLCHILDREN ); */ } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnUpdateXPLook( CCmdUI* pCmdUI ) { if (m_bXPLook) pCmdUI->SetCheck(TRUE); else pCmdUI->SetCheck(FALSE); } ////////////////////////////////////////////////////////////////////////// bool CMainFrame::IsPreview() const { return GetIEditor()->IsInPreviewMode(); } ////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) { if (!CXTFrameWnd::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext)) return FALSE; CXTAccelManager &accelManager = CXTAccelManager::Get(); /* AddToolbarToAccel( _T("Toolbar EditMode"),&m_editModeBar ); AddToolbarToAccel( _T("Toolbar ObjectModify"),&m_objectModifyBar ); AddToolbarToAccel( _T("Toolbar Mission"),&m_missionToolBar ); AddToolbarToAccel( _T("Toolbar Terrain"),&m_wndTerrainToolBar ); // Add tag points. accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC1,_T("Tag Location 1") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC2,_T("Tag Location 2") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC3,_T("Tag Location 3") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC4,_T("Tag Location 4") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC5,_T("Tag Location 5") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC6,_T("Tag Location 6") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC7,_T("Tag Location 7") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC8,_T("Tag Location 8") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC9,_T("Tag Location 9") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC10,_T("Tag Location 10") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC11,_T("Tag Location 11") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_TAG_LOC12,_T("Tag Location 12") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC1,_T("Goto Tagged Location 1") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC2,_T("Goto Tagged Location 2") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC3,_T("Goto Tagged Location 3") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC4,_T("Goto Tagged Location 4") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC5,_T("Goto Tagged Location 5") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC6,_T("Goto Tagged Location 6") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC7,_T("Goto Tagged Location 7") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC8,_T("Goto Tagged Location 8") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC9,_T("Goto Tagged Location 9") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC10,_T("Goto Tagged Location 10") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC11,_T("Goto Tagged Location 11") ); accelManager.AddExtraCommand( _T("Tag Location"),ID_GOTO_LOC12,_T("Goto Tagged Location 12") ); */ /* // Tools extra commands. accelManager.AddExtraCommand( _T("Tools"),ID_TOOL1,_T("Tool1") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL2,_T("Tool2") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL3,_T("Tool3") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL4,_T("Tool4") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL5,_T("Tool5") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL6,_T("Tool6") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL7,_T("Tool7") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL8,_T("Tool8") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL9,_T("Tool9") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL10,_T("Tool10") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL11,_T("Tool11") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL12,_T("Tool12") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL13,_T("Tool13") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL14,_T("Tool14") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL15,_T("Tool15") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL16,_T("Tool16") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL17,_T("Tool17") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL18,_T("Tool18") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL19,_T("Tool19") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL20,_T("Tool20") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL21,_T("Tool21") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL22,_T("Tool22") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL23,_T("Tool23") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL24,_T("Tool24") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL25,_T("Tool25") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL26,_T("Tool26") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL27,_T("Tool27") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL28,_T("Tool28") ); accelManager.AddExtraCommand( _T("Tools"),ID_TOOL29,_T("Tool29") ); */ // Initialize accelerator key manager. //accelManager.Init(this, IDR_MAINFRAME, _T("Main Frame"), _T("MainFrameKeys")); // initialize accelerator manager. if (!InitAccelManager() ) { return FALSE; } return TRUE; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::EnableAccelerator( bool bEnable ) { if (bEnable) { CXTAccelManager &accelManager = CXTAccelManager::Get(); //LoadAccelTable( MAKEINTRESOURCE(IDR_MAINFRAME) ); accelManager.UpdateWindowAccelerator(); CLogFile::WriteLine( "Enable Accelerators" ); } else { if (m_hAccelTable) DestroyAcceleratorTable( m_hAccelTable ); m_hAccelTable = NULL; LoadAccelTable( MAKEINTRESOURCE(IDR_GAMEACCELERATOR) ); CLogFile::WriteLine( "Disable Accelerators" ); } } ////////////////////////////////////////////////////////////////////////// void CMainFrame::EditAccelerator() { // Open accelerator key manager dialog. //accelManager.EditKeyboardShortcuts(this); OnCustomizeBar(); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::AddToolbarToAccel( const CString &name,CXTToolBar *toolbar ) { assert( toolbar ); CXTAccelManager &accelManager = CXTAccelManager::Get(); for (int i = 0; i < toolbar->GetButtonCount(); i++) { CString str; UINT cmdId = toolbar->GetItemID(i); if (str.LoadString(cmdId) != 0) { accelManager.AddExtraCommand( name,cmdId,str ); } } } ////////////////////////////////////////////////////////////////////////// bool CMainFrame::FindMenuPos(CMenu *pBaseMenu, UINT myID, CMenu * & pMenu, int & mpos) { // REMARK: pMenu is a pointer to a Cmenu-Pointer int myPos; if( pBaseMenu == NULL ) { // Sorry, Wrong Number pMenu = NULL; mpos = -1; return false; } for( myPos = pBaseMenu->GetMenuItemCount() -1; myPos >= 0; myPos-- ) { int Status = pBaseMenu->GetMenuState( myPos, MF_BYPOSITION); CMenu* mNewMenu; if( Status == 0xFFFFFFFF ) { // That was not an legal Menu/Position-Combination pMenu = NULL; mpos = -1; return false; } // Is this the real one? if( pBaseMenu->GetMenuItemID(myPos) == myID ) { // Yep! pMenu = pBaseMenu; mpos = myPos; return true; } // Maybe a subMenu? mNewMenu = pBaseMenu->GetSubMenu(myPos); // This function will return NULL if ther is NO SubMenu if( mNewMenu != NULL ) { // rekursive! bool found = FindMenuPos( mNewMenu, myID, pMenu, mpos); if(found) return true; // return this loop } // I have to check the next in my loop } return false; // iterate in the upper stackframe } ////////////////////////////////////////////////////////////////////////// void CMainFrame::DeleteToolsFromMenu( CMenu *menu ) { int pos = 0; while (pos < menu->GetMenuItemCount()) { int status = menu->GetMenuState( pos, MF_BYPOSITION); if (status == 0xFFFFFFFF) { // That was not an legal Menu/Position-Combination return; } UINT mId = menu->GetMenuItemID(pos); if (mId >= ID_TOOL2 && mId <= ID_TOOL30) { // Delete this item. menu->DeleteMenu( pos,MF_BYPOSITION ); } else { pos++; } } } ////////////////////////////////////////////////////////////////////////// void CMainFrame::UpdateTools() { CMenu *pMenu = m_wndMenuBar.GetMenu(); int m_Pos = 0; CMenu *pmMenu = pMenu; bool res = FindMenuPos( pMenu, ID_TOOL1, pmMenu, m_Pos ); if (pmMenu && res) { DeleteToolsFromMenu( pmMenu ); //pmMenu->DeleteMenu( m_Pos,MF_BYPOSITION ); CExternalToolsManager *pTools = GetIEditor()->GetExternalToolsManager(); for (int i = 0; i < pTools->GetToolsCount(); i++) { if (i == 0) { // Replace Tool1. pmMenu->ModifyMenu( m_Pos+i,MF_BYPOSITION|MF_STRING, ID_TOOL1+i, pTools->GetTool(i)->m_title ); } else pmMenu->InsertMenu( m_Pos+i,MF_BYPOSITION|MF_STRING, ID_TOOL1+i, pTools->GetTool(i)->m_title ); } } } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == AUTOSAVE_TIMER_EVENT && gSettings.autoBackupEnabled) { // Call autosave function of CryEditApp. ((CCryEditApp*)AfxGetApp())->SaveAutoBackup(); } if (nIDEvent == AUTOREMIND_TIMER_EVENT && gSettings.autoRemindTime > 0) { // Remind to save. ((CCryEditApp*)AfxGetApp())->SaveAutoRemind(); } CXTFrameWnd::OnTimer(nIDEvent); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnEditNextSelectionMask() { m_editModeBar.NextSelectMask(); } ////////////////////////////////////////////////////////////////////////// void CMainFrame::ShowDataBaseDialog( bool bShow ) { ShowControlBar( &m_wndDataBaseBar,bShow,TRUE ); m_wndDataBaseBar.Invalidate(); //m_wndDataBase.RedrawWindow( NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN ); } ////////////////////////////////////////////////////////////////////////// bool CMainFrame::IsDockedWindowChild( CWnd *pWnd ) { if (!pWnd) return false; if (pWnd->IsChild(&m_wndDataBaseBar)) return true; if (pWnd->IsChild(&m_wndRollUpBar)) return true; if (pWnd->IsChild(&m_wndConsoleBar)) return true; if (pWnd->IsChild(&m_wndTrackViewBar)) return true; return false; } ////////////////////////////////////////////////////////////////////////// void CMainFrame::OnProgressBarCancel() { CWaitProgress::CancelCurrent(); }