1 #include "kitemlistviewaccessible.h"
2 #include "kitemlistcontroller.h"
3 #include "kitemlistselectionmanager.h"
4 #include "private/kitemlistviewlayouter.h"
6 #include <QtGui/qtableview.h>
7 #include <QtGui/qaccessible2.h>
8 #include <qgraphicsscene.h>
9 #include <qgraphicsview.h>
14 #ifndef QT_NO_ACCESSIBILITY
16 #ifndef QT_NO_ITEMVIEWS
18 KItemListView
*KItemListViewAccessible::view() const
20 return qobject_cast
<KItemListView
*>(object());
23 KItemListViewAccessible::KItemListViewAccessible(KItemListView
*view_
)
24 : QAccessibleObjectEx(view_
)
29 KItemListViewAccessible::~KItemListViewAccessible()
33 void KItemListViewAccessible::modelReset()
36 QAccessibleTable2CellInterface
*KItemListViewAccessible::cell(int index
) const
39 return new KItemListAccessibleCell(view(), index
);
44 QAccessibleTable2CellInterface
*KItemListViewAccessible::cellAt(int row
, int column
) const
46 return cell(column
* (row
- 1) + column
) ;
49 QAccessibleInterface
*KItemListViewAccessible::caption() const
54 QString
KItemListViewAccessible::columnDescription(int) const
59 int KItemListViewAccessible::columnCount() const
61 return view()->layouter()->columnCount();
64 int KItemListViewAccessible::rowCount() const
66 int itemCount
= view()->model()->count();
67 int rowCount
= itemCount
/ columnCount();
68 if (itemCount
% rowCount
) {
74 int KItemListViewAccessible::selectedCellCount() const
76 return view()->controller()->selectionManager()->selectedItems().size();
79 int KItemListViewAccessible::selectedColumnCount() const
84 int KItemListViewAccessible::selectedRowCount() const
89 QString
KItemListViewAccessible::rowDescription(int) const
94 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
96 QList
<QAccessibleTable2CellInterface
*> cells
;
97 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
98 cells
.append(cell(index
));
103 QList
<int> KItemListViewAccessible::selectedColumns() const
108 QList
<int> KItemListViewAccessible::selectedRows() const
113 QAccessibleInterface
*KItemListViewAccessible::summary() const
118 bool KItemListViewAccessible::isColumnSelected(int) const
123 bool KItemListViewAccessible::isRowSelected(int) const
128 bool KItemListViewAccessible::selectRow(int row
)
133 bool KItemListViewAccessible::selectColumn(int)
138 bool KItemListViewAccessible::unselectRow(int)
143 bool KItemListViewAccessible::unselectColumn(int)
148 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
150 QAccessible2::TableModelChange change
;
155 QAccessible::Role
KItemListViewAccessible::role(int child
) const
157 Q_ASSERT(child
>= 0);
159 return QAccessible::Cell
;
161 return QAccessible::Table
;
164 QAccessible::State
KItemListViewAccessible::state(int child
) const
167 QAccessibleInterface
*iface
;
168 navigate(Child
,child
,&iface
);
170 return iface
->state(0);
173 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
176 int KItemListViewAccessible::childAt(int x
, int y
) const
178 QPointF point
= QPointF(x
,y
);
179 return view()->itemAt(view()->mapFromScene(point
));
182 int KItemListViewAccessible::childCount() const
184 return rowCount() * columnCount();
187 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
*iface
) const
189 const KItemListAccessibleCell
*widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
190 return widget
->getIndex();
193 QString
KItemListViewAccessible::text(Text t
, int child
) const
195 Q_ASSERT(child
== 0);
196 if (t
== QAccessible::Description
) {
197 return QObject::tr("List of files present in the current directory");
199 return QObject::tr("File List");
202 QRect
KItemListViewAccessible::rect(int child
) const
205 if (!view()->isVisible()) {
208 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
209 QRect viewRect
= view()->geometry().toRect();
210 return viewRect
.translated(origin
);
213 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
217 case QAccessible::Child
: {
219 *iface
= cell(index
);
231 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
*, int) const
233 return QAccessible::Unrelated
;
237 int KItemListViewAccessible::userActionCount(int) const
241 QString
KItemListViewAccessible::actionText(int, Text
, int) const
245 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
253 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
*view_
, int index_
)
257 Q_ASSERT(index_
> 0);
260 int KItemListAccessibleCell::columnExtent() const
265 int KItemListAccessibleCell::rowExtent() const
270 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
272 return QList
<QAccessibleInterface
*>();
275 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
277 return QList
<QAccessibleInterface
*>();
280 int KItemListAccessibleCell::columnIndex() const
282 return view
->layouter()->itemColumn(index
);
285 int KItemListAccessibleCell::rowIndex() const
287 return view
->layouter()->itemRow(index
);
290 bool KItemListAccessibleCell::isSelected() const
292 return view
->controller()->selectionManager()->isSelected(index
-1);
295 void KItemListAccessibleCell::rowColumnExtents(int *row
, int *column
, int *rowExtents
, int *columnExtents
, bool *selected
) const
297 KItemListViewLayouter
* layouter
= view
->layouter();
298 *row
= layouter
->itemRow(index
);
299 *column
= layouter
->itemColumn(index
);
302 *selected
= isSelected();
305 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
307 return QAccessible::queryAccessibleInterface(view
)->table2Interface();
310 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
312 Q_ASSERT(child
== 0);
313 return QAccessible::Cell
;
316 QAccessible::State
KItemListAccessibleCell::state(int child
) const
318 Q_ASSERT(child
== 0);
319 QAccessible::State st
= Normal
;
324 if (view
->controller()->selectionManager()->currentItem() == index
) {
331 if (view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
332 st
|= MultiSelectable
;
338 bool KItemListAccessibleCell::isExpandable() const
343 QRect
KItemListAccessibleCell::rect(int) const
345 QRect r
= view
->itemRect(index
-1).toRect();
349 r
.translate(view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
350 r
.translate(view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
354 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
356 Q_ASSERT(child
== 0);
358 const QHash
<QByteArray
, QVariant
> data
= view
->model()->data(index
-1);
360 case QAccessible::Value
:
361 case QAccessible::Name
:
362 return data
["text"].toString();
369 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
371 Q_ASSERT(child
== 0);
372 // FIXME - is this even allowed on the KItemListWidget?
375 bool KItemListAccessibleCell::isValid() const
377 return view
&& (index
> 0);
380 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
382 if (relation
== Ancestor
&& index
== 1) {
383 *iface
= new KItemListViewAccessible(view
);
399 QAccessibleInterface
*parent
= queryAccessibleInterface(view
);
400 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
414 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
*, int otherChild
) const
416 Q_ASSERT(child
== 0);
417 Q_ASSERT(otherChild
== 0);
418 return QAccessible::Unrelated
;
422 int KItemListAccessibleCell::userActionCount(int) const
427 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
432 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
439 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
*container
)
440 : QAccessibleWidgetEx(container
)
443 KItemListContainerAccessible::~KItemListContainerAccessible ()
446 int KItemListContainerAccessible::childCount () const
451 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
453 if (child
->object() == container()->controller()->view()) {
459 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
461 if (relation
== QAccessible::Child
) {
462 *target
= new KItemListViewAccessible(container()->controller()->view());
465 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
468 #endif // QT_NO_ITEMVIEWS
470 #endif // QT_NO_ACCESSIBILITY