File indexing completed on 2024-04-28 04:49:03

0001 /*
0002    SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 
0007 #ifndef VIEWSMODEL_H
0008 #define VIEWSMODEL_H
0009 
0010 #include "elisaLib_export.h"
0011 
0012 #include "elisautils.h"
0013 #include "datatypes.h"
0014 
0015 #include <QAbstractListModel>
0016 
0017 #include <memory>
0018 
0019 class ViewsModelPrivate;
0020 class ViewsListData;
0021 
0022 class ELISALIB_EXPORT ViewsModel : public QAbstractListModel
0023 {
0024     Q_OBJECT
0025 
0026     Q_PROPERTY(ViewsListData* viewsData READ viewsData WRITE setViewsData NOTIFY viewsDataChanged)
0027 
0028 public:
0029     enum ColumnRoles {
0030         ImageNameRole = Qt::UserRole + 1,
0031         SecondTitleRole,
0032         UseSecondTitleRole,
0033         DatabaseIdRole,
0034         EntryTypeRole,
0035         EntryCategoryRole,
0036         DataTypeRole,
0037     };
0038 
0039     explicit ViewsModel(QObject *parent = nullptr);
0040 
0041     ~ViewsModel() override;
0042 
0043     [[nodiscard]] QHash<int, QByteArray> roleNames() const override;
0044 
0045     [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
0046 
0047     [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0048 
0049     [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0050 
0051     [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
0052 
0053     [[nodiscard]] QModelIndex parent(const QModelIndex &child) const override;
0054 
0055     [[nodiscard]] ViewsListData* viewsData() const;
0056 
0057 Q_SIGNALS:
0058 
0059     void viewsDataChanged();
0060 
0061 public Q_SLOTS:
0062 
0063     void setViewsData(ViewsListData* viewsData);
0064 
0065 private Q_SLOTS:
0066 
0067     void dataAboutToBeAdded(int startIndex, int lastIndex);
0068 
0069     void dataAdded();
0070 
0071     void dataAboutToBeRemoved(int startIndex, int lastIndex);
0072 
0073     void dataRemoved();
0074 
0075     void dataModified(int currentIndex);
0076 
0077     void dataAboutToBeReset();
0078 
0079     void dataReset();
0080 
0081 private:
0082 
0083     std::unique_ptr<ViewsModelPrivate> d;
0084 };
0085 
0086 #endif // VIEWSMODEL_H