[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:19:08 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-text-ui.git;a=commitdiff;h=fb5d9f2
The following commit has been merged in the master branch:
commit fb5d9f201a9773864b89cf8dba47acc8b94116fa
Author: David Edmundson <kde at davidedmundson.co.uk>
Date: Thu Mar 24 02:34:41 2011 +0000
Turn the channel contact list into a model.
Show channel users in a tree view.
---
lib/channel-contact-list.cpp | 137 ++++++++++++++++++++++++++++++-------------
lib/channel-contact-list.h | 40 ++++++-------
lib/chat-widget.cpp | 2 +
lib/chat-widget.ui | 29 ++++-----
4 files changed, 127 insertions(+), 81 deletions(-)
diff --git a/lib/channel-contact-list.cpp b/lib/channel-contact-list.cpp
index 2eccee0..980f4eb 100644
--- a/lib/channel-contact-list.cpp
+++ b/lib/channel-contact-list.cpp
@@ -18,66 +18,119 @@
***************************************************************************/
#include "channel-contact-list.h"
-#include <TelepathyQt4/Contact>
+
#include <KDebug>
+#include <KIcon>
+
+ChannelContactList::ChannelContactList(const Tp::TextChannelPtr & channel, QObject *parent)
+ : QAbstractListModel(parent)
+{
+
+ addContacts(channel->groupContacts());
+
+ connect(channel.data(),
+ SIGNAL(groupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
+ Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)),
+ SLOT(onGroupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
+ Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)));
+}
+
+void ChannelContactList::onGroupMembersChanged(const Tp::Contacts & groupMembersAdded,
+ const Tp::Contacts & groupLocalPendingMembersAdded,
+ const Tp::Contacts & groupRemotePendingMembersAdded,
+ const Tp::Contacts & groupMembersRemoved,
+ const Tp::Channel::GroupMemberChangeDetails & details)
+{
+ kDebug();
-/** reif This class provides an abstracted way of getting presence changes from a contact
- * It was needed to be able to pair up a contact changing, with the name of the contact.
- * It gives a single signal for the calling code to handle for every contact, and
- * also safetly handles connect and disconnecting slots as contacts enter and leave a channel
-*/
+ Q_UNUSED(groupLocalPendingMembersAdded);
+ Q_UNUSED(groupRemotePendingMembersAdded);
+ Q_UNUSED(details);
-/** Internal private class*/
+ addContacts(groupMembersAdded);
+ removeContacts(groupMembersRemoved);
+}
+
+void ChannelContactList::onContactPresenceChanged(const Tp::Presence &presence)
+{
+ Tp::ContactPtr contact(qobject_cast<Tp::Contact*>(sender()));
-/*
- [23:50] <oggis_> if you want to show events just for the current members, then i'd maintain said list/set by connecting to
-groupMembersChanged and adding to it everybody in the groupMembersAdded set, and removing to it everybody in any of the
-other sets (taking set union of them is easiest)
- */
+ QModelIndex index = createIndex(m_contacts.lastIndexOf(contact), 0);
+ emit dataChanged(index, index);
+ emit contactPresenceChanged(contact, presence);}
-ChannelContactListContact::ChannelContactListContact(const Tp::ContactPtr & contact, QObject *parent)
- : QObject(parent)
+void ChannelContactList::onContactAliasChanged(const QString &alias)
{
- m_contact = contact;
- connect(m_contact.data(), SIGNAL(presenceChanged(Tp::Presence)),
- SLOT(onPresenceChanged(Tp::Presence)));
- connect(m_contact.data(), SIGNAL(aliasChanged(QString)), SLOT(onAliasChanged(QString)));
+ Tp::ContactPtr contact(qobject_cast<Tp::Contact*>(sender()));
+
+ QModelIndex index = createIndex(m_contacts.lastIndexOf(contact), 0);
+ emit dataChanged(index, index);
+
+ emit contactAliasChanged(contact, alias);
}
-void ChannelContactListContact::onPresenceChanged(const Tp::Presence & presence)
+int ChannelContactList::rowCount(const QModelIndex &parent) const
{
- Q_EMIT contactPresenceChanged(m_contact, presence);
+ if (! parent.isValid()) {
+ return m_contacts.size();
+ }
+ return 0;
}
-void ChannelContactListContact::onAliasChanged(const QString &alias)
+QVariant ChannelContactList::data(const QModelIndex &index, int role) const
{
- Q_EMIT contactAliasChanged(m_contact, alias);
+ if(!index.isValid()) {
+ return QVariant();
+ }
+
+ int row = index.row();
+
+ switch (role) {
+ case Qt::DisplayRole:
+ return QVariant(m_contacts[row]->alias());
+ case Qt::DecorationRole:
+ switch(m_contacts[row]->presence().type()) {
+ case Tp::ConnectionPresenceTypeAvailable:
+ return QVariant(KIcon("im-user"));
+ case Tp::ConnectionPresenceTypeAway:
+ case Tp::ConnectionPresenceTypeExtendedAway:
+ return QVariant(KIcon("im-user-away"));
+ case Tp::ConnectionPresenceTypeBusy:
+ return QVariant(KIcon("im-user-busy"));
+ case Tp::ConnectionPresenceTypeOffline:
+ case Tp::ConnectionPresenceTypeHidden:
+ return QVariant(KIcon("im-user-offline"));
+ default:
+ return QVariant(KIcon("im-user"));
+ }
+ //icon for presence stuff here? im-user-away etc.
+ default:
+ return QVariant();
+ }
}
-ChannelContactList::ChannelContactList(const Tp::TextChannelPtr & channel, QObject *parent)
- : QObject(parent)
+void ChannelContactList::addContacts(const Tp::Contacts &contacts)
{
- foreach(Tp::ContactPtr contact, channel->groupContacts()) {
- //FIXME move this to a slot called "addContact" - also call this when chat gains a person.
- ChannelContactListContact* contactProxy = new ChannelContactListContact(contact, this);
- connect(contactProxy, SIGNAL(contactPresenceChanged(Tp::ContactPtr,Tp::Presence)),
- SIGNAL(contactPresenceChanged(Tp::ContactPtr,Tp::Presence)));
- connect(contactProxy, SIGNAL(contactAliasChanged(Tp::ContactPtr,QString)),
- SIGNAL(contactAliasChanged(Tp::ContactPtr,QString)));
+ QList<Tp::ContactPtr> newContacts = contacts.toList();
+
+ foreach(Tp::ContactPtr contact, newContacts) {
+ connect(contact.data(), SIGNAL(aliasChanged(QString)), SLOT(onContactAliasChanged(QString)));
+ connect(contact.data(), SIGNAL(presenceChanged(Tp::Presence)), SLOT(onContactPresenceChanged(Tp::Presence)));
}
- connect(channel.data(),
- SIGNAL(groupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
- Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)),
- SLOT(groupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,
- Tp::Contacts,Tp::Channel::GroupMemberChangeDetails)));
+
+ beginInsertRows(QModelIndex(), m_contacts.size(), m_contacts.size() + newContacts.size());
+ m_contacts << newContacts;
+ endInsertRows();
}
-void ChannelContactList::groupMembersChanged(const Tp::Contacts & groupMembersAdded,
- const Tp::Contacts & groupLocalPendingMembersAdded,
- const Tp::Contacts & groupRemotePendingMembersAdded,
- const Tp::Contacts & groupMembersRemoved,
- const Tp::Channel::GroupMemberChangeDetails & details)
+void ChannelContactList::removeContacts(const Tp::Contacts &contacts)
{
- kDebug() << "members changed.";
+ foreach(Tp::ContactPtr contact, contacts) {
+ //does it make sense to disconnect the signals here too? as technically the contact itself hasn't actually been deleted yet...
+ beginRemoveRows(QModelIndex(), m_contacts.indexOf(contact), m_contacts.indexOf(contact));
+ m_contacts.removeAll(contact);
+ endRemoveRows();
+ }
}
+
diff --git a/lib/channel-contact-list.h b/lib/channel-contact-list.h
index 37f29e6..fe1db06 100644
--- a/lib/channel-contact-list.h
+++ b/lib/channel-contact-list.h
@@ -20,33 +20,18 @@
#ifndef CHANNELCONTACTLIST_H
#define CHANNELCONTACTLIST_H
-#include <QtCore/QObject>
+#include <QtCore/QAbstractListModel>
+
#include <TelepathyQt4/TextChannel>
#include <TelepathyQt4/Contact>
#include <TelepathyQt4/Types>
#include <TelepathyQt4/Channel>
#include <TelepathyQt4/Presence>
-class ChannelContactListContact: public QObject
-{
- Q_OBJECT
-public:
- explicit ChannelContactListContact(const Tp::ContactPtr & contact, QObject *parent);
+/** A model of all users in the channel.
+ Also acts as a proxy for emiting presence and alias changes of any contacts in the channel for displaying as notifications*/
-signals:
- void contactPresenceChanged(const Tp::ContactPtr & contact, const Tp::Presence & presence);
- void contactAliasChanged(const Tp::ContactPtr & contact, const QString & alias);
-
-private slots:
- void onPresenceChanged(const Tp::Presence & newPresence);
- void onAliasChanged(const QString &alias);
-
-private:
- Tp::ContactPtr m_contact;
-};
-
-
-class ChannelContactList : public QObject
+class ChannelContactList : public QAbstractListModel
{
Q_OBJECT
public:
@@ -56,15 +41,24 @@ signals:
void contactPresenceChanged(const Tp::ContactPtr & contact, const Tp::Presence & presence);
void contactAliasChanged(const Tp::ContactPtr & contact, const QString & alias);
-public slots:
- void groupMembersChanged(const Tp::Contacts &groupMembersAdded,
+protected:
+ int rowCount(const QModelIndex &parent) const;
+ QVariant data(const QModelIndex &index, int role) const;
+
+private slots:
+ void onGroupMembersChanged(const Tp::Contacts &groupMembersAdded,
const Tp::Contacts &groupLocalPendingMembersAdded,
const Tp::Contacts &groupRemotePendingMembersAdded,
const Tp::Contacts &groupMembersRemoved,
const Tp::Channel::GroupMemberChangeDetails &details);
+ void onContactPresenceChanged(const Tp::Presence& presence);
+ void onContactAliasChanged(const QString &alias);
+
private:
- QSet<ChannelContactListContact> contacts;
+ void addContacts(const Tp::Contacts &contacts);
+ void removeContacts(const Tp::Contacts &contacts);
+ QList<Tp::ContactPtr> m_contacts;
};
#endif // CHANNELCONTACTLIST_H
diff --git a/lib/chat-widget.cpp b/lib/chat-widget.cpp
index 148deb3..cb50fe7 100644
--- a/lib/chat-widget.cpp
+++ b/lib/chat-widget.cpp
@@ -153,6 +153,8 @@ ChatWidget::ChatWidget(const Tp::TextChannelPtr & channel, QWidget *parent)
connect(contactList, SIGNAL(contactAliasChanged(Tp::ContactPtr,QString)),
SLOT(onContactAliasChanged(Tp::ContactPtr,QString)));
+ d->ui.contactsView->setModel(contactList);
+
AdiumThemeHeaderInfo info;
Tp::Contacts allContacts = d->channel->groupContacts();
//normal chat - self and one other person.
diff --git a/lib/chat-widget.ui b/lib/chat-widget.ui
index 173e115..2dce82f 100644
--- a/lib/chat-widget.ui
+++ b/lib/chat-widget.ui
@@ -6,28 +6,25 @@
<rect>
<x>0</x>
<y>0</y>
- <width>429</width>
+ <width>512</width>
<height>347</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
<item>
- <widget class="AdiumThemeView" name="chatArea" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <widget class="QSplitter" name="splitter">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
+ <widget class="AdiumThemeView" name="chatArea" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QListView" name="contactsView"/>
</widget>
</item>
<item>
--
ktp-text-ui packaging
More information about the pkg-kde-commits
mailing list