87 lines
2.0 KiB
C++
87 lines
2.0 KiB
C++
|
#include "calendarlistmodel.h"
|
||
|
#include <QSqlQuery>
|
||
|
#include <QVariant>
|
||
|
#include "database.h"
|
||
|
|
||
|
struct CalendarListModel::Calendar
|
||
|
{
|
||
|
QString name;
|
||
|
};
|
||
|
|
||
|
CalendarListModel::CalendarListModel(QObject *parent)
|
||
|
: QAbstractListModel{parent}
|
||
|
, m_calendars{}
|
||
|
{
|
||
|
fetch();
|
||
|
}
|
||
|
|
||
|
CalendarListModel::~CalendarListModel()
|
||
|
{
|
||
|
qDeleteAll(m_calendars);
|
||
|
}
|
||
|
|
||
|
QVariant CalendarListModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||
|
{
|
||
|
if (role != Qt::DisplayRole) {
|
||
|
return {};
|
||
|
}
|
||
|
return section;
|
||
|
}
|
||
|
|
||
|
int CalendarListModel::rowCount(const QModelIndex &parent) const
|
||
|
{
|
||
|
if (parent.isValid()) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return m_calendars.count();
|
||
|
}
|
||
|
|
||
|
QHash<int, QByteArray> CalendarListModel::roleNames() const
|
||
|
{
|
||
|
QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
|
||
|
roles[Name] = "name";
|
||
|
return roles;
|
||
|
}
|
||
|
|
||
|
void CalendarListModel::fetch()
|
||
|
{
|
||
|
Database::query([]() {
|
||
|
QSqlQuery query("select label from campsite order by label");
|
||
|
QVector<Calendar> calendars;
|
||
|
while (query.next()) {
|
||
|
Calendar calendar{query.value(0).toString()};
|
||
|
calendars.append(calendar);
|
||
|
}
|
||
|
return calendars;
|
||
|
}).then([this](const QVector<Calendar> &calendars) {
|
||
|
if (calendars.empty()) {
|
||
|
return;
|
||
|
}
|
||
|
beginInsertRows(QModelIndex(), 0, calendars.count() - 1);
|
||
|
for (const Calendar &calendar : calendars) {
|
||
|
m_calendars.append(new Calendar(calendar));
|
||
|
}
|
||
|
endInsertRows();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
QVariant CalendarListModel::data(const QModelIndex &index, int role) const
|
||
|
{
|
||
|
if (!checkIndex(index,
|
||
|
QAbstractItemModel::CheckIndexOption::IndexIsValid
|
||
|
| QAbstractItemModel::CheckIndexOption::ParentIsInvalid)) {
|
||
|
return {};
|
||
|
}
|
||
|
|
||
|
Calendar *calendar = m_calendars.at(index.row());
|
||
|
switch (role) {
|
||
|
case Name:
|
||
|
return calendar->name;
|
||
|
}
|
||
|
|
||
|
return {};
|
||
|
}
|
||
|
|
||
|
#include "moc_calendarlistmodel.cpp"
|