Fix diff-xls.js error reported from http://tortoisesvn.tigris.org/ds/viewMessage...
[TortoiseGit.git] / src / TortoiseGitBlame / MainFrm.cpp
blob57cb197af0fe6d1ee742c47cbc354cabc63aeb27
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2013 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 // MainFrm.cpp : implementation of the CMainFrame class
24 #include "stdafx.h"
25 #include "TortoiseGitBlame.h"
26 #include "MenuEncode.h"
27 #include "MainFrm.h"
28 #include "TaskbarUUID.h"
30 #ifdef _DEBUG
31 #define new DEBUG_NEW
32 #endif
34 // CMainFrame
36 IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
38 const int iMaxUserToolbars = 10;
39 const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
40 const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
41 const UINT TaskBarButtonCreated = RegisterWindowMessage(L"TaskbarButtonCreated");
43 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
44 ON_WM_CREATE()
45 // Global help commands
46 ON_COMMAND(ID_HELP_FINDER, &CFrameWndEx::OnHelpFinder)
47 ON_UPDATE_COMMAND_UI(ID_HELP_FINDER, &CMainFrame::OnUpdateHelpFinder)
48 ON_COMMAND(ID_HELP, &CFrameWndEx::OnHelp)
49 ON_COMMAND(ID_CONTEXT_HELP, &CFrameWndEx::OnContextHelp)
50 ON_COMMAND(ID_DEFAULT_HELP, &CFrameWndEx::OnHelpFinder)
51 ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
52 ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
53 ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
54 ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
55 ON_REGISTERED_MESSAGE(TaskBarButtonCreated, &CMainFrame::OnTaskbarButtonCreated)
56 END_MESSAGE_MAP()
58 static UINT indicators[] =
60 ID_SEPARATOR, // status line indicator
61 ID_INDICATOR_ENCODING,
62 ID_INDICATOR_NUM,
65 // CMainFrame construction/destruction
67 CMainFrame::CMainFrame()
69 theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2005);
72 CMainFrame::~CMainFrame()
76 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
78 if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
79 return -1;
81 BOOL bNameValid;
82 // set the visual manager and style based on persisted value
83 OnApplicationLook(theApp.m_nAppLook);
85 if (!m_wndMenuBar.Create(this))
87 TRACE0("Failed to create menubar\n");
88 return -1; // fail to create
91 m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
93 // prevent the menu bar from taking the focus on activation
94 CMFCPopupMenu::SetForceMenuFocus(FALSE);
96 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
97 !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TORTOISE_GIT_BLAME_MAINFRAME_256 : IDR_TORTOISE_GIT_BLAME_MAINFRAME))
99 TRACE0("Failed to create toolbar\n");
100 return -1; // fail to create
103 CString strToolBarName;
104 bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
105 ASSERT(bNameValid);
106 m_wndToolBar.SetWindowText(strToolBarName);
108 CString strCustomize;
109 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
110 ASSERT(bNameValid);
111 m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
113 // Allow user-defined toolbars operations:
114 InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);
116 if (!m_wndStatusBar.Create(this))
118 TRACE0("Failed to create status bar\n");
119 return -1; // fail to create
121 m_wndStatusBar.SetIndicators(indicators, _countof(indicators));
123 // Delete these five lines if you don't want the toolbar and menubar to be dockable
124 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
125 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
126 EnableDocking(CBRS_ALIGN_ANY);
127 DockPane(&m_wndMenuBar);
128 DockPane(&m_wndToolBar);
131 // enable Visual Studio 2005 style docking window behavior
132 CDockingManager::SetDockingMode(DT_SMART);
133 // enable Visual Studio 2005 style docking window auto-hide behavior
134 EnableAutoHidePanes(CBRS_ALIGN_ANY);
136 // create docking windows
137 if (!CreateDockingWindows())
139 TRACE0("Failed to create docking windows\n");
140 return -1;
143 m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
144 DockPane(&m_wndOutput);
145 m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
146 DockPane(&m_wndProperties);
149 // Enable toolbar and docking window menu replacement
150 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);
152 // enable quick (Alt+drag) toolbar customization
153 CMFCToolBar::EnableQuickCustomization();
155 return 0;
158 LRESULT CMainFrame::OnTaskbarButtonCreated(WPARAM /*wParam*/, LPARAM /*lParam*/)
160 SetUUIDOverlayIcon(m_hWnd);
161 return 0;
164 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
166 if( !CFrameWndEx::PreCreateWindow(cs) )
167 return FALSE;
168 // TODO: Modify the Window class or styles here by modifying
169 // the CREATESTRUCT cs
171 return TRUE;
174 BOOL CMainFrame::CreateDockingWindows()
176 BOOL bNameValid;
177 // Create output window
178 CString strOutputWnd;
179 bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
180 ASSERT(bNameValid);
181 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))
183 TRACE0("Failed to create Output window\n");
184 return FALSE; // failed to create
187 // Create properties window
188 CString strPropertiesWnd;
189 bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
190 ASSERT(bNameValid);
191 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))
193 TRACE0("Failed to create Properties window\n");
194 return FALSE; // failed to create
197 SetDockingWindowIcons(theApp.m_bHiColorIcons);
198 return TRUE;
201 void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
203 HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
204 m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
206 HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
207 m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
211 // CMainFrame diagnostics
213 #ifdef _DEBUG
214 void CMainFrame::AssertValid() const
216 CFrameWndEx::AssertValid();
219 void CMainFrame::Dump(CDumpContext& dc) const
221 CFrameWndEx::Dump(dc);
223 #endif //_DEBUG
226 // CMainFrame message handlers
228 void CMainFrame::OnUpdateHelpFinder(CCmdUI *pCmdUI)
230 pCmdUI->Enable(FALSE);
233 void CMainFrame::OnViewCustomize()
235 CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* scan menus */);
236 pDlgCust->EnableUserDefinedToolbars();
237 pDlgCust->Create();
240 LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
242 LRESULT lres = CFrameWndEx::OnToolbarCreateNew(wp,lp);
243 if (lres == 0)
245 return 0;
248 CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;
249 ASSERT_VALID(pUserToolbar);
251 BOOL bNameValid;
252 CString strCustomize;
253 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
254 ASSERT(bNameValid);
256 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
257 return lres;
260 void CMainFrame::OnApplicationLook(UINT id)
262 CWaitCursor wait;
264 theApp.m_nAppLook = id;
266 switch (theApp.m_nAppLook)
268 case ID_VIEW_APPLOOK_WIN_2000:
269 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
270 break;
272 case ID_VIEW_APPLOOK_OFF_XP:
273 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
274 break;
276 case ID_VIEW_APPLOOK_WIN_XP:
277 CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
278 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
279 break;
281 case ID_VIEW_APPLOOK_OFF_2003:
282 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
283 CDockingManager::SetDockingMode(DT_SMART);
284 break;
286 case ID_VIEW_APPLOOK_VS_2005:
287 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
288 CDockingManager::SetDockingMode(DT_SMART);
289 break;
291 case ID_VIEW_APPLOOK_VS_2008:
292 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008));
293 CDockingManager::SetDockingMode(DT_SMART);
294 break;
296 case ID_VIEW_APPLOOK_WIN7:
297 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));
298 CDockingManager::SetDockingMode(DT_SMART);
299 break;
301 default:
302 switch (theApp.m_nAppLook)
304 case ID_VIEW_APPLOOK_OFF_2007_BLUE:
305 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
306 break;
308 case ID_VIEW_APPLOOK_OFF_2007_BLACK:
309 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
310 break;
312 case ID_VIEW_APPLOOK_OFF_2007_SILVER:
313 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
314 break;
316 case ID_VIEW_APPLOOK_OFF_2007_AQUA:
317 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
318 break;
321 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
322 CDockingManager::SetDockingMode(DT_SMART);
325 RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
327 theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
330 void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
332 pCmdUI->Enable();
333 pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
336 BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
338 // base class does the real work
340 if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
342 return FALSE;
345 // enable customization button for all user toolbars
346 BOOL bNameValid;
347 CString strCustomize;
348 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
349 ASSERT(bNameValid);
351 for (int i = 0; i < iMaxUserToolbars; ++i)
353 CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
354 if (pUserToolbar != NULL)
356 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
360 return TRUE;