Copy/paste model values to system clipboard

Previously they were copy/pasted internally, and not visible across LMMS
instances.
This commit is contained in:
Colin Wallace
2018-03-15 18:45:13 -07:00
committed by Colin Wallace
parent 7593b2ee58
commit 56b4740146
4 changed files with 40 additions and 33 deletions

View File

@@ -22,6 +22,8 @@
*
*/
#include <QApplication>
#include <QClipboard>
#include <QMenu>
#include <QMouseEvent>
@@ -37,6 +39,7 @@
#include "AutomationEditor.h"
static float floatFromClipboard(bool* ok=nullptr);
AutomatableModelView::AutomatableModelView( ::Model* model, QWidget* _this ) :
ModelView( model, _this ),
@@ -74,13 +77,18 @@ void AutomatableModelView::addDefaultActions( QMenu* menu )
AutomatableModel::tr( "&Copy value (%1%2)" ).
arg( model->displayValue( model->value<float>() ) ).
arg( m_unit ),
model, SLOT( copyValue() ) );
amvSlots, SLOT( copyToClipboard() ) );
menu->addAction( embed::getIconPixmap( "edit_paste" ),
AutomatableModel::tr( "&Paste value (%1%2)").
arg( model->displayValue( AutomatableModel::copiedValue() ) ).
arg( m_unit ),
model, SLOT( pasteValue() ) );
bool canPaste = true;
const float valueToPaste = floatFromClipboard(&canPaste);
const QString pasteDesc = canPaste ?
AutomatableModel::tr( "&Paste value (%1%2)").
arg( model->displayValue( valueToPaste ) ).
arg( m_unit )
: AutomatableModel::tr( "&Paste value");
QAction* pasteAction = menu->addAction( embed::getIconPixmap( "edit_paste" ),
pasteDesc, amvSlots, SLOT( pasteFromClipboard() ) );
pasteAction->setEnabled(canPaste);
menu->addSeparator();
@@ -162,7 +170,6 @@ void AutomatableModelView::mousePressEvent( QMouseEvent* event )
AutomatableModelViewSlots::AutomatableModelViewSlots( AutomatableModelView* amv, QObject* parent ) :
QObject(),
m_amv( amv )
@@ -245,5 +252,26 @@ void AutomatableModelViewSlots::unlinkAllModels()
m_amv->modelUntyped()->unlinkAllModels();
}
void AutomatableModelViewSlots::copyToClipboard()
{
QClipboard* clipboard = QApplication::clipboard();
clipboard->setText(QString::number(m_amv->value<float>()));
}
void AutomatableModelViewSlots::pasteFromClipboard()
{
bool isNumber = false;
const float number = floatFromClipboard(&isNumber);
if (isNumber) {
m_amv->modelUntyped()->setValue(number);
}
}
/// Attempt to parse a float from the clipboard
static float floatFromClipboard(bool* ok)
{
const QClipboard* clipboard = QApplication::clipboard();
return clipboard->text().toFloat(ok);
}