source: SMSSender/src/ui/models/contacttablemodel.cpp @ 61:8e5fa8a03259

3.0
Last change on this file since 61:8e5fa8a03259 was 61:8e5fa8a03259, checked in by Sämy Zehnder <saemy.zehnder@…>, 12 years ago
  • Fixed wrong signal names in connect()
File size: 4.0 KB
Line 
1#include "contacttablemodel.h"
2
3#include <QDebug>
4
5#include <snumber.h>
6#include "../../business/BCContactManager.h"
7
8ContactTableModel::ContactTableModel(QObject* parent)
9    : QAbstractTableModel(parent)
10{
11    connect(BCContactManager::instance(), SIGNAL(contactAdded(IContact*)),
12            this, SLOT(contactUpdated(IContact*)));
13    connect(BCContactManager::instance(), SIGNAL(contactUpdated(IContact*)),
14            this, SLOT(contactUpdated(IContact*)));
15    connect(BCContactManager::instance(), SIGNAL(contactRemoved(IContact*)),
16            this, SLOT(contactUpdated(IContact*)));
17}
18ContactTableModel::~ContactTableModel() {
19    disconnect(BCContactManager::instance(), SIGNAL(contactAdded(IContact*)),
20               this, SLOT(contactUpdated(IContact*)));
21    disconnect(BCContactManager::instance(), SIGNAL(contactUpdated(IContact*)),
22               this, SLOT(contactUpdated(IContact*)));
23    disconnect(BCContactManager::instance(), SIGNAL(contactRemoved(IContact*)),
24               this, SLOT(contactUpdated(IContact*)));
25}
26
27void ContactTableModel::contactUpdated(IContact* contact) {
28    int row = BCContactManager::instance()->getContactList().values().indexOf(contact);
29
30    QModelIndex idx_start = index(row, 0);
31    QModelIndex idx_end   = index(row, MaxCol);
32
33    if (idx_start.isValid() && idx_end.isValid()) {
34        emit dataChanged(idx_start, idx_end);
35    } else {
36        reset();
37    }
38}
39
40QVariant ContactTableModel::headerData(int section, Qt::Orientation orientation, int role) const {
41    if (orientation == Qt::Horizontal) {
42        if (role == Qt::DisplayRole) {
43            switch (section) {
44                case ColImage:        return "";
45                case ColName:         return tr("Name");
46                case ColNumber:       return tr("Number");
47                case ColAliases:      return tr("Aliases");
48            }
49        }
50        if (role == Qt::TextAlignmentRole) {
51            return Qt::AlignLeft + Qt::AlignVCenter;
52        }
53    }
54    return QAbstractTableModel::headerData(section, orientation, role);
55}
56
57IContact* ContactTableModel::dataObject(const QModelIndex& index) const {
58    return BCContactManager::instance()->getContactList().values().at(index.row());
59}
60
61QVariant ContactTableModel::data(const QModelIndex& index, int role) const {
62    QList<IContact*> contacts = BCContactManager::instance()->getContactList().values();
63    if (!index.isValid() || index.row() < 0 || index.row() >= contacts.size())
64        return QVariant();
65
66    const IContact* contact = contacts.at(index.row());
67
68    if (role == Qt::DisplayRole) {
69        switch (index.column()) {
70            case ColImage:
71                return "";
72            case ColName:
73                return contact->name();
74            case ColNumber:
75                return contact->number().toString(SNumber::IsoFormatShort);
76            case ColAliases:
77                return getAliasesStr(contact);
78        }
79    }
80    if (role == Qt::DecorationRole) {
81        switch (index.column()) {
82            case ColImage:
83                return contact->image();
84        }
85    }
86
87    return QVariant();
88}
89
90int ContactTableModel::columnCount(const QModelIndex& parent) const {
91    return (parent.isValid()) ? 0 : MaxCol+1;
92}
93
94int ContactTableModel::rowCount(const QModelIndex& parent) const {
95    return (parent.isValid()) ? 0 : BCContactManager::instance()->getContactList().count();
96}
97
98bool ContactTableModel::removeRows(int row, int count, const QModelIndex& parent) {
99    if (parent.isValid())
100        return false;
101
102    int lastRow = row + count - 1;
103    beginRemoveRows(parent, row, lastRow);
104    QList<IContact*> contacts = BCContactManager::instance()->getContactList().values();
105    for (int i = lastRow; i >= row; --i) {
106        BCContactManager::instance()->removeContact(contacts.at(i)->id());
107    }
108    endRemoveRows();
109    return true;
110}
111
112
113QString ContactTableModel::getAliasesStr(const IContact* contact) const {
114    QStringList aliases = contact->aliases();
115    aliases.sort();
116    return aliases.join(", ");
117}
Note: See TracBrowser for help on using the repository browser.