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
;
70 BOOL m_IsRebaseReplaceGraph
;
72 BOOL m_bStrictStopped
;
73 BOOL m_bShowBugtraqColumn
;
78 volatile LONG m_bThreadRunning
;
89 LOGLIST_MESSAGE_MAX
=300,
90 LOGLIST_MESSAGE_MIN
=200
95 // needs to start with 1, since 0 is the return value if *nothing* is clicked on in the context menu
125 ID_COMPAREWITHPREVIOUS
,
126 ID_BLAMEWITHPREVIOUS
,
135 void InsertGitColumn();
136 void ResizeAllListCtrlCols();
137 void CopySelectionToClipBoard(bool hashonly
=FALSE
);
138 void DiffSelectedRevWithPrevious();
139 bool IsSelectionContinuous();
140 int FillGitShortLog();
141 int FillGitLog(CTGitPath
*path
,int infomask
=CGit:: LOG_INFO_STAT
| CGit::LOG_INFO_FILESTATE
,CString
*from
=NULL
,CString
*to
=NULL
);
143 inline int ShownCountWithStopped() const { return (int)m_arShownList
.GetCount() + (m_bStrictStopped
? 1 : 0); }
144 int FetchLogAsync(void * data
=NULL
);
145 CPtrArray m_arShownList
;
147 void RecalculateShownList(CPtrArray
* pShownlist
);
150 int m_nSelectedFilter
;
151 CLogDataVector m_logEntries
;
154 bool ValidateRegexp(LPCTSTR regexp_str
, tr1::wregex
& pat
, bool bMatchCase
= false );
155 CString m_sFilterText
;
162 void GetTimeRange(CTime
&oldest
,CTime
&latest
);
163 virtual void ContextMenuAction(int cmd
,int FirstSelect
, int LastSelect
)=0;
167 g_Git
.GetMapHashToFriendName(m_HashMap
);
168 m_CurrentBranch
=g_Git
.GetCurrentBranch();
170 void TerminateThread()
172 if(this->m_LoadingThread
)
173 AfxTermThread((HINSTANCE
)m_LoadingThread
->m_hThread
);
176 bool IsInWorkingThread()
178 return (AfxGetThread() == m_LoadingThread
);
181 volatile bool m_bExitThread
;
182 CWinThread
* m_LoadingThread
;
184 DECLARE_MESSAGE_MAP()
185 afx_msg
void OnDestroy();
186 afx_msg
void OnNMCustomdrawLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
187 afx_msg
void OnLvnGetdispinfoLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
188 afx_msg
int OnCreate(LPCREATESTRUCT lpCreateStruct
);
189 afx_msg
void OnContextMenu(CWnd
* pWnd
, CPoint point
);
190 afx_msg LRESULT
OnLoad(WPARAM wParam
, LPARAM lParam
);
191 void OnNMDblclkLoglist(NMHDR
* /*pNMHDR*/, LRESULT
*pResult
);
192 afx_msg
void OnLvnOdfinditemLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
193 void PreSubclassWindow();
194 virtual BOOL
PreTranslateMessage(MSG
* pMsg
);
195 static UINT
LogThreadEntry(LPVOID pVoid
);
197 void FetchFullLogInfoOrig();
198 void FetchFullLogInfo();
199 void FillBackGround(HDC hdc
, int Index
,CRect
&rect
);
200 void DrawTagBranch(HDC
,CRect
&rect
,INT_PTR index
);
201 void DrawGraph(HDC
,CRect
&rect
,INT_PTR index
);
203 BOOL
GetShortName(CString ref
, CString
&shortname
,CString prefix
);
204 void paintGraphLane(HDC hdc
,int laneHeight
, int type
, int x1
, int x2
,
205 const COLORREF
& col
,int top
) ;
206 void DrawLine(HDC hdc
, int x1
, int y1
, int x2
, int y2
){::MoveToEx(hdc
,x1
,y1
,NULL
);::LineTo(hdc
,x2
,y2
);}
208 * Save column widths to the registry
210 void SaveColumnWidths(); // save col widths to the registry
212 BOOL
IsEntryInDateRange(int i
);
216 bool m_bFilterWithRegex
;
222 HICON m_hModifiedIcon
;
223 HICON m_hReplacedIcon
;
225 HICON m_hDeletedIcon
;
229 CRegDWORD m_regMaxBugIDColWidth
;
233 CStoreSelection
* m_pStoreSelection
;
234 MAP_HASH_NAME m_HashMap
;
238 CString m_CurrentBranch
;
240 COLORREF m_LineColors
[Lanes::COLORS_NUM
];
241 DWORD m_DateFormat
; // DATE_SHORTDATE or DATE_LONGDATE
242 bool m_bRelativeTimes
; // Show relative times