File: MockSessionsModel.cpp

package info (click to toggle)
lomiri 0.5.0-7
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 24,088 kB
  • sloc: cpp: 39,498; python: 2,559; javascript: 1,426; ansic: 1,012; sh: 289; xml: 252; makefile: 69
file content (136 lines) | stat: -rw-r--r-- 3,648 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Copyright (C) 2015-2016 Canonical Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */


#ifdef LIGHTDM_COMPAT_QT4
// LightDM currently is Qt4 compatible, and so doesn't define setRoleNames.
// To use the same method of setting role name that it does, we
// set our compatibility to Qt4 here too.
#define QT_DISABLE_DEPRECATED_BEFORE QT_VERSION_CHECK(4, 0, 0)
#endif // LIGHTDM_COMPAT_QT4

#include "MockController.h"
#include "MockSessionsModel.h"

namespace QLightDM
{

class SessionsModelPrivate
{
public:
#ifdef LIGHTDM_COMPAT_QT4
    QHash<int, QByteArray> roleNames;
#endif // LIGHTDM_COMPAT_QT4
    QList<MockController::SessionItem> sessionItems;
};

SessionsModel::SessionsModel(QObject* parent)
    : QAbstractListModel(parent)
    , d_ptr(new SessionsModelPrivate)
{
    Q_D(SessionsModel);

#ifdef LIGHTDM_COMPAT_QT4
    auto roleNames = QAbstractListModel::roleNames();
    roleNames[KeyRole] = "key";
    roleNames[TypeRole] = "type";

    // We can't reimplement roleNames() because actual liblightdm doesn't
    // implement them either.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    setRoleNames(roleNames);
#pragma GCC diagnostic pop
#endif // LIGHTDM_COMPAT_QT4

    connect(MockController::instance(), &MockController::sessionModeChanged,
            this, &SessionsModel::resetEntries);
    connect(MockController::instance(), &MockController::numSessionsChanged,
            this, &SessionsModel::resetEntries);
    resetEntries();
}

SessionsModel::~SessionsModel()
{
    delete d_ptr;
}

#ifndef LIGHTDM_COMPAT_QT4
QHash<int, QByteArray> SessionsModel::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[Qt::DisplayRole] = "display";
    roles[Qt::ToolTipRole] = "toolTip";
    roles[KeyRole] = "key";
    roles[TypeRole] = "type";

    return roles;
}
#endif // !LIGHTDM_COMPAT_QT4

QVariant SessionsModel::data(const QModelIndex& index, int role) const
{
    Q_D(const SessionsModel);

    if(!index.isValid()) {
        return QVariant();
    }

    int row = index.row();

    switch (role) {
        case QLightDM::SessionsModel::KeyRole:
            return d->sessionItems[row].key;
        case Qt::DisplayRole:
            return d->sessionItems[row].name;
        default:
            return QVariant();
    }
}

int SessionsModel::rowCount(const QModelIndex& parent) const
{
    Q_D(const SessionsModel);

    if (parent.isValid()) {
        return 0;
    } else { // parent is root
        return d->sessionItems.size();
    }
}

void SessionsModel::resetEntries()
{
    Q_D(SessionsModel);

    beginResetModel();

    QString sessionMode = MockController::instance()->sessionMode();

    if (sessionMode == "full") {
        d->sessionItems = MockController::instance()->fullSessionItems();
        d->sessionItems = d->sessionItems.mid(0, MockController::instance()->numSessions());
    } else if (sessionMode == "single") {
        d->sessionItems = {MockController::instance()->fullSessionItems()[0]};
    } else {
        d->sessionItems = {};
    }

    endResetModel();
}

} // namespace QLightDM