summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/Roster')
-rw-r--r--Swift/QtUI/Roster/QtTreeWidget.cpp3
-rw-r--r--Swift/QtUI/Roster/RosterModel.cpp30
-rw-r--r--Swift/QtUI/Roster/RosterModel.h3
3 files changed, 35 insertions, 1 deletions
diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp
index 64d0fcf..99f1f34 100644
--- a/Swift/QtUI/Roster/QtTreeWidget.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidget.cpp
@@ -43,4 +43,5 @@ QtTreeWidget::QtTreeWidget(UIEventStream* eventStream, SettingsProvider* setting
setAcceptDrops(true);
#endif
+ setDragEnabled(true);
setRootIsDecorated(true);
connect(this, SIGNAL(activated(const QModelIndex&)), this, SLOT(handleItemActivated(const QModelIndex&)));
@@ -158,5 +159,5 @@ void QtTreeWidget::dragMoveEvent(QDragMoveEvent* event) {
}
}
- event->ignore();
+ QTreeView::dragMoveEvent(event);
}
diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp
index 1b93047..3791ffa 100644
--- a/Swift/QtUI/Roster/RosterModel.cpp
+++ b/Swift/QtUI/Roster/RosterModel.cpp
@@ -11,4 +11,5 @@
#include <QColor>
#include <QIcon>
+#include <QMimeData>
#include <qdebug.h>
@@ -66,4 +67,12 @@ void RosterModel::handleDataChanged(RosterItem* item) {
}
+Qt::ItemFlags RosterModel::flags(const QModelIndex& index) const {
+ Qt::ItemFlags flags = QAbstractItemModel::flags(index);
+ if (dynamic_cast<GroupRosterItem*>(getItem(index)) == NULL) {
+ flags |= Qt::ItemIsDragEnabled;
+ }
+ return flags;
+}
+
int RosterModel::columnCount(const QModelIndex& /*parent*/) const {
return 1;
@@ -231,3 +240,24 @@ int RosterModel::rowCount(const QModelIndex& parent) const {
}
+QMimeData* RosterModel::mimeData(const QModelIndexList& indexes) const {
+ QMimeData* data = QAbstractItemModel::mimeData(indexes);
+
+ ContactRosterItem *item = dynamic_cast<ContactRosterItem*>(getItem(indexes.first()));
+ if (item == NULL) {
+ return data;
+ }
+
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+
+ // jid, chatName, activity, statusType, avatarPath
+ dataStream << P2QSTRING(item->getJID().toString());
+ dataStream << P2QSTRING(item->getDisplayName());
+ dataStream << P2QSTRING(item->getStatusText());
+ dataStream << item->getSimplifiedStatusShow();
+ dataStream << P2QSTRING(item->getAvatarPath().string());
+ data->setData("application/vnd.swift.contact-jid", itemData);
+ return data;
+}
+
}
diff --git a/Swift/QtUI/Roster/RosterModel.h b/Swift/QtUI/Roster/RosterModel.h
index 23d54f8..cae80c4 100644
--- a/Swift/QtUI/Roster/RosterModel.h
+++ b/Swift/QtUI/Roster/RosterModel.h
@@ -30,4 +30,5 @@ namespace Swift {
~RosterModel();
void setRoster(Roster* swiftRoster);
+ Qt::ItemFlags flags(const QModelIndex& index) const;
int columnCount(const QModelIndex& parent = QModelIndex()) const;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
@@ -36,4 +37,6 @@ namespace Swift {
QModelIndex parent(const QModelIndex& index) const;
int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ QMimeData* mimeData(const QModelIndexList& indexes) const;
+
signals:
void itemExpanded(const QModelIndex& item, bool expanded);