~ubuntu-branches/ubuntu/vivid/lightdm-kde/vivid

« back to all changes in this revision

Viewing changes to greeter/extrarowproxymodel.cpp

  • Committer: Package Import Robot
  • Author(s): Michal Zajac
  • Date: 2012-07-22 19:44:44 UTC
  • mfrom: (1.1.3)
  • Revision ID: package-import@ubuntu.com-20120722194444-aaueaylu3ddnqcth
Tags: 0.2.1-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#include <QAbstractItemModel>
23
23
 
24
24
ExtraRowProxyModel::ExtraRowProxyModel(QObject* parent)
25
 
: QAbstractListModel(parent)
26
 
{}
27
 
 
28
 
int ExtraRowProxyModel::appendRow()
29
 
{
30
 
    Row row;
31
 
    m_rows.append(row);
32
 
    return m_rows.count() - 1;
33
 
}
34
 
 
35
 
void ExtraRowProxyModel::setRowData(int id, int column, const QVariant& value, int role)
36
 
{
37
 
    Q_ASSERT(id < m_rows.count());
38
 
    m_rows[id][column][role] = value;
39
 
}
40
 
 
41
 
void ExtraRowProxyModel::setRowText(int id, int column, const QVariant& value)
42
 
{
43
 
    setRowData(id, column, value, Qt::DisplayRole);
 
25
: QAbstractListModel(parent),
 
26
  m_extraRowModel(new QStandardItemModel(this))
 
27
{
 
28
    connect(m_extraRowModel, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onExtraRowsInserted(QModelIndex,int,int)));
 
29
    connect(m_extraRowModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onExtraRowsRemoved(QModelIndex,int,int)));
 
30
    connect(m_extraRowModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onExtraDataChanged(QModelIndex,QModelIndex)));
44
31
}
45
32
 
46
33
void ExtraRowProxyModel::setSourceModel(QAbstractItemModel* model)
47
34
{
48
35
    if (! m_model.isNull()) {
49
 
        disconnect(m_model.data(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onSourceRowsInserted(QModelIndex,int,int)));
50
 
        disconnect(m_model.data(), SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onSourceRowsRemoved(QModelIndex,int,int)));
51
 
        disconnect(m_model.data(), SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(onSourceDataChanged(QModelIndex,QModelIndex)));
 
36
        disconnect(m_model.data(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(onSourceRowsInserted(QModelIndex,int,int)));
 
37
        disconnect(m_model.data(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(onSourceRowsRemoved(QModelIndex,int,int)));
 
38
        disconnect(m_model.data(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(onSourceDataChanged(QModelIndex,QModelIndex)));
52
39
    }
53
40
 
54
41
    m_model = QWeakPointer<QAbstractItemModel>(model);
55
42
    reset();
56
43
    setRoleNames(m_model.data()->roleNames());
57
44
 
58
 
    connect(m_model.data(), SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(onSourceRowsInserted(QModelIndex,int,int)));
59
 
    connect(m_model.data(), SIGNAL(rowsRemoved(QModelIndex, int, int)), SLOT(onSourceRowsRemoved(QModelIndex,int,int)));
60
 
    connect(m_model.data(), SIGNAL(dataChanged(QModelIndex, QModelIndex)), SLOT(onSourceDataChanged(QModelIndex,QModelIndex)));
 
45
    connect(m_model.data(), SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onSourceRowsInserted(QModelIndex,int,int)));
 
46
    connect(m_model.data(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onSourceRowsRemoved(QModelIndex,int,int)));
 
47
    connect(m_model.data(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onSourceDataChanged(QModelIndex,QModelIndex)));
 
48
}
 
49
 
 
50
QStandardItemModel *ExtraRowProxyModel::extraRowModel() const
 
51
{
 
52
    return m_extraRowModel;
61
53
}
62
54
 
63
55
int ExtraRowProxyModel::rowCount(const QModelIndex &) const
64
56
{
65
 
    if (m_model.isNull()) {
66
 
        return m_rows.count();
67
 
    } else {
68
 
        return m_model.data()->rowCount() + m_rows.count();
69
 
    }
70
 
 
 
57
    return sourceRowCount() + m_extraRowModel->rowCount();
71
58
}
72
59
 
73
60
QVariant ExtraRowProxyModel::data(const QModelIndex &index, int role) const
74
61
{
75
 
    int count = 0;
76
 
    if (!m_model.isNull()) {
77
 
        count = m_model.data()->rowCount();
78
 
        if (index.row() < count) {
79
 
            return m_model.data()->data(index, role);
80
 
        }
81
 
    }
82
 
 
83
 
    int extraRow = index.row() - count;
84
 
    if (extraRow >= m_rows.count()) {
85
 
        return QVariant();
86
 
    }
87
 
 
88
 
    const Item& item = m_rows[extraRow][index.column()];
89
 
    return item.value(role);
 
62
    if (index.row() < sourceRowCount()) {
 
63
        return m_model.data()->index(index.row(), 0).data(role);
 
64
    }
 
65
    else {
 
66
        int row = index.row() - sourceRowCount();
 
67
        return m_extraRowModel->index(row, 0).data(role);
 
68
    }
90
69
}
91
70
 
92
71
void ExtraRowProxyModel::onSourceRowsInserted(const QModelIndex &parent, int start, int end)
108
87
    dataChanged(createIndex(topLeft.row(), 0)   , createIndex(bottomRight.row(), 0));
109
88
}
110
89
 
 
90
void ExtraRowProxyModel::onExtraRowsInserted(const QModelIndex &parent, int start, int end)
 
91
{
 
92
    Q_UNUSED(parent);
 
93
    beginInsertRows(QModelIndex(), sourceRowCount() + start, sourceRowCount() + end);
 
94
    endInsertRows();
 
95
}
 
96
 
 
97
void ExtraRowProxyModel::onExtraRowsRemoved(const QModelIndex &parent, int start, int end)
 
98
{
 
99
    Q_UNUSED(parent);
 
100
    beginRemoveRows(QModelIndex(), sourceRowCount() + start, sourceRowCount() + end);
 
101
    endRemoveRows();
 
102
}
 
103
 
 
104
void ExtraRowProxyModel::onExtraDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
 
105
{
 
106
    dataChanged(createIndex(sourceRowCount() + topLeft.row(), 0), createIndex(sourceRowCount() + bottomRight.row(), 0));
 
107
}
 
108
 
 
109
int ExtraRowProxyModel::sourceRowCount() const
 
110
{
 
111
    if (m_model.isNull()) {
 
112
        return 0;
 
113
    } else {
 
114
        return m_model.data()->rowCount();
 
115
    }
 
116
}
 
117
 
111
118