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
36 if (index
< 0 || index
>= view()->model()->count())
38 return new KItemListAccessibleCell(view(), index
);
41 QVariant
KItemListViewAccessible::invokeMethodEx(Method
, int, const QVariantList
&)
46 QAccessibleTable2CellInterface
* KItemListViewAccessible::cellAt(int row
, int column
) const
48 qDebug() << "cellAt: " << row
<< column
<< " is: " << column
*row
+ column
;
49 return cell(columnCount()*row
+ column
);
52 QAccessibleInterface
* KItemListViewAccessible::caption() const
57 QString
KItemListViewAccessible::columnDescription(int) const
62 int KItemListViewAccessible::columnCount() const
64 return view()->m_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
% columnCount()) {
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
;
160 change
.lastRow
= rowCount();
161 change
.lastColumn
= columnCount();
165 QAccessible::Role
KItemListViewAccessible::role(int child
) const
167 Q_ASSERT(child
>= 0);
169 return QAccessible::Cell
;
171 return QAccessible::Table
;
174 QAccessible::State
KItemListViewAccessible::state(int child
) const
177 QAccessibleInterface
* iface
= 0;
178 navigate(Child
, child
, &iface
);
180 return iface
->state(0);
183 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
186 int KItemListViewAccessible::childAt(int x
, int y
) const
188 QPointF point
= QPointF(x
,y
);
189 return view()->itemAt(view()->mapFromScene(point
));
192 int KItemListViewAccessible::childCount() const
194 return view()->model()->count();
197 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
* iface
) const
199 const KItemListAccessibleCell
* widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
200 return widget
->index() + 1;
203 QString
KItemListViewAccessible::text(Text
, int child
) const
205 Q_ASSERT(child
== 0);
209 QRect
KItemListViewAccessible::rect(int child
) const
212 if (!view()->isVisible()) {
215 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
216 QRect viewRect
= view()->geometry().toRect();
217 return viewRect
.translated(origin
);
220 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
224 case QAccessible::Child
: {
226 *iface
= cell(index
- 1);
238 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
* , int) const
240 return QAccessible::Unrelated
;
245 int KItemListViewAccessible::userActionCount(int) const
250 QString
KItemListViewAccessible::actionText(int, Text
, int) const
255 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
264 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
* view
, int index
) :
268 Q_ASSERT(index
>= 0 && index
< view
->model()->count());
271 int KItemListAccessibleCell::columnExtent() const
276 int KItemListAccessibleCell::rowExtent() const
281 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
283 return QList
<QAccessibleInterface
*>();
286 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
288 return QList
<QAccessibleInterface
*>();
291 int KItemListAccessibleCell::columnIndex() const
293 return m_view
->m_layouter
->itemColumn(m_index
);
296 int KItemListAccessibleCell::rowIndex() const
298 return m_view
->m_layouter
->itemRow(m_index
);
301 bool KItemListAccessibleCell::isSelected() const
303 return m_view
->controller()->selectionManager()->isSelected(m_index
);
306 void KItemListAccessibleCell::rowColumnExtents(int* row
, int* column
, int* rowExtents
, int* columnExtents
, bool* selected
) const
308 KItemListViewLayouter
* layouter
= m_view
->m_layouter
;
309 *row
= layouter
->itemRow(m_index
);
310 *column
= layouter
->itemColumn(m_index
);
313 *selected
= isSelected();
316 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
318 return QAccessible::queryAccessibleInterface(m_view
)->table2Interface();
321 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
323 Q_ASSERT(child
== 0);
324 return QAccessible::Cell
;
327 QAccessible::State
KItemListAccessibleCell::state(int child
) const
329 Q_ASSERT(child
== 0);
330 QAccessible::State state
= Normal
;
335 if (m_view
->controller()->selectionManager()->currentItem() == m_index
) {
342 if (m_view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
343 state
|= MultiSelectable
;
346 if (m_view
->model()->isExpandable(m_index
)) {
347 if(m_view
->model()->isExpanded(m_index
)) {
357 bool KItemListAccessibleCell::isExpandable() const
359 return m_view
->model()->isExpandable(m_index
);
362 QRect
KItemListAccessibleCell::rect(int) const
364 QRect rect
= m_view
->itemRect(m_index
).toRect();
368 rect
.translate(m_view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
369 rect
.translate(m_view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
373 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
375 Q_ASSERT(child
== 0);
377 const QHash
<QByteArray
, QVariant
> data
= m_view
->model()->data(m_index
);
379 case QAccessible::Value
:
380 case QAccessible::Name
:
381 return data
["text"].toString();
388 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
390 Q_ASSERT(child
== 0);
393 bool KItemListAccessibleCell::isValid() const
395 return m_view
&& (m_index
>= 0) && (m_index
< m_view
->model()->count());
398 int KItemListAccessibleCell::childAt(int, int) const
403 int KItemListAccessibleCell::childCount() const
408 int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface
* child
) const
414 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
416 if (relation
== Ancestor
&& index
== 1) {
417 *iface
= new KItemListViewAccessible(m_view
);
438 QAccessible::Relation
KItemListAccessibleCell::relationTo(int child
, const QAccessibleInterface
* , int otherChild
) const
440 Q_ASSERT(child
== 0);
441 Q_ASSERT(otherChild
== 0);
442 return QAccessible::Unrelated
;
447 int KItemListAccessibleCell::userActionCount(int) const
452 QString
KItemListAccessibleCell::actionText(int, Text
, int) const
457 bool KItemListAccessibleCell::doAction(int, int, const QVariantList
&)
464 int KItemListAccessibleCell::index() const
469 QObject
* KItemListAccessibleCell::object() const
474 // Container Interface
475 KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer
* container
) :
476 QAccessibleWidgetEx(container
)
479 KItemListContainerAccessible::~KItemListContainerAccessible ()
482 int KItemListContainerAccessible::childCount () const
487 int KItemListContainerAccessible::indexOfChild ( const QAccessibleInterface
* child
) const
489 if (child
->object() == container()->controller()->view()) {
495 int KItemListContainerAccessible::navigate ( QAccessible::RelationFlag relation
, int index
, QAccessibleInterface
** target
) const
497 if (relation
== QAccessible::Child
) {
498 *target
= new KItemListViewAccessible(container()->controller()->view());
501 return QAccessibleWidgetEx::navigate(relation
, index
, target
);
504 #endif // QT_NO_ACCESSIBILITY