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:
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; }