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
|