From 5999f0811b2d43d1d589c638aa0438fd1638f8fe Mon Sep 17 00:00:00 2001 From: Frank Li Date: Fri, 3 Sep 2010 22:52:23 +0800 Subject: [PATCH] Save HEADER position and width at log dialog Signed-off-by: Frank Li --- src/TortoiseProc/GitLogListBase.cpp | 57 ++++++++++++++++++++++++++++--------- src/TortoiseProc/GitLogListBase.h | 4 +++ 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index a4784ebdb..8a536d8a8 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -177,6 +177,12 @@ BEGIN_MESSAGE_MAP(CGitLogListBase, CHintListCtrl) ON_MESSAGE(MSG_LOADED,OnLoad) ON_WM_MEASUREITEM() ON_WM_MEASUREITEM_REFLECT() + ON_NOTIFY(HDN_BEGINTRACKA, 0, OnHdnBegintrack) + ON_NOTIFY(HDN_BEGINTRACKW, 0, OnHdnBegintrack) + ON_NOTIFY(HDN_ITEMCHANGINGA, 0, OnHdnItemchanging) + ON_NOTIFY(HDN_ITEMCHANGINGW, 0, OnHdnItemchanging) + ON_NOTIFY(HDN_ENDTRACK, 0, OnColumnResized) + ON_NOTIFY(HDN_ENDDRAG, 0, OnColumnMoved) END_MESSAGE_MAP() void CGitLogListBase::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) @@ -214,6 +220,12 @@ void CGitLogListBase::InsertGitColumn() { CString temp; + CRegDWORD regFullRowSelect(_T("Software\\TortoiseGit\\FullRowSelect"), TRUE); + DWORD exStyle = LVS_EX_HEADERDRAGDROP | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP | LVS_EX_SUBITEMIMAGES; + if (DWORD(regFullRowSelect)) + exStyle |= LVS_EX_FULLROWSELECT; + SetExtendedStyle(exStyle); + static UINT normal[] = { IDS_LOG_GRAPH, @@ -2685,18 +2697,13 @@ LRESULT CGitLogListBase::OnLoad(WPARAM wParam,LPARAM lParam) void CGitLogListBase::SaveColumnWidths() { CHeaderCtrl* pHdrCtrl = (CHeaderCtrl*)(GetDlgItem(0)); - if (pHdrCtrl) - { - int numcols = pHdrCtrl->GetItemCount(); - for (int col = 0; col < numcols; col++) - { - int width = GetColumnWidth( col ); - CString regentry; - regentry.Format( _T("Software\\TortoiseGit\\%s\\ColWidth%d"),m_ColumnRegKey, col); - CRegDWORD regwidth(regentry, 0); - regwidth = width; // this writes it to reg - } - } + int maxcol; + + for (int col = 0; col <= maxcol; col++) + if (m_ColumnManager.IsVisible (col)) + m_ColumnManager.ColumnResized (col); + + m_ColumnManager.WriteSettings(); } int CGitLogListBase::GetHeadIndex() @@ -2723,7 +2730,15 @@ void CGitLogListBase::OnFind() m_pFindDialog->Create(TRUE, NULL, NULL, FR_HIDEUPDOWN | FR_HIDEWHOLEWORD, this); } } - +void CGitLogListBase::OnHdnBegintrack(NMHDR *pNMHDR, LRESULT *pResult) +{ + m_ColumnManager.OnHdnBegintrack(pNMHDR, pResult); +} +void CGitLogListBase::OnHdnItemchanging(NMHDR *pNMHDR, LRESULT *pResult) +{ + if(!m_ColumnManager.OnHdnItemchanging(pNMHDR, pResult)) + Default(); +} LRESULT CGitLogListBase::OnFindDialogMessage(WPARAM /*wParam*/, LPARAM /*lParam*/) { @@ -2833,4 +2848,18 @@ LRESULT CGitLogListBase::OnFindDialogMessage(WPARAM /*wParam*/, LPARAM /*lParam* //UpdateLogInfoLabel(); return 0; -} \ No newline at end of file +} + +void CGitLogListBase::OnColumnResized(NMHDR *pNMHDR, LRESULT *pResult) +{ + m_ColumnManager.OnColumnResized(pNMHDR,pResult); + + *pResult = FALSE; +} + +void CGitLogListBase::OnColumnMoved(NMHDR *pNMHDR, LRESULT *pResult) +{ + m_ColumnManager.OnColumnMoved(pNMHDR, pResult); + + Invalidate(FALSE); +} diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index 9da0c8859..e13965b4d 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -259,6 +259,10 @@ protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg LRESULT OnLoad(WPARAM wParam, LPARAM lParam); + afx_msg void OnHdnBegintrack(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnHdnItemchanging(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnColumnResized(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnColumnMoved(NMHDR *pNMHDR, LRESULT *pResult); void OnNMDblclkLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult); afx_msg void OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult); void PreSubclassWindow(); -- 2.11.4.GIT