2 * Copyright (C) 2010-2011 David Edmundson.
3 * Author: David Edmundson <kde@davidedmundson.co.uk>
5 * This library is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Lesser General Public License as published by the Free
7 * Software Foundation; either version 3 of the License, or (at your option) any
8 * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
12 #include "QLightDM/sessionsmodel.h"
14 #include <QtCore/QVariant>
15 #include <QtCore/QDebug>
19 using namespace QLightDM;
30 class SessionsModelPrivate
33 SessionsModelPrivate(SessionsModel *parent);
34 QList<SessionItem> items;
36 void loadSessions(SessionsModel::SessionType sessionType);
42 Q_DECLARE_PUBLIC(SessionsModel)
46 SessionsModelPrivate::SessionsModelPrivate(SessionsModel *parent) :
52 void SessionsModelPrivate::loadSessions(SessionsModel::SessionType sessionType)
56 switch (sessionType) {
57 case SessionsModel::RemoteSessions:
58 ldmSessions = lightdm_get_remote_sessions();
60 case SessionsModel::LocalSessions:
63 ldmSessions = lightdm_get_sessions();
67 for (GList* item = ldmSessions; item; item = item->next) {
68 LightDMSession *ldmSession = static_cast<LightDMSession*>(item->data);
72 session.key = QString::fromUtf8(lightdm_session_get_key(ldmSession));
73 session.name = QString::fromUtf8(lightdm_session_get_name(ldmSession));
74 session.comment = QString::fromUtf8(lightdm_session_get_comment(ldmSession));
76 items.append(session);
79 //this happens in the constructor so we don't need beginInsertRows() etc.
83 //deprecated constructor for ABI compatability.
84 SessionsModel::SessionsModel(QObject *parent) :
85 QAbstractListModel(parent),
86 d_ptr(new SessionsModelPrivate(this))
90 QHash<int, QByteArray> roles = roleNames();
91 roles[KeyRole] = "key";
94 d->loadSessions(SessionsModel::LocalSessions);
97 SessionsModel::SessionsModel(SessionsModel::SessionType sessionType, QObject *parent) :
98 QAbstractListModel(parent),
99 d_ptr(new SessionsModelPrivate(this))
103 QHash<int, QByteArray> roles = roleNames();
104 roles[KeyRole] = "key";
107 d->loadSessions(sessionType);
110 SessionsModel::~SessionsModel()
115 int SessionsModel::rowCount(const QModelIndex &parent) const
117 Q_D(const SessionsModel);
119 if (parent == QModelIndex()) { //if top level
120 return d->items.size();
122 return 0; // no child elements.
126 QVariant SessionsModel::data(const QModelIndex &index, int role) const
128 Q_D(const SessionsModel);
130 if (! index.isValid()) {
134 int row = index.row();
137 case SessionsModel::KeyRole:
138 return d->items[row].key;
139 case Qt::DisplayRole:
140 return d->items[row].name;
141 case Qt::ToolTipRole:
142 return d->items[row].comment;
148 #include "sessionsmodel_moc.cpp"