From 7b95133a30d4533e556a50ed296b1ac5ccd988a7 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sat, 25 Jun 2016 11:56:26 +0200 Subject: [PATCH] Store column width only if manually adjusted Signed-off-by: Sven Strickroth --- src/Git/GitStatusListCtrl.cpp | 8 ++++++++ src/Git/GitStatusListCtrl.h | 21 +++++++++++++++++++-- src/TortoiseProc/GitStatusListCtrlHelpers.cpp | 23 ++++++++++++++++++----- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/Git/GitStatusListCtrl.cpp b/src/Git/GitStatusListCtrl.cpp index cb6707bb6..68dc5f988 100644 --- a/src/Git/GitStatusListCtrl.cpp +++ b/src/Git/GitStatusListCtrl.cpp @@ -197,6 +197,7 @@ BEGIN_MESSAGE_MAP(CGitStatusListCtrl, CListCtrl) ON_NOTIFY(HDN_ITEMCLICKW, 0, OnHdnItemclick) ON_NOTIFY(HDN_ENDTRACK, 0, OnColumnResized) ON_NOTIFY(HDN_ENDDRAG, 0, OnColumnMoved) + ON_NOTIFY(HDN_DIVIDERDBLCLICK, 0, OnHeaderDblClick) ON_NOTIFY_REFLECT_EX(LVN_ITEMCHANGED, OnLvnItemchanged) ON_WM_CONTEXTMENU() ON_NOTIFY_REFLECT(NM_DBLCLK, OnNMDblclk) @@ -1227,6 +1228,13 @@ BOOL CGitStatusListCtrl::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult) return FALSE; } +void CGitStatusListCtrl::OnHeaderDblClick(NMHDR* pNMHDR, LRESULT* pResult) +{ + m_ColumnManager.OnHeaderDblClick(pNMHDR, pResult); + + *pResult = FALSE; +} + void CGitStatusListCtrl::OnColumnResized(NMHDR *pNMHDR, LRESULT *pResult) { m_ColumnManager.OnColumnResized(pNMHDR,pResult); diff --git a/src/Git/GitStatusListCtrl.h b/src/Git/GitStatusListCtrl.h index 26b97fd4d..f11efd4d7 100644 --- a/src/Git/GitStatusListCtrl.h +++ b/src/Git/GitStatusListCtrl.h @@ -183,7 +183,10 @@ public: /// tracking column modifications void ColumnMoved (int column, int position); - void ColumnResized (int column); + /** + manual: 0: automatic updates, 1: manual updates, 2: reset manual adjusted state + */ + void ColumnResized(int column, int manual = 0); /// call these to update the user-prop list /// (will also auto-insert /-remove new list columns) @@ -196,6 +199,18 @@ public: void ResetColumns (DWORD defaultColumns); + void OnHeaderDblClick(NMHDR* pNMHDR, LRESULT* pResult) + { + LPNMHEADER header = reinterpret_cast(pNMHDR); + if (header + && (header->iItem >= 0) + && (header->iItem < GetColumnCount())) + { + ColumnResized(header->iItem, 2); + } + *pResult = 0; + } + void OnColumnResized(NMHDR *pNMHDR, LRESULT *pResult) { LPNMHEADER header = reinterpret_cast(pNMHDR); @@ -203,7 +218,7 @@ public: && (header->iItem >= 0) && (header->iItem < GetColumnCount())) { - ColumnResized (header->iItem); + ColumnResized (header->iItem, 1); } *pResult = 0; } @@ -397,6 +412,7 @@ private: int width; bool visible; bool relevant; ///< set to @a visible, if no *shown* item has that property + bool adjusted; }; std::vector columns; @@ -1040,6 +1056,7 @@ private: afx_msg void OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult); afx_msg BOOL OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnColumnResized(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnHeaderDblClick(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnColumnMoved(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); diff --git a/src/TortoiseProc/GitStatusListCtrlHelpers.cpp b/src/TortoiseProc/GitStatusListCtrlHelpers.cpp index 489dbda7c..ede958986 100644 --- a/src/TortoiseProc/GitStatusListCtrlHelpers.cpp +++ b/src/TortoiseProc/GitStatusListCtrlHelpers.cpp @@ -126,6 +126,7 @@ void ColumnManager::ReadSettings columns[i].width = widthlist[i]; columns[i].visible = true; columns[i].relevant = !(hideColumns & power); + columns[i].adjusted = false; power *= 2; } @@ -354,14 +355,22 @@ void ColumnManager::ColumnMoved (int column, int position) ApplyColumnOrder(); } -void ColumnManager::ColumnResized (int column) +void ColumnManager::ColumnResized(int column, int manual) { size_t index = static_cast(column); assert (index < columns.size()); assert (columns[index].visible); int width = control->GetColumnWidth (column); - columns[index].width = width; + if (manual != 0) + columns[index].adjusted = (manual == 1); + if (manual == 2) + { + control->SetColumnWidth(column, LVSCW_AUTOSIZE); + columns[index].width = 0; + } + else + columns[index].width = width; control->Invalidate (FALSE); } @@ -431,6 +440,7 @@ void ColumnManager::ResetColumns (DWORD defaultColumns) { columns[i].width = 0; columns[i].visible = (i < 32) && (((defaultColumns >> i) & 1) != 0); + columns[i].adjusted = false; } // update UI @@ -453,8 +463,11 @@ void ColumnManager::ParseWidths (const CString& widths) if (i < (int)itemName.size()) { // a standard column - - columns[i].width = width; + if (width != MAXLONG) + { + columns[i].width = width; + columns[i].adjusted = true; + } } else { @@ -574,7 +587,7 @@ CString ColumnManager::GetWidthString() const TCHAR buf[10] = { 0 }; for (size_t i = 0; i < itemName.size(); ++i) { - _stprintf_s (buf, 10, _T("%08X"), columns[i].width); + _stprintf_s (buf, 10, L"%08X", columns[i].adjusted ? columns[i].width : MAXLONG); result += buf; } -- 2.11.4.GIT