1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/*
* SPDX-FileCopyrightText: 2024 Bohdan Onofriichuk <bogdan.onofriuchuk@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QAbstractListModel>
#include <qqmlregistration.h>
#include "actioninterface.h"
#include "predicatesmonitor_p.h"
class ActionsControl : public QAbstractListModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("Non-createable type that is associated with a specific device")
Q_PROPERTY(QString defaultActionName READ defaultActionName CONSTANT)
Q_PROPERTY(QString defaultActionIcon READ defaultActionIcon NOTIFY defaultActionIconChanged)
Q_PROPERTY(QString defaultActionText READ defaultActionText NOTIFY defaultActionTextChanged)
public:
enum ActionInfo {
Name = Qt::UserRole + 1,
Icon,
Text,
};
Q_ENUM(ActionInfo)
Q_INVOKABLE void actionTriggered(const QString &operation);
explicit ActionsControl(const QString &udi, QObject *parent = nullptr);
~ActionsControl() override;
bool isEmpty() const;
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
bool isUnmountable() const;
void unmount();
private:
QString defaultActionName() const;
QString defaultActionIcon() const;
QString defaultActionText() const;
void updateActionsForPredicates(const QHash<QString, Solid::Predicate> &predicates);
void addActions();
bool blockActions(const QString &action);
Q_SIGNALS:
void defaultActionIconChanged(const QString &icon);
void defaultActionTextChanged(const QString &text);
void unmountActionIsValidChanged(const QString &udi, bool status);
private Q_SLOTS:
void onPredicatesChanged(const QHash<QString, Solid::Predicate> &predicates);
void onIsActionValidChanged(const QString &action, bool status);
void onActionIconChanged(const QString &action);
void onActionTextChanged(const QString &action);
private:
QString m_udi;
bool m_isEmpty;
ActionInterface *m_defaultAction;
ActionInterface *m_unmountAction;
QList<ActionInterface *> m_actions;
QHash<QString, std::pair<int, ActionInterface *>> m_notValidActions;
std::shared_ptr<PredicatesMonitor> m_predicatesMonitor;
};
|