Add encode support for blame
[TortoiseGit.git] / src / TortoiseGitBlame / MainFrm.cpp
blob8c73ce6c09248f120c7d001485963a5b3d721542
2 // MainFrm.cpp : implementation of the CMainFrame class
3 //
5 #include "stdafx.h"
6 #include "TortoiseGitBlame.h"
7 #include "MenuEncode.h"
8 #include "MainFrm.h"
10 #ifdef _DEBUG
11 #define new DEBUG_NEW
12 #endif
14 // CMainFrame
16 IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)
18 const int iMaxUserToolbars = 10;
19 const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
20 const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
22 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
23 ON_WM_CREATE()
24 // Global help commands
25 ON_COMMAND(ID_HELP_FINDER, &CFrameWndEx::OnHelpFinder)
26 ON_COMMAND(ID_HELP, &CFrameWndEx::OnHelp)
27 ON_COMMAND(ID_CONTEXT_HELP, &CFrameWndEx::OnContextHelp)
28 ON_COMMAND(ID_DEFAULT_HELP, &CFrameWndEx::OnHelpFinder)
29 ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
30 ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
31 ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
32 ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
33 END_MESSAGE_MAP()
35 static UINT indicators[] =
37 ID_SEPARATOR, // status line indicator
38 ID_INDICATOR_CAPS,
39 ID_INDICATOR_NUM,
40 ID_INDICATOR_SCRL,
43 // CMainFrame construction/destruction
45 CMainFrame::CMainFrame()
47 // TODO: add member initialization code here
48 theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2005);
51 CMainFrame::~CMainFrame()
55 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
57 if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
58 return -1;
60 BOOL bNameValid;
61 // set the visual manager and style based on persisted value
62 OnApplicationLook(theApp.m_nAppLook);
64 if (!m_wndMenuBar.Create(this))
66 TRACE0("Failed to create menubar\n");
67 return -1; // fail to create
70 m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
72 // prevent the menu bar from taking the focus on activation
73 CMFCPopupMenu::SetForceMenuFocus(FALSE);
75 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
76 !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_TORTOISE_GIT_BLAME_MAINFRAME_256 : IDR_TORTOISE_GIT_BLAME_MAINFRAME))
78 TRACE0("Failed to create toolbar\n");
79 return -1; // fail to create
82 CString strToolBarName;
83 bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
84 ASSERT(bNameValid);
85 m_wndToolBar.SetWindowText(strToolBarName);
87 CString strCustomize;
88 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
89 ASSERT(bNameValid);
90 m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
92 // Allow user-defined toolbars operations:
93 InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);
95 if (!m_wndStatusBar.Create(this))
97 TRACE0("Failed to create status bar\n");
98 return -1; // fail to create
100 m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
102 // TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable
103 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
104 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
105 EnableDocking(CBRS_ALIGN_ANY);
106 DockPane(&m_wndMenuBar);
107 DockPane(&m_wndToolBar);
110 // enable Visual Studio 2005 style docking window behavior
111 CDockingManager::SetDockingMode(DT_SMART);
112 // enable Visual Studio 2005 style docking window auto-hide behavior
113 EnableAutoHidePanes(CBRS_ALIGN_ANY);
115 // create docking windows
116 if (!CreateDockingWindows())
118 TRACE0("Failed to create docking windows\n");
119 return -1;
122 m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
123 DockPane(&m_wndOutput);
124 m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
125 DockPane(&m_wndProperties);
128 // Enable toolbar and docking window menu replacement
129 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);
131 // enable quick (Alt+drag) toolbar customization
132 CMFCToolBar::EnableQuickCustomization();
134 #if 0
135 if (CMFCToolBar::GetUserImages() == NULL)
137 // load user-defined toolbar images
138 if (m_UserImages.Load(_T(".\\UserImages.bmp")))
140 m_UserImages.SetImageSize(CSize(16, 16), FALSE);
141 CMFCToolBar::SetUserImages(&m_UserImages);
144 #endif
146 // enable menu personalization (most-recently used commands)
147 // TODO: define your own basic commands, ensuring that each pulldown menu has at least one basic command.
148 CList<UINT, UINT> lstBasicCommands;
150 lstBasicCommands.AddTail(ID_FILE_NEW);
151 lstBasicCommands.AddTail(ID_FILE_OPEN);
152 lstBasicCommands.AddTail(ID_FILE_SAVE);
153 lstBasicCommands.AddTail(ID_VIEW_NEXT);
154 lstBasicCommands.AddTail(ID_VIEW_PREV);
155 lstBasicCommands.AddTail(ID_FILE_PRINT);
156 lstBasicCommands.AddTail(ID_APP_EXIT);
157 lstBasicCommands.AddTail(ID_EDIT_CUT);
158 lstBasicCommands.AddTail(ID_EDIT_PASTE);
159 lstBasicCommands.AddTail(ID_EDIT_COPY);
160 lstBasicCommands.AddTail(ID_EDIT_UNDO);
161 lstBasicCommands.AddTail(ID_EDIT_FIND);
162 lstBasicCommands.AddTail(ID_EDIT_GOTO);
163 lstBasicCommands.AddTail(ID_APP_ABOUT);
164 lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
165 lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);
166 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003);
167 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005);
168 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE);
169 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER);
170 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK);
171 lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA);
173 int ids[]={
174 IDM_FORMAT_WIN_1250 ,
175 IDM_FORMAT_WIN_1251 ,
176 IDM_FORMAT_WIN_1252 ,
177 IDM_FORMAT_WIN_1253 ,
178 IDM_FORMAT_WIN_1254 ,
179 IDM_FORMAT_WIN_1255 ,
180 IDM_FORMAT_WIN_1256 ,
181 IDM_FORMAT_WIN_1257 ,
182 IDM_FORMAT_WIN_1258 ,
183 IDM_FORMAT_ISO_8859_1 ,
184 IDM_FORMAT_ISO_8859_2 ,
185 IDM_FORMAT_ISO_8859_3 ,
186 IDM_FORMAT_ISO_8859_4 ,
187 IDM_FORMAT_ISO_8859_5 ,
188 IDM_FORMAT_ISO_8859_6 ,
189 IDM_FORMAT_ISO_8859_7 ,
190 IDM_FORMAT_ISO_8859_8 ,
191 IDM_FORMAT_ISO_8859_9 ,
192 IDM_FORMAT_ISO_8859_10 ,
193 IDM_FORMAT_ISO_8859_11 ,
194 IDM_FORMAT_ISO_8859_13 ,
195 IDM_FORMAT_ISO_8859_14 ,
196 IDM_FORMAT_ISO_8859_15 ,
197 IDM_FORMAT_ISO_8859_16 ,
198 IDM_FORMAT_DOS_437 ,
199 IDM_FORMAT_DOS_720 ,
200 IDM_FORMAT_DOS_737 ,
201 IDM_FORMAT_DOS_775 ,
202 IDM_FORMAT_DOS_850 ,
203 IDM_FORMAT_DOS_852 ,
204 IDM_FORMAT_DOS_855 ,
205 IDM_FORMAT_DOS_857 ,
206 IDM_FORMAT_DOS_858 ,
207 IDM_FORMAT_DOS_860 ,
208 IDM_FORMAT_DOS_861 ,
209 IDM_FORMAT_DOS_862 ,
210 IDM_FORMAT_DOS_863 ,
211 IDM_FORMAT_DOS_865 ,
212 IDM_FORMAT_DOS_866 ,
213 IDM_FORMAT_DOS_869 ,
214 IDM_FORMAT_BIG5 ,
215 IDM_FORMAT_GB2312 ,
216 IDM_FORMAT_SHIFT_JIS ,
217 IDM_FORMAT_KOREAN_WIN ,
218 IDM_FORMAT_EUC_KR ,
219 IDM_FORMAT_TIS_620 ,
220 IDM_FORMAT_MAC_CYRILLIC ,
221 IDM_FORMAT_KOI8U_CYRILLIC ,
222 IDM_FORMAT_KOI8R_CYRILLIC ,
225 for(int i=0;i<sizeof(ids)/sizeof(int);i++)
227 lstBasicCommands.AddTail(ids[i]);
229 CMFCToolBar::SetBasicCommands(lstBasicCommands);
231 return 0;
234 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
236 if( !CFrameWndEx::PreCreateWindow(cs) )
237 return FALSE;
238 // TODO: Modify the Window class or styles here by modifying
239 // the CREATESTRUCT cs
241 return TRUE;
244 BOOL CMainFrame::CreateDockingWindows()
246 BOOL bNameValid;
247 // Create output window
248 CString strOutputWnd;
249 bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
250 ASSERT(bNameValid);
251 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))
253 TRACE0("Failed to create Output window\n");
254 return FALSE; // failed to create
257 // Create properties window
258 CString strPropertiesWnd;
259 bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
260 ASSERT(bNameValid);
261 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))
263 TRACE0("Failed to create Properties window\n");
264 return FALSE; // failed to create
267 SetDockingWindowIcons(theApp.m_bHiColorIcons);
268 return TRUE;
271 void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
273 HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
274 m_wndOutput.SetIcon(hOutputBarIcon, FALSE);
276 HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
277 m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
281 // CMainFrame diagnostics
283 #ifdef _DEBUG
284 void CMainFrame::AssertValid() const
286 CFrameWndEx::AssertValid();
289 void CMainFrame::Dump(CDumpContext& dc) const
291 CFrameWndEx::Dump(dc);
293 #endif //_DEBUG
296 // CMainFrame message handlers
298 void CMainFrame::OnViewCustomize()
300 CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* scan menus */);
301 pDlgCust->EnableUserDefinedToolbars();
302 pDlgCust->Create();
305 LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
307 LRESULT lres = CFrameWndEx::OnToolbarCreateNew(wp,lp);
308 if (lres == 0)
310 return 0;
313 CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;
314 ASSERT_VALID(pUserToolbar);
316 BOOL bNameValid;
317 CString strCustomize;
318 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
319 ASSERT(bNameValid);
321 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
322 return lres;
325 void CMainFrame::OnApplicationLook(UINT id)
327 CWaitCursor wait;
329 theApp.m_nAppLook = id;
331 switch (theApp.m_nAppLook)
333 case ID_VIEW_APPLOOK_WIN_2000:
334 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
335 break;
337 case ID_VIEW_APPLOOK_OFF_XP:
338 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
339 break;
341 case ID_VIEW_APPLOOK_WIN_XP:
342 CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
343 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
344 break;
346 case ID_VIEW_APPLOOK_OFF_2003:
347 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
348 CDockingManager::SetDockingMode(DT_SMART);
349 break;
351 case ID_VIEW_APPLOOK_VS_2005:
352 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
353 CDockingManager::SetDockingMode(DT_SMART);
354 break;
356 default:
357 switch (theApp.m_nAppLook)
359 case ID_VIEW_APPLOOK_OFF_2007_BLUE:
360 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
361 break;
363 case ID_VIEW_APPLOOK_OFF_2007_BLACK:
364 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
365 break;
367 case ID_VIEW_APPLOOK_OFF_2007_SILVER:
368 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
369 break;
371 case ID_VIEW_APPLOOK_OFF_2007_AQUA:
372 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
373 break;
376 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
377 CDockingManager::SetDockingMode(DT_SMART);
380 RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
382 theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
385 void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
387 pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
390 BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
392 // base class does the real work
394 if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
396 return FALSE;
400 // enable customization button for all user toolbars
401 BOOL bNameValid;
402 CString strCustomize;
403 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
404 ASSERT(bNameValid);
406 for (int i = 0; i < iMaxUserToolbars; i ++)
408 CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
409 if (pUserToolbar != NULL)
411 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
415 return TRUE;
419 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
421 // TODO: Add your specialized code here and/or call the base class
423 return CFrameWndEx::OnCommand(wParam, lParam);