kexi
kexidragobjects.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kexidragobjects.h"
00022
00023 #include <qcstring.h>
00024 #include <qdatastream.h>
00025 #include <kdebug.h>
00026
00028
00029 KexiFieldDrag::KexiFieldDrag(const QString& sourceMimeType, const QString& sourceName,
00030 const QString& field, QWidget *parent, const char *name)
00031 : QStoredDrag("kexi/field", parent, name)
00032 {
00033 QByteArray data;
00034 QDataStream stream1(data,IO_WriteOnly);
00035 stream1 << sourceMimeType << sourceName << field;
00036 setEncodedData(data);
00037 }
00038
00039 KexiFieldDrag::KexiFieldDrag(const QString& sourceMimeType, const QString& sourceName,
00040 const QStringList& fields, QWidget *parent, const char *name)
00041 : QStoredDrag((fields.count() > 1) ? "kexi/fields" : "kexi/field", parent, name)
00042 {
00043 QByteArray data;
00044 QDataStream stream1(data,IO_WriteOnly);
00045 if (fields.count() > 1)
00046 stream1 << sourceMimeType << sourceName << fields;
00047 else {
00048 QString field;
00049 if (fields.count() == 1)
00050 field = fields.first();
00051 else
00052 kexidbg << "KexiFieldDrag::KexiFieldDrag(): fields list is empty!" << endl;
00053 stream1 << sourceMimeType << sourceName << field;
00054 }
00055 setEncodedData(data);
00056 }
00057
00058 KexiFieldDrag::~KexiFieldDrag()
00059 {
00060 }
00061
00062 bool
00063 KexiFieldDrag::canDecodeSingle(QMimeSource *e)
00064 {
00065 return e->provides("kexi/field");
00066 }
00067
00068 bool
00069 KexiFieldDrag::canDecodeMultiple(QMimeSource *e)
00070 {
00071 return e->provides("kexi/field") || e->provides("kexi/fields");
00072 }
00073
00074 bool
00075 KexiFieldDrag::decodeSingle( QDropEvent* e, QString& sourceMimeType,
00076 QString& sourceName, QString& field )
00077 {
00078 QByteArray payload( e->data("kexi/field") );
00079 if (payload.isEmpty())
00080 return false;
00081 e->accept();
00082 QDataStream stream1(payload, IO_ReadOnly);
00083 stream1 >> sourceMimeType;
00084 stream1 >> sourceName;
00085 stream1 >> field;
00086
00087 return true;
00088 }
00089
00090 bool
00091 KexiFieldDrag::decodeMultiple( QDropEvent* e, QString& sourceMimeType,
00092 QString& sourceName, QStringList& fields )
00093 {
00094 QByteArray payload( e->data("kexi/fields") );
00095 if (payload.isEmpty()) {
00096 QString field;
00097 bool res = KexiFieldDrag::decodeSingle( e, sourceMimeType, sourceName, field );
00098 if (!res)
00099 return false;
00100 fields.append(field);
00101 return true;
00102 }
00103 e->accept();
00104 QDataStream stream1(payload, IO_ReadOnly);
00105 stream1 >> sourceMimeType;
00106 stream1 >> sourceName;
00107 stream1 >> fields;
00108
00109 return true;
00110 }
00111
00113
00114 KexiDataProviderDrag::KexiDataProviderDrag(const QString& sourceMimeType, const QString& sourceName,
00115 QWidget *parent, const char *name)
00116 : QStoredDrag("kexi/dataprovider", parent, name)
00117 {
00118 QByteArray data;
00119 QDataStream stream1(data,IO_WriteOnly);
00120 stream1 << sourceMimeType << sourceName;
00121 setEncodedData(data);
00122 }
00123
00124
00125 bool
00126 KexiDataProviderDrag::canDecode(QDragMoveEvent *e)
00127 {
00128 return e->provides("kexi/dataprovider");
00129 }
00130
00131 bool
00132 KexiDataProviderDrag::decode( QDropEvent* e, QString& sourceMimeType, QString& sourceName)
00133 {
00134 QCString tmp;
00135 QByteArray payload = e->data("kexidataprovider");
00136 if(payload.size())
00137 {
00138 e->accept();
00139 QDataStream stream1(payload, IO_ReadOnly);
00140 stream1 >> sourceMimeType;
00141 stream1 >> sourceName;
00142
00143 return true;
00144 }
00145 return false;
00146 }
|