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
+ column
+ 1);
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 if(columnCount()<=0) {
72 int itemCount
= view()->model()->count();
73 int rowCount
= itemCount
/ columnCount();
77 if (itemCount
% rowCount
) {
83 int KItemListViewAccessible::selectedCellCount() const
85 return view()->controller()->selectionManager()->selectedItems().size();
88 int KItemListViewAccessible::selectedColumnCount() const
93 int KItemListViewAccessible::selectedRowCount() const
98 QString
KItemListViewAccessible::rowDescription(int) const
103 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
105 QList
<QAccessibleTable2CellInterface
*> cells
;
106 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
107 cells
.append(cell(index
));
112 QList
<int> KItemListViewAccessible::selectedColumns() const
117 QList
<int> KItemListViewAccessible::selectedRows() const
122 QAccessibleInterface
* KItemListViewAccessible::summary() const
127 bool KItemListViewAccessible::isColumnSelected(int) const
132 bool KItemListViewAccessible::isRowSelected(int) const
137 bool KItemListViewAccessible::selectRow(int)
142 bool KItemListViewAccessible::selectColumn(int)
147 bool KItemListViewAccessible::unselectRow(int)
152 bool KItemListViewAccessible::unselectColumn(int)
157 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
159 QAccessible2::TableModelChange change
;
163 QAccessible::Role
KItemListViewAccessible::role(int child
) const
165 Q_ASSERT(child
>= 0);
167 return QAccessible::Cell
;
169 return QAccessible::Table
;
172 QAccessible::State
KItemListViewAccessible::state(int child
) const
175 QAccessibleInterface
* iface
;
176 navigate(Child
,child
,&iface
);
178 return iface
->state(0);
181 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
184 int KItemListViewAccessible::childAt(int x
, int y
) const
186 QPointF point
= QPointF(x
,y
);
187 return view()->itemAt(view()->mapFromScene(point
));
190 int KItemListViewAccessible::childCount() const
192 return view()->model()->count();
195 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
* iface
) const
197 const KItemListAccessibleCell
* widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
198 return widget
->index();
201 QString
KItemListViewAccessible::text(Text
, int child
) const
203 Q_ASSERT(child
== 0);
207 QRect
KItemListViewAccessible::rect(int child
) const
210 if (!view()->isVisible()) {
213 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
214 QRect viewRect
= view()->geometry().toRect();
215 return viewRect
.translated(origin
);
218 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
222 case QAccessible::Child
: {
224 *iface
= cell(index
);
236 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
* , int) const
238 return QAccessible::Unrelated
;
243 int KItemListViewAccessible::userActionCount(int) const
248 QString
KItemListViewAccessible::actionText(int, Text
, int) const
253 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
262 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
* view
, int index
) :
266 Q_ASSERT(index
>= 0);
269 int KItemListAccessibleCell::columnExtent() const
274 int KItemListAccessibleCell::rowExtent() const
279 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
281 return QList
<QAccessibleInterface
*>();
284 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
286 return QList
<QAccessibleInterface
*>();
289 int KItemListAccessibleCell::columnIndex() const
291 return m_view
->layouter()->itemColumn(m_index
);
294 int KItemListAccessibleCell::rowIndex() const
296 return m_view
->layouter()->itemRow(m_index
);
299 bool KItemListAccessibleCell::isSelected() const
301 return m_view
->controller()->selectionManager()->isSelected(m_index
-1);
304 void KItemListAccessibleCell::rowColumnExtents(int* row
, int* column
, int* rowExtents
, int* columnExtents
, bool* selected
) const
306 KItemListViewLayouter
* layouter
= m_view
->layouter();
307 *row
= layouter
->itemRow(m_index
);
308 *column
= layouter
->itemColumn(m_index
);
311 *selected
= isSelected();
314 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
316 return QAccessible::queryAccessibleInterface(m_view
)->table2Interface();
319 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
321 Q_ASSERT(child
== 0);
322 return QAccessible::Cell
;
325 QAccessible::State
KItemListAccessibleCell::state(int child
) const
327 Q_ASSERT(child
== 0);
328 QAccessible::State state
= Normal
;
333 if (m_view
->controller()->selectionManager()->currentItem() == m_index
) {
340 if (m_view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
341 state
|= MultiSelectable
;
347 bool KItemListAccessibleCell::isExpandable() const
352 QRect
KItemListAccessibleCell::rect(int) const
354 QRect rect
= m_view
->itemRect(m_index
-1).toRect();
358 rect
.translate(m_view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
359 rect
.translate(m_view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
363 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
365 Q_ASSERT(child
== 0);
367 const QHash
<QByteArray
, QVariant
> data
= m_view
->model()->data(m_index
-1);
369 case QAccessible::Value
:
370 case QAccessible::Name
:
371 return data
["text"].toString();
378 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
380 Q_ASSERT(child
== 0);
383 bool KItemListAccessibleCell::isValid() const
385 return m_view
&& (m_index
> 0);
388 int KItemListAccessibleCell::childAt(int, int) const
393 int KItemListAccessibleCell::childCount() const
398 int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface
* child
) const
403 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
405 if (relation
== Ancestor
&& index
== 1) {
406 *iface
= new KItemListViewAccessible(m_view
);
422 QAccessibleInterface
* parent
= queryAccessibleInterface(m_view
);
423 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
437 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
* , int otherChild
) const
439 Q_ASSERT(child
== 0);
440 Q_ASSERT(otherChild
== 0);
441 return QAccessible::Unrelated
;
446 int KItemListAccessibleCell::userActionCount(int) const
451 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
456 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
463 int KItemListAccessibleCell::index() const
468 QObject
* KItemListAccessibleCell::object() const
473 // Container Interface
474 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
* container
) :
475 QAccessibleWidgetEx(container
)
478 KItemListContainerAccessible::~KItemListContainerAccessible ()
481 int KItemListContainerAccessible::childCount () const
486 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
488 if (child
->object() == container()->controller()->view()) {
494 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
496 if (relation
== QAccessible::Child
) {
497 *target
= new KItemListViewAccessible(container()->controller()->view());
500 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
503 #endif // QT_NO_ACCESSIBILITY