]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kitemlistviewaccessible.h
Fix selection rect after porting from QFontMetrics::width()
[dolphin.git] / src / kitemviews / kitemlistviewaccessible.h
1 /***************************************************************************
2 * Copyright (C) 2012 by Amandeep Singh <aman.dedman@gmail.com> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
19
20 #ifndef KITEMLISTVIEWACCESSIBLE_H
21 #define KITEMLISTVIEWACCESSIBLE_H
22
23 #ifndef QT_NO_ACCESSIBILITY
24
25 #include "dolphin_export.h"
26
27 #include <QAccessible>
28 #include <QAccessibleObject>
29 #include <QAccessibleWidget>
30 #include <QPointer>
31
32 class KItemListView;
33 class KItemListContainer;
34
35 class DOLPHIN_EXPORT KItemListViewAccessible: public QAccessibleObject, public QAccessibleTableInterface
36 {
37 public:
38 explicit KItemListViewAccessible(KItemListView* view);
39 ~KItemListViewAccessible() override;
40
41 void* interface_cast(QAccessible::InterfaceType type) override;
42
43 QAccessible::Role role() const override;
44 QAccessible::State state() const override;
45 QString text(QAccessible::Text t) const override;
46 QRect rect() const override;
47
48 QAccessibleInterface* child(int index) const override;
49 int childCount() const override;
50 int indexOfChild(const QAccessibleInterface*) const override;
51 QAccessibleInterface* childAt(int x, int y) const override;
52 QAccessibleInterface* parent() const override;
53
54 // Table interface
55 QAccessibleInterface* cellAt(int row, int column) const override;
56 QAccessibleInterface* caption() const override;
57 QAccessibleInterface* summary() const override;
58 QString columnDescription(int column) const override;
59 QString rowDescription(int row) const override;
60 int columnCount() const override;
61 int rowCount() const override;
62
63 // Selection
64 int selectedCellCount() const override;
65 int selectedColumnCount() const override;
66 int selectedRowCount() const override;
67 QList<QAccessibleInterface*> selectedCells() const override;
68 QList<int> selectedColumns() const override;
69 QList<int> selectedRows() const override;
70 bool isColumnSelected(int column) const override;
71 bool isRowSelected(int row) const override;
72 bool selectRow(int row) override;
73 bool selectColumn(int column) override;
74 bool unselectRow(int row) override;
75 bool unselectColumn(int column) override;
76 void modelChange(QAccessibleTableModelChangeEvent*) override;
77
78 KItemListView* view() const;
79
80 protected:
81 virtual void modelReset();
82 /**
83 * Create an QAccessibleTableCellInterface representing the table
84 * cell at the @index. Index is 0-based.
85 */
86 inline QAccessibleInterface* cell(int index) const;
87
88 private:
89 class AccessibleIdWrapper {
90 public:
91 AccessibleIdWrapper();
92 bool isValid;
93 QAccessible::Id id;
94 };
95 mutable QVector<AccessibleIdWrapper> m_cells;
96 };
97
98 class DOLPHIN_EXPORT KItemListAccessibleCell: public QAccessibleInterface, public QAccessibleTableCellInterface
99 {
100 public:
101 KItemListAccessibleCell(KItemListView* view, int m_index);
102
103 void* interface_cast(QAccessible::InterfaceType type) override;
104 QObject* object() const override;
105 bool isValid() const override;
106 QAccessible::Role role() const override;
107 QAccessible::State state() const override;
108 QRect rect() const override;
109 QString text(QAccessible::Text t) const override;
110 void setText(QAccessible::Text t, const QString& text) override;
111
112 QAccessibleInterface* child(int index) const override;
113 int childCount() const override;
114 QAccessibleInterface* childAt(int x, int y) const override;
115 int indexOfChild(const QAccessibleInterface*) const override;
116
117 QAccessibleInterface* parent() const override;
118 bool isExpandable() const;
119
120 // Cell Interface
121 int columnExtent() const override;
122 QList<QAccessibleInterface*> columnHeaderCells() const override;
123 int columnIndex() const override;
124 int rowExtent() const override;
125 QList<QAccessibleInterface*> rowHeaderCells() const override;
126 int rowIndex() const override;
127 bool isSelected() const override;
128 QAccessibleInterface* table() const override;
129
130 inline int index() const;
131
132 private:
133 QPointer<KItemListView> m_view;
134 int m_index;
135 };
136
137 class DOLPHIN_EXPORT KItemListContainerAccessible : public QAccessibleWidget
138 {
139 public:
140 explicit KItemListContainerAccessible(KItemListContainer* container);
141 ~KItemListContainerAccessible() override;
142
143 QAccessibleInterface* child(int index) const override;
144 int childCount() const override;
145 int indexOfChild(const QAccessibleInterface* child) const override;
146
147 private:
148 const KItemListContainer* container() const;
149 };
150
151 #endif // QT_NO_ACCESSIBILITY
152
153 #endif