kexi

kexidragobjects.cpp

00001 /* This file is part of the KDE project
00002    Copyright (C) 2002, 2003 Joseph Wenninger <jowenn@kde.org>
00003    Copyright (C) 2005 Jaroslaw Staniek <js@iidea.pl>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
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 //  kdDebug() << "KexiFieldDrag::decode() decoded: " << sourceMimeType<<"/"<<sourceName<<"/"<<field << endl;
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()) {//try single
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 //  kdDebug() << "KexiFieldDrag::decode() decoded: " << sourceMimeType<<"/"<<sourceName<<"/"<<fields << endl;
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 //      kdDebug() << "KexiDataProviderDrag::decode() decoded: " << sourceMimeType <<"/"<<sourceName<< endl;
00143         return true;
00144     }
00145     return false;
00146 }
KDE Home | KDE Accessibility Home | Description of Access Keys