1
/****************************************************************************
2
* Copyright (C) 2014 by Savoir-Faire Linux *
3
* Author : Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com> *
5
* This library is free software; you can redistribute it and/or *
6
* modify it under the terms of the GNU Lesser General Public *
7
* License as published by the Free Software Foundation; either *
8
* version 2.1 of the License, or (at your option) any later version. *
10
* This library is distributed in the hope that it will be useful, *
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
13
* Lesser General Public License for more details. *
15
* You should have received a copy of the GNU General Public License *
16
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
17
***************************************************************************/
18
#ifndef COMMONITEMBACKENDMODEL_H
19
#define COMMONITEMBACKENDMODEL_H
24
#include <QtCore/QAbstractItemModel>
26
#include "commonbackendmanagerinterface.h"
27
#include "contactmodel.h"
28
#include "abstractitembackend.h"
31
class AbstractItemBackendModelExtension;
34
class LIB_EXPORT CommonItemBackendModel : public QAbstractTableModel
38
explicit CommonItemBackendModel(QObject* parent = nullptr);
39
~CommonItemBackendModel();
41
QVariant data (const QModelIndex& index, int role = Qt::DisplayRole ) const;
42
virtual int rowCount (const QModelIndex& parent = QModelIndex() ) const;
43
virtual int columnCount (const QModelIndex& parent = QModelIndex() ) const;
44
virtual Qt::ItemFlags flags (const QModelIndex& index ) const;
45
virtual QVariant headerData (int section, Qt::Orientation orientation, int role ) const;
46
virtual bool setData (const QModelIndex& index, const QVariant &value, int role );
47
virtual QModelIndex parent ( const QModelIndex& index ) const;
48
virtual QModelIndex index ( int row, int column, const QModelIndex& parent=QModelIndex()) const;
50
AbstractContactBackend* backendAt(const QModelIndex& index);
52
void addExtension(AbstractItemBackendModelExtension* extension);
59
void slotExtensionDataChanged(const QModelIndex& idx);
62
void checkStateChanged();
66
* This is not very efficient, it doesn't really have to be given the low
67
* volume. If it ever have to scale, a better mapToSource using persistent
68
* index have to be implemented.
71
ProxyItem() : parent(nullptr),col(1),row(0),backend(nullptr){}
74
AbstractContactBackend* backend;
76
QVector<ProxyItem*> m_Children;
78
QHash<AbstractContactBackend*,ProxyItem*> m_hBackendsNodes;
79
QVector<ProxyItem*> m_lTopLevelBackends;
80
QVector<AbstractItemBackendModelExtension*> m_lExtensions;