reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 39a9621dad5a11eac79ebbd7d450ab422460c9e0
parent 4499739dfaf35de9d75d88f61a3284e0c9cf7489
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Sun,  5 Jun 2016 15:58:57 -0400

browser: make Ctrl+C copy the name of every selected package

insead of only the first one

Diffstat:
Msrc/browser.cpp | 8+++++---
Msrc/dialog.cpp | 7+++++++
Msrc/dialog.hpp | 2++
Msrc/listview.cpp | 5+++--
Msrc/listview.hpp | 2+-
5 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -192,10 +192,12 @@ void Browser::onCommand(const int id, const int event) bool Browser::onKeyDown(const int key, const int mods) { if(GetFocus() == m_list->handle() && mods & MOD_CONTROL && key == 'C') { - const Entry *entry = getEntry(m_list->currentIndex()); + vector<string> values; - if(entry) - setClipboard(getValue(NameColumn, *entry)); + for(const int index : m_list->selection(false)) + values.push_back(getValue(NameColumn, *getEntry(index))); + + setClipboard(values); return true; } diff --git a/src/dialog.cpp b/src/dialog.cpp @@ -22,6 +22,7 @@ #include <algorithm> #include <boost/range/adaptor/map.hpp> +#include <boost/algorithm/string/join.hpp> #include <reaper_plugin_functions.h> using namespace std; @@ -271,6 +272,12 @@ void Dialog::setClipboard(const string &text) CloseClipboard(); } +void Dialog::setClipboard(const vector<string> &values) +{ + if(!values.empty()) + setClipboard(boost::algorithm::join(values, "\n")); +} + HWND Dialog::getControl(const int idc) { return GetDlgItem(m_handle, idc); diff --git a/src/dialog.hpp b/src/dialog.hpp @@ -21,6 +21,7 @@ #include <functional> #include <map> #include <set> +#include <vector> #include <wdltypes.h> #include <reaper_plugin.h> @@ -90,6 +91,7 @@ public: int startTimer(int elapse, int id = 0); void stopTimer(int id); void setClipboard(const std::string &); + void setClipboard(const std::vector<std::string> &); void setCloseHandler(const CloseHandler &cb) { m_closeHandler = cb; } diff --git a/src/listview.cpp b/src/listview.cpp @@ -204,7 +204,7 @@ int ListView::currentIndex() const return translateBack(internalIndex); } -vector<int> ListView::selection() const +vector<int> ListView::selection(const bool sort) const { int index = -1; vector<int> indexes; @@ -213,7 +213,8 @@ vector<int> ListView::selection() const indexes.push_back(translateBack(index)); } - std::sort(indexes.begin(), indexes.end()); + if(sort) + std::sort(indexes.begin(), indexes.end()); return indexes; } diff --git a/src/listview.hpp b/src/listview.hpp @@ -54,7 +54,7 @@ public: int selectionSize() const; bool hasSelection() const { return selectionSize() > 0; } int currentIndex() const; - std::vector<int> selection() const; + std::vector<int> selection(bool sort = true) const; int itemUnderMouse() const; int rowCount() const { return (int)m_rows.size(); } int columnCount() const { return m_columnSize; }