ada86f3b8d148f536b64b0105bcc6823e1d707ea
[matches/honours.git] / research / transmission_spectroscopy / TOF / Win32++ / samples / DockTabbedMDI / src / Mainfrm.cpp
1 ////////////////////////////////////////////////////\r
2 // Mainfrm.cpp\r
3 \r
4 #include "stdafx.h"\r
5 #include "TabbedMDIApp.h"\r
6 #include "mainfrm.h"\r
7 #include "resource.h"\r
8 \r
9 \r
10 // Definitions for the CMainFrame class\r
11 CMainFrame::CMainFrame() : m_pLastActiveDocker(0)\r
12 {\r
13         // Constructor for CMainFrame. Its called after CFrame's constructor\r
14 \r
15         //Set m_DockTabbedMDI as the view window of the frame\r
16         SetView(m_DockTabbedMDI);\r
17 \r
18         // Set the registry key name, and load the initial window position\r
19         // Use a registry key name like "CompanyName\\Application"\r
20         LoadRegistrySettings(_T("Win32++\\TabbedMDI Docking"));\r
21 }\r
22 \r
23 CMainFrame::~CMainFrame()\r
24 {\r
25         // Destructor for CMainFrame.\r
26 }\r
27 \r
28 void CMainFrame::OnFileNew()\r
29 {\r
30         // Creates the popup menu when the "New" toolbar button is pressed\r
31 \r
32         // Position the popup menu\r
33         CToolBar& TB = GetToolBar();\r
34         RECT rc = TB.GetItemRect(TB.CommandToIndex(IDM_FILE_NEW));\r
35         GetToolBar().ClientToScreen(rc);\r
36 \r
37         TPMPARAMS tpm;\r
38         tpm.cbSize = sizeof(TPMPARAMS);\r
39         tpm.rcExclude = rc;\r
40 \r
41         // Load the popup menu\r
42         HMENU hTopMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDM_NEWMENU));\r
43         HMENU hPopupMenu = ::GetSubMenu(hTopMenu, 0);\r
44 \r
45         // Start the popup menu\r
46         ::TrackPopupMenuEx(hPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, rc.left, rc.bottom, m_hWnd, &tpm);\r
47 \r
48         // Release the menu resource\r
49         ::DestroyMenu(hTopMenu);\r
50 }\r
51 \r
52 void CMainFrame::OnContainerTabsAtTop()\r
53 // Reposition the tabs in the containers\r
54 {\r
55         BOOL bTop = FALSE;\r
56         std::vector<DockPtr>::iterator iter;\r
57 \r
58         // Set the Tab position for each container\r
59         for (iter = m_DockTabbedMDI.GetAllDockers().begin(); iter < m_DockTabbedMDI.GetAllDockers().end(); ++iter)\r
60         {\r
61                 CDockContainer* pContainer = (*iter)->GetContainer();\r
62                 if (pContainer)\r
63                 {\r
64                         bTop = pContainer->GetTabsAtTop();\r
65                         pContainer->SetTabsAtTop(!bTop);\r
66                 }\r
67         }\r
68 \r
69         // Set the menu checkmark\r
70         UINT uCheck = (bTop)? MF_UNCHECKED : MF_CHECKED;\r
71         ::CheckMenuItem(GetFrameMenu(), IDM_CONTAINER_TOP, uCheck);\r
72 }\r
73 \r
74 void CMainFrame::OnMDITabsAtTop()\r
75 // Reposition TabbedMDI's tabs\r
76 {\r
77         CTabbedMDI* pTabbedMDI = m_DockTabbedMDI.GetTabbedMDI();\r
78 \r
79         BOOL bTop = pTabbedMDI->GetTab().GetTabsAtTop();\r
80         pTabbedMDI->GetTab().SetTabsAtTop(!bTop);\r
81 \r
82         // Set the menu checkmark\r
83         UINT uCheck = (bTop)? MF_UNCHECKED : MF_CHECKED;\r
84         ::CheckMenuItem(GetFrameMenu(), IDM_TABBEDMDI_TOP, uCheck);\r
85 }\r
86 \r
87 void CMainFrame::LoadDefaultDockers()\r
88 {\r
89         // Note: The  DockIDs are used for saving/restoring the dockers state in the registry\r
90 \r
91         DWORD dwStyle = DS_CLIENTEDGE; // The style added to each docker\r
92 \r
93         // Add the parent dockers\r
94         CDocker* pDockRight  = m_DockTabbedMDI.AddDockedChild(new CDockClasses, DS_DOCKED_RIGHT | dwStyle, 200, ID_DOCK_CLASSES1);\r
95         CDocker* pDockBottom = m_DockTabbedMDI.AddDockedChild(new CDockText, DS_DOCKED_BOTTOM | dwStyle, 100, ID_DOCK_TEXT1);\r
96 \r
97         // Add the remaining dockers\r
98         pDockRight->AddDockedChild(new CDockFiles, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_FILES1);\r
99         pDockRight->AddDockedChild(new CDockClasses, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_CLASSES2);\r
100         pDockRight->AddDockedChild(new CDockFiles, DS_DOCKED_CONTAINER | dwStyle, 200, ID_DOCK_FILES2);\r
101 \r
102         pDockBottom->AddDockedChild(new CDockOutput, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_OUTPUT1);\r
103         pDockBottom->AddDockedChild(new CDockText, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_TEXT2);\r
104         pDockBottom->AddDockedChild(new CDockOutput, DS_DOCKED_CONTAINER | dwStyle, 100, ID_DOCK_OUTPUT2);\r
105 }\r
106 \r
107 void CMainFrame::LoadDefaultMDIs()\r
108 {\r
109         // Add some MDI tabs\r
110         CTabbedMDI* pTabbedMDI = (CTabbedMDI*)m_DockTabbedMDI.GetView();\r
111         pTabbedMDI->AddMDIChild(new CViewSimple, _T("Simple View"), ID_MDI_SIMPLE);\r
112         pTabbedMDI->AddMDIChild(new CViewRect, _T("Rectangles"), ID_MDI_RECT);\r
113         pTabbedMDI->AddMDIChild(new CViewText, _T("TextView"), ID_MDI_TEXT);\r
114         pTabbedMDI->AddMDIChild(new CViewClasses, _T("Classes"), ID_MDI_CLASSES);\r
115         pTabbedMDI->AddMDIChild(new CViewFiles, _T("Files"), ID_MDI_FILES);\r
116 \r
117         if (pTabbedMDI->IsWindow())\r
118                 pTabbedMDI->SetActiveMDITab(0);\r
119 }\r
120 \r
121 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)\r
122 {\r
123         CTabbedMDI* pTabbedMDI = (CTabbedMDI*)m_DockTabbedMDI.GetView();\r
124 \r
125         // OnCommand responds to menu and and toolbar input\r
126         switch(LOWORD(wParam))\r
127         {\r
128         case IDM_FILE_NEW:\r
129                 OnFileNew();\r
130                 return TRUE;\r
131         case IDM_FILE_NEWSIMPLE:\r
132                 pTabbedMDI->AddMDIChild(new CViewSimple, _T("Simple"), ID_MDI_SIMPLE);\r
133                 return TRUE;\r
134         case IDM_FILE_NEWRECT:\r
135                 pTabbedMDI->AddMDIChild(new CViewRect, _T("Rectangles"), ID_MDI_RECT);\r
136                 return TRUE;\r
137         case IDM_FILE_NEWTEXT:\r
138                 pTabbedMDI->AddMDIChild(new CViewText, _T("TextView"), ID_MDI_TEXT);\r
139                 return TRUE;\r
140         case IDM_FILE_NEWTREE:\r
141                 pTabbedMDI->AddMDIChild(new CViewClasses, _T("TreeView"), ID_MDI_CLASSES);\r
142                 return TRUE;\r
143         case IDM_FILE_NEWLIST:\r
144                 pTabbedMDI->AddMDIChild(new CViewFiles, _T("ListView"), ID_MDI_FILES);\r
145                 return TRUE;\r
146         case IDM_FILE_EXIT:\r
147                 // End the application\r
148                 ::PostQuitMessage(0);\r
149                 return TRUE;\r
150         case IDM_CONTAINER_TOP:\r
151                 OnContainerTabsAtTop();\r
152                 return TRUE;\r
153         case IDM_TABBEDMDI_TOP:\r
154                 OnMDITabsAtTop();\r
155                 return TRUE;\r
156         case IDM_LAYOUT_DEFAULT:\r
157                 SetRedraw(FALSE);\r
158 \r
159                 m_DockTabbedMDI.CloseAllDockers();\r
160                 m_DockTabbedMDI.GetTabbedMDI()->CloseAllMDIChildren();\r
161                 LoadDefaultDockers();\r
162                 LoadDefaultMDIs();\r
163 \r
164                 SetRedraw(TRUE);\r
165                 RedrawWindow(0, 0, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ALLCHILDREN);\r
166 \r
167                 return TRUE;\r
168         case IDM_LAYOUT_CLOSE_DOCKERS:\r
169                 m_DockTabbedMDI.CloseAllDockers();\r
170                 return TRUE;\r
171         case IDM_LAYOUT_CLOSE_MDIS:\r
172                 m_DockTabbedMDI.GetTabbedMDI()->CloseAllMDIChildren();\r
173                 return TRUE;\r
174         case IDW_VIEW_STATUSBAR:\r
175                 OnViewStatusBar();\r
176                 return TRUE;\r
177         case IDW_VIEW_TOOLBAR:\r
178                 OnViewToolBar();\r
179                 return TRUE;\r
180         case IDM_HELP_ABOUT:\r
181                 // Display the help dialog\r
182                 OnHelp();\r
183                 return TRUE;\r
184 \r
185         default:\r
186                 // Pass the command on to the view window of the last active docker\r
187                 {\r
188                         if (m_pLastActiveDocker == &m_DockTabbedMDI)\r
189                                 m_DockTabbedMDI.GetTabbedMDI()->GetActiveMDIChild()->SendMessage(WM_COMMAND, wParam, lParam);\r
190                         else if (m_pLastActiveDocker->IsDocked())\r
191                                 m_pLastActiveDocker->GetContainer()->GetActiveView()->SendMessage(WM_COMMAND, wParam, lParam);\r
192                 }\r
193         }\r
194 \r
195         return FALSE;\r
196 }\r
197 \r
198 void CMainFrame::OnCreate()\r
199 {\r
200         // OnCreate controls the way the frame is created.\r
201         // Overriding CFrame::Oncreate is optional.\r
202         // The default for the following variables is TRUE\r
203 \r
204         // m_bShowIndicatorStatus = FALSE;      // Don't show statusbar indicators\r
205         // m_bShowMenuStatus = FALSE;           // Don't show toolbar or menu status\r
206         // m_bUseReBar = FALSE;                         // Don't use rebars\r
207         // m_bUseThemes = FALSE;            // Don't use themes\r
208         // m_bUseToolBar = FALSE;                       // Don't use a toolbar\r
209 \r
210         // call the base class function\r
211         CFrame::OnCreate();\r
212 }\r
213 \r
214 void CMainFrame::OnInitialUpdate()\r
215 {\r
216         m_DockTabbedMDI.SetDockStyle(DS_CLIENTEDGE|DS_FIXED_RESIZE);\r
217 \r
218         // Load dock settings\r
219         if (!m_DockTabbedMDI.LoadRegistrySettings(GetRegistryKeyName()))\r
220                 LoadDefaultDockers();\r
221 \r
222         // Load MDI child settings\r
223         if (!m_DockTabbedMDI.GetTabbedMDI()->LoadRegistrySettings(GetRegistryKeyName()))\r
224                 LoadDefaultMDIs();\r
225 \r
226         // PreCreate initially set the window as invisible, so show it now.\r
227         ShowWindow();\r
228 }\r
229 \r
230 void CMainFrame::OnMenuUpdate(UINT nID)\r
231 // Called when menu items are about to be displayed\r
232 {\r
233         // Only for the Menu IDs we wish to modify\r
234         if (nID >= IDM_EDIT_UNDO && nID <= IDM_EDIT_DELETE)\r
235         {\r
236                 CWnd* pWnd = 0;\r
237                 CMenu Menu;\r
238                 Menu.Attach(GetFrameMenu());\r
239                 CMenu* pEditMenu = Menu.GetSubMenu(1);\r
240 \r
241                 if (m_pLastActiveDocker)\r
242                 {\r
243                         if (m_pLastActiveDocker == &m_DockTabbedMDI)\r
244                                 pWnd = m_DockTabbedMDI.GetTabbedMDI()->GetActiveMDIChild();\r
245                         else if (m_pLastActiveDocker->IsDocked())\r
246                                 pWnd = m_pLastActiveDocker->GetContainer()->GetActiveView();\r
247                 }\r
248 \r
249                 // Enable the Edit menu items for CViewText windows, disable them otherwise\r
250                 UINT Flags = (dynamic_cast<CViewText*>(pWnd))? MF_ENABLED : MF_GRAYED;\r
251                 pEditMenu->EnableMenuItem(nID, MF_BYCOMMAND | Flags);\r
252                 Menu.Detach();\r
253         }\r
254 }\r
255 \r
256 void CMainFrame::PreCreate(CREATESTRUCT &cs)\r
257 {\r
258         // Call the base class function first\r
259         CFrame::PreCreate(cs);\r
260 \r
261         // Hide the window initially by removing the WS_VISIBLE style\r
262         cs.style &= ~WS_VISIBLE;\r
263 }\r
264 \r
265 BOOL CMainFrame::SaveRegistrySettings()\r
266 {\r
267         CFrame::SaveRegistrySettings();\r
268 \r
269         // Save the docker settings\r
270         m_DockTabbedMDI.SaveRegistrySettings(GetRegistryKeyName());\r
271 \r
272         // Save the tabbedMDI settings\r
273         m_DockTabbedMDI.GetTabbedMDI()->SaveRegistrySettings(GetRegistryKeyName());\r
274 \r
275         return TRUE;\r
276 }\r
277 \r
278 void CMainFrame::SetupToolBar()\r
279 {\r
280         // Set the Resource IDs for the toolbar buttons\r
281         AddToolBarButton( IDM_FILE_NEW   );\r
282         AddToolBarButton( IDM_FILE_OPEN,  FALSE );\r
283         AddToolBarButton( IDM_FILE_SAVE,  FALSE );\r
284 \r
285         AddToolBarButton( 0 );  // Separator\r
286         AddToolBarButton( IDM_EDIT_CUT,   FALSE );\r
287         AddToolBarButton( IDM_EDIT_COPY,  FALSE );\r
288         AddToolBarButton( IDM_EDIT_PASTE, FALSE );\r
289 \r
290         AddToolBarButton( 0 );  // Separator\r
291         AddToolBarButton( IDM_FILE_PRINT, FALSE );\r
292 \r
293         AddToolBarButton( 0 );  // Separator\r
294         AddToolBarButton( IDM_HELP_ABOUT );\r
295 \r
296         // Remove the checkmark for container tabs at top\r
297         ::CheckMenuItem(GetFrameMenu(), IDM_CONTAINER_TOP, MF_UNCHECKED);\r
298 \r
299         // Add some extra icons for menu items\r
300         AddMenuIcon(IDM_FILE_NEWSIMPLE, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_SIMPLE), IMAGE_ICON, 0, 0, LR_SHARED));\r
301         AddMenuIcon(IDM_FILE_NEWRECT, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_RECT), IMAGE_ICON, 0, 0, LR_SHARED));\r
302         AddMenuIcon(IDM_FILE_NEWTEXT, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_TEXT), IMAGE_ICON, 0, 0, LR_SHARED));\r
303         AddMenuIcon(IDM_FILE_NEWLIST, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_FILEVIEW), IMAGE_ICON, 0, 0, LR_SHARED));\r
304         AddMenuIcon(IDM_FILE_NEWTREE, (HICON)LoadImage(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(IDI_CLASSVIEW), IMAGE_ICON, 0, 0, LR_SHARED));\r
305 }\r
306 \r
307  LRESULT CMainFrame::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
308 {\r
309         switch (uMsg)\r
310         {\r
311         case WM_MOUSEACTIVATE:\r
312                 // Store the active docker before processing the menu events\r
313                 m_pLastActiveDocker = m_DockTabbedMDI.GetActiveDocker();\r
314                 break;\r
315         }\r
316 \r
317         // Always pass unhandled messages on to WndProcDefault\r
318         return WndProcDefault(uMsg, wParam, lParam);\r
319 }\r

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