[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