1 #include "kitemlistviewaccessible.h"
2 #include "kitemlistcontroller.h"
3 #include "kitemlistselectionmanager.h"
4 #include "private/kitemlistviewlayouter.h"
5 #include <klocalizedstring.h>
7 #include <QtGui/qtableview.h>
8 #include <QtGui/qaccessible2.h>
9 #include <qgraphicsscene.h>
10 #include <qgraphicsview.h>
15 #ifndef QT_NO_ACCESSIBILITY
17 KItemListView
*KItemListViewAccessible::view() const
19 return qobject_cast
<KItemListView
*>(object());
22 KItemListViewAccessible::KItemListViewAccessible(KItemListView
*view_
)
23 : QAccessibleObjectEx(view_
)
28 KItemListViewAccessible::~KItemListViewAccessible()
32 void KItemListViewAccessible::modelReset()
35 QAccessibleTable2CellInterface
*KItemListViewAccessible::cell(int index
) const
38 return new KItemListAccessibleCell(view(), index
);
43 QAccessibleTable2CellInterface
*KItemListViewAccessible::cellAt(int row
, int column
) const
45 return cell(column
* (row
- 1) + column
) ;
48 QAccessibleInterface
*KItemListViewAccessible::caption() const
53 QString
KItemListViewAccessible::columnDescription(int) const
58 int KItemListViewAccessible::columnCount() const
60 return view()->layouter()->columnCount();
63 int KItemListViewAccessible::rowCount() const
65 int itemCount
= view()->model()->count();
66 int rowCount
= itemCount
/ columnCount();
67 if (itemCount
% rowCount
) {
73 int KItemListViewAccessible::selectedCellCount() const
75 return view()->controller()->selectionManager()->selectedItems().size();
78 int KItemListViewAccessible::selectedColumnCount() const
83 int KItemListViewAccessible::selectedRowCount() const
88 QString
KItemListViewAccessible::rowDescription(int) const
93 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
95 QList
<QAccessibleTable2CellInterface
*> cells
;
96 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
97 cells
.append(cell(index
));
102 QList
<int> KItemListViewAccessible::selectedColumns() const
107 QList
<int> KItemListViewAccessible::selectedRows() const
112 QAccessibleInterface
*KItemListViewAccessible::summary() const
117 bool KItemListViewAccessible::isColumnSelected(int) const
122 bool KItemListViewAccessible::isRowSelected(int) const
127 bool KItemListViewAccessible::selectRow(int row
)
132 bool KItemListViewAccessible::selectColumn(int)
137 bool KItemListViewAccessible::unselectRow(int)
142 bool KItemListViewAccessible::unselectColumn(int)
147 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
149 QAccessible2::TableModelChange change
;
154 QAccessible::Role
KItemListViewAccessible::role(int child
) const
156 Q_ASSERT(child
>= 0);
158 return QAccessible::Cell
;
160 return QAccessible::Table
;
163 QAccessible::State
KItemListViewAccessible::state(int child
) const
166 QAccessibleInterface
*iface
;
167 navigate(Child
,child
,&iface
);
169 return iface
->state(0);
172 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
175 int KItemListViewAccessible::childAt(int x
, int y
) const
177 QPointF point
= QPointF(x
,y
);
178 return view()->itemAt(view()->mapFromScene(point
));
181 int KItemListViewAccessible::childCount() const
183 return rowCount() * columnCount();
186 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
*iface
) const
188 const KItemListAccessibleCell
*widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
189 return widget
->getIndex();
192 QString
KItemListViewAccessible::text(Text t
, int child
) const
194 Q_ASSERT(child
== 0);
195 if (t
== QAccessible::Description
) {
196 return i18n("List of files present in the current directory");
198 return i18n("File List");
201 QRect
KItemListViewAccessible::rect(int child
) const
204 if (!view()->isVisible()) {
207 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
208 QRect viewRect
= view()->geometry().toRect();
209 return viewRect
.translated(origin
);
212 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
216 case QAccessible::Child
: {
218 *iface
= cell(index
);
230 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
*, int) const
232 return QAccessible::Unrelated
;
236 int KItemListViewAccessible::userActionCount(int) const
240 QString
KItemListViewAccessible::actionText(int, Text
, int) const
244 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
252 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
*view
, int index
)
259 int KItemListAccessibleCell::columnExtent() const
264 int KItemListAccessibleCell::rowExtent() const
269 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
271 return QList
<QAccessibleInterface
*>();
274 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
276 return QList
<QAccessibleInterface
*>();
279 int KItemListAccessibleCell::columnIndex() const
281 return view
->layouter()->itemColumn(m_index
);
284 int KItemListAccessibleCell::rowIndex() const
286 return view
->layouter()->itemRow(m_index
);
289 bool KItemListAccessibleCell::isSelected() const
291 return view
->controller()->selectionManager()->isSelected(m_index
-1);
294 void KItemListAccessibleCell::rowColumnExtents(int *row
, int *column
, int *rowExtents
, int *columnExtents
, bool *selected
) const
296 KItemListViewLayouter
* layouter
= view
->layouter();
297 *row
= layouter
->itemRow(m_index
);
298 *column
= layouter
->itemColumn(m_index
);
301 *selected
= isSelected();
304 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
306 return QAccessible::queryAccessibleInterface(view
)->table2Interface();
309 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
311 Q_ASSERT(child
== 0);
312 return QAccessible::Cell
;
315 QAccessible::State
KItemListAccessibleCell::state(int child
) const
317 Q_ASSERT(child
== 0);
318 QAccessible::State st
= Normal
;
323 if (view
->controller()->selectionManager()->currentItem() == m_index
) {
330 if (view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
331 st
|= MultiSelectable
;
337 bool KItemListAccessibleCell::isExpandable() const
342 QRect
KItemListAccessibleCell::rect(int) const
344 QRect r
= view
->itemRect(m_index
-1).toRect();
348 r
.translate(view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
349 r
.translate(view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
353 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
355 Q_ASSERT(child
== 0);
357 const QHash
<QByteArray
, QVariant
> data
= view
->model()->data(m_index
-1);
359 case QAccessible::Value
:
360 case QAccessible::Name
:
361 return data
["text"].toString();
368 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
370 Q_ASSERT(child
== 0);
371 // FIXME - is this even allowed on the KItemListWidget?
374 bool KItemListAccessibleCell::isValid() const
376 return view
&& (m_index
> 0);
379 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
381 if (relation
== Ancestor
&& index
== 1) {
382 *iface
= new KItemListViewAccessible(view
);
398 QAccessibleInterface
*parent
= queryAccessibleInterface(view
);
399 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
413 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
*, int otherChild
) const
415 Q_ASSERT(child
== 0);
416 Q_ASSERT(otherChild
== 0);
417 return QAccessible::Unrelated
;
421 int KItemListAccessibleCell::userActionCount(int) const
426 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
431 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
438 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
*container
)
439 : QAccessibleWidgetEx(container
)
442 KItemListContainerAccessible::~KItemListContainerAccessible ()
445 int KItemListContainerAccessible::childCount () const
450 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
452 if (child
->object() == container()->controller()->view()) {
458 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
460 if (relation
== QAccessible::Child
) {
461 *target
= new KItemListViewAccessible(container()->controller()->view());
464 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
467 #endif // QT_NO_ACCESSIBILITY