[SCM] ktp-text-ui packaging branch, master, updated. debian/15.12.1-1-1918-gdf4b0ec

Maximiliano Curia maxy at moszumanska.debian.org
Sat May 28 00:24:32 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-text-ui.git;a=commitdiff;h=848fd3f

The following commit has been merged in the master branch:
commit 848fd3f30cce000e3574e3265baf4f7db9aaf1ce
Author: Dan Vrátil <dvratil at redhat.com>
Date:   Fri Apr 11 17:16:31 2014 +0200

    Add actions to contacts in group chat
    
    It is now possible to start a 1-on-1 chat, send a file and show details for
    each contact in a group chat room.
    
    REVIEW: 117501
---
 lib/channel-contact-model.cpp |  6 ++++
 lib/channel-contact-model.h   |  4 +++
 lib/chat-widget.cpp           | 66 +++++++++++++++++++++++++++++++++++++++++++
 lib/chat-widget.h             |  5 ++++
 4 files changed, 81 insertions(+)

diff --git a/lib/channel-contact-model.cpp b/lib/channel-contact-model.cpp
index c2d7a80..0a7bb9a 100644
--- a/lib/channel-contact-model.cpp
+++ b/lib/channel-contact-model.cpp
@@ -23,6 +23,8 @@
 #include <KDebug>
 #include <KIcon>
 
+Q_DECLARE_METATYPE(Tp::ContactPtr)
+
 ChannelContactModel::ChannelContactModel(const Tp::TextChannelPtr &channel, QObject *parent)
     : QAbstractListModel(parent)
 {
@@ -94,6 +96,10 @@ QVariant ChannelContactModel::data(const QModelIndex &index, int role) const
         }
         return KTp::Presence(contact->presence()).icon();
     }
+
+    case ContactRole:
+        return QVariant::fromValue(m_contacts[row]);
+
     default:
         return QVariant();
     }
