3 #include "HintListCtrl.h"
5 #include "CommonResource.h"
7 #include "ProjectProperties.h"
10 #include "SplitterControl.h"
12 #include "MenuButton.h"
13 #include "LogDlgHelper.h"
14 #include "FilterEdit.h"
17 #include "HintListCtrl.h"
18 //#include "GitLogList.h"
20 #include "GitLogCache.h"
23 #if (NTDDI_VERSION < NTDDI_LONGHORN)
25 enum LISTITEMSTATES_MINE
{
30 LISS_SELECTEDNOTFOCUS
= 5,
34 #define MCS_NOTRAILINGDATES 0x0040
35 #define MCS_SHORTDAYSOFWEEK 0x0080
36 #define MCS_NOSELCHANGEONNAV 0x0100
38 #define DTM_SETMCSTYLE (DTM_FIRST + 11)
42 #define ICONITEMBORDER 5
44 #define GITLOG_START 0
45 #define GITLOG_START_ALL 1
46 #define GITLOG_END 100
48 #define LOGFILTER_ALL 1
49 #define LOGFILTER_MESSAGES 2
50 #define LOGFILTER_PATHS 3
51 #define LOGFILTER_AUTHORS 4
52 #define LOGFILTER_REVS 5
53 #define LOGFILTER_REGEX 6
54 #define LOGFILTER_BUGID 7
56 //typedef void CALLBACK_PROCESS(void * data, int progress);
57 #define MSG_LOADED (WM_USER+110)
58 #define MSG_LOAD_PERCENTAGE (WM_USER+111)
60 class CGitLogListBase
: public CHintListCtrl
62 DECLARE_DYNAMIC(CGitLogListBase
)
66 virtual ~CGitLogListBase();
67 volatile LONG m_bNoDispUpdates
;
68 BOOL m_IsIDReplaceAction
;
69 BOOL m_bStrictStopped
;
70 BOOL m_bShowBugtraqColumn
;
75 volatile LONG m_bThreadRunning
;
86 LOGLIST_MESSAGE_MAX
=300,
87 LOGLIST_MESSAGE_MIN
=200
92 // needs to start with 1, since 0 is the return value if *nothing* is clicked on in the context menu
122 ID_COMPAREWITHPREVIOUS
,
123 ID_BLAMEWITHPREVIOUS
,
132 void InsertGitColumn();
133 void ResizeAllListCtrlCols();
134 void CopySelectionToClipBoard(bool hashonly
=FALSE
);
135 void DiffSelectedRevWithPrevious();
136 bool IsSelectionContinuous();
137 int FillGitShortLog();
138 int FillGitLog(CTGitPath
*path
,int infomask
=CGit:: LOG_INFO_STAT
| CGit::LOG_INFO_FILESTATE
,CString
*from
=NULL
,CString
*to
=NULL
);
140 inline int ShownCountWithStopped() const { return (int)m_arShownList
.GetCount() + (m_bStrictStopped
? 1 : 0); }
141 int FetchLogAsync(void * data
=NULL
);
142 CPtrArray m_arShownList
;
144 void RecalculateShownList(CPtrArray
* pShownlist
);
147 int m_nSelectedFilter
;
148 CLogDataVector m_logEntries
;
151 bool ValidateRegexp(LPCTSTR regexp_str
, tr1::wregex
& pat
, bool bMatchCase
= false );
152 CString m_sFilterText
;
159 void GetTimeRange(CTime
&oldest
,CTime
&latest
);
160 virtual void ContextMenuAction(int cmd
,int FirstSelect
, int LastSelect
)=0;
164 g_Git
.GetMapHashToFriendName(m_HashMap
);
165 m_CurrentBranch
=g_Git
.GetCurrentBranch();
167 void TerminateThread()
169 if(this->m_LoadingThread
)
170 AfxTermThread((HINSTANCE
)m_LoadingThread
->m_hThread
);
173 bool IsInWorkingThread()
175 return (AfxGetThread() == m_LoadingThread
);
178 volatile bool m_bExitThread
;
179 CWinThread
* m_LoadingThread
;
181 DECLARE_MESSAGE_MAP()
182 afx_msg
void OnDestroy();
183 afx_msg
void OnNMCustomdrawLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
184 afx_msg
void OnLvnGetdispinfoLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
185 afx_msg
int OnCreate(LPCREATESTRUCT lpCreateStruct
);
186 afx_msg
void OnContextMenu(CWnd
* pWnd
, CPoint point
);
187 afx_msg LRESULT
OnLoad(WPARAM wParam
, LPARAM lParam
);
188 void OnNMDblclkLoglist(NMHDR
* /*pNMHDR*/, LRESULT
*pResult
);
189 afx_msg
void OnLvnOdfinditemLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
190 void PreSubclassWindow();
191 virtual BOOL
PreTranslateMessage(MSG
* pMsg
);
192 static UINT
LogThreadEntry(LPVOID pVoid
);
194 void FetchFullLogInfoOrig();
195 void FetchFullLogInfo();
196 void FillBackGround(HDC hdc
, int Index
,CRect
&rect
);
197 void DrawTagBranch(HDC
,CRect
&rect
,INT_PTR index
);
198 void DrawGraph(HDC
,CRect
&rect
,INT_PTR index
);
200 BOOL
GetShortName(CString ref
, CString
&shortname
,CString prefix
);
201 void paintGraphLane(HDC hdc
,int laneHeight
, int type
, int x1
, int x2
,
202 const COLORREF
& col
,int top
) ;
203 void DrawLine(HDC hdc
, int x1
, int y1
, int x2
, int y2
){::MoveToEx(hdc
,x1
,y1
,NULL
);::LineTo(hdc
,x2
,y2
);}
205 * Save column widths to the registry
207 void SaveColumnWidths(); // save col widths to the registry
209 BOOL
IsEntryInDateRange(int i
);
213 bool m_bFilterWithRegex
;
219 HICON m_hModifiedIcon
;
220 HICON m_hReplacedIcon
;
222 HICON m_hDeletedIcon
;
226 CRegDWORD m_regMaxBugIDColWidth
;
230 CStoreSelection
* m_pStoreSelection
;
231 MAP_HASH_NAME m_HashMap
;
235 CString m_CurrentBranch
;
237 COLORREF m_LineColors
[Lanes::COLORS_NUM
];
238 DWORD m_DateFormat
; // DATE_SHORTDATE or DATE_LONGDATE
239 bool m_bRelativeTimes
; // Show relative times