diff options
Diffstat (limited to 'ksysv/ksvdrag.cpp')
-rw-r--r-- | ksysv/ksvdrag.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/ksysv/ksvdrag.cpp b/ksysv/ksvdrag.cpp new file mode 100644 index 0000000..1f24417 --- /dev/null +++ b/ksysv/ksvdrag.cpp @@ -0,0 +1,102 @@ +// (c) 2000 Peter Putzer + +#include <qstring.h> +#include <qcstring.h> + +#include <kurl.h> + +#include "Data.h" +#include "ksvdraglist.h" +#include "ksvdrag.h" + +class KSVDrag::Private +{ +public: + QByteArray mNative; + QString mText; + KURL mURL; +}; + +KSVDrag::KSVDrag (const KSVData& item, QWidget* source, const char* name) + : QDragObject (source, name), + d (new Private()) +{ + QDataStream ds (d->mNative, IO_ReadWrite); + ds << item; + + d->mText = item.filenameAndPath (); + d->mURL.setPath (item.path() + "/" + item.filename()); +} + +KSVDrag::KSVDrag (const KSVItem& item, QWidget* source, const char* name) + : QDragObject (source, name), + d (new Private()) +{ + QDataStream ds (d->mNative, IO_ReadWrite); + ds << *item.data(); + + d->mText = item.toString(); + d->mURL.setPath (item.path() + "/" + item.filename()); +} + +KSVDrag::~KSVDrag () +{ + delete d; +} + +const char* KSVDrag::format (int i) const +{ + switch (i) + { + case Native: + return "application/x-ksysv"; + break; + + case Text: + return "text/plain"; + break; + + case URL: + return "text/uri-list"; + break; + + default: + return 0L; + } +} + +QByteArray KSVDrag::encodedData (const char* format) const +{ + QByteArray res; + + if (!strcmp (format, "application/x-ksysv")) + { + res = d->mNative; + } + else if (!strcmp (format, "text/plain")) + { + QDataStream ds (res, IO_ReadWrite); + ds << d->mText; + } + else if (!strcmp (format, "text/uri-list")) + { + res = QCString(d->mURL.url().latin1()).copy(); + } + + return res; +} + +bool KSVDrag::decodeNative (const QMimeSource* mime, KSVData& data) +{ + if (mime && mime->provides ("application/x-ksysv")) + { + QDataStream ds (mime->encodedData ("application/x-ksysv"), IO_ReadOnly); + ds >> data; + + return true; + } + + return false; +} + +#include "ksvdrag.moc" |