Commit before breaking everything
[matches/honours.git] / research / transmission_spectroscopy / TOF / Win32++ / samples / DockTabbedMDI / src / Mainfrm.cpp
diff --git a/research/transmission_spectroscopy/TOF/Win32++/samples/DockTabbedMDI/src/Mainfrm.cpp b/research/transmission_spectroscopy/TOF/Win32++/samples/DockTabbedMDI/src/Mainfrm.cpp
new file mode 100644 (file)
index 0000000..ada86f3
--- /dev/null
@@ -0,0 +1,319 @@
+////////////////////////////////////////////////////\r
+// Mainfrm.cpp\r
+\r
+#include "stdafx.h"\r
+#include "TabbedMDIApp.h"\r
+#include "mainfrm.h"\r
+#include "resource.h"\r
+\r
+\r
+// Definitions for the CMainFrame class\r
+CMainFrame::CMainFrame() : m_pLastActiveDocker(0)\r
+{\r
+       // Constructor for CMainFrame. Its called after CFrame's constructor\r
+\r
+       //Set m_DockTabbedMDI as the view window of the frame\r
+       SetView(m_DockTabbedMDI);\r
+\r
+       // Set the registry key name, and load the initial window position\r
+       // Use a registry key name like "CompanyName\\Application"\r
+       LoadRegistrySettings(_T("Win32++\\TabbedMDI Docking"));\r
+}\r
+\r
+CMainFrame::~CMainFrame()\r
+{\r
+       // Destructor for CMainFrame.\r
+}\r
+\r
+void CMainFrame::OnFileNew()\r
+{\r
+       // Creates the popup menu when the "New" toolbar button is pressed\r
+\r
+       // Position the popup menu\r
+       CToolBar& TB = GetToolBar();\r
+       RECT rc = TB.GetItemRect(TB.CommandToIndex(IDM_FILE_NEW));\r
+       GetToolBar().ClientToScreen(rc);\r
+\r
+       TPMPARAMS tpm;\r
+       tpm.cbSize = sizeof(TPMPARAMS);\r
+       tpm.rcExclude = rc;\r
+\r
+       // Load the popup menu\r
+       HMENU hTopMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDM_NEWMENU));\r
+       HMENU hPopupMenu = ::GetSubMenu(hTopMenu, 0);\r
+\r
+       // Start the popup menu\r
+       ::TrackPopupMenuEx(hPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, m_hWnd, &tpm);\r
+\r
+       // Release the menu resource\r
+       ::DestroyMenu(hTopMenu);\r
+}\r
+\r
+void CMainFrame::OnContainerTabsAtTop()\r
+// Reposition the tabs in the containers\r
+{\r
+       BOOL bTop = FALSE;\r
+       std::vector<DockPtr>::iterator iter;\r
+\r
+       // Set the Tab position for each container\r
+       for (iter = m_DockTabbedMDI.GetAllDockers().begin(); iter < m_DockTabbedMDI.GetAllDockers().end(); ++iter)\r
+       {\r
+               CDockContainer* pContainer = (*iter)->GetContainer();\r
+               if (pContainer)\r
+               {\r
+                       bTop = pContainer->GetTabsAtTop();\r
+                       pContainer->SetTabsAtTop(!bTop);\r
+               }\r
+       }\r
+\r
+       // Set the menu checkmark\r
+       UINT uCheck = (bTop)? MF_UNCHECKED : MF_CHECKED;\r
+       ::CheckMenuItem(GetFrameMenu(), IDM_CONTAINER_TOP, uCheck);\r
+}\r
+\r
+void CMainFrame::OnMDITabsAtTop()\r
+// Reposition TabbedMDI's tabs\r
+{\r
+       CTabbedMDI* pTabbedMDI = m_DockTabbedMDI.GetTabbedMDI();\r
+\r
+       BOOL bTop = pTabbedMDI->GetTab().GetTabsAtTop();\r
+       pTabbedMDI->GetTab().SetTabsAtTop(!bTop);\r
+\r
+       // Set the menu checkmark\r
+       UINT uCheck = (bTop)? MF_UNCHECKED : MF_CHECKED;\r
+       ::CheckMenuItem(GetFrameMenu(), IDM_TABBEDMDI_TOP, uCheck);\r
+}\r
+\r
+void CMainFrame::LoadDefaultDockers()\r
+{\r
+       // Note: The  DockIDs are used for saving/restoring the dockers state in the registry\r
+\r
+       DWORD dwStyle = DS_CLIENTEDGE; // The style added to each docker\r
+\r
+       // Add the parent dockers\r
+       CDocker* pDockRight  = m_DockTabbedMDI.AddDockedChild(new CDockClasses, DS_DOCKED_RIGHT | dwStyle, 200, ID_DOCK_CLASSES1);\r
+       CDocker* pDockBottom = m_DockTabbedMDI.AddDockedChild(new CDockText, DS_DOCKED_BOTTOM | dwStyle, 100, ID_DOCK_TEXT1);\r
+\r
+       // Add the remaining dockers\r
+       pDockRight->AddDockedChild(new CDockFiles, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_FILES1);\r
+       pDockRight->AddDockedChild(new CDockClasses, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_CLASSES2);\r
+       pDockRight->AddDockedChild(new CDockFiles, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_FILES2);\r
+\r
+       pDockBottom->AddDockedChild(new CDockOutput, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_OUTPUT1);\r
+       pDockBottom->AddDockedChild(new CDockText, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_TEXT2);\r
+       pDockBottom->AddDockedChild(new CDockOutput, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_OUTPUT2);\r
+}\r
+\r
+void CMainFrame::LoadDefaultMDIs()\r
+{\r
+       // Add some MDI tabs\r
+       CTabbedMDI* pTabbedMDI = (CTabbedMDI*)m_DockTabbedMDI.GetView();\r
+       pTabbedMDI->AddMDIChild(new CViewSimple, _T("Simple View"), ID_MDI_SIMPLE);\r
+       pTabbedMDI->AddMDIChild(new CViewRect, _T("Rectangles"), ID_MDI_RECT);\r
+       pTabbedMDI->AddMDIChild(new CViewText, _T("TextView"), ID_MDI_TEXT);\r
+       pTabbedMDI->AddMDIChild(new CViewClasses, _T("Classes"), ID_MDI_CLASSES);\r
+       pTabbedMDI->AddMDIChild(new CViewFiles, _T("Files"), ID_MDI_FILES);\r
+\r
+       if (pTabbedMDI->IsWindow())\r
+               pTabbedMDI->SetActiveMDITab(0);\r
+}\r
+\r
+BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
+{\r
+       CTabbedMDI* pTabbedMDI = (CTabbedMDI*)m_DockTabbedMDI.GetView();\r
+\r
+       // OnCommand responds to menu and and toolbar input\r
+       switch(LOWORD(wParam))\r
+       {\r
+       case IDM_FILE_NEW:\r
+               OnFileNew();\r
+               return TRUE;\r
+       case IDM_FILE_NEWSIMPLE:\r
+               pTabbedMDI->AddMDIChild(new CViewSimple, _T("Simple"), ID_MDI_SIMPLE);\r
+               return TRUE;\r
+       case IDM_FILE_NEWRECT:\r
+               pTabbedMDI->AddMDIChild(new CViewRect, _T("Rectangles"), ID_MDI_RECT);\r
+               return TRUE;\r
+       case IDM_FILE_NEWTEXT:\r
+               pTabbedMDI->AddMDIChild(new CViewText, _T("TextView"), ID_MDI_TEXT);\r
+               return TRUE;\r
+       case IDM_FILE_NEWTREE:\r
+               pTabbedMDI->AddMDIChild(new CViewClasses, _T("TreeView"), ID_MDI_CLASSES);\r
+               return TRUE;\r
+       case IDM_FILE_NEWLIST:\r
+               pTabbedMDI->AddMDIChild(new CViewFiles, _T("ListView"), ID_MDI_FILES);\r
+               return TRUE;\r
+       case IDM_FILE_EXIT:\r
+               // End the application\r
+               ::PostQuitMessage(0);\r
+               return TRUE;\r
+       case IDM_CONTAINER_TOP:\r
+               OnContainerTabsAtTop();\r
+               return TRUE;\r
+       case IDM_TABBEDMDI_TOP:\r
+               OnMDITabsAtTop();\r
+               return TRUE;\r
+       case IDM_LAYOUT_DEFAULT:\r
+               SetRedraw(FALSE);\r
+\r
+               m_DockTabbedMDI.CloseAllDockers();\r
+               m_DockTabbedMDI.GetTabbedMDI()->CloseAllMDIChildren();\r
+               LoadDefaultDockers();\r
+               LoadDefaultMDIs();\r
+\r
+               SetRedraw(TRUE);\r
+               RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);\r
+\r
+               return TRUE;\r
+       case IDM_LAYOUT_CLOSE_DOCKERS:\r
+               m_DockTabbedMDI.CloseAllDockers();\r
+               return TRUE;\r
+       case IDM_LAYOUT_CLOSE_MDIS:\r
+               m_DockTabbedMDI.GetTabbedMDI()->CloseAllMDIChildren();\r
+               return TRUE;\r
+       case IDW_VIEW_STATUSBAR:\r
+               OnViewStatusBar();\r
+               return TRUE;\r
+       case IDW_VIEW_TOOLBAR:\r
+               OnViewToolBar();\r
+               return TRUE;\r
+       case IDM_HELP_ABOUT:\r
+               // Display the help dialog\r
+               OnHelp();\r
+               return TRUE;\r
+\r
+       default:\r
+               // Pass the command on to the view window of the last active docker\r
+               {\r
+                       if (m_pLastActiveDocker == &m_DockTabbedMDI)\r
+                               m_DockTabbedMDI.GetTabbedMDI()->GetActiveMDIChild()->SendMessage(WM_COMMAND, wParam, lParam);\r
+                       else if (m_pLastActiveDocker->IsDocked())\r
+                               m_pLastActiveDocker->GetContainer()->GetActiveView()->SendMessage(WM_COMMAND, wParam, lParam);\r
+               }\r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+void CMainFrame::OnCreate()\r
+{\r
+       // OnCreate controls the way the frame is created.\r
+       // Overriding CFrame::Oncreate is optional.\r
+       // The default for the following variables is TRUE\r
+\r
+       // m_bShowIndicatorStatus = FALSE;      // Don't show statusbar indicators\r
+       // m_bShowMenuStatus = FALSE;           // Don't show toolbar or menu status\r
+       // m_bUseReBar = FALSE;                         // Don't use rebars\r
+       // m_bUseThemes = FALSE;            // Don't use themes\r
+       // m_bUseToolBar = FALSE;                       // Don't use a toolbar\r
+\r
+       // call the base class function\r
+       CFrame::OnCreate();\r
+}\r
+\r
+void CMainFrame::OnInitialUpdate()\r
+{\r
+       m_DockTabbedMDI.SetDockStyle(DS_CLIENTEDGE|DS_FIXED_RESIZE);\r
+\r
+       // Load dock settings\r
+       if (!m_DockTabbedMDI.LoadRegistrySettings(GetRegistryKeyName()))\r
+               LoadDefaultDockers();\r
+\r
+       // Load MDI child settings\r
+       if (!m_DockTabbedMDI.GetTabbedMDI()->LoadRegistrySettings(GetRegistryKeyName()))\r
+               LoadDefaultMDIs();\r
+\r
+       // PreCreate initially set the window as invisible, so show it now.\r
+       ShowWindow();\r
+}\r
+\r
+void CMainFrame::OnMenuUpdate(UINT nID)\r
+// Called when menu items are about to be displayed\r
+{\r
+       // Only for the Menu IDs we wish to modify\r
+       if (nID >= IDM_EDIT_UNDO && nID <= IDM_EDIT_DELETE)\r
+       {\r
+               CWnd* pWnd = 0;\r
+               CMenu Menu;\r
+               Menu.Attach(GetFrameMenu());\r
+               CMenu* pEditMenu = Menu.GetSubMenu(1);\r
+\r
+               if (m_pLastActiveDocker)\r
+               {\r
+                       if (m_pLastActiveDocker == &m_DockTabbedMDI)\r
+                               pWnd = m_DockTabbedMDI.GetTabbedMDI()->GetActiveMDIChild();\r
+                       else if (m_pLastActiveDocker->IsDocked())\r
+                               pWnd = m_pLastActiveDocker->GetContainer()->GetActiveView();\r
+               }\r
+\r
+               // Enable the Edit menu items for CViewText windows, disable them otherwise\r
+               UINT Flags = (dynamic_cast<CViewText*>(pWnd))? MF_ENABLED : MF_GRAYED;\r
+               pEditMenu->EnableMenuItem(nID, MF_BYCOMMAND | Flags);\r
+               Menu.Detach();\r
+       }\r
+}\r
+\r
+void CMainFrame::PreCreate(CREATESTRUCT &cs)\r
+{\r
+       // Call the base class function first\r
+       CFrame::PreCreate(cs);\r
+\r
+       // Hide the window initially by removing the WS_VISIBLE style\r
+       cs.style &= ~WS_VISIBLE;\r
+}\r
+\r
+BOOL CMainFrame::SaveRegistrySettings()\r
+{\r
+       CFrame::SaveRegistrySettings();\r
+\r
+       // Save the docker settings\r
+       m_DockTabbedMDI.SaveRegistrySettings(GetRegistryKeyName());\r
+\r
+       // Save the tabbedMDI settings\r
+       m_DockTabbedMDI.GetTabbedMDI()->SaveRegistrySettings(GetRegistryKeyName());\r
+\r
+       return TRUE;\r
+}\r
+\r
+void CMainFrame::SetupToolBar()\r
+{\r
+       // Set the Resource IDs for the toolbar buttons\r
+       AddToolBarButton( IDM_FILE_NEW   );\r
+       AddToolBarButton( IDM_FILE_OPEN,  FALSE );\r
+       AddToolBarButton( IDM_FILE_SAVE,  FALSE );\r
+\r
+       AddToolBarButton( 0 );  // Separator\r
+       AddToolBarButton( IDM_EDIT_CUT,   FALSE );\r
+       AddToolBarButton( IDM_EDIT_COPY,  FALSE );\r
+       AddToolBarButton( IDM_EDIT_PASTE, FALSE );\r
+\r
+       AddToolBarButton( 0 );  // Separator\r
+       AddToolBarButton( IDM_FILE_PRINT, FALSE );\r
+\r
+       AddToolBarButton( 0 );  // Separator\r
+       AddToolBarButton( IDM_HELP_ABOUT );\r
+\r
+       // Remove the checkmark for container tabs at top\r
+       ::CheckMenuItem(GetFrameMenu(), IDM_CONTAINER_TOP, MF_UNCHECKED);\r
+\r
+       // Add some extra icons for menu items\r
+       AddMenuIcon(IDM_FILE_NEWSIMPLE, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_SIMPLE), IMAGE_ICON, 0, 0, LR_SHARED));\r
+       AddMenuIcon(IDM_FILE_NEWRECT, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_RECT), IMAGE_ICON, 0, 0, LR_SHARED));\r
+       AddMenuIcon(IDM_FILE_NEWTEXT, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_TEXT), IMAGE_ICON, 0, 0, LR_SHARED));\r
+       AddMenuIcon(IDM_FILE_NEWLIST, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_FILEVIEW), IMAGE_ICON, 0, 0, LR_SHARED));\r
+       AddMenuIcon(IDM_FILE_NEWTREE, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_CLASSVIEW), IMAGE_ICON, 0, 0, LR_SHARED));\r
+}\r
+\r
+ LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
+{\r
+       switch (uMsg)\r
+       {\r
+       case WM_MOUSEACTIVATE:\r
+               // Store the active docker before processing the menu events\r
+               m_pLastActiveDocker = m_DockTabbedMDI.GetActiveDocker();\r
+               break;\r
+       }\r
+\r
+       // Always pass unhandled messages on to WndProcDefault\r
+       return WndProcDefault(uMsg, wParam, lParam);\r
+}\r

UCC git Repository :: git.ucc.asn.au