File indexing completed on 2024-05-12 16:42:19

0001 /*
0002     SPDX-FileCopyrightText: 2014-2015 Christian Dávid <christian-david@web.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef PAYEEIDENTIFIERCONTAINERMODEL_H
0007 #define PAYEEIDENTIFIERCONTAINERMODEL_H
0008 
0009 #include "kmm_models_export.h"
0010 
0011 #include <QAbstractListModel>
0012 #include <QSharedPointer>
0013 
0014 #include "mymoney/payeeidentifiermodel.h"
0015 #include "mymoney/mymoneypayeeidentifiercontainer.h"
0016 #include "payeeidentifier/payeeidentifier.h"
0017 
0018 /**
0019  * @brief Model for MyMoneyPayeeIdentifierContainer
0020  *
0021  * Changes the user does have internal effect only.
0022  *
0023  * @see payeeIdentifierModel
0024  */
0025 class MyMoneyPayeeIdentifierContainer;
0026 class payeeIdentifier;
0027 class KMM_MODELS_EXPORT payeeIdentifierContainerModel : public QAbstractListModel
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     /**
0033      * @brief Roles for this model
0034      *
0035      * They are equal to payeeIdentifierModel::roles
0036      */
0037     enum roles {
0038         payeeIdentifierType = payeeIdentifierModel::payeeIdentifierType, /**< type of payeeIdentifier */
0039         payeeIdentifier = payeeIdentifierModel::payeeIdentifier, /**< actual payeeIdentifier */
0040     };
0041 
0042     explicit payeeIdentifierContainerModel(QObject* parent = 0);
0043 
0044     QVariant data(const QModelIndex& index, int role) const final override;
0045 
0046     /**
0047      * This model only supports to edit payeeIdentifier role with a QVariant of type
0048      * payeeIdentifier.
0049      */
0050     bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) final override;
0051 
0052     Qt::ItemFlags flags(const QModelIndex& index) const final override;
0053 
0054     int rowCount(const QModelIndex& parent) const final override;
0055 
0056     bool insertRows(int row, int count, const QModelIndex& parent) final override;
0057     bool removeRows(int row, int count, const QModelIndex& parent) final override;
0058 
0059     /**
0060      * @brief Set source of data
0061      *
0062      * This makes the model editable.
0063      */
0064     void setSource(MyMoneyPayeeIdentifierContainer data);
0065 
0066     /** @brief Get stored data */
0067     QList< ::payeeIdentifier > identifiers() const;
0068 
0069 public Q_SLOTS:
0070     /**
0071      * @brief Removes all data from the model
0072      *
0073      * The model is not editable afterwards.
0074      */
0075     void closeSource();
0076 
0077 private:
0078     /** @internal
0079      * The use of a shared pointer makes this future prof. Because using identifier() causes
0080      * some unnecessary work.
0081      */
0082     QSharedPointer<MyMoneyPayeeIdentifierContainer> m_data;
0083 };
0084 
0085 #endif // PAYEEIDENTIFIERCONTAINERMODEL_H