Warning, file /libraries/libqaccessibilityclient/examples/accessibleapps/accessibletree.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2012 Frederik Gladhorn <gladhorn@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #ifndef ACCESSIBLETREE_H
0008 #define ACCESSIBLETREE_H
0009 
0010 #include <QAbstractItemModel>
0011 
0012 #include <qaccessibilityclient/registry.h>
0013 
0014 class AccessibleTree;
0015 
0016 class AccessibleWrapper
0017 {
0018 public:
0019     AccessibleWrapper(const QAccessibleClient::AccessibleObject &object, AccessibleWrapper *parent)
0020     : acc(object), m_parent(parent)
0021     {}
0022 
0023     QAccessibleClient::AccessibleObject acc;
0024 
0025     ~AccessibleWrapper() {
0026         qDeleteAll(m_children);
0027     }
0028 
0029     int childCount();
0030     AccessibleWrapper *child(int index);
0031     AccessibleWrapper *parent();
0032 
0033 private:
0034     friend class AccessibleTree;
0035 
0036     AccessibleWrapper *m_parent;
0037     QList<AccessibleWrapper*> m_children;
0038 };
0039 
0040 class AccessibleTree :public QAbstractItemModel
0041 {
0042     Q_OBJECT
0043 public:
0044     explicit AccessibleTree(QObject* parent = nullptr);
0045     ~AccessibleTree() override;
0046 
0047     void setRegistry(QAccessibleClient::Registry *registry);
0048 
0049     QModelIndex indexForAccessible(const QAccessibleClient::AccessibleObject &object);
0050     bool addAccessible(const QAccessibleClient::AccessibleObject &object);
0051     bool removeAccessible(const QAccessibleClient::AccessibleObject &object);
0052     bool removeAccessible(const QModelIndex &index);
0053     void updateAccessible(const QAccessibleClient::AccessibleObject &object);
0054 
0055     QList<AccessibleWrapper*> apps() const { return m_apps; }
0056 
0057     int columnCount(const QModelIndex& parent = QModelIndex()) const override;
0058     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
0059     QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
0060     QModelIndex parent(const QModelIndex& child) const override;
0061     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
0062     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0063 
0064 public Q_SLOTS:
0065     void resetModel();
0066     /*!
0067         \brief Updates all applications in the tree.
0068 
0069         Removes and adds top level applications. This is less invasive then modelReset.
0070     */
0071     void updateTopLevelApps();
0072 
0073 Q_SIGNALS:
0074     void navigationError(const QModelIndex &) const;
0075 
0076 private:
0077     QAccessibleClient::Registry *m_registry;
0078     QList<AccessibleWrapper*> m_apps;
0079 };
0080 
0081 #endif // ACCESSIBLETREE_H