OSDN Git Service

Git Blame Can Show Log
[tortoisegit/TortoiseGitJp.git] / src / TortoiseGitBlame / OutputWnd.cpp
1 \r
2 #include "stdafx.h"\r
3 \r
4 #include "OutputWnd.h"\r
5 #include "Resource.h"\r
6 #include "MainFrm.h"\r
7 \r
8 #ifdef _DEBUG\r
9 #define new DEBUG_NEW\r
10 #undef THIS_FILE\r
11 static char THIS_FILE[] = __FILE__;\r
12 #endif\r
13 \r
14 /////////////////////////////////////////////////////////////////////////////\r
15 // COutputBar\r
16 \r
17 COutputWnd::COutputWnd()\r
18 {\r
19 }\r
20 \r
21 COutputWnd::~COutputWnd()\r
22 {\r
23 }\r
24 \r
25 BEGIN_MESSAGE_MAP(COutputWnd, CDockablePane)\r
26         ON_WM_CREATE()\r
27         ON_WM_SIZE()\r
28 END_MESSAGE_MAP()\r
29 \r
30 int COutputWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)\r
31 {\r
32         if (CDockablePane::OnCreate(lpCreateStruct) == -1)\r
33                 return -1;\r
34 \r
35         m_Font.CreateStockObject(DEFAULT_GUI_FONT);\r
36 \r
37         CRect rectDummy;\r
38         rectDummy.SetRectEmpty();\r
39 \r
40         // Create tabs window:\r
41         if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, 1))\r
42         {\r
43                 TRACE0("Failed to create output tab window\n");\r
44                 return -1;      // fail to create\r
45         }\r
46 \r
47         // Create output panes:\r
48         //const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;\r
49         const DWORD dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP;\r
50 \r
51         if (! m_LogList.Create(dwStyle,rectDummy,&m_wndTabs,2) )\r
52         {\r
53                 TRACE0("Failed to create output windows\n");\r
54                 return -1;      // fail to create\r
55         }\r
56 #if 0\r
57         if (!m_wndOutputBuild.Create(dwStyle, rectDummy, &m_wndTabs, 2) ||\r
58                 !m_wndOutputDebug.Create(dwStyle, rectDummy, &m_wndTabs, 3) ||\r
59                 !m_wndOutputFind.Create(dwStyle, rectDummy, &m_wndTabs, 4))\r
60         {\r
61                 TRACE0("Failed to create output windows\n");\r
62                 return -1;      // fail to create\r
63         }\r
64 #endif\r
65 \r
66         m_LogList.SetFont(&m_Font);\r
67         //m_wndOutputBuild.SetFont(&m_Font);\r
68         //m_wndOutputDebug.SetFont(&m_Font);\r
69         //m_wndOutputFind.SetFont(&m_Font);\r
70 \r
71         CString strTabName;\r
72         BOOL bNameValid;\r
73 \r
74         // Attach list windows to tab:\r
75         bNameValid = strTabName.LoadString(IDS_GIT_LOG_TAB);\r
76         ASSERT(bNameValid);\r
77 \r
78         m_wndTabs.AddTab(&m_LogList, strTabName, (UINT)0);\r
79 \r
80         m_LogList.m_IsIDReplaceAction=TRUE;\r
81         m_LogList.DeleteAllItems();\r
82         m_LogList.InsertGitColumn();\r
83 \r
84 \r
85 #if 0\r
86         bNameValid = strTabName.LoadString(IDS_DEBUG_TAB);\r
87         ASSERT(bNameValid);\r
88         m_wndTabs.AddTab(&m_wndOutputDebug, strTabName, (UINT)1);\r
89         bNameValid = strTabName.LoadString(IDS_FIND_TAB);\r
90         ASSERT(bNameValid);\r
91         m_wndTabs.AddTab(&m_wndOutputFind, strTabName, (UINT)2);\r
92 #endif;\r
93 \r
94         // Fill output tabs with some dummy text (nothing magic here)\r
95         FillBuildWindow();\r
96 //      FillDebugWindow();\r
97 //      FillFindWindow();\r
98 \r
99         return 0;\r
100 }\r
101 \r
102 void COutputWnd::OnSize(UINT nType, int cx, int cy)\r
103 {\r
104         CDockablePane::OnSize(nType, cx, cy);\r
105 \r
106         // Tab control should cover the whole client area:\r
107         m_wndTabs.SetWindowPos (NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);\r
108 }\r
109 \r
110 void COutputWnd::AdjustHorzScroll(CListBox& wndListBox)\r
111 {\r
112         CClientDC dc(this);\r
113         CFont* pOldFont = dc.SelectObject(&m_Font);\r
114 \r
115         int cxExtentMax = 0;\r
116 \r
117         for (int i = 0; i < wndListBox.GetCount(); i ++)\r
118         {\r
119                 CString strItem;\r
120                 wndListBox.GetText(i, strItem);\r
121 \r
122                 cxExtentMax = max(cxExtentMax, dc.GetTextExtent(strItem).cx);\r
123         }\r
124 \r
125         wndListBox.SetHorizontalExtent(cxExtentMax);\r
126         dc.SelectObject(pOldFont);\r
127 }\r
128 \r
129 void COutputWnd::FillBuildWindow()\r
130 {\r
131 //      m_wndOutputBuild.AddString(_T("Build output is being displayed here."));\r
132 //      m_wndOutputBuild.AddString(_T("The output is being displayed in rows of a list view"));\r
133 //      m_wndOutputBuild.AddString(_T("but you can change the way it is displayed as you wish..."));\r
134 }\r
135 \r
136 void COutputWnd::FillDebugWindow()\r
137 {\r
138 //      m_wndOutputDebug.AddString(_T("Debug output is being displayed here."));\r
139 //      m_wndOutputDebug.AddString(_T("The output is being displayed in rows of a list view"));\r
140 //      m_wndOutputDebug.AddString(_T("but you can change the way it is displayed as you wish..."));\r
141 }\r
142 \r
143 void COutputWnd::FillFindWindow()\r
144 {\r
145 //      m_wndOutputFind.AddString(_T("Find output is being displayed here."));\r
146 //      m_wndOutputFind.AddString(_T("The output is being displayed in rows of a list view"));\r
147 //      m_wndOutputFind.AddString(_T("but you can change the way it is displayed as you wish..."));\r
148 }\r
149 \r
150 int COutputWnd::LoadHistory(CString filename)\r
151 {\r
152         m_LogList.ReloadHashMap();\r
153         CTGitPath path;\r
154         path.SetFromWin(filename);\r
155 \r
156         m_LogList.FillGitLog(&path,0);\r
157 \r
158         return 0;\r
159 \r
160 }\r
161 /////////////////////////////////////////////////////////////////////////////\r
162 // COutputList1\r
163 \r
164 COutputList::COutputList()\r
165 {\r
166 }\r
167 \r
168 COutputList::~COutputList()\r
169 {\r
170 }\r
171 \r
172 BEGIN_MESSAGE_MAP(COutputList, CListBox)\r
173         ON_WM_CONTEXTMENU()\r
174         ON_COMMAND(ID_EDIT_COPY, OnEditCopy)\r
175         ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)\r
176         ON_COMMAND(ID_VIEW_OUTPUTWND, OnViewOutput)\r
177         ON_WM_WINDOWPOSCHANGING()\r
178 END_MESSAGE_MAP()\r
179 /////////////////////////////////////////////////////////////////////////////\r
180 // COutputList message handlers\r
181 \r
182 void COutputList::OnContextMenu(CWnd* /*pWnd*/, CPoint point)\r
183 {\r
184         CMenu menu;\r
185         menu.LoadMenu(IDR_OUTPUT_POPUP);\r
186 \r
187         CMenu* pSumMenu = menu.GetSubMenu(0);\r
188 \r
189         if (AfxGetMainWnd()->IsKindOf(RUNTIME_CLASS(CMDIFrameWndEx)))\r
190         {\r
191                 CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;\r
192 \r
193                 if (!pPopupMenu->Create(this, point.x, point.y, (HMENU)pSumMenu->m_hMenu, FALSE, TRUE))\r
194                         return;\r
195 \r
196                 ((CMDIFrameWndEx*)AfxGetMainWnd())->OnShowPopupMenu(pPopupMenu);\r
197                 UpdateDialogControls(this, FALSE);\r
198         }\r
199 \r
200         SetFocus();\r
201 }\r
202 \r
203 void COutputList::OnEditCopy()\r
204 {\r
205         MessageBox(_T("Copy output"));\r
206 }\r
207 \r
208 void COutputList::OnEditClear()\r
209 {\r
210         MessageBox(_T("Clear output"));\r
211 }\r
212 \r
213 void COutputList::OnViewOutput()\r
214 {\r
215         CDockablePane* pParentBar = DYNAMIC_DOWNCAST(CDockablePane, GetOwner());\r
216         CMDIFrameWndEx* pMainFrame = DYNAMIC_DOWNCAST(CMDIFrameWndEx, GetTopLevelFrame());\r
217 \r
218         if (pMainFrame != NULL && pParentBar != NULL)\r
219         {\r
220                 pMainFrame->SetFocus();\r
221                 pMainFrame->ShowPane(pParentBar, FALSE, FALSE, FALSE);\r
222                 pMainFrame->RecalcLayout();\r
223 \r
224         }\r
225 }\r
226 \r