diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /akregator/src/dragobjects.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'akregator/src/dragobjects.cpp')
-rw-r--r-- | akregator/src/dragobjects.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/akregator/src/dragobjects.cpp b/akregator/src/dragobjects.cpp new file mode 100644 index 000000000..9f7f812b7 --- /dev/null +++ b/akregator/src/dragobjects.cpp @@ -0,0 +1,119 @@ +/* + This file is part of Akregator. + + Copyright (C) 2005 Frank Osterfeld <frank.osterfeld@kdemail.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "dragobjects.h" +#include "feed.h" + +#include <qcstring.h> + +namespace Akregator { + +class Article; + +ArticleDrag::ArticleDrag(const QValueList<Article>& articles, QWidget* dragSource, const char* name) +: KURLDrag(articleURLs(articles), dragSource, name), m_items(articlesToDragItems(articles)) +{} + +bool ArticleDrag::canDecode(const QMimeSource* e) +{ + return e->provides("akregator/articles"); +} + +bool ArticleDrag::decode(const QMimeSource* e, QValueList<ArticleDragItem>& articles) +{ + articles.clear(); + QByteArray array = e->encodedData("akregator/articles"); + + QDataStream stream(array, IO_ReadOnly); + + while (!stream.atEnd()) + { + ArticleDragItem i; + stream >> i.feedURL; + stream >> i.guid; + articles.append(i); + } + + return true; +} + +const char* ArticleDrag::format(int i) const +{ + if (i == 0) + return "text/uri-list"; + else if (i == 1) + return "akregator/articles"; + + return 0; +} + +QByteArray ArticleDrag::encodedData(const char* mime) const +{ + QCString mimetype(mime); + if (mimetype == "akregator/articles") + { + QByteArray ba; + QDataStream stream(ba, IO_WriteOnly); + + QValueList<ArticleDragItem>::ConstIterator end = m_items.end(); + for (QValueList<ArticleDragItem>::ConstIterator it = m_items.begin(); it != end; ++it) + { + stream << (*it).feedURL; + stream << (*it).guid; + } + return ba; + } + else + { + return KURLDrag::encodedData(mime); + } +} + +QValueList<ArticleDragItem> ArticleDrag::articlesToDragItems(const QValueList<Article>& articles) +{ + QValueList<ArticleDragItem> items; + + QValueList<Article>::ConstIterator end(articles.end()); + + for (QValueList<Article>::ConstIterator it = articles.begin(); it != end; ++it) + { + ArticleDragItem i; + i.feedURL = (*it).feed() ? (*it).feed()->xmlUrl() : ""; + i.guid = (*it).guid(); + items.append(i); + } + + return items; +} + +KURL::List ArticleDrag::articleURLs(const QValueList<Article>& articles) +{ + KURL::List urls; + QValueList<Article>::ConstIterator end(articles.end()); + for (QValueList<Article>::ConstIterator it = articles.begin(); it != end; ++it) + urls.append((*it).link()); + return urls; +} + +} // namespace Akregator |