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 KItemListView
*KItemListViewAccessible::view() const
18 return qobject_cast
<KItemListView
*>(object());
21 KItemListViewAccessible::KItemListViewAccessible(KItemListView
*view_
)
22 : QAccessibleObjectEx(view_
)
27 void KItemListViewAccessible::modelReset()
30 QAccessibleTable2CellInterface
*KItemListViewAccessible::cell(int index
) const
33 return new KItemListAccessibleCell(view(), index
);
38 QAccessibleTable2CellInterface
*KItemListViewAccessible::cellAt(int row
, int column
) const
40 return cell(column
* (row
- 1) + column
) ;
43 QAccessibleInterface
*KItemListViewAccessible::caption() const
48 QString
KItemListViewAccessible::columnDescription(int) const
53 int KItemListViewAccessible::columnCount() const
55 return view()->layouter()->columnCount();
58 int KItemListViewAccessible::rowCount() const
60 int itemCount
= view()->model()->count();
61 int rowCount
= itemCount
/ columnCount();
62 if (itemCount
% rowCount
) {
68 int KItemListViewAccessible::selectedCellCount() const
70 return view()->controller()->selectionManager()->selectedItems().size();
73 int KItemListViewAccessible::selectedColumnCount() const
78 int KItemListViewAccessible::selectedRowCount() const
83 QString
KItemListViewAccessible::rowDescription(int) const
88 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
90 QList
<QAccessibleTable2CellInterface
*> cells
;
91 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
92 cells
.append(cell(index
));
97 QList
<int> KItemListViewAccessible::selectedColumns() const
102 QList
<int> KItemListViewAccessible::selectedRows() const
107 QAccessibleInterface
*KItemListViewAccessible::summary() const
112 bool KItemListViewAccessible::isColumnSelected(int) const
117 bool KItemListViewAccessible::isRowSelected(int) const
122 bool KItemListViewAccessible::selectRow(int)
127 bool KItemListViewAccessible::selectColumn(int)
132 bool KItemListViewAccessible::unselectRow(int)
137 bool KItemListViewAccessible::unselectColumn(int)
142 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
144 QAccessible2::TableModelChange change
;
149 QAccessible::Role
KItemListViewAccessible::role(int child
) const
151 Q_ASSERT(child
>= 0);
153 return QAccessible::Cell
;
155 return QAccessible::Table
;
158 QAccessible::State
KItemListViewAccessible::state(int child
) const
161 QAccessibleInterface
*iface
;
162 navigate(Child
,child
,&iface
);
164 return iface
->state(0);
167 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
170 int KItemListViewAccessible::childAt(int x
, int y
) const
172 QPointF point
= QPointF(x
,y
);
173 return view()->itemAt(view()->mapFromScene(point
));
176 int KItemListViewAccessible::childCount() const
178 return rowCount() * columnCount();
181 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
*iface
) const
183 const KItemListAccessibleCell
*widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
184 return widget
->index();
187 QString
KItemListViewAccessible::text(Text t
, int child
) const
189 Q_ASSERT(child
== 0);
193 QRect
KItemListViewAccessible::rect(int child
) const
196 if (!view()->isVisible()) {
199 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
200 QRect viewRect
= view()->geometry().toRect();
201 return viewRect
.translated(origin
);
204 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
208 case QAccessible::Child
: {
210 *iface
= cell(index
);
222 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
*, int) const
224 return QAccessible::Unrelated
;
228 int KItemListViewAccessible::userActionCount(int) const
232 QString
KItemListViewAccessible::actionText(int, Text
, int) const
236 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
244 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
*view
, int index
)
251 int KItemListAccessibleCell::columnExtent() const
256 int KItemListAccessibleCell::rowExtent() const
261 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
263 return QList
<QAccessibleInterface
*>();
266 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
268 return QList
<QAccessibleInterface
*>();
271 int KItemListAccessibleCell::columnIndex() const
273 return m_view
->layouter()->itemColumn(m_index
);
276 int KItemListAccessibleCell::rowIndex() const
278 return m_view
->layouter()->itemRow(m_index
);
281 bool KItemListAccessibleCell::isSelected() const
283 return m_view
->controller()->selectionManager()->isSelected(m_index
-1);
286 void KItemListAccessibleCell::rowColumnExtents(int *row
, int *column
, int *rowExtents
, int *columnExtents
, bool *selected
) const
288 KItemListViewLayouter
* layouter
= m_view
->layouter();
289 *row
= layouter
->itemRow(m_index
);
290 *column
= layouter
->itemColumn(m_index
);
293 *selected
= isSelected();
296 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
298 return QAccessible::queryAccessibleInterface(m_view
)->table2Interface();
301 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
303 Q_ASSERT(child
== 0);
304 return QAccessible::Cell
;
307 QAccessible::State
KItemListAccessibleCell::state(int child
) const
309 Q_ASSERT(child
== 0);
310 QAccessible::State st
= Normal
;
315 if (m_view
->controller()->selectionManager()->currentItem() == m_index
) {
322 if (m_view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
323 st
|= MultiSelectable
;
329 bool KItemListAccessibleCell::isExpandable() const
334 QRect
KItemListAccessibleCell::rect(int) const
336 QRect r
= m_view
->itemRect(m_index
-1).toRect();
340 r
.translate(m_view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
341 r
.translate(m_view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
345 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
347 Q_ASSERT(child
== 0);
349 const QHash
<QByteArray
, QVariant
> data
= m_view
->model()->data(m_index
-1);
351 case QAccessible::Value
:
352 case QAccessible::Name
:
353 return data
["text"].toString();
360 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
362 Q_ASSERT(child
== 0);
363 // FIXME - is this even allowed on the KItemListWidget?
366 bool KItemListAccessibleCell::isValid() const
368 return m_view
&& (m_index
> 0);
371 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
**iface
) const
373 if (relation
== Ancestor
&& index
== 1) {
374 *iface
= new KItemListViewAccessible(m_view
);
390 QAccessibleInterface
*parent
= queryAccessibleInterface(m_view
);
391 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
405 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
*, int otherChild
) const
407 Q_ASSERT(child
== 0);
408 Q_ASSERT(otherChild
== 0);
409 return QAccessible::Unrelated
;
413 int KItemListAccessibleCell::userActionCount(int) const
418 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
423 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
430 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
*container
)
431 : QAccessibleWidgetEx(container
)
434 KItemListContainerAccessible::~KItemListContainerAccessible ()
437 int KItemListContainerAccessible::childCount () const
442 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
444 if (child
->object() == container()->controller()->view()) {
450 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
452 if (relation
== QAccessible::Child
) {
453 *target
= new KItemListViewAccessible(container()->controller()->view());
456 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
459 #endif // QT_NO_ACCESSIBILITY