2 // MainFrm.cpp : implementation of the CMainFrame class
6 #include "TortoiseGitBlame.h"
7 #include "MenuEncode.h"
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
)
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
)
35 static UINT indicators
[] =
37 ID_SEPARATOR
, // status line indicator
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)
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
);
85 m_wndToolBar
.SetWindowText(strToolBarName
);
88 bNameValid
= strCustomize
.LoadString(IDS_TOOLBAR_CUSTOMIZE
);
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");
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();
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
);
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
);
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
,
216 IDM_FORMAT_SHIFT_JIS
,
217 IDM_FORMAT_KOREAN_WIN
,
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
);
234 BOOL
CMainFrame::PreCreateWindow(CREATESTRUCT
& cs
)
236 if( !CFrameWndEx::PreCreateWindow(cs
) )
238 // TODO: Modify the Window class or styles here by modifying
239 // the CREATESTRUCT cs
244 BOOL
CMainFrame::CreateDockingWindows()
247 // Create output window
248 CString strOutputWnd
;
249 bNameValid
= strOutputWnd
.LoadString(IDS_OUTPUT_WND
);
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
);
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
);
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
284 void CMainFrame::AssertValid() const
286 CFrameWndEx::AssertValid();
289 void CMainFrame::Dump(CDumpContext
& dc
) const
291 CFrameWndEx::Dump(dc
);
296 // CMainFrame message handlers
298 void CMainFrame::OnViewCustomize()
300 CMFCToolBarsCustomizeDialog
* pDlgCust
= new CMFCToolBarsCustomizeDialog(this, TRUE
/* scan menus */);
301 pDlgCust
->EnableUserDefinedToolbars();
305 LRESULT
CMainFrame::OnToolbarCreateNew(WPARAM wp
,LPARAM lp
)
307 LRESULT lres
= CFrameWndEx::OnToolbarCreateNew(wp
,lp
);
313 CMFCToolBar
* pUserToolbar
= (CMFCToolBar
*)lres
;
314 ASSERT_VALID(pUserToolbar
);
317 CString strCustomize
;
318 bNameValid
= strCustomize
.LoadString(IDS_TOOLBAR_CUSTOMIZE
);
321 pUserToolbar
->EnableCustomizeButton(TRUE
, ID_VIEW_CUSTOMIZE
, strCustomize
);
325 void CMainFrame::OnApplicationLook(UINT id
)
329 theApp
.m_nAppLook
= id
;
331 switch (theApp
.m_nAppLook
)
333 case ID_VIEW_APPLOOK_WIN_2000
:
334 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager
));
337 case ID_VIEW_APPLOOK_OFF_XP
:
338 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP
));
341 case ID_VIEW_APPLOOK_WIN_XP
:
342 CMFCVisualManagerWindows::m_b3DTabsXPTheme
= TRUE
;
343 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows
));
346 case ID_VIEW_APPLOOK_OFF_2003
:
347 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003
));
348 CDockingManager::SetDockingMode(DT_SMART
);
351 case ID_VIEW_APPLOOK_VS_2005
:
352 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005
));
353 CDockingManager::SetDockingMode(DT_SMART
);
357 switch (theApp
.m_nAppLook
)
359 case ID_VIEW_APPLOOK_OFF_2007_BLUE
:
360 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue
);
363 case ID_VIEW_APPLOOK_OFF_2007_BLACK
:
364 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack
);
367 case ID_VIEW_APPLOOK_OFF_2007_SILVER
:
368 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver
);
371 case ID_VIEW_APPLOOK_OFF_2007_AQUA
:
372 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua
);
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
))
400 // enable customization button for all user toolbars
402 CString strCustomize
;
403 bNameValid
= strCustomize
.LoadString(IDS_TOOLBAR_CUSTOMIZE
);
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
);
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
);