[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9
Maximiliano Curia
maxy at moszumanska.debian.org
Mon May 9 09:06:08 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=bcf5ac7
The following commit has been merged in the master branch:
commit bcf5ac7619b67dca34e0cc97b04b7deee8fe7a01
Author: David Edmundson <kde at davidedmundson.co.uk>
Date: Thu Jan 3 11:19:00 2013 +0000
Namespace and d-pointer AbstractGroupingModel
---
KTp/Models/abstract-grouping-proxy-model.cpp | 101 +++++++++++++++------------
KTp/Models/abstract-grouping-proxy-model.h | 25 +++----
KTp/Models/accounts-tree-proxy-model.h | 2 +-
KTp/Models/groups-tree-proxy-model.h | 2 +-
4 files changed, 73 insertions(+), 57 deletions(-)
diff --git a/KTp/Models/abstract-grouping-proxy-model.cpp b/KTp/Models/abstract-grouping-proxy-model.cpp
index a324119..ca9c22d 100644
--- a/KTp/Models/abstract-grouping-proxy-model.cpp
+++ b/KTp/Models/abstract-grouping-proxy-model.cpp
@@ -26,6 +26,19 @@
#include <KDebug>
+class KTp::AbstractGroupingProxyModel::Private
+{
+public:
+ QAbstractItemModel *source;
+
+ //keep a cache of what groups an item belongs to
+ QHash<QPersistentModelIndex, QSet<QString> > groupCache;
+
+ //item -> groups
+ QMultiHash<QPersistentModelIndex, ProxyNode*> proxyMap;
+ QHash<QString, QStandardItem*> groupMap;
+};
+
class ProxyNode : public QStandardItem
{
public:
@@ -87,26 +100,28 @@ QString GroupNode::group() const {
QVariant GroupNode::data(int role) const
{
- AbstractGroupingProxyModel *proxyModel = qobject_cast<AbstractGroupingProxyModel*>(model());
+ KTp::AbstractGroupingProxyModel *proxyModel = qobject_cast<KTp::AbstractGroupingProxyModel*>(model());
Q_ASSERT(proxyModel);
return proxyModel->dataForGroup(m_groupId, role);
}
-AbstractGroupingProxyModel::AbstractGroupingProxyModel(QAbstractItemModel *source):
+KTp::AbstractGroupingProxyModel::AbstractGroupingProxyModel(QAbstractItemModel *source):
QStandardItemModel(source),
- m_source(source)
+ d(new KTp::AbstractGroupingProxyModel::Private())
{
+ d->source = source;
QTimer::singleShot(0, this, SLOT(onModelReset()));
- connect(m_source, SIGNAL(modelReset()), SLOT(onModelReset()));
- connect(m_source, SIGNAL(rowsInserted(QModelIndex, int,int)), SLOT(onRowsInserted(QModelIndex,int,int)));
- connect(m_source, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), SLOT(onRowsRemoved(QModelIndex,int,int)));
- connect(m_source, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onDataChanged(QModelIndex,QModelIndex)));
+ connect(d->source, SIGNAL(modelReset()), SLOT(onModelReset()));
+ connect(d->source, SIGNAL(rowsInserted(QModelIndex, int,int)), SLOT(onRowsInserted(QModelIndex,int,int)));
+ connect(d->source, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), SLOT(onRowsRemoved(QModelIndex,int,int)));
+ connect(d->source, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onDataChanged(QModelIndex,QModelIndex)));
}
-AbstractGroupingProxyModel::~AbstractGroupingProxyModel()
+KTp::AbstractGroupingProxyModel::~AbstractGroupingProxyModel()
{
+ delete d;
}
/* Called when source items inserts a row
@@ -116,21 +131,21 @@ AbstractGroupingProxyModel::~AbstractGroupingProxyModel()
* Otherwise add it to the relevant proxy nodes in our model
*/
-void AbstractGroupingProxyModel::onRowsInserted(const QModelIndex &sourceParent, int start, int end)
+void KTp::AbstractGroupingProxyModel::onRowsInserted(const QModelIndex &sourceParent, int start, int end)
{
//if top level in root model
if (!sourceParent.parent().isValid()) {
for (int i = start; i<=end; i++) {
- QModelIndex index = m_source->index(i, 0, sourceParent);
+ QModelIndex index = d->source->index(i, 0, sourceParent);
Q_FOREACH(const QString &group, groupsForIndex(index)) {
addProxyNode(index, itemForGroup(group));
}
}
} else {
for (int i = start; i<=end; i++) {
- QModelIndex index = m_source->index(i, 0, sourceParent);
- QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = m_proxyMap.find(index);
- while (it != m_proxyMap.end() && it.key() == index) {
+ QModelIndex index = d->source->index(i, 0, sourceParent);
+ QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = d->proxyMap.find(index);
+ while (it != d->proxyMap.end() && it.key() == index) {
addProxyNode(index, it.value());
it++;
}
@@ -138,25 +153,25 @@ void AbstractGroupingProxyModel::onRowsInserted(const QModelIndex &sourceParent,
}
}
-void AbstractGroupingProxyModel::addProxyNode(const QModelIndex &sourceIndex, QStandardItem *parent)
+void KTp::AbstractGroupingProxyModel::addProxyNode(const QModelIndex &sourceIndex, QStandardItem *parent)
{
ProxyNode *proxyNode = new ProxyNode(sourceIndex);
- m_proxyMap.insertMulti(sourceIndex, proxyNode);
+ d->proxyMap.insertMulti(sourceIndex, proxyNode);
parent->appendRow(proxyNode);
}
-void AbstractGroupingProxyModel::removeProxyNodes(const QModelIndex &sourceIndex, const QList<ProxyNode *> &removedItems)
+void KTp::AbstractGroupingProxyModel::removeProxyNodes(const QModelIndex &sourceIndex, const QList<ProxyNode *> &removedItems)
{
Q_FOREACH(ProxyNode *proxy, removedItems) {
QStandardItem *parentItem = proxy->parent();
parentItem->removeRow(proxy->row());
- m_proxyMap.remove(sourceIndex, proxy);
+ d->proxyMap.remove(sourceIndex, proxy);
//if the parent item to this proxy node is now empty, and is a top level item
if (parentItem->rowCount() == 0 && parentItem->parent() == 0) {
GroupNode* groupNode = dynamic_cast<GroupNode*>(parentItem);
takeRow(groupNode->row());
- m_groupMap.remove(groupNode->group());
+ d->groupMap.remove(groupNode->group());
}
}
}
@@ -165,19 +180,19 @@ void AbstractGroupingProxyModel::removeProxyNodes(const QModelIndex &sourceIndex
* Called when a row is remove from the source model model
* Find all existing proxy models and delete thems
*/
-void AbstractGroupingProxyModel::onRowsRemoved(const QModelIndex &sourceParent, int start, int end)
+void KTp::AbstractGroupingProxyModel::onRowsRemoved(const QModelIndex &sourceParent, int start, int end)
{
for (int i = start; i<=end; i++) {
- QPersistentModelIndex index = m_source->index(i, 0, sourceParent);
+ QPersistentModelIndex index = d->source->index(i, 0, sourceParent);
QList<ProxyNode *> itemsToRemove;
- QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = m_proxyMap.find(index);
- while (it != m_proxyMap.end() && it.key() == index) {
+ QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = d->proxyMap.find(index);
+ while (it != d->proxyMap.end() && it.key() == index) {
kDebug() << "removing row" << index.data();
itemsToRemove.append(it.value());
++it;
}
- m_groupCache.remove(index);
+ d->groupCache.remove(index);
removeProxyNodes(index, itemsToRemove);
}
}
@@ -188,22 +203,22 @@ void AbstractGroupingProxyModel::onRowsRemoved(const QModelIndex &sourceParent,
* Find all proxy nodes, and make dataChanged() get emitted
*/
-void AbstractGroupingProxyModel::onDataChanged(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight)
+void KTp::AbstractGroupingProxyModel::onDataChanged(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight)
{
for (int i=sourceTopLeft.row() ; i<=sourceBottomRight.row() ; i++) {
- QPersistentModelIndex index = m_source->index(i, 0, sourceTopLeft.parent());
+ QPersistentModelIndex index = d->source->index(i, 0, sourceTopLeft.parent());
//if top level item
if (!sourceTopLeft.parent().isValid()) {
//groupsSet has changed...update as appropriate
- QSet<QString> itemGroups = groupsForIndex(m_source->index(i, 0, sourceTopLeft.parent()));
- if (m_groupCache[index] != itemGroups) {
- m_groupCache[index] = itemGroups;
+ QSet<QString> itemGroups = groupsForIndex(d->source->index(i, 0, sourceTopLeft.parent()));
+ if (d->groupCache[index] != itemGroups) {
+ d->groupCache[index] = itemGroups;
//loop through existing proxy nodes, and check each one is still valid.
- QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = m_proxyMap.find(index);
+ QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = d->proxyMap.find(index);
QList<ProxyNode*> removedItems;
- while (it != m_proxyMap.end() && it.key() == index) {
+ while (it != d->proxyMap.end() && it.key() == index) {
// if proxy's group is still in the item's groups.
if (itemGroups.contains(it.value()->group())) {
itemGroups.remove(it.value()->group());
@@ -222,7 +237,7 @@ void AbstractGroupingProxyModel::onDataChanged(const QModelIndex &sourceTopLeft,
//remaining items in itemGroups are now the new groups
Q_FOREACH(const QString &group, itemGroups) {
ProxyNode *proxyNode = new ProxyNode(index);
- m_proxyMap.insertMulti(index, proxyNode);
+ d->proxyMap.insertMulti(index, proxyNode);
itemForGroup(group)->appendRow(proxyNode);
kDebug() << "adding " << index.data().toString() << " to group " << group;
@@ -231,8 +246,8 @@ void AbstractGroupingProxyModel::onDataChanged(const QModelIndex &sourceTopLeft,
}
//mark all proxy nodes as changed
- QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = m_proxyMap.find(index);
- while (it != m_proxyMap.end() && it.key() == index) {
+ QHash<QPersistentModelIndex, ProxyNode*>::const_iterator it = d->proxyMap.find(index);
+ while (it != d->proxyMap.end() && it.key() == index) {
it.value()->changed();
++it;
}
@@ -243,27 +258,27 @@ void AbstractGroupingProxyModel::onDataChanged(const QModelIndex &sourceTopLeft,
* Delete all local caches/maps and wipe the current QStandardItemModel
*/
-void AbstractGroupingProxyModel::onModelReset()
+void KTp::AbstractGroupingProxyModel::onModelReset()
{
clear();
- m_groupCache.clear();
- m_proxyMap.clear();
- m_groupMap.clear();
+ d->groupCache.clear();
+ d->proxyMap.clear();
+ d->groupMap.clear();
kDebug() << "reset";
- if (m_source->rowCount() > 0) {
- onRowsInserted(QModelIndex(), 0, m_source->rowCount()-1);
+ if (d->source->rowCount() > 0) {
+ onRowsInserted(QModelIndex(), 0, d->source->rowCount()-1);
}
}
-QStandardItem *AbstractGroupingProxyModel::itemForGroup(const QString &group)
+QStandardItem* KTp::AbstractGroupingProxyModel::itemForGroup(const QString &group)
{
- if (m_groupMap.contains(group)) {
- return m_groupMap[group];
+ if (d->groupMap.contains(group)) {
+ return d->groupMap[group];
} else {
GroupNode* item = new GroupNode(group);
appendRow(item);
- m_groupMap[group] = item;
+ d->groupMap[group] = item;
return item;
}
}
diff --git a/KTp/Models/abstract-grouping-proxy-model.h b/KTp/Models/abstract-grouping-proxy-model.h
index a70e0b3..c934443 100644
--- a/KTp/Models/abstract-grouping-proxy-model.h
+++ b/KTp/Models/abstract-grouping-proxy-model.h
@@ -19,8 +19,8 @@
*/
-#ifndef ABSTRACTGROUPINGPROXYMODEL_H
-#define ABSTRACTGROUPINGPROXYMODEL_H
+#ifndef KTP_ABSTRACT_GROUPING_PROXY_MODEL_H
+#define KTP_ABSTRACT_GROUPING_PROXY_MODEL_H
#include <QStandardItemModel>
@@ -29,6 +29,9 @@
class ProxyNode;
class GroupNode;
+namespace KTp
+{
+
class KTP_EXPORT AbstractGroupingProxyModel : public QStandardItemModel
{
Q_OBJECT
@@ -49,6 +52,11 @@ private Q_SLOTS:
void onModelReset();
private:
+ Q_DISABLE_COPY(AbstractGroupingProxyModel)
+ class Private;
+ Private *d;
+
+
/** Create a new proxyNode appended to the given parent in this model*/
void addProxyNode(const QModelIndex &sourceIndex, QStandardItem *parent);
@@ -57,15 +65,8 @@ private:
/** Returns the standard Item belonging to a particular group name. Creating one if needed*/
QStandardItem *itemForGroup(const QString &group);
-
- QAbstractItemModel *m_source;
-
- //keep a cache of what groups an item belongs to
- QHash<QPersistentModelIndex, QSet<QString> > m_groupCache;
-
- //item -> groups
- QMultiHash<QPersistentModelIndex, ProxyNode*> m_proxyMap;
- QHash<QString, QStandardItem*> m_groupMap;
};
-#endif // GROUPPROXYMODEL_H
+}
+
+#endif
diff --git a/KTp/Models/accounts-tree-proxy-model.h b/KTp/Models/accounts-tree-proxy-model.h
index 3b2ad6f..7b4eae4 100644
--- a/KTp/Models/accounts-tree-proxy-model.h
+++ b/KTp/Models/accounts-tree-proxy-model.h
@@ -25,7 +25,7 @@
#include <KTp/ktp-export.h>
-class KTP_EXPORT AccountsTreeProxyModel : public AbstractGroupingProxyModel
+class KTP_EXPORT AccountsTreeProxyModel : public KTp::AbstractGroupingProxyModel
{
Q_OBJECT
public:
diff --git a/KTp/Models/groups-tree-proxy-model.h b/KTp/Models/groups-tree-proxy-model.h
index 04ce2f4..4b59c80 100644
--- a/KTp/Models/groups-tree-proxy-model.h
+++ b/KTp/Models/groups-tree-proxy-model.h
@@ -25,7 +25,7 @@
#include <KTp/ktp-export.h>
-class KTP_EXPORT GroupsTreeProxyModel : public AbstractGroupingProxyModel
+class KTP_EXPORT GroupsTreeProxyModel : public KTp::AbstractGroupingProxyModel
{
Q_OBJECT
public:
--
ktp-common-internals packaging
More information about the pkg-kde-commits
mailing list