From af483fda802d27a0595c6e4db87720480dac09b5 Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Wed, 5 Oct 2005 20:44:14 +0000 Subject: [PATCH] add drag and drop to AppletInfo add tests for AppletInfo drag and drop support svn path=/trunk/KDE/kdebase/workspace/plasma/lib/; revision=467639 --- appletinfo.cpp | 37 ++++++++++++++++++++++++++++++++++++- appletinfo.h | 29 +++++++++++++++++++++++++++++ tests/testAppletInfo.cpp | 11 +++++++++++ tests/testAppletInfo.h | 1 + 4 files changed, 77 insertions(+), 1 deletion(-) diff --git a/appletinfo.cpp b/appletinfo.cpp index 1625ce46e..accdf49f6 100644 --- a/appletinfo.cpp +++ b/appletinfo.cpp @@ -19,7 +19,10 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ******************************************************************/ -#include +#include +#include +#include + #include #include @@ -210,4 +213,36 @@ bool AppletInfo::operator<=(const AppletInfo& rhs) const return name().lower() <= rhs.name().lower(); } +void AppletInfo::populateMimeData(QMimeData* mimeData) +{ + QByteArray a; + QDataStream s(&a, QIODevice::WriteOnly); + s << desktopFilePath(); + mimeData->setData("application/plasmaAppletInfo", a); +} + +bool AppletInfo::canDecode(const QMimeData* mimeData) +{ + return mimeData->hasFormat("application/plasmaAppletInfo"); +} + +AppletInfo AppletInfo::fromMimeData(const QMimeData* mimeData) +{ + QByteArray a = mimeData->data("application/plasmaAppletInfo"); + + if (a.isEmpty()) + { + return AppletInfo(); + } + + QBuffer buff(&a); + buff.open(QIODevice::ReadOnly); + QDataStream s(&buff); + + QString desktopFile; + s >> desktopFile; + AppletInfo info(desktopFile); + return info; +} + } // Plasma namespace diff --git a/appletinfo.h b/appletinfo.h index eddcf2105..369c8f1b1 100644 --- a/appletinfo.h +++ b/appletinfo.h @@ -145,6 +145,35 @@ class KDE_EXPORT AppletInfo */ bool operator==(const AppletInfo& rhs) const; + /** + * Part of the drag and drop support for AppletInfo. + * Populates a QMimeData object with the necessary data to create an + * equivalent AppletInfo object on the receiving end. + * @param mimeData a pointer to a QMimeData object. Any Applet Info + * previously added to this object will be overwritten. + */ + void populateMimeData(QMimeData* mimeData); + + /** + * Part of the drag and drop support for AppletInfo. + * Returns true if the QMimeData object passed in contains the proper + * mimetype for an AppletInfo + * @param mimeData a pointer to a QMimeData object which may contain + * AppletInfo data + */ + static bool canDecode(const QMimeData* mimeData); + + /** + * Part of the drag and drop support for AppletInfo. + * Given a QMimeData object that contains an AppletInfo, returns a + * corresponding AppletInfo object + * @param mimeData a pointer to a QMimeData object which should contain + * AppletInfo data. + * @see canDecode + */ + static AppletInfo fromMimeData(const QMimeData* mimeData); + + private: void setName(const QString& name); void setComment(const QString& comment); diff --git a/tests/testAppletInfo.cpp b/tests/testAppletInfo.cpp index 1810d28aa..c2c192b68 100644 --- a/tests/testAppletInfo.cpp +++ b/tests/testAppletInfo.cpp @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include +#include #include #include @@ -245,5 +246,15 @@ void TestAppletInfo::copyConstructor() COMPARE(copied.hidden(), notUniqueNative->hidden()); } +void TestAppletInfo::dragAndDrop() +{ + QMimeData* data = new QMimeData; + notUniqueNative->populateMimeData(data); + VERIFY(Plasma::AppletInfo::canDecode(data)); + Plasma::AppletInfo dropped = Plasma::AppletInfo::fromMimeData(data); + COMPARE(dropped.desktopFile(), notUniqueNative->desktopFile()); + delete data; +} + QTTEST_MAIN(TestAppletInfo) #include "testAppletInfo.moc" diff --git a/tests/testAppletInfo.h b/tests/testAppletInfo.h index 2ea3c99c1..a0978e164 100644 --- a/tests/testAppletInfo.h +++ b/tests/testAppletInfo.h @@ -58,6 +58,7 @@ class TestAppletInfo: public QObject void hidden(); void assignment(); void copyConstructor(); + void dragAndDrop(); private: Plasma::AppletInfo* notUniqueNative;