1 #include "kitemlistviewaccessible.h"
2 #include "kitemlistcontroller.h"
3 #include "kitemlistselectionmanager.h"
4 #include "private/kitemlistviewlayouter.h"
6 #include <QtGui/qaccessible2.h>
7 #include <qgraphicsscene.h>
8 #include <qgraphicsview.h>
13 #ifndef QT_NO_ACCESSIBILITY
15 KItemListView
* KItemListViewAccessible::view() const
17 return qobject_cast
<KItemListView
*>(object());
20 KItemListViewAccessible::KItemListViewAccessible(KItemListView
* view_
) :
21 QAccessibleObjectEx(view_
)
26 void KItemListViewAccessible::modelReset()
29 QAccessible::Role
KItemListViewAccessible::cellRole() const
31 return QAccessible::Cell
;
34 QAccessibleTable2CellInterface
* KItemListViewAccessible::cell(int index
) const
37 return new KItemListAccessibleCell(view(), index
);
42 QVariant
KItemListViewAccessible::invokeMethodEx(Method
, int, const QVariantList
&)
47 QAccessibleTable2CellInterface
* KItemListViewAccessible::cellAt(int row
, int column
) const
49 return cell(column
* (row
-1) + column
) ;
52 QAccessibleInterface
* KItemListViewAccessible::caption() const
57 QString
KItemListViewAccessible::columnDescription(int) const
62 int KItemListViewAccessible::columnCount() const
64 return view()->layouter()->columnCount();
67 int KItemListViewAccessible::rowCount() const
69 int itemCount
= view()->model()->count();
70 int rowCount
= itemCount
/ columnCount();
71 if (itemCount
% rowCount
) {
77 int KItemListViewAccessible::selectedCellCount() const
79 return view()->controller()->selectionManager()->selectedItems().size();
82 int KItemListViewAccessible::selectedColumnCount() const
87 int KItemListViewAccessible::selectedRowCount() const
92 QString
KItemListViewAccessible::rowDescription(int) const
97 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
99 QList
<QAccessibleTable2CellInterface
*> cells
;
100 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
101 cells
.append(cell(index
));
106 QList
<int> KItemListViewAccessible::selectedColumns() const
111 QList
<int> KItemListViewAccessible::selectedRows() const
116 QAccessibleInterface
* KItemListViewAccessible::summary() const
121 bool KItemListViewAccessible::isColumnSelected(int) const
126 bool KItemListViewAccessible::isRowSelected(int) const
131 bool KItemListViewAccessible::selectRow(int)
136 bool KItemListViewAccessible::selectColumn(int)
141 bool KItemListViewAccessible::unselectRow(int)
146 bool KItemListViewAccessible::unselectColumn(int)
151 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
153 QAccessible2::TableModelChange change
;
157 QAccessible::Role
KItemListViewAccessible::role(int child
) const
159 Q_ASSERT(child
>= 0);
161 return QAccessible::Cell
;
163 return QAccessible::Table
;
166 QAccessible::State
KItemListViewAccessible::state(int child
) const
169 QAccessibleInterface
* iface
;
170 navigate(Child
,child
,&iface
);
172 return iface
->state(0);
175 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
178 int KItemListViewAccessible::childAt(int x
, int y
) const
180 QPointF point
= QPointF(x
,y
);
181 return view()->itemAt(view()->mapFromScene(point
));
184 int KItemListViewAccessible::childCount() const
186 return view()->model()->count();
189 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
* iface
) const
191 const KItemListAccessibleCell
* widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
192 return widget
->index();
195 QString
KItemListViewAccessible::text(Text
, int child
) const
197 Q_ASSERT(child
== 0);
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
;
237 int KItemListViewAccessible::userActionCount(int) const
242 QString
KItemListViewAccessible::actionText(int, Text
, int) const
247 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
256 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
* view
, int index
) :
263 int KItemListAccessibleCell::columnExtent() const
268 int KItemListAccessibleCell::rowExtent() const
273 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
275 return QList
<QAccessibleInterface
*>();
278 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
280 return QList
<QAccessibleInterface
*>();
283 int KItemListAccessibleCell::columnIndex() const
285 return m_view
->layouter()->itemColumn(m_index
);
288 int KItemListAccessibleCell::rowIndex() const
290 return m_view
->layouter()->itemRow(m_index
);
293 bool KItemListAccessibleCell::isSelected() const
295 return m_view
->controller()->selectionManager()->isSelected(m_index
-1);
298 void KItemListAccessibleCell::rowColumnExtents(int* row
, int* column
, int* rowExtents
, int* columnExtents
, bool* selected
) const
300 KItemListViewLayouter
* layouter
= m_view
->layouter();
301 *row
= layouter
->itemRow(m_index
);
302 *column
= layouter
->itemColumn(m_index
);
305 *selected
= isSelected();
308 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
310 return QAccessible::queryAccessibleInterface(m_view
)->table2Interface();
313 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
315 Q_ASSERT(child
== 0);
316 return QAccessible::Cell
;
319 QAccessible::State
KItemListAccessibleCell::state(int child
) const
321 Q_ASSERT(child
== 0);
322 QAccessible::State state
= Normal
;
327 if (m_view
->controller()->selectionManager()->currentItem() == m_index
) {
334 if (m_view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
335 state
|= MultiSelectable
;
341 bool KItemListAccessibleCell::isExpandable() const
346 QRect
KItemListAccessibleCell::rect(int) const
348 QRect rect
= m_view
->itemRect(m_index
-1).toRect();
352 rect
.translate(m_view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
353 rect
.translate(m_view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
357 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
359 Q_ASSERT(child
== 0);
361 const QHash
<QByteArray
, QVariant
> data
= m_view
->model()->data(m_index
-1);
363 case QAccessible::Value
:
364 case QAccessible::Name
:
365 return data
["text"].toString();
372 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
374 Q_ASSERT(child
== 0);
377 bool KItemListAccessibleCell::isValid() const
379 return m_view
&& (m_index
> 0);
382 int KItemListAccessibleCell::childAt(int, int) const
387 int KItemListAccessibleCell::childCount() const
392 int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface
* child
) const
397 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
399 if (relation
== Ancestor
&& index
== 1) {
400 *iface
= new KItemListViewAccessible(m_view
);
416 QAccessibleInterface
* parent
= queryAccessibleInterface(m_view
);
417 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
431 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
* , int otherChild
) const
433 Q_ASSERT(child
== 0);
434 Q_ASSERT(otherChild
== 0);
435 return QAccessible::Unrelated
;
440 int KItemListAccessibleCell::userActionCount(int) const
445 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
450 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
457 int KItemListAccessibleCell::index() const
462 QObject
* KItemListAccessibleCell::object() const
467 // Container Interface
468 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
* container
) :
469 QAccessibleWidgetEx(container
)
472 KItemListContainerAccessible::~KItemListContainerAccessible ()
475 int KItemListContainerAccessible::childCount () const
480 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
482 if (child
->object() == container()->controller()->view()) {
488 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
490 if (relation
== QAccessible::Child
) {
491 *target
= new KItemListViewAccessible(container()->controller()->view());
494 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
497 #endif // QT_NO_ACCESSIBILITY