From fc92ad3a869d432b1df09b65e3f9bdfd18ed1e28 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 20 Apr 2014 21:29:08 +0200 Subject: [PATCH] Prevent drag&drop between inputs and mixers --- companion/src/modeledit/mixerslist.cpp | 26 ++++++++++++++++---------- companion/src/modeledit/mixerslist.h | 3 +++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/companion/src/modeledit/mixerslist.cpp b/companion/src/modeledit/mixerslist.cpp index 447570b3c..f1a368a03 100644 --- a/companion/src/modeledit/mixerslist.cpp +++ b/companion/src/modeledit/mixerslist.cpp @@ -18,10 +18,23 @@ void MixersList::keyPressEvent(QKeyEvent *event) emit keyWasPressed(event); } + +/** + @brief Override to give us different mime type for mixers and inputs +*/ +QStringList MixersList::mimeTypes () const +{ + QStringList types; + if (expo) types << "application/x-companion-expo-item"; + else types << "application/x-companion-mix-item"; + return types; +} + bool MixersList::dropMimeData( int index, const QMimeData * data, Qt::DropAction action ) { // qDebug() << "MixersList::dropMimeData() index:" << index << "formats" << data->formats(); - QByteArray dropData = data->data("application/x-qabstractitemmodeldatalist"); + QByteArray dropData = data->data(expo ? "application/x-companion-expo-item" : "application/x-companion-mix-item"); + if (dropData.isNull() ) return false; QDataStream stream(&dropData, QIODevice::ReadOnly); QByteArray qba; @@ -31,24 +44,17 @@ bool MixersList::dropMimeData( int index, const QMimeData * data, Qt::DropAction stream >> r >> c >> v; QList lsVars; lsVars = v.values(); - //QString itemString = lsVars.at(0).toString(); qba.append(lsVars.at(1).toByteArray().mid(1)); // qDebug() << "MixersList::dropMimeData() added" << lsVars.count() << "items, data:" << lsVars; - - //if(itemString.isEmpty()) {}; } if(qba.length()>0) { QMimeData *mimeData = new QMimeData; - if (expo) - mimeData->setData("application/x-companion-expo", qba); - else - mimeData->setData("application/x-companion-mix", qba); - + mimeData->setData(expo ? "application/x-companion-expo" : "application/x-companion-mix", qba); emit mimeDropped(index, mimeData, action); + delete mimeData; //is this correct? is mimeData freed elswere?? } - return true; } diff --git a/companion/src/modeledit/mixerslist.h b/companion/src/modeledit/mixerslist.h index 991b186df..a0cc9f0c7 100644 --- a/companion/src/modeledit/mixerslist.h +++ b/companion/src/modeledit/mixerslist.h @@ -22,6 +22,9 @@ class MixersList : public QListWidget public slots: bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action); + protected: + virtual QStringList mimeTypes() const; + private: QPoint dragStartPosition; bool expo;