1 /* 2 * SPDX-FileCopyrightText: 2012 Amandeep Singh <aman.dedman@gmail.com> 3 * 4 * SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef KITEMLISTVIEWACCESSIBLE_H 8 #define KITEMLISTVIEWACCESSIBLE_H 9 10 #ifndef QT_NO_ACCESSIBILITY 11 12 #include "dolphin_export.h" 13 14 #include <QAccessible> 15 #include <QAccessibleObject> 16 #include <QAccessibleWidget> 17 #include <QPointer> 18 19 class KItemListView; 20 class KItemListContainer; 21 22 class DOLPHIN_EXPORT KItemListViewAccessible: public QAccessibleObject, public QAccessibleTableInterface 23 { 24 public: 25 explicit KItemListViewAccessible(KItemListView* view); 26 ~KItemListViewAccessible() override; 27 28 void* interface_cast(QAccessible::InterfaceType type) override; 29 30 QAccessible::Role role() const override; 31 QAccessible::State state() const override; 32 QString text(QAccessible::Text t) const override; 33 QRect rect() const override; 34 35 QAccessibleInterface* child(int index) const override; 36 int childCount() const override; 37 int indexOfChild(const QAccessibleInterface*) const override; 38 QAccessibleInterface* childAt(int x, int y) const override; 39 QAccessibleInterface* parent() const override; 40 41 // Table interface 42 QAccessibleInterface* cellAt(int row, int column) const override; 43 QAccessibleInterface* caption() const override; 44 QAccessibleInterface* summary() const override; 45 QString columnDescription(int column) const override; 46 QString rowDescription(int row) const override; 47 int columnCount() const override; 48 int rowCount() const override; 49 50 // Selection 51 int selectedCellCount() const override; 52 int selectedColumnCount() const override; 53 int selectedRowCount() const override; 54 QList<QAccessibleInterface*> selectedCells() const override; 55 QList<int> selectedColumns() const override; 56 QList<int> selectedRows() const override; 57 bool isColumnSelected(int column) const override; 58 bool isRowSelected(int row) const override; 59 bool selectRow(int row) override; 60 bool selectColumn(int column) override; 61 bool unselectRow(int row) override; 62 bool unselectColumn(int column) override; 63 void modelChange(QAccessibleTableModelChangeEvent*) override; 64 65 KItemListView* view() const; 66 67 protected: 68 virtual void modelReset(); 69 /** 70 * Create an QAccessibleTableCellInterface representing the table 71 * cell at the @index. Index is 0-based. 72 */ 73 inline QAccessibleInterface* cell(int index) const; 74 75 private: 76 class AccessibleIdWrapper { 77 public: 78 AccessibleIdWrapper(); 79 bool isValid; 80 QAccessible::Id id; 81 }; 82 mutable QVector<AccessibleIdWrapper> m_cells; 83 }; 84 85 class DOLPHIN_EXPORT KItemListAccessibleCell: public QAccessibleInterface, public QAccessibleTableCellInterface 86 { 87 public: 88 KItemListAccessibleCell(KItemListView* view, int m_index); 89 90 void* interface_cast(QAccessible::InterfaceType type) override; 91 QObject* object() const override; 92 bool isValid() const override; 93 QAccessible::Role role() const override; 94 QAccessible::State state() const override; 95 QRect rect() const override; 96 QString text(QAccessible::Text t) const override; 97 void setText(QAccessible::Text t, const QString& text) override; 98 99 QAccessibleInterface* child(int index) const override; 100 int childCount() const override; 101 QAccessibleInterface* childAt(int x, int y) const override; 102 int indexOfChild(const QAccessibleInterface*) const override; 103 104 QAccessibleInterface* parent() const override; 105 bool isExpandable() const; 106 107 // Cell Interface 108 int columnExtent() const override; 109 QList<QAccessibleInterface*> columnHeaderCells() const override; 110 int columnIndex() const override; 111 int rowExtent() const override; 112 QList<QAccessibleInterface*> rowHeaderCells() const override; 113 int rowIndex() const override; 114 bool isSelected() const override; 115 QAccessibleInterface* table() const override; 116 117 inline int index() const; 118 119 private: 120 QPointer<KItemListView> m_view; 121 int m_index; 122 }; 123 124 class DOLPHIN_EXPORT KItemListContainerAccessible : public QAccessibleWidget 125 { 126 public: 127 explicit KItemListContainerAccessible(KItemListContainer* container); 128 ~KItemListContainerAccessible() override; 129 130 QAccessibleInterface* child(int index) const override; 131 int childCount() const override; 132 int indexOfChild(const QAccessibleInterface* child) const override; 133 134 private: 135 const KItemListContainer* container() const; 136 }; 137 138 #endif // QT_NO_ACCESSIBILITY 139 140 #endif 141