[SCM] ktp-contact-list packaging branch, master, updated. debian/15.12.1-2-1070-g6c56f91
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:05:41 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-contact-list.git;a=commitdiff;h=001a274
The following commit has been merged in the master branch:
commit 001a274600708c17b183cb433a273275d20750d3
Author: Keith Rusler <xzekecomax at gmail.com>
Date: Mon Mar 21 11:58:46 2011 +0100
Add contact context menu by Keith Rusler <comawhite>
---
accounts-model.cpp | 11 ++++
accounts-model.h | 2 +
main-widget.cpp | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
main-widget.h | 10 +++
4 files changed, 206 insertions(+), 2 deletions(-)
diff --git a/accounts-model.cpp b/accounts-model.cpp
index 266828a..366c46f 100644
--- a/accounts-model.cpp
+++ b/accounts-model.cpp
@@ -234,6 +234,17 @@ Tp::AccountPtr AccountsModel::accountForIndex(const QModelIndex &index) const
}
}
+Tp::ContactPtr AccountsModel::contactForIndex(const QModelIndex& index) const
+{
+ TreeNode *contactNode = mPriv->node(index);
+ ContactModelItem *item = qobject_cast<ContactModelItem *>(contactNode);
+ if (item) {
+ return item->contact();
+ } else {
+ return Tp::ContactPtr();
+ }
+}
+
Tp::AccountPtr AccountsModel::accountForContactIndex(const QModelIndex& index) const
{
TreeNode *contactNode = mPriv->node(index);
diff --git a/accounts-model.h b/accounts-model.h
index 319d537..42cc2b2 100644
--- a/accounts-model.h
+++ b/accounts-model.h
@@ -94,6 +94,8 @@ public:
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role) const;
Tp::AccountPtr accountForIndex(const QModelIndex &index) const;
+ Tp::ContactPtr contactForIndex(const QModelIndex &index) const;
+
Tp::AccountPtr accountForContactIndex(const QModelIndex &index) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
diff --git a/main-widget.cpp b/main-widget.cpp
index 1b64258..e4ac02f 100644
--- a/main-widget.cpp
+++ b/main-widget.cpp
@@ -34,9 +34,11 @@
#include <TelepathyQt4/PendingChannelRequest>
#include <TelepathyQt4/ClientRegistrar>
#include <TelepathyQt4/Constants>
+#include <TelepathyQt4/ContactManager>
#include <KDebug>
#include <KUser>
+#include <KMenu>
#include "main-widget.h"
#include "ui_main-widget.h"
@@ -431,11 +433,190 @@ void MainWidget::toggleSearchWidget(bool show)
}
}
-void MainWidget::onCustomContextMenuRequested(const QPoint& point)
+void MainWidget::onCustomContextMenuRequested(const QPoint &)
{
- Q_UNUSED(point);
+ QModelIndex index = m_contactsListView->currentIndex();
+ Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ if (contact.isNull()) {
+ kDebug() << "Contact is nulled";
+ return;
+ }
+
+ Tp::AccountPtr account = m_model->accountForContactIndex(m_modelFilter->mapToSource(index));
+ if (account.isNull()) {
+ kDebug() << "Account is nulled";
+ return;
+ }
+
+ QScopedPointer<KMenu> menu(new KMenu);
+ menu->addTitle(contact->alias());
+ QAction* action = menu->addAction(i18n("Start Chat..."));
+ action->setIcon(KIcon("mail-message-new"));
+ connect(action, SIGNAL(triggered(bool)),
+ SLOT(slotStartTextChat()));
+
+ Tp::ConnectionPtr accountConnection = account->connection();
+ if (accountConnection.isNull()) {
+ kDebug() << "Account connection is nulled.";
+ return;
+ }
+
+ if (accountConnection->capabilities().streamedMediaAudioCalls()) {
+ action = menu->addAction(i18n("Start Audio Call..."));
+ action->setIcon(KIcon("voicecall"));
+ action->setDisabled(true);
+ }
+
+ if (accountConnection->capabilities().streamedMediaVideoCalls()) {
+ action = menu->addAction(i18n("Start Video Call..."));
+ action->setIcon(KIcon("webcamsend"));
+ action->setDisabled(true);
+ }
+
+ if (accountConnection->capabilities().fileTransfers()) {
+ action = menu->addAction(i18n("Send File..."));
+ action->setDisabled(true);
+ }
+ menu->addSeparator();
+
+ if (accountConnection->actualFeatures().contains(Tp::Connection::FeatureRosterGroups)) {
+ QMenu* groupAddMenu = menu->addMenu(i18n("Move to Group"));
+
+ QStringList currentGroups = contact->groups();
+ QStringList allGroups = accountConnection->contactManager()->allKnownGroups();
+ foreach (const QString &group, currentGroups) {
+ allGroups.removeAll(group);
+ }
+
+ groupAddMenu->addAction(i18n("Create New Group..."));
+ groupAddMenu->addSeparator();
+
+ foreach (const QString &group, allGroups) {
+ connect(groupAddMenu->addAction(group), SIGNAL(triggered(bool)),
+ SLOT(slotAddContactToGroupTriggered()));
+ }
+ } else {
+ kDebug() << "Unable to support Groups";
+ }
+
+ //menu->addSeparator();
+
+ // TODO Remove when Telepathy actually supports blocking.
+ /*if (contact->isBlocked()) {
+ * action = menu->addAction(i18n("Unlock User"));
+ * connect(action, SIGNAL(triggered(bool)),
+ * SLOT(slotUnblockContactTriggered()));
+} else {
+ action = menu->addAction(i18n("Block User"));
+ connect(action, SIGNAL(triggered(bool)),
+ SLOT(slotBlockContactTriggered()));
+}*/
+
+ menu->exec(QCursor::pos());
+}
+
+void MainWidget::slotAddContactToGroupFinished(Tp::PendingOperation* operation)
+{
+ if (operation->isError()) {
+ kDebug() << operation->errorName();
+ kDebug() << operation->errorMessage();
+ }
+}
+
+void MainWidget::slotAddContactToGroupTriggered()
+{
+ QModelIndex index = m_contactsListView->currentIndex();
+ Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ if (contact.isNull()) {
+ kDebug() << "Contact is nulled";
+ return;
+ }
+
+ QAction *action = qobject_cast<QAction*>(sender());
+ if (!action) {
+ kDebug() << "Invalid action";
+ return;
+ }
+
+ const QStringList currentGroups = contact->groups();
+
+ Tp::PendingOperation* operation = contact->addToGroup(action->text().remove('&'));
+ connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(slotAddContactToGroupFinished(Tp::PendingOperation*)));
+
+ if (operation) {
+ foreach (const QString &group, currentGroups) {
+ Tp::PendingOperation* operation = contact->removeFromGroup(group);
+ connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(slotRemoveContactFromGroupFinished(Tp::PendingOperation*)));
+ }
+ }
}
+void MainWidget::slotBlockContactFinished(Tp::PendingOperation *operation)
+{
+ if (operation->isError()) {
+ kDebug() << operation->errorName();
+ kDebug() << operation->errorMessage();
+ }
+}
+
+void MainWidget::slotBlockContactTriggered()
+{
+ QModelIndex index = m_contactsListView->currentIndex();
+ Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ if (contact.isNull()) {
+ kDebug() << "Contact is nulled";
+ return;
+ }
+
+ Tp::PendingOperation *operation = contact->block(true);
+ connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(slotBlockContactFinished(Tp::PendingOperation*)));
+}
+
+void MainWidget::slotRemoveContactFromGroupFinished(Tp::PendingOperation *operation)
+{
+ if (operation->isError()) {
+ kDebug() << operation->errorName();
+ kDebug() << operation->errorMessage();
+ }
+}
+
+void MainWidget::slotStartTextChat()
+{
+ QModelIndex index = m_contactsListView->currentIndex();
+ if (!index.isValid()) {
+ kDebug() << "Invalid index provided.";
+ return;
+ }
+
+ startTextChannel(index);
+}
+
+void MainWidget::slotUnblockContactFinished(Tp::PendingOperation* operation)
+{
+ if (operation->isError()) {
+ kDebug() << operation->errorName();
+ kDebug() << operation->errorMessage();
+ }
+}
+
+void MainWidget::slotUnblockContactTriggered()
+{
+ QModelIndex index = m_contactsListView->currentIndex();
+ Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ if (contact.isNull()) {
+ kDebug() << "Contact is nulled";
+ return;
+ }
+
+ Tp::PendingOperation *operation = contact->block(false);
+ connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(slotUnblockContactFinished(Tp::PendingOperation*)));
+}
+
+
void MainWidget::setCustomPresenceMessage(const QString& message)
{
for (int i = 0; i < m_accountButtonsLayout->count() - 1; i++) {
diff --git a/main-widget.h b/main-widget.h
index bedc340..695de4c 100644
--- a/main-widget.h
+++ b/main-widget.h
@@ -82,6 +82,16 @@ public Q_SLOTS:
void onCustomContextMenuRequested(const QPoint &point);
+private Q_SLOTS:
+ void slotAddContactToGroupFinished(Tp::PendingOperation *operation);
+ void slotAddContactToGroupTriggered();
+ void slotBlockContactFinished(Tp::PendingOperation *operation);
+ void slotBlockContactTriggered();
+ void slotRemoveContactFromGroupFinished(Tp::PendingOperation *operation);
+ void slotStartTextChat();
+ void slotUnblockContactFinished(Tp::PendingOperation *operation);
+ void slotUnblockContactTriggered();
+
private:
AccountsModel *m_model;
AccountFilterModel *m_modelFilter;
--
ktp-contact-list packaging
More information about the pkg-kde-commits
mailing list