From fc6bbbff7622970cf18b11d3320294b3fef1fe02 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 9 Feb 2014 00:06:20 -0800 Subject: [PATCH] Add select all to all generic list controls. --- Windows/W32Util/Misc.cpp | 26 +++++++++++++++++++++++++- Windows/W32Util/Misc.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Windows/W32Util/Misc.cpp b/Windows/W32Util/Misc.cpp index a983506a7d..e835701fd2 100644 --- a/Windows/W32Util/Misc.cpp +++ b/Windows/W32Util/Misc.cpp @@ -229,6 +229,11 @@ LRESULT CALLBACK GenericListControl::wndProc(HWND hwnd, UINT msg, WPARAM wParam, if (KeyDownAsync(VK_CONTROL)) list->ProcessCopy(); break; + + case 'A': + if (KeyDownAsync(VK_CONTROL)) + list->SelectAll(); + break; } break; } @@ -238,7 +243,7 @@ LRESULT CALLBACK GenericListControl::wndProc(HWND hwnd, UINT msg, WPARAM wParam, void GenericListControl::ProcessCopy() { - int start = ListView_GetSelectionMark(handle); + int start = GetSelectedIndex(); int size; if (start == -1) size = GetRowCount(); @@ -251,6 +256,20 @@ void GenericListControl::ProcessCopy() void GenericListControl::CopyRows(int start, int size) { std::wstring data; + + if (start == 0 && size == GetRowCount()) + { + // Let's also copy the header if everything is selected. + for (int c = 0; c < columnCount; ++c) + { + data.append(columns[c].name); + if (c < columnCount - 1) + data.append(L"\t"); + else + data.append(L"\r\n"); + } + } + for (int r = start; r < start + size; ++r) { for (int c = 0; c < columnCount; ++c) @@ -267,6 +286,11 @@ void GenericListControl::CopyRows(int start, int size) W32Util::CopyTextToClipboard(handle, data); } +void GenericListControl::SelectAll() +{ + ListView_SetItemState(handle, -1, LVIS_SELECTED, LVIS_SELECTED); +} + int GenericListControl::GetSelectedIndex() { return ListView_GetNextItem(handle, -1, LVNI_SELECTED); diff --git a/Windows/W32Util/Misc.h b/Windows/W32Util/Misc.h index 57d2ce6e46..cd065b3612 100644 --- a/Windows/W32Util/Misc.h +++ b/Windows/W32Util/Misc.h @@ -47,6 +47,7 @@ private: static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); void ResizeColumns(); void ProcessCopy(); + void SelectAll(); HWND handle; WNDPROC oldProc;