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)
59 #define MSG_REFLOG_CHANGED (WM_USER+112)
61 class CGitLogListBase
: public CHintListCtrl
63 DECLARE_DYNAMIC(CGitLogListBase
)
67 virtual ~CGitLogListBase();
68 volatile LONG m_bNoDispUpdates
;
69 BOOL m_IsIDReplaceAction
;
71 BOOL m_IsRebaseReplaceGraph
;
74 BOOL m_bStrictStopped
;
75 BOOL m_bShowBugtraqColumn
;
78 unsigned __int64 m_ContextMenuMask
;
82 volatile LONG m_bThreadRunning
;
93 LOGLIST_MESSAGE_MAX
=300,
94 LOGLIST_MESSAGE_MIN
=200
99 // needs to start with 1, since 0 is the return value if *nothing* is clicked on in the context menu
129 ID_COMPAREWITHPREVIOUS
,
130 ID_BLAMEWITHPREVIOUS
,
145 ID_REBASE_TO_VERSION
,
148 inline unsigned __int64
GetContextMenuBit(int i
){ return ((unsigned __int64
)0x1)<<i
;}
149 void InsertGitColumn();
150 void ResizeAllListCtrlCols();
151 void CopySelectionToClipBoard(bool hashonly
=FALSE
);
152 void DiffSelectedRevWithPrevious();
153 bool IsSelectionContinuous();
154 int FillGitShortLog();
155 int FillGitLog(CTGitPath
*path
,int infomask
=CGit:: LOG_INFO_STAT
| CGit::LOG_INFO_FILESTATE
| CGit::LOG_INFO_SHOW_MERGEDFILE
,CString
*from
=NULL
,CString
*to
=NULL
);
157 inline int ShownCountWithStopped() const { return (int)m_arShownList
.GetCount() + (m_bStrictStopped
? 1 : 0); }
158 int FetchLogAsync(void * data
=NULL
);
159 CPtrArray m_arShownList
;
161 void RecalculateShownList(CPtrArray
* pShownlist
);
164 int m_nSelectedFilter
;
165 CLogDataVector m_logEntries
;
168 bool ValidateRegexp(LPCTSTR regexp_str
, tr1::wregex
& pat
, bool bMatchCase
= false );
169 CString m_sFilterText
;
176 void GetTimeRange(CTime
&oldest
,CTime
&latest
);
177 virtual void ContextMenuAction(int cmd
,int FirstSelect
, int LastSelect
)=0;
181 g_Git
.GetMapHashToFriendName(m_HashMap
);
182 m_CurrentBranch
=g_Git
.GetCurrentBranch();
183 this->m_HeadHash
=g_Git
.GetHash(CString(_T("HEAD"))).Left(40);
185 void TerminateThread()
187 if(this->m_LoadingThread
)
188 AfxTermThread((HINSTANCE
)m_LoadingThread
->m_hThread
);
191 bool IsInWorkingThread()
193 return (AfxGetThread() == m_LoadingThread
);
196 void SetStartRef(const CString
& StartRef
)
202 volatile bool m_bExitThread
;
203 CWinThread
* m_LoadingThread
;
205 DECLARE_MESSAGE_MAP()
206 afx_msg
void OnDestroy();
207 virtual afx_msg
void OnNMCustomdrawLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
208 virtual afx_msg
void OnLvnGetdispinfoLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
209 afx_msg
int OnCreate(LPCREATESTRUCT lpCreateStruct
);
210 afx_msg
void OnContextMenu(CWnd
* pWnd
, CPoint point
);
211 afx_msg LRESULT
OnLoad(WPARAM wParam
, LPARAM lParam
);
212 void OnNMDblclkLoglist(NMHDR
* /*pNMHDR*/, LRESULT
*pResult
);
213 afx_msg
void OnLvnOdfinditemLoglist(NMHDR
*pNMHDR
, LRESULT
*pResult
);
214 void PreSubclassWindow();
215 virtual BOOL
PreTranslateMessage(MSG
* pMsg
);
216 static UINT
LogThreadEntry(LPVOID pVoid
);
218 void FetchLastLogInfo();
219 void FetchFullLogInfo(CString
&from
, CString
&to
);
220 void FillBackGround(HDC hdc
, int Index
,CRect
&rect
);
221 void DrawTagBranch(HDC
,CRect
&rect
,INT_PTR index
);
222 void DrawGraph(HDC
,CRect
&rect
,INT_PTR index
);
224 BOOL
GetShortName(CString ref
, CString
&shortname
,CString prefix
);
225 void paintGraphLane(HDC hdc
,int laneHeight
, int type
, int x1
, int x2
,
226 const COLORREF
& col
,int top
) ;
227 void DrawLine(HDC hdc
, int x1
, int y1
, int x2
, int y2
){::MoveToEx(hdc
,x1
,y1
,NULL
);::LineTo(hdc
,x2
,y2
);}
229 * Save column widths to the registry
231 void SaveColumnWidths(); // save col widths to the registry
233 BOOL
IsEntryInDateRange(int i
);
237 bool m_bFilterWithRegex
;
243 HICON m_hModifiedIcon
;
244 HICON m_hReplacedIcon
;
246 HICON m_hDeletedIcon
;
250 CRegDWORD m_regMaxBugIDColWidth
;
254 CStoreSelection
* m_pStoreSelection
;
255 MAP_HASH_NAME m_HashMap
;
259 CString m_CurrentBranch
;
262 CString m_StartRef
; //Ref of the top-commit
264 CString m_ColumnRegKey
;
266 COLORREF m_LineColors
[Lanes::COLORS_NUM
];
267 DWORD m_DateFormat
; // DATE_SHORTDATE or DATE_LONGDATE
268 bool m_bRelativeTimes
; // Show relative times