diff --git a/lib/channel-contact-model.h b/lib/channel-contact-model.h
index b03346b..4776339 100644
--- a/lib/channel-contact-model.h
+++ b/lib/channel-contact-model.h
@@ -40,6 +40,10 @@ class ChannelContactModel : public QAbstractListModel
 {
     Q_OBJECT
 public:
+    enum Roles {
+        ContactRole = Qt::UserRole + 1
+    };
+
     explicit ChannelContactModel(const Tp::TextChannelPtr &channel, QObject *parent = 0);
 
     void setTextChannel(const Tp::TextChannelPtr &channel);
diff --git a/lib/chat-widget.cpp b/lib/chat-widget.cpp
index 0920eb0..3682742 100644
--- a/lib/chat-widget.cpp
+++ b/lib/chat-widget.cpp
@@ -30,6 +30,7 @@
 
 #include <QtGui/QKeyEvent>
 #include <QtGui/QAction>
+#include <QtGui/QMenu>
 #include <QSortFilterProxyModel>
 
 #include <KColorDialog>
@@ -41,6 +42,7 @@
 #include <KLineEdit>
 #include <KMimeType>
 #include <KTemporaryFile>
+#include <KFileDialog>
 
 #include <TelepathyQt/Account>
 #include <TelepathyQt/Message>
@@ -55,9 +57,11 @@
 #include <KTp/actions.h>
 #include <KTp/message-processor.h>
 #include <KTp/Logger/scrollback-manager.h>
+#include <KTp/contact-info-dialog.h>
 
 #include <sonnet/speller.h>
 
+Q_DECLARE_METATYPE(Tp::ContactPtr)
 
 const QString groupChatOnlineIcon(QLatin1String("im-irc"));
 // FIXME We should have a proper icon for this
@@ -69,6 +73,7 @@ public:
     ChatWidgetPrivate() :
         remoteContactChatState(Tp::ChannelChatStateInactive),
         isGroupChat(false),
+        contactsMenu(0),
         logsLoaded(false),
         exchangedMessagesCount(0)
     {
@@ -85,6 +90,7 @@ public:
     Tp::AccountPtr account;
     Ui::ChatWidget ui;
     ChannelContactModel *contactModel;
+    QMenu *contactsMenu;
     ScrollbackManager *logManager;
     QTimer *pausedStateTimer;
     bool logsLoaded;
@@ -123,6 +129,23 @@ ChatWidget::ChatWidget(const Tp::TextChannelPtr & channel, const Tp::AccountPtr
     d->isGroupChat = (channel->targetHandleType() == Tp::HandleTypeContact ? false : true);
 
     d->ui.setupUi(this);
+    if (d->isGroupChat) {
+        d->contactsMenu = new QMenu(this);
+        d->contactsMenu->addAction(KIcon::fromTheme(QLatin1String("text-x-generic")),
+                                   i18n("Open chat window"),
+                                   this, SLOT(onOpenContactChatWindowClicked()));
+        QAction *action = d->contactsMenu->addAction(KIcon::fromTheme(QLatin1String("mail-attachment")),
+                                                     i18n("Send file"),
+                                                     this, SLOT(onSendFileClicked()));
+        action->setObjectName(QLatin1String("SendFileAction"));
+        d->contactsMenu->addSeparator();
+        d->contactsMenu->addAction(i18n("Show info..."),
+                                   this, SLOT(onShowContactDetailsClicked()));
+
+        d->ui.contactsView->setContextMenuPolicy(Qt::CustomContextMenu);
+        connect(d->ui.contactsView, SIGNAL(customContextMenuRequested(QPoint)),
+                this, SLOT(onContactsViewContextMenuRequested(QPoint)));
+    }
 
     // connect channel signals
     setupChannelSignals();
@@ -1054,4 +1077,47 @@ void ChatWidget::reloadTheme()
     initChatArea();
 }
 
+void ChatWidget::onContactsViewContextMenuRequested(const QPoint& point)
+{
+    const QModelIndex index = d->ui.contactsView->indexAt(point);
+    if (!index.isValid()) {
+        return;
+    }
+
+    const KTp::ContactPtr contact = KTp::ContactPtr::qObjectCast<Tp::Contact>(index.data(ChannelContactModel::ContactRole).value<Tp::ContactPtr>());
+    d->contactsMenu->findChild<QAction*>(QLatin1String("SendFileAction"))->setEnabled(contact->fileTransferCapability());
+
+    d->contactsMenu->setProperty("Contact", QVariant::fromValue(contact));
+    d->contactsMenu->popup(d->ui.contactsView->mapToGlobal(point));
+}
+
+void ChatWidget::onShowContactDetailsClicked()
+{
+    const KTp::ContactPtr contact = d->contactsMenu->property("Contact").value<KTp::ContactPtr>();
+    Q_ASSERT(!contact.isNull());
+
+    KTp::ContactInfoDialog *dlg = new KTp::ContactInfoDialog(d->account, contact, this);
+    connect(dlg, SIGNAL(finished()), dlg, SLOT(deleteLater()));
+    dlg->show();
+}
+
+void ChatWidget::onOpenContactChatWindowClicked()
+{
+    const KTp::ContactPtr contact = d->contactsMenu->property("Contact").value<KTp::ContactPtr>();
+    Q_ASSERT(!contact.isNull());
+    KTp::Actions::startChat(d->account, contact);
+}
+
+void ChatWidget::onSendFileClicked()
+{
+    const KTp::ContactPtr contact = d->contactsMenu->property("Contact").value<KTp::ContactPtr>();
+    Q_ASSERT(!contact.isNull());
+    const QString filename = KFileDialog::getOpenFileName();
+    if (filename.isEmpty() || !QFile::exists(filename)) {
+        return;
+    }
+
+    KTp::Actions::startFileTransfer(d->account, contact, filename);
+}
+
 #include "chat-widget.moc"
diff --git a/lib/chat-widget.h b/lib/chat-widget.h
index f2fbd3b..d9c4e60 100644
--- a/lib/chat-widget.h
+++ b/lib/chat-widget.h
@@ -193,6 +193,11 @@ private Q_SLOTS:
     void temporaryFileTransferChannelCreated(Tp::PendingOperation *operation);
     void temporaryFileTransferStateChanged(Tp::FileTransferState, Tp::FileTransferStateChangeReason);
 
+    void onContactsViewContextMenuRequested(const QPoint &point);
+    void onOpenContactChatWindowClicked();
+    void onShowContactDetailsClicked();
+    void onSendFileClicked();
+
 private:
     /** connects necessary signals for the channel */
     void setupChannelSignals();

-- 
ktp-text-ui packaging



More information about the pkg-kde-commits mailing list