OSDN Git Service

Git Blame Can Show Log
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / GitLogListBase.h
1 #pragma once\r
2 \r
3 #include "HintListCtrl.h"\r
4 #include "XPTheme.h"\r
5 #include "resource.h"\r
6 #include "Git.h"\r
7 #include "ProjectProperties.h"\r
8 #include "TGitPath.h"\r
9 #include "registry.h"\r
10 #include "SplitterControl.h"\r
11 #include "Colors.h"\r
12 #include "MenuButton.h"\r
13 #include "LogDlgHelper.h"\r
14 #include "FilterEdit.h"\r
15 #include "GitRev.h"\r
16 #include "Tooltip.h"\r
17 #include "HintListCtrl.h"\r
18 //#include "GitLogList.h"\r
19 #include "lanes.h"\r
20 \r
21 #include <regex>\r
22 // CGitLogList\r
23 #if (NTDDI_VERSION < NTDDI_LONGHORN)\r
24 \r
25 enum LISTITEMSTATES_MINE {\r
26         LISS_NORMAL = 1,\r
27         LISS_HOT = 2,\r
28         LISS_SELECTED = 3,\r
29         LISS_DISABLED = 4,\r
30         LISS_SELECTEDNOTFOCUS = 5,\r
31         LISS_HOTSELECTED = 6,\r
32 };\r
33 \r
34 #define MCS_NOTRAILINGDATES  0x0040\r
35 #define MCS_SHORTDAYSOFWEEK  0x0080\r
36 #define MCS_NOSELCHANGEONNAV 0x0100\r
37 \r
38 #define DTM_SETMCSTYLE    (DTM_FIRST + 11)\r
39 \r
40 #endif\r
41 \r
42 #define ICONITEMBORDER 5\r
43 \r
44 #define GITLOG_START 0\r
45 #define GITLOG_START_ALL 1\r
46 #define GITLOG_END   100\r
47 \r
48 #define LOGFILTER_ALL      1\r
49 #define LOGFILTER_MESSAGES 2\r
50 #define LOGFILTER_PATHS    3\r
51 #define LOGFILTER_AUTHORS  4\r
52 #define LOGFILTER_REVS     5\r
53 #define LOGFILTER_REGEX    6\r
54 #define LOGFILTER_BUGID    7\r
55 \r
56 typedef void CALLBACK_PROCESS(void * data, int progress);\r
57 \r
58 class CGitLogListBase : public CHintListCtrl\r
59 {\r
60         DECLARE_DYNAMIC(CGitLogListBase)\r
61 \r
62 public:\r
63         CGitLogListBase();\r
64         virtual ~CGitLogListBase();\r
65         volatile LONG           m_bNoDispUpdates;\r
66         BOOL m_IsIDReplaceAction;\r
67         BOOL m_bStrictStopped;\r
68         BOOL m_bShowBugtraqColumn;\r
69         BOOL m_bSearchIndex;\r
70         BOOL m_bCancelled;\r
71         bool                            m_hasWC;\r
72         GitRev                          m_wcRev;\r
73         volatile LONG           m_bThreadRunning;\r
74 \r
75         enum\r
76         {\r
77                 LOGLIST_GRAPH,\r
78                 LOGLIST_ACTION,\r
79                 LOGLIST_MESSAGE,\r
80                 LOGLIST_AUTHOR,\r
81                 LOGLIST_DATE,\r
82                 LOGLIST_BUG,\r
83                 LOGLIST_MESSAGE_MAX=300,\r
84                 LOGLIST_MESSAGE_MIN=200\r
85         };\r
86 \r
87         enum \r
88         {\r
89         // needs to start with 1, since 0 is the return value if *nothing* is clicked on in the context menu\r
90         ID_COMPARE = 1,\r
91         ID_SAVEAS,\r
92         ID_COMPARETWO,\r
93         ID_UPDATE,\r
94         ID_COPY,\r
95         ID_REVERTREV,\r
96         ID_MERGEREV,\r
97         ID_GNUDIFF1,\r
98         ID_GNUDIFF2,\r
99         ID_FINDENTRY,\r
100         ID_OPEN,\r
101         ID_BLAME,\r
102         ID_REPOBROWSE,\r
103         ID_LOG,\r
104         ID_POPPROPS,\r
105         ID_EDITAUTHOR,\r
106         ID_EDITLOG,\r
107         ID_DIFF,\r
108         ID_OPENWITH,\r
109         ID_COPYCLIPBOARD,\r
110         ID_COPYHASH,\r
111         ID_CHECKOUT,\r
112         ID_REVERTTOREV,\r
113         ID_BLAMECOMPARE,\r
114         ID_BLAMETWO,\r
115         ID_BLAMEDIFF,\r
116         ID_VIEWREV,\r
117         ID_VIEWPATHREV,\r
118         ID_EXPORT,\r
119         ID_COMPAREWITHPREVIOUS,\r
120         ID_BLAMEWITHPREVIOUS,\r
121         ID_GETMERGELOGS,\r
122         ID_REVPROPS,\r
123         ID_CHERRY_PICK,\r
124         ID_CREATE_BRANCH,\r
125         ID_CREATE_TAG,\r
126         ID_SWITCHTOREV\r
127         };\r
128         void InsertGitColumn();\r
129         void ResizeAllListCtrlCols();\r
130         void CopySelectionToClipBoard(bool hashonly=FALSE);\r
131         void DiffSelectedRevWithPrevious();\r
132         bool IsSelectionContinuous();\r
133         int  FillGitShortLog();\r
134         int  FillGitLog(CTGitPath *path,int infomask=CGit::     LOG_INFO_STAT| CGit::LOG_INFO_FILESTATE);\r
135 \r
136         inline int ShownCountWithStopped() const { return (int)m_arShownList.GetCount() + (m_bStrictStopped ? 1 : 0); }\r
137         int FetchLogAsync(CALLBACK_PROCESS *proc=NULL, void * data=NULL);\r
138         CPtrArray                       m_arShownList;\r
139         void Refresh();\r
140         void RecalculateShownList(CPtrArray * pShownlist);\r
141 \r
142         int                                     m_nSelectedFilter;\r
143         CLogDataVector          m_logEntries;\r
144         void RemoveFilter();\r
145         void StartFilter();\r
146         bool ValidateRegexp(LPCTSTR regexp_str, tr1::wregex& pat, bool bMatchCase = false );\r
147         CString                         m_sFilterText;\r
148         CTime                   m_From;\r
149         CTime                   m_To;\r
150         void                            GetTimeRange(CTime &oldest,CTime &latest);\r
151         virtual void ContextMenuAction(int cmd,int FirstSelect, int LastSelect)=0;\r
152         void ReloadHashMap()\r
153         {       \r
154                 m_HashMap.clear();\r
155                 g_Git.GetMapHashToFriendName(m_HashMap);\r
156         }\r
157 protected:\r
158         DECLARE_MESSAGE_MAP()\r
159         afx_msg void OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult);\r
160         afx_msg void OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult);\r
161         afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\r
162         afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);\r
163         void OnNMDblclkLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult);\r
164         afx_msg void OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult);\r
165         void PreSubclassWindow();\r
166         virtual BOOL PreTranslateMessage(MSG* pMsg);\r
167         static UINT LogThreadEntry(LPVOID pVoid);\r
168         UINT LogThread();\r
169         void FillBackGround(HDC hdc, int Index,CRect &rect);\r
170         void DrawTagBranch(HDC,CRect &rect,INT_PTR index);\r
171         void DrawGraph(HDC,CRect &rect,INT_PTR index);\r
172 \r
173         BOOL GetShortName(CString ref, CString &shortname,CString prefix);\r
174         void paintGraphLane(HDC hdc,int laneHeight, int type, int x1, int x2,\r
175                                       const COLORREF& col,int top) ; \r
176         void DrawLine(HDC hdc, int x1, int y1, int x2, int y2){::MoveToEx(hdc,x1,y1,NULL);::LineTo(hdc,x2,y2);}\r
177 \r
178 \r
179         BOOL IsEntryInDateRange(int i);\r
180 \r
181 \r
182 \r
183         bool                            m_bFilterWithRegex;\r
184 \r
185         \r
186         CXPTheme                        m_Theme;\r
187         BOOL                            m_bVista;\r
188         \r
189         HICON                           m_hModifiedIcon;\r
190         HICON                           m_hReplacedIcon;\r
191         HICON                           m_hAddedIcon;\r
192         HICON                           m_hDeletedIcon;\r
193 \r
194         HFONT                           m_boldFont;\r
195 \r
196         CRegDWORD                       m_regMaxBugIDColWidth;\r
197         int                                     m_nSearchIndex;\r
198         \r
199         CALLBACK_PROCESS    *m_ProcCallBack;\r
200         void                            *m_ProcData;\r
201         CStoreSelection*        m_pStoreSelection;\r
202         MAP_HASH_NAME           m_HashMap;\r
203 };\r
204 \r
205 \r