MainFrm.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 25k
Category:

Graph program

Development Platform:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Solidgraph.h"
  5. #include "DocManagerEx.h"
  6. #include "MainFrm.h"
  7. #include "ChildFrm.h"
  8. #include "Dialogs//SetupsDlg.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #endif
  12. static UINT framesToolbarsCurID = START_ID_FOR_FRAMES_TOOLBARS;
  13. // CMainFrame
  14. IMPLEMENT_DYNAMIC(CMainFrame, CEGMDIFrameWnd)
  15. IMPLEMENT_DOCKING(CMainFrame)
  16. BEGIN_MESSAGE_MAP(CMainFrame, CEGMDIFrameWnd)
  17. ON_WM_CREATE()
  18. ON_DOCKING_MESSAGES()
  19. // Global help commands
  20. ON_COMMAND(ID_HELP_FINDER, CEGMDIFrameWnd::OnHelpFinder)
  21. ON_COMMAND(ID_HELP, CEGMDIFrameWnd::OnHelp)
  22. ON_COMMAND(ID_CONTEXT_HELP, CEGMDIFrameWnd::OnContextHelp)
  23. ON_COMMAND(ID_DEFAULT_HELP, CEGMDIFrameWnd::OnHelpFinder)
  24. ON_WM_DESTROY()
  25. ON_MESSAGE_VOID(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)
  26. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
  27. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
  28. ON_COMMAND(ID_SYSTEM_PANEL, OnSystemPanel)
  29. ON_UPDATE_COMMAND_UI(ID_SYSTEM_PANEL, OnUpdateSystemPanel)
  30. ON_COMMAND(ID_SHOW_SCENE_PANEL, OnScenePanel)
  31. ON_UPDATE_COMMAND_UI(ID_SHOW_SCENE_PANEL, OnUpdateScenePanel)
  32. ON_COMMAND(ID_SHOW_COMMAND_PANEL, OnCommandPanel)
  33. ON_UPDATE_COMMAND_UI(ID_SHOW_COMMAND_PANEL, OnUpdateCommandPanel)
  34. ON_COMMAND(ID_SHOW_SCRIPT_PANEL, OnScriptPanel)
  35. ON_UPDATE_COMMAND_UI(ID_SHOW_SCRIPT_PANEL, OnUpdateScriptPanel)
  36. ON_COMMAND(ID_SETUPS, OnSetups)
  37. ON_MESSAGE( WM_ENTERSIZEMOVE, OnEnterSizeMove) 
  38. ON_MESSAGE( WM_EXITSIZEMOVE, OnExitSizeMove)
  39. END_MESSAGE_MAP()
  40. static UINT one_indicator[] =
  41. {
  42. ID_SEPARATOR           // status line indicator
  43. };
  44. static UINT indicators[] =
  45. {
  46. ID_SEPARATOR,           // status line indicator
  47. ID_INDICATOR_CAPS,
  48. ID_INDICATOR_NUM,
  49. ID_INDICATOR_SCRL,
  50. };
  51. // CMainFrame construction/destruction
  52. CMainFrame::CMainFrame():
  53. m_exist_child(false)
  54. , m_PluginsSubMenu(NULL)
  55. , m_bInsertStringsInGeometryMenu(false)
  56. , m_last_active_Child(NULL)
  57. , m_first_raz(true)
  58. {
  59. m_cursorer = new CCursorer();
  60. }
  61. CMainFrame::~CMainFrame()
  62. {
  63. delete m_cursorer;
  64. if (m_PluginsSubMenu)
  65. delete m_PluginsSubMenu;
  66. }
  67. static char  progress_steps_count=0;
  68. static char  progress_cur_step=0;
  69. bool CMainFrame::InitProgresser(unsigned int steps_count)
  70. {
  71. if (!::IsWindow(m_info_bar.m_hWnd) || steps_count==0)
  72. return false;
  73. m_info_bar.SetInfoStyle(INFO_PROGRESS);
  74. progress_steps_count = steps_count;
  75. return true;
  76. }
  77. bool CMainFrame::Progress(unsigned int progress_percent)
  78. {
  79. if (!::IsWindow(m_info_bar.m_hWnd) || progress_steps_count==0)
  80. return false;
  81. if (progress_percent==100)
  82. {
  83. progress_cur_step++;
  84. m_info_bar.Progress(progress_cur_step*100/progress_steps_count);
  85. if (progress_cur_step==progress_steps_count)
  86. {
  87. m_info_bar.Progress(100);
  88. progress_cur_step=0;
  89. progress_steps_count =0;
  90. m_info_bar.SetInfoStyle(INFO_TEXT);
  91. }
  92. }
  93. else
  94. {
  95. m_info_bar.Progress(progress_cur_step*100/progress_steps_count+
  96. static_cast<int>(progress_percent/progress_steps_count));
  97. }
  98. return true;
  99. }
  100. bool CMainFrame::StopProgresser()
  101. {
  102. if (!::IsWindow(m_info_bar.m_hWnd) || progress_steps_count==0)
  103. return false;
  104. progress_cur_step=0;
  105. progress_steps_count =0;
  106. m_info_bar.SetInfoStyle(INFO_TEXT);
  107. return true;
  108. }
  109. /**/
  110. void CMainFrame::PutMessageFromChildFrame(IApplicationInterface::MESSAGE_TYPE mes_type,
  111. const char* mes_str)
  112. {
  113. if (!::IsWindow(m_info_bar.m_hWnd))
  114. return;
  115. switch(mes_type) 
  116. {
  117. case IApplicationInterface::MT_MESSAGE:
  118. m_info_bar.SetMessageString(mes_str);
  119. break;
  120. case IApplicationInterface::MT_WARNING:
  121. m_info_bar.SetWarningString(mes_str,NULL);
  122. break;
  123. case IApplicationInterface::MT_ERROR:
  124. m_info_bar.SetErrorString(mes_str,NULL);
  125. break;
  126. default:
  127. break;
  128. }
  129. }
  130. void CMainFrame::DockControlBarRightOf(CToolBar* Bar, CToolBar* Left)
  131. {
  132. /*if (!Left)
  133. {
  134. DockControlBar(Bar);
  135. return;
  136. }
  137. CRect rect;
  138. DWORD dw;
  139. UINT n;
  140. // get MFC to adjust the dimensions of all docked ToolBars
  141. // so that GetWindowRect will be accurate
  142. RecalcLayout(TRUE);
  143. Left->GetWindowRect(&rect);
  144. rect.OffsetRect(1,0);
  145. dw=Left->GetBarStyle();
  146. n = 0;
  147. n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
  148. n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
  149. n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
  150. n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
  151. // When we take the default parameters on rect, DockControlBar will dock
  152. // each Toolbar on a seperate line. By calculating a rectangle, we
  153. // are simulating a Toolbar being dragged to that location and docked.
  154. DockControlBar(Bar,n,&rect);*/
  155. if (!Left)
  156. {
  157. DockControlBar(Bar);
  158. return;
  159. }
  160. ASSERT(Bar != NULL);
  161. ASSERT(Bar != Left);
  162. // the neighbour must be already docked
  163. CDockBar* pDockBar = Left->m_pDockBar;
  164. ASSERT(pDockBar != NULL);
  165. UINT nDockBarID = Left->m_pDockBar->GetDlgCtrlID();
  166. ASSERT(nDockBarID != AFX_IDW_DOCKBAR_FLOAT);
  167. bool bHorz = (nDockBarID == AFX_IDW_DOCKBAR_TOP ||
  168. nDockBarID == AFX_IDW_DOCKBAR_BOTTOM);
  169. // dock normally (inserts a new row)
  170. DockControlBar(Bar, nDockBarID);
  171. // delete the new row (the bar pointer and the row end mark)
  172. pDockBar->m_arrBars.RemoveAt(pDockBar->m_arrBars.GetSize() - 1);
  173. pDockBar->m_arrBars.RemoveAt(pDockBar->m_arrBars.GetSize() - 1);
  174. // find the target bar
  175. for (int i = 0; i < pDockBar->m_arrBars.GetSize(); i++)
  176. {
  177. void* p = pDockBar->m_arrBars[i];
  178. if (p == Left) // and insert the new bar after it
  179. pDockBar->m_arrBars.InsertAt(i + 1, Bar);
  180. }
  181. // move the new bar into position
  182. CRect rBar;
  183. Left->GetWindowRect(rBar);
  184. rBar.OffsetRect(bHorz ? 1 : 0, bHorz ? 0 : 1);
  185. Bar->MoveWindow(rBar);
  186. }
  187. /*
  188. CWnd* CMainFrame::GetMessageBar()
  189. {
  190. return &m_wndStatusBar;
  191. }*/
  192. static WORD menu_icons[] = { IDB_GEOMETRY_TOOLBAR_TC, 
  193. 16,16,
  194. ID_FILE_NEW,
  195. ID_FILE_OPEN,
  196. NULL
  197. };
  198. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  199. {
  200. if (CEGMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  201. return -1;
  202. /*if (!m_wndStatusBar.Create(this) ||
  203. !m_wndStatusBar.SetIndicators(indicators,
  204.   sizeof(indicators)/sizeof(UINT)))
  205. {
  206. TRACE0("Failed to create status barn");
  207. return -1;      // fail to create
  208. }*/
  209. if (!m_info_bar.Create(this,IDD_INFO_DLG,
  210. CBRS_TOOLTIPS | CBRS_SIZE_DYNAMIC|CBRS_ALIGN_BOTTOM,1001))
  211. {
  212. TRACE0("Failed to create dialogbarn");
  213. return -1;      // fail to create
  214. }
  215. m_info_bar.EnableDocking(CBRS_ALIGN_BOTTOM);
  216. if( !m_wndAppTabManager.CreateAppTabManager(this) )
  217. {
  218. TRACE0(_T("Failed to create MDI Manager n"));  
  219. return FALSE;      // fail to create
  220. }
  221. EnableDocking(CBRS_ALIGN_ANY);
  222. if (!m_wndMenuBar.Create(this,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP|CBRS_SIZE_DYNAMIC|CBRS_TOOLTIPS|CBRS_GRIPPER))
  223. {
  224. TRACE0("Failed to create menu barn");
  225. return -1;      // fail to create
  226. }
  227. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
  228. EnableDocking(CBRS_ALIGN_ANY);
  229. DockControlBar(&m_wndMenuBar);
  230. m_DefaultNewMenu.LoadToolBar( menu_icons, RGB( 255, 0, 255 ) );
  231. m_wndMenuBar.SetMenu(&m_DefaultNewMenu);
  232. CString tmpLab;
  233. tmpLab.LoadString(IDS_MENU_PANEL);
  234. m_wndMenuBar.SetWindowText(tmpLab);
  235. tmpLab.LoadString(IDS_STANDARD_TLB_CAPT);
  236. /*CreateToolBar(IDR_MAINFRAME,tmpLab, IDB_MAINFRAME_TOOBAR_TC,
  237. WS_VISIBLE | CBRS_ALIGN_TOP , false,NULL);*/
  238. CToolBar* prevT = CreateToolBar(IDR_GEOMETRY,tmpLab,  IDB_GEOMETRY_TOOLBAR_TC,
  239. CBRS_ALIGN_TOP , true,NULL);
  240. /*tmpLab.LoadString(IDS_PROJECTION_TLB_CAPT);
  241. prevT = CreateToolBar(IDR_PROJECTION_TOOLBAR,tmpLab, IDB_PROJECTION_TOOLBAR_TC,
  242. CBRS_ALIGN_TOP,true,prevT);
  243. tmpLab.LoadString(IDS_NAVIGATE_TLB_CAPT);
  244. prevT = CreateToolBar(IDR_NAVIGATE_TOOLBAR,tmpLab,IDB_NAVIGATE_TOOLBAR_TC,
  245. CBRS_ALIGN_TOP,true,prevT);*/
  246. tmpLab.LoadString(IDS_SNAPS_TLB_CAPT);
  247. prevT = CreateToolBar(IDR_SNAPS_TOOLBAR,tmpLab,IDB_SNAP_TOOLBAR_TC,
  248. CBRS_ALIGN_TOP,true,prevT);
  249. /*tmpLab.LoadString(IDS_MAT_TLB_CAPT);
  250. prevT = CreateToolBar(IDR_MATERIAL_TOOLBAR,tmpLab,IDB_MAINFRAME_TOOBAR_TC,
  251. CBRS_ALIGN_TOP,true,prevT);*/
  252. tmpLab.LoadString(IDS_STANDARD_TLB_CAPT);
  253. prevT = CreateToolBar(IDR_REPORT_TOOLBAR,tmpLab,  IDB_REPORT_TC,
  254. CBRS_ALIGN_TOP , false,NULL);
  255. tmpLab.LoadString(IDS_OBJCTS);
  256. prevT = CreateToolBar(IDR_REPORT_OBJECTS_TOOLBAR,tmpLab,  IDB_REPORT_OBJECTS,
  257. CBRS_ALIGN_TOP , false,prevT);
  258. tmpLab.LoadString(IDS_REPORT_VIEW);
  259. prevT = CreateToolBar(IDR_REPORT_VIEW,tmpLab,  IDB_REPORT_VIEW,
  260. CBRS_ALIGN_TOP , false,prevT);
  261. if (theApp.m_main_pluginer)
  262.  for (size_t ii=0;ii<theApp.m_main_pluginer->m_toolbar_plugins.size();ii++)
  263. AddToolbarPlugin(theApp.m_main_pluginer->m_toolbar_plugins[ii]);
  264. CreateSystemToolbar();
  265. CDocTemplate* pTemplate = NULL;
  266. POSITION posit = theApp.m_pDocManager->GetFirstDocTemplatePosition();
  267. int i=0;
  268. while (posit)
  269. {
  270. pTemplate = theApp.m_pDocManager->GetNextDocTemplate(posit);
  271. CString srr;
  272. if (i==0)
  273. srr = "3D";
  274. else
  275. srr = "2D";
  276. m_wndAppTabManager.AddTab(pTemplate,srr);
  277. i++;
  278. }
  279. EnableDocking(CBRS_ALIGN_ANY);
  280. /*EnableDocking( CBRS_ALIGN_TOP );
  281. EnableDocking( CBRS_ALIGN_LEFT );
  282. EnableDocking( CBRS_ALIGN_BOTTOM );
  283. EnableDocking( CBRS_ALIGN_RIGHT );*/
  284. //m_wndPanelsContainer.Create(this, 100);
  285. //m_script_dlg.Create(CScriptDlg::IDD, &m_wndPanelsContainer);
  286. //m_scene_tree_dlg.Create(CSceneTreeDlg::IDD,&m_wndPanelsContainer);
  287. EnablePinning( CBRS_ALIGN_ANY );
  288. CSize sizeDefault( 200, 200 );
  289. CString tttS;
  290. tttS.LoadString(IDS_COMMANDER);
  291. if (!m_commander_docking.CreatePane((TCHAR*)(LPCTSTR)tttS, sizeDefault,  this, NULL, dctLeft) )
  292. {
  293. TRACE0("Failed to create Workspace viewn");
  294. return -1;    // fail to create
  295. }
  296. m_commander_docking.SetIcon( IDB_COMMANDER );
  297. tttS.LoadString(IDS_SCENE);
  298. if (!m_scene_tree_panel.CreatePane( (TCHAR*)(LPCTSTR)tttS, sizeDefault,  this, NULL, dctRight) )
  299. {
  300. TRACE0("Failed to create Workspace viewn");
  301. return -1;    // fail to create
  302. }
  303. m_scene_tree_panel.SetIcon( IDB_SCENE );
  304. tttS.LoadString(IDS_SCRIPTS);
  305.  m_script_panel.SetResourceID( IDR_SCRIPT_TLB );
  306. if (!m_script_panel.CreatePane( (TCHAR*)(LPCTSTR)tttS, sizeDefault,  this, &m_scene_tree_panel, dctTab) )
  307. {
  308. TRACE0("Failed to create Workspace viewn");
  309. return -1;    // fail to create
  310. }
  311. m_script_panel.GetToolbar()->LoadHiColor(MAKEINTRESOURCE(IDB_SCRIPT_TLB));
  312. m_script_panel.SetIcon( IDB_SCRIPT );
  313. return 0;
  314. }
  315. LRESULT CMainFrame::OnEnterSizeMove(WPARAM,LPARAM)
  316. {
  317. CMDIChildWnd* pChild = MDIGetActive();
  318. if (pChild)
  319. {
  320. CView* v = pChild->GetActiveView();
  321. if (v)
  322. v->PostMessage(WM_ENTERSIZEMOVE);
  323. }
  324. return 0L;
  325. }
  326. LRESULT CMainFrame::OnExitSizeMove(WPARAM,LPARAM)
  327. {
  328. CMDIChildWnd* pChild = MDIGetActive();
  329. if (pChild)
  330. {
  331. CView* v = pChild->GetActiveView();
  332. if (v)
  333. v->PostMessage(WM_EXITSIZEMOVE);
  334. }
  335. return 0L;
  336. }
  337. void CMainFrame::AddPluginMenu()
  338. {
  339. if (m_PluginsSubMenu)
  340. return;
  341. if (!theApp.m_main_pluginer)
  342. return;
  343. if (!theApp.m_main_pluginer->m_toolbar_plugins.empty())
  344. {
  345. m_PluginsSubMenu = new  CEGMenu();
  346. m_PluginsSubMenu->CreatePopupMenu();
  347. CString plTitle;
  348. plTitle.LoadString(IDS_PLUGINS_MENU_STRING);
  349. CWinApp* MyApp=AfxGetApp(); 
  350. POSITION pos;
  351. pos=MyApp->GetFirstDocTemplatePosition();
  352. reinterpret_cast<CEGMultiDocTemplate*>( 
  353. const_cast<CDocTemplate*>(MyApp->GetNextDocTemplate(pos))
  354. )->m_NewMenuShared.InsertMenu(5,MF_BYPOSITION|MF_POPUP,
  355. reinterpret_cast<UINT>(m_PluginsSubMenu->m_hMenu), plTitle);
  356. size_t sz = theApp.m_main_pluginer->m_toolbar_plugins.size();
  357. for (size_t i = 0; i < sz; i++)
  358. m_PluginsSubMenu->AppendMenu(MF_STRING, theApp.m_main_pluginer->m_toolbar_plugins[i]->m_nID_Menu, 
  359. theApp.m_main_pluginer->m_toolbar_plugins[i]->m_info.menu_string);
  360. m_wndMenuBar.RefreshBar();
  361. }
  362. }
  363. void  CMainFrame::InsertToolbarsStringsInMenu()
  364. {
  365. size_t sz = m_geometry_toolbars_container.size();
  366. CString tmpStr;
  367. if (!m_bInsertStringsInGeometryMenu)
  368. {
  369. for (size_t i = 0; i < sz; i++)
  370. if (m_geometry_toolbars_container[i].menuID>=START_ID_FOR_FRAMES_TOOLBARS &&
  371. m_geometry_toolbars_container[i].geometry)
  372. {
  373. m_geometry_toolbars_container[i].toolbar->GetWindowText(tmpStr);
  374. CWinApp* MyApp=AfxGetApp(); 
  375. POSITION pos;
  376. pos=MyApp->GetFirstDocTemplatePosition();
  377. reinterpret_cast<CEGMultiDocTemplate*>( 
  378. const_cast<CDocTemplate*>(MyApp->GetNextDocTemplate(pos))
  379. )->m_NewMenuShared.GetSubMenu(2)->
  380. GetSubMenu(0)->AppendMenu(MF_STRING, m_geometry_toolbars_container[i].menuID, 
  381. tmpStr);
  382. }
  383. m_bInsertStringsInGeometryMenu = true;
  384. }
  385. }
  386. void   CMainFrame::ActivateTab(CDocTemplate* dT)
  387. {
  388. if (dT && theApp.m_pDocManager)
  389. ((CDocManagerEx*)theApp.m_pDocManager)->ActivateFrame(dT);
  390. }
  391. void CMainFrame::OnDestroy()
  392. {
  393. int i,j, sz = m_geometry_toolbars_container.size();
  394. if (theApp.m_main_pluginer)
  395. {
  396. int plTsz = theApp.m_main_pluginer->m_toolbar_plugins.size();
  397. for(i=0;i<sz;i++)
  398. {
  399. bool plagT = false;
  400. for (j=0;j<plTsz;j++)
  401. if (&theApp.m_main_pluginer->m_toolbar_plugins[j]->m_toolbar==m_geometry_toolbars_container[i].toolbar)
  402. {
  403. plagT = true;
  404. break;
  405. }
  406. if (!plagT && m_geometry_toolbars_container[i].toolbar!=&m_system_toolbar)
  407. {
  408. m_geometry_toolbars_container[i].toolbar->DestroyWindow();
  409. delete m_geometry_toolbars_container[i].toolbar;
  410. }
  411. }
  412. }
  413. m_geometry_toolbars_container.clear();
  414. CEGMDIFrameWnd::OnDestroy();
  415. }
  416. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  417. {
  418. if( !CEGMDIFrameWnd::PreCreateWindow(cs) )
  419. return FALSE;
  420. // TODO: Modify the Window class or styles here by modifying
  421. //  the CREATESTRUCT cs
  422. cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
  423.  | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU;
  424. return TRUE;
  425. }
  426. CToolBar* CMainFrame::CreateToolBar(UINT nResID,LPCTSTR t_caption, UINT BitmapID,
  427. DWORD startSideAndVis, bool geometry,
  428. CToolBar* leftOf )
  429. {
  430. // Create a new toolbar object and set the auto delete option
  431. CEGToolBar* pToolBar = new CEGToolBar;
  432. if ( ! pToolBar->CreateEx(this, TBSTYLE_FLAT, WS_CHILD | startSideAndVis
  433. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) )
  434. {
  435. TRACE("Failed creating toolbar %dn", nResID);
  436. return NULL;
  437. }
  438. // Load the toolbar
  439. if ( ! pToolBar->LoadToolBar(nResID) )
  440. {
  441. TRACE("Failed loading toolbar %dn", nResID);
  442. return NULL;
  443. }
  444. pToolBar->LoadHiColor(MAKEINTRESOURCE(BitmapID));
  445. pToolBar->EnableDocking(CBRS_ALIGN_ANY);
  446. // Dock the toolbar
  447. DockControlBarRightOf(pToolBar,leftOf);
  448. // Ok
  449. pToolBar->SetWindowText(t_caption);
  450. /*{
  451. #define BTN_WDTH  16
  452. {
  453. CImageList cImageList;
  454. CBitmap cBitmap;
  455. BITMAP bmBitmap;
  456. CSize cSize;
  457. int nNbBtn;
  458. if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(),
  459. MAKEINTRESOURCE(BitmapID),
  460. IMAGE_BITMAP, 0, 0,
  461. LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
  462. !cBitmap.GetBitmap(&bmBitmap))
  463. {
  464. ASSERT(0);
  465. return NULL;
  466. }
  467. cSize  = CSize(bmBitmap.bmWidth, bmBitmap.bmHeight); 
  468. nNbBtn = cSize.cx/BTN_WDTH;
  469. RGBTRIPLE* rgb = (RGBTRIPLE*)(bmBitmap.bmBits);
  470. COLORREF   rgbMask = RGB(0,0,0);
  471. if (!cImageList.Create(BTN_WDTH, cSize.cy,
  472. ILC_COLOR24|ILC_MASK,
  473. nNbBtn, 0))
  474. {
  475. ASSERT(0);
  476. return NULL;
  477. }
  478. if (cImageList.Add(&cBitmap, rgbMask) == -1)
  479. {
  480. ASSERT(0);
  481. return NULL;
  482. }
  483. pToolBar->SendMessage(TB_SETIMAGELIST, 0, (LPARAM)cImageList.m_hImageList);
  484. cImageList.Detach(); 
  485. cBitmap.Detach();
  486. }
  487. }*/
  488. TOOLBAR_CONTAINER_ELEMENT  tcEl;
  489. tcEl.toolbar = pToolBar;
  490. tcEl.menuID = framesToolbarsCurID++;
  491. tcEl.visible = TRUE;
  492. tcEl.geometry = geometry;
  493. m_geometry_toolbars_container.push_back(tcEl);
  494. return pToolBar;
  495. }
  496. void CMainFrame::CreateSystemToolbar()
  497. {
  498. if (!m_system_toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM
  499. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  500. !m_system_toolbar.LoadToolBar(IDR_SYSTEM_TOOLBAR))
  501. {
  502. TRACE0("Failed to create system toolbarn");
  503. ASSERT(0);
  504. return;   
  505. }
  506. m_system_toolbar.LoadHiColor(MAKEINTRESOURCE(IDB_SYSTEM_TC));
  507. m_system_toolbar.LoadControls();
  508. m_system_toolbar.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
  509. // Dock the toolbar
  510. DockControlBar(&m_system_toolbar);
  511. // Ok
  512. CString  tmpLab;
  513. tmpLab.LoadString(IDS_SYSTEM_TLB_CAPT);
  514. m_system_toolbar.SetWindowText(tmpLab);
  515. TOOLBAR_CONTAINER_ELEMENT  tcEl;
  516. tcEl.toolbar = &m_system_toolbar;
  517. tcEl.menuID = 0;
  518. tcEl.visible = TRUE;
  519. tcEl.geometry = true;
  520. m_geometry_toolbars_container.push_back(tcEl);
  521. }
  522. void CMainFrame::OnSystemPanel()
  523. {
  524. ShowControlBar(&m_system_toolbar, !m_system_toolbar.IsWindowVisible(), FALSE);
  525. }
  526. void CMainFrame::OnUpdateSystemPanel(CCmdUI *pCmdUI)
  527. {
  528. pCmdUI->SetCheck(m_system_toolbar.IsWindowVisible());
  529. }
  530. void CMainFrame::OnScenePanel()
  531. {
  532. m_scene_tree_panel.ToggleVisible();
  533. }
  534. void CMainFrame::OnUpdateScenePanel(CCmdUI *pCmdUI)
  535. {
  536. pCmdUI->SetCheck(!m_scene_tree_panel.IsHidden());
  537. }
  538. void CMainFrame::OnCommandPanel()
  539. {
  540. m_commander_docking.ToggleVisible();
  541. }
  542. void CMainFrame::OnUpdateCommandPanel(CCmdUI *pCmdUI)
  543. {
  544. pCmdUI->SetCheck(!m_commander_docking.IsHidden());
  545. }
  546. void CMainFrame::OnScriptPanel()
  547. {
  548.  m_script_panel.ToggleVisible();
  549. }
  550. void CMainFrame::OnUpdateScriptPanel(CCmdUI *pCmdUI)
  551. {
  552. pCmdUI->SetCheck(!m_script_panel.IsHidden());
  553. }
  554. void CMainFrame::OnSetups()
  555. {
  556. CSetupsDlg dlg;
  557. dlg.DoModal();
  558. }
  559. void CMainFrame::AddToolbarPlugin(CToolbarPlugin* pT)
  560. {
  561. static bool firsttlb = true;
  562. pT->LoadToolbar(this);
  563. pT->m_toolbar.SetWindowText(pT->m_info.menu_string);
  564. size_t sz = m_geometry_toolbars_container.size();
  565. if (sz>0)
  566. {
  567. if (firsttlb)
  568. {
  569. DockControlBarRightOf(&pT->m_toolbar,NULL);
  570. firsttlb = false;
  571. }
  572. else
  573. DockControlBarRightOf(&pT->m_toolbar,m_geometry_toolbars_container[sz-1].toolbar);
  574. }
  575. TOOLBAR_CONTAINER_ELEMENT  tcEl;
  576. tcEl.toolbar = &pT->m_toolbar;
  577. tcEl.menuID = 0;
  578. tcEl.visible = TRUE;
  579. tcEl.geometry = true;
  580. m_geometry_toolbars_container.push_back(tcEl);
  581. }
  582. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  583. {
  584. if (pHandlerInfo == NULL)
  585. {
  586. if ((nID>=START_ID_FOR_FRAMES_TOOLBARS)&&(nID<START_ID_FOR_COMMANDER_CONTEXT_MENU))
  587. {
  588. size_t sz = m_geometry_toolbars_container.size();
  589. for (size_t i = 0; i < sz; i++)
  590. {
  591. if (nID == m_geometry_toolbars_container[i].menuID)
  592. {
  593. if (nCode == CN_COMMAND)
  594. {
  595. ShowControlBar(m_geometry_toolbars_container[i].toolbar, 
  596. !m_geometry_toolbars_container[i].toolbar->IsWindowVisible(), FALSE);
  597. SetFocus();
  598. }
  599. else if (nCode == CN_UPDATE_COMMAND_UI)
  600. {
  601. ((CCmdUI *) pExtra)->Enable(TRUE);
  602. ((CCmdUI*)pExtra)->SetCheck(m_geometry_toolbars_container[i].toolbar->IsWindowVisible());
  603. }
  604. return TRUE;
  605. }
  606. }
  607. }
  608. if ((nID>=START_ID_FOR_PLUGINS_MENU)&&(nID<START_ID_FOR_PLUGINS_TOOLBARS))
  609. {
  610. if (theApp.m_main_pluginer)
  611. {
  612. size_t sz = theApp.m_main_pluginer->m_toolbar_plugins.size();
  613. for (size_t i = 0; i < sz; i++)
  614. {
  615. if (nID == theApp.m_main_pluginer->m_toolbar_plugins[i]->m_nID_Menu)
  616. {
  617. if (nCode == CN_COMMAND)
  618. {
  619. if(theApp.m_main_pluginer->m_toolbar_plugins[i]->m_was_load)
  620. {
  621. ShowControlBar(&theApp.m_main_pluginer->m_toolbar_plugins[i]->m_toolbar, 
  622. !theApp.m_main_pluginer->m_toolbar_plugins[i]->m_toolbar.IsWindowVisible(), FALSE);
  623. SetFocus();
  624. }
  625. }
  626. else if (nCode == CN_UPDATE_COMMAND_UI)
  627. {
  628. if(theApp.m_main_pluginer->m_toolbar_plugins[i]->m_was_load) 
  629. {
  630. ((CCmdUI *) pExtra)->Enable(TRUE);
  631. ((CCmdUI*)pExtra)->SetCheck(theApp.m_main_pluginer->m_toolbar_plugins[i]->m_toolbar.IsWindowVisible());
  632. }
  633. else
  634. {
  635. ((CCmdUI *) pExtra)->Enable(FALSE);
  636. ((CCmdUI*)pExtra)->SetCheck(FALSE);
  637. }
  638. }
  639. return TRUE;
  640. }
  641. }
  642. }
  643. }
  644. }
  645. return CEGMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  646. }
  647. void CMainFrame::OnIdleUpdateCmdUI()
  648. {
  649. int i, sz = m_geometry_toolbars_container.size();
  650. CMDIChildWnd* pChild = MDIGetActive();
  651. bool updateTabs = false;
  652. if (pChild->GetRuntimeClass()!=m_last_active_Child)
  653. {
  654. m_last_active_Child = pChild->GetRuntimeClass();
  655. updateTabs = true;
  656. }
  657. if (!updateTabs)
  658. {
  659. CEGMDIFrameWnd::OnIdleUpdateCmdUI();
  660. return;
  661. }
  662. if (pChild==NULL)
  663. {
  664. ASSERT(0);
  665. CEGMDIFrameWnd::OnIdleUpdateCmdUI();
  666. return;
  667. }
  668. if (pChild->GetRuntimeClass()==RUNTIME_CLASS(CChildFrame))
  669. {
  670. AddPluginMenu();
  671. InsertToolbarsStringsInMenu();
  672. if (updateTabs)
  673. {
  674. POSITION posit = theApp.m_pDocManager->GetFirstDocTemplatePosition();
  675. CDocTemplate* pTemplate = theApp.m_pDocManager->GetNextDocTemplate(posit);
  676. m_wndAppTabManager.ActivateTab(pTemplate);
  677. }
  678.     if (!m_exist_child)
  679. {
  680. for(i=0;i<sz;i++)
  681. {
  682. if (m_geometry_toolbars_container[i].geometry)
  683. ShowControlBar(m_geometry_toolbars_container[i].toolbar, 
  684. m_geometry_toolbars_container[i].visible, FALSE);
  685. else
  686. ShowControlBar(m_geometry_toolbars_container[i].toolbar, 
  687. FALSE, FALSE);
  688. }
  689.     if (m_scene_tree_panel.m_isVisible && m_scene_tree_panel.IsHidden())
  690. m_scene_tree_panel.ToggleVisible();
  691. if (m_commander_docking && m_commander_docking.IsHidden())
  692. m_commander_docking.ToggleVisible();
  693. if (m_script_panel.m_isVisible && m_script_panel.IsHidden())
  694. m_script_panel.ToggleVisible();
  695. m_exist_child = true;
  696. }
  697. else
  698. CEGMDIFrameWnd::OnIdleUpdateCmdUI();
  699. m_first_raz = false;
  700. }
  701. else
  702. {
  703. if (updateTabs)
  704. {
  705. POSITION posit = theApp.m_pDocManager->GetFirstDocTemplatePosition();
  706. CDocTemplate* pTemplate = theApp.m_pDocManager->GetNextDocTemplate(posit);
  707. pTemplate = theApp.m_pDocManager->GetNextDocTemplate(posit);
  708. m_wndAppTabManager.ActivateTab(pTemplate);
  709. }
  710. if (m_exist_child || m_first_raz)
  711. {
  712. for(i=0;i<sz;i++)
  713. {
  714. if (m_geometry_toolbars_container[i].geometry)
  715. {
  716. m_geometry_toolbars_container[i].visible = (m_first_raz)?TRUE:m_geometry_toolbars_container[i].toolbar->IsWindowVisible();
  717. ShowControlBar(m_geometry_toolbars_container[i].toolbar, FALSE, FALSE);
  718. }
  719. else
  720. ShowControlBar(m_geometry_toolbars_container[i].toolbar, 
  721. TRUE, FALSE);
  722. }
  723. if (m_scene_tree_panel.m_isVisible && !m_scene_tree_panel.IsHidden())
  724. m_scene_tree_panel.ToggleVisible();
  725. if (m_commander_docking.m_isVisible && !m_commander_docking.IsHidden())
  726. m_commander_docking.ToggleVisible();
  727. if (m_script_panel.m_isVisible && !m_script_panel.IsHidden())
  728. m_script_panel.ToggleVisible();
  729. if (!m_first_raz)
  730. m_exist_child=false;
  731. }
  732. else
  733. CEGMDIFrameWnd::OnIdleUpdateCmdUI();
  734. }
  735. }
  736. void CMainFrame::GetMessageString(UINT nID, CString& rMessage) const
  737. {
  738. // load appropriate string
  739. if (theApp.m_main_pluginer)
  740. {
  741. size_t sz = theApp.m_main_pluginer->m_toolbar_plugins.size();
  742. for (size_t i = 0; i < sz; i++)
  743. {
  744. if ((nID>=theApp.m_main_pluginer->m_toolbar_plugins[i]->m_start_ID)&&
  745. (nID<=theApp.m_main_pluginer->m_toolbar_plugins[i]->m_end_ID))
  746. {
  747. rMessage = theApp.m_main_pluginer->m_toolbar_plugins[i]->GetStatusBarMessage(nID);
  748. return;
  749. }
  750. }
  751. }
  752. CEGMDIFrameWnd::GetMessageString(nID, rMessage);
  753. }
  754. BOOL CMainFrame::GetToolText( UINT nID, CString& strTipText )
  755. {
  756. if (theApp.m_main_pluginer)
  757. {
  758. size_t sz = theApp.m_main_pluginer->m_toolbar_plugins.size();
  759. for (size_t i = 0; i < sz; i++)
  760. {
  761. if ((nID>=theApp.m_main_pluginer->m_toolbar_plugins[i]->m_start_ID)&&
  762. (nID<=theApp.m_main_pluginer->m_toolbar_plugins[i]->m_end_ID))
  763. {
  764. strTipText = theApp.m_main_pluginer->m_toolbar_plugins[i]->GetTooltipMessage(nID);
  765. return TRUE;
  766. }
  767. }
  768. }
  769. return FALSE;
  770. }
  771. #define _countof(array) (sizeof(array)/sizeof(array[0]))
  772. BOOL CMainFrame::OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT*pResult)
  773. {
  774. ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
  775. TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
  776. TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
  777. CString strTipText;
  778. if ( GetToolText( pNMHDR->idFrom, strTipText ) )
  779. {
  780. #ifndef _UNICODE
  781. if (pNMHDR->code == TTN_NEEDTEXTA)
  782. lstrcpyn(pTTTA->szText, strTipText, _countof(pTTTA->szText));
  783. else
  784. _mbstowcsz(pTTTW->szText, strTipText, _countof(pTTTW->szText));
  785. #else
  786. if (pNMHDR->code == TTN_NEEDTEXTA)
  787. _wcstombsz(pTTTA->szText, strTipText, _countof(pTTTA->szText));
  788. else
  789. lstrcpyn(pTTTW->szText, strTipText, _countof(pTTTW->szText));
  790. #endif
  791. return TRUE;
  792. }
  793. return CEGMDIFrameWnd::OnToolTipText( nID, pNMHDR, pResult );
  794. }
  795. BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
  796. {
  797. if (m_wndMenuBar.TranslateFrameMessage(pMsg))
  798. return TRUE;
  799. return CEGMDIFrameWnd::PreTranslateMessage(pMsg);
  800. }