File indexing completed on 2024-05-05 17:33:23

0001 /*
0002  *   SPDX-FileCopyrightText: 2012 Jonathan Thomas <echidnaman@kubuntu.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QAbstractListModel>
0010 
0011 #include "Transaction.h"
0012 
0013 #include "discovercommon_export.h"
0014 
0015 class DISCOVERCOMMON_EXPORT TransactionModel : public QAbstractListModel
0016 {
0017     Q_OBJECT
0018     Q_PROPERTY(int progress READ progress NOTIFY progressChanged)
0019     Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
0020     Q_PROPERTY(QString mainTransactionText READ mainTransactionText NOTIFY mainTransactionTextChanged)
0021 public:
0022     enum Roles {
0023         TransactionRoleRole = Qt::UserRole,
0024         TransactionStatusRole,
0025         CancellableRole,
0026         ProgressRole,
0027         StatusTextRole,
0028         ResourceRole,
0029         TransactionRole,
0030     };
0031 
0032     explicit TransactionModel(QObject *parent = nullptr);
0033     static TransactionModel *global();
0034 
0035     // Reimplemented from QAbstractListModel
0036     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0037     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0038     QHash<int, QByteArray> roleNames() const override;
0039 
0040     Q_SCRIPTABLE Transaction *transactionFromResource(AbstractResource *resource) const;
0041     QModelIndex indexOf(Transaction *trans) const;
0042     QModelIndex indexOf(AbstractResource *res) const;
0043 
0044     void addTransaction(Transaction *trans);
0045     void removeTransaction(Transaction *trans);
0046 
0047     bool contains(Transaction *transaction) const
0048     {
0049         return m_transactions.contains(transaction);
0050     }
0051     int progress() const;
0052     QVector<Transaction *> transactions() const
0053     {
0054         return m_transactions;
0055     }
0056 
0057     QString mainTransactionText() const;
0058 
0059 private:
0060     QVector<Transaction *> m_transactions;
0061 
0062 Q_SIGNALS:
0063     void startingFirstTransaction();
0064     void lastTransactionFinished();
0065     void transactionAdded(Transaction *trans);
0066     void transactionRemoved(Transaction *trans);
0067     void countChanged();
0068     void progressChanged();
0069     void proceedRequest(Transaction *transaction, const QString &title, const QString &description);
0070     void mainTransactionTextChanged();
0071 
0072 private Q_SLOTS:
0073     void transactionChanged(int role);
0074 };