File indexing completed on 2024-05-12 17:24:10

0001 // SPDX-FileCopyrightText: 2023 Mathis <mbb@kaidan.im>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include "database.h"
0007 #include <QAbstractListModel>
0008 
0009 class PlantsModel: public QAbstractListModel
0010 {
0011     Q_OBJECT
0012 
0013     Q_PROPERTY(Summary summary READ summary NOTIFY summaryChanged)
0014 
0015 public:
0016     enum Summary {
0017         NothingToDo,
0018         SomeNeedWater
0019     };
0020     Q_ENUM(Summary);
0021 
0022     explicit PlantsModel(QObject *parent = nullptr);
0023 
0024     int rowCount(const QModelIndex&)const override;
0025     enum Role {
0026         PlantID,
0027         Name,
0028         Species,
0029         ImgUrl,
0030         WaterInterval,
0031         Location,
0032         DateOfBirth,
0033         LastWatered,
0034         WantsToBeWateredIn,
0035         CurrentHealth,
0036     };
0037     QHash<int, QByteArray> roleNames()const override;
0038     QVariant data(const QModelIndex& index, int role) const override;
0039     Q_INVOKABLE void addPlant(const QString &name, const QString &species, const QString &imgUrl, const int waterInterval, const QString location, const int dateOfBirth, const int health);
0040     Q_INVOKABLE void editPlant(const DB::Plant::Id plantId, const QString &name, const QString &species, const QString &imgUrl, const int waterInterval, const QString location, const int dateOfBirth);
0041     Q_INVOKABLE void deletePlant(const int plantId);
0042 
0043     Summary summary() const;
0044     Q_SIGNAL void summaryChanged();
0045 
0046 private:
0047     std::vector<DB::Plant> m_data;
0048 };