2 // MainFrm.cpp : implementation of the CMainFrame class
\r
6 #include "TortoiseGitBlame.h"
\r
11 #define new DEBUG_NEW
\r
16 IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
\r
18 const int iMaxUserToolbars = 10;
\r
19 const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
\r
20 const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
\r
22 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
\r
24 // Global help commands
\r
25 ON_COMMAND(ID_HELP_FINDER, &CFrameWndEx::OnHelpFinder)
\r
26 ON_COMMAND(ID_HELP, &CFrameWndEx::OnHelp)
\r
27 ON_COMMAND(ID_CONTEXT_HELP, &CFrameWndEx::OnContextHelp)
\r
28 ON_COMMAND(ID_DEFAULT_HELP, &CFrameWndEx::OnHelpFinder)
\r
29 ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
\r
30 ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
\r
31 ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
\r
32 ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
\r
35 static UINT indicators[] =
\r
37 ID_SEPARATOR, // status line indicator
\r
43 // CMainFrame construction/destruction
\r
45 CMainFrame::CMainFrame()
\r
47 // TODO: add member initialization code here
\r
48 theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2005);
\r
51 CMainFrame::~CMainFrame()
\r
55 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
\r
57 if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
\r
61 // set the visual manager and style based on persisted value
\r
62 OnApplicationLook(theApp.m_nAppLook);
\r
64 if (!m_wndMenuBar.Create(this))
\r
66 TRACE0("Failed to create menubar\n");
\r
67 return -1; // fail to create
\r
70 m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
\r
72 // prevent the menu bar from taking the focus on activation
\r
73 CMFCPopupMenu::SetForceMenuFocus(FALSE);
\r
75 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
\r
76 !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
\r
78 TRACE0("Failed to create toolbar\n");
\r
79 return -1; // fail to create
\r
82 CString strToolBarName;
\r
83 bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
\r
85 m_wndToolBar.SetWindowText(strToolBarName);
\r
87 CString strCustomize;
\r
88 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
\r
90 m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
\r
92 // Allow user-defined toolbars operations:
\r
93 InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);
\r
95 if (!m_wndStatusBar.Create(this))
\r
97 TRACE0("Failed to create status bar\n");
\r
98 return -1; // fail to create
\r
100 m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
\r
102 // TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable
\r
103 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
\r
104 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
\r
105 EnableDocking(CBRS_ALIGN_ANY);
\r
106 DockPane(&m_wndMenuBar);
\r
107 DockPane(&m_wndToolBar);
\r
110 // enable Visual Studio 2005 style docking window behavior
\r
111 CDockingManager::SetDockingMode(DT_SMART);
\r
112 // enable Visual Studio 2005 style docking window auto-hide behavior
\r
113 EnableAutoHidePanes(CBRS_ALIGN_ANY);
\r
115 // create docking windows
\r
116 if (!CreateDockingWindows())
\r
118 TRACE0("Failed to create docking windows\n");
\r
122 m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
\r
123 DockPane(&m_wndOutput);
\r
124 m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
\r
125 DockPane(&m_wndProperties);
\r
128 // Enable toolbar and docking window menu replacement
\r
129 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);
\r
131 // enable quick (Alt+drag) toolbar customization
\r
132 CMFCToolBar::EnableQuickCustomization();
\r
134 if (CMFCToolBar::GetUserImages() == NULL)
\r
136 // load user-defined toolbar images
\r
137 if (m_UserImages.Load(_T(".\\UserImages.bmp")))
\r
139 m_UserImages.SetImageSize(CSize(16, 16), FALSE);
\r
140 CMFCToolBar::SetUserImages(&m_UserImages);
\r
144 // enable menu personalization (most-recently used commands)
\r
145 // TODO: define your own basic commands, ensuring that each pulldown menu has at least one basic command.
\r
146 CList<UINT, UINT> lstBasicCommands;
\r
148 lstBasicCommands.AddTail(ID_FILE_NEW);
\r
149 lstBasicCommands.AddTail(ID_FILE_OPEN);
\r
150 lstBasicCommands.AddTail(ID_FILE_SAVE);
\r
151 lstBasicCommands.AddTail(ID_FILE_PRINT);
\r
152 lstBasicCommands.AddTail(ID_APP_EXIT);
\r
153 lstBasicCommands.AddTail(ID_EDIT_CUT);
\r
154 lstBasicCommands.AddTail(ID_EDIT_PASTE);
\r
155 lstBasicCommands.AddTail(ID_EDIT_UNDO);
\r
156 lstBasicCommands.AddTail(ID_APP_ABOUT);
\r
157 lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
\r
158 lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);
\r
159 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003);
\r
160 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005);
\r
161 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE);
\r
162 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER);
\r
163 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK);
\r
164 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA);
\r
166 CMFCToolBar::SetBasicCommands(lstBasicCommands);
\r
171 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
\r
173 if( !CFrameWndEx::PreCreateWindow(cs) )
\r
175 // TODO: Modify the Window class or styles here by modifying
\r
176 // the CREATESTRUCT cs
\r
181 BOOL CMainFrame::CreateDockingWindows()
\r
184 // Create output window
\r
185 CString strOutputWnd;
\r
186 bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
\r
187 ASSERT(bNameValid);
\r
188 if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
\r
190 TRACE0("Failed to create Output window\n");
\r
191 return FALSE; // failed to create
\r
194 // Create properties window
\r
195 CString strPropertiesWnd;
\r
196 bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
\r
197 ASSERT(bNameValid);
\r
198 if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
\r
200 TRACE0("Failed to create Properties window\n");
\r
201 return FALSE; // failed to create
\r
204 SetDockingWindowIcons(theApp.m_bHiColorIcons);
\r
208 void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
\r
210 HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
\r
211 m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
\r
213 HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
\r
214 m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
\r
218 // CMainFrame diagnostics
\r
221 void CMainFrame::AssertValid() const
\r
223 CFrameWndEx::AssertValid();
\r
226 void CMainFrame::Dump(CDumpContext& dc) const
\r
228 CFrameWndEx::Dump(dc);
\r
233 // CMainFrame message handlers
\r
235 void CMainFrame::OnViewCustomize()
\r
237 CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* scan menus */);
\r
238 pDlgCust->EnableUserDefinedToolbars();
\r
239 pDlgCust->Create();
\r
242 LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
\r
244 LRESULT lres = CFrameWndEx::OnToolbarCreateNew(wp,lp);
\r
250 CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;
\r
251 ASSERT_VALID(pUserToolbar);
\r
254 CString strCustomize;
\r
255 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
\r
256 ASSERT(bNameValid);
\r
258 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
\r
262 void CMainFrame::OnApplicationLook(UINT id)
\r
266 theApp.m_nAppLook = id;
\r
268 switch (theApp.m_nAppLook)
\r
270 case ID_VIEW_APPLOOK_WIN_2000:
\r
271 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
\r
274 case ID_VIEW_APPLOOK_OFF_XP:
\r
275 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
\r
278 case ID_VIEW_APPLOOK_WIN_XP:
\r
279 CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
\r
280 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
\r
283 case ID_VIEW_APPLOOK_OFF_2003:
\r
284 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
\r
285 CDockingManager::SetDockingMode(DT_SMART);
\r
288 case ID_VIEW_APPLOOK_VS_2005:
\r
289 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
\r
290 CDockingManager::SetDockingMode(DT_SMART);
\r
294 switch (theApp.m_nAppLook)
\r
296 case ID_VIEW_APPLOOK_OFF_2007_BLUE:
\r
297 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
\r
300 case ID_VIEW_APPLOOK_OFF_2007_BLACK:
\r
301 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
\r
304 case ID_VIEW_APPLOOK_OFF_2007_SILVER:
\r
305 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
\r
308 case ID_VIEW_APPLOOK_OFF_2007_AQUA:
\r
309 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
\r
313 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
\r
314 CDockingManager::SetDockingMode(DT_SMART);
\r
317 RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
\r
319 theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
\r
322 void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
\r
324 pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
\r
327 BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
\r
329 // base class does the real work
\r
331 if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
\r
337 // enable customization button for all user toolbars
\r
339 CString strCustomize;
\r
340 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
\r
341 ASSERT(bNameValid);
\r
343 for (int i = 0; i < iMaxUserToolbars; i ++)
\r
345 CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
\r
346 if (pUserToolbar != NULL)
\r
348 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
\r