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 Q_ASSERT(index
>= 0 && index
< view()->model()->count());
37 if (index
< 0 || index
>= view()->model()->count())
39 return new KItemListAccessibleCell(view(), index
);
42 QVariant
KItemListViewAccessible::invokeMethodEx(Method
, int, const QVariantList
&)
47 QAccessibleTable2CellInterface
* KItemListViewAccessible::cellAt(int row
, int column
) const
49 qDebug() << "cellAt: " << row
<< column
<< " is: " << column
*row
+ column
;
50 return cell(columnCount()*row
+ column
);
53 QAccessibleInterface
* KItemListViewAccessible::caption() const
58 QString
KItemListViewAccessible::columnDescription(int) const
63 int KItemListViewAccessible::columnCount() const
65 return view()->layouter()->columnCount();
68 int KItemListViewAccessible::rowCount() const
70 if(columnCount()<=0) {
73 int itemCount
= view()->model()->count();
74 int rowCount
= itemCount
/ columnCount();
78 if (itemCount
% columnCount()) {
84 int KItemListViewAccessible::selectedCellCount() const
86 return view()->controller()->selectionManager()->selectedItems().size();
89 int KItemListViewAccessible::selectedColumnCount() const
94 int KItemListViewAccessible::selectedRowCount() const
99 QString
KItemListViewAccessible::rowDescription(int) const
104 QList
<QAccessibleTable2CellInterface
*> KItemListViewAccessible::selectedCells() const
106 QList
<QAccessibleTable2CellInterface
*> cells
;
107 Q_FOREACH (int index
, view()->controller()->selectionManager()->selectedItems()) {
108 cells
.append(cell(index
));
113 QList
<int> KItemListViewAccessible::selectedColumns() const
118 QList
<int> KItemListViewAccessible::selectedRows() const
123 QAccessibleInterface
* KItemListViewAccessible::summary() const
128 bool KItemListViewAccessible::isColumnSelected(int) const
133 bool KItemListViewAccessible::isRowSelected(int) const
138 bool KItemListViewAccessible::selectRow(int)
143 bool KItemListViewAccessible::selectColumn(int)
148 bool KItemListViewAccessible::unselectRow(int)
153 bool KItemListViewAccessible::unselectColumn(int)
158 QAccessible2::TableModelChange
KItemListViewAccessible::modelChange() const
160 QAccessible2::TableModelChange change
;
164 QAccessible::Role
KItemListViewAccessible::role(int child
) const
166 Q_ASSERT(child
>= 0);
168 return QAccessible::Cell
;
170 return QAccessible::Table
;
173 QAccessible::State
KItemListViewAccessible::state(int child
) const
176 QAccessibleInterface
* iface
= 0;
177 navigate(Child
, child
, &iface
);
179 return iface
->state(0);
182 return QAccessible::Normal
| QAccessible::HasInvokeExtension
;
185 int KItemListViewAccessible::childAt(int x
, int y
) const
187 QPointF point
= QPointF(x
,y
);
188 return view()->itemAt(view()->mapFromScene(point
));
191 int KItemListViewAccessible::childCount() const
193 return view()->model()->count();
196 int KItemListViewAccessible::indexOfChild(const QAccessibleInterface
* iface
) const
198 const KItemListAccessibleCell
* widget
= static_cast<const KItemListAccessibleCell
*>(iface
);
199 return widget
->index() + 1;
202 QString
KItemListViewAccessible::text(Text
, int child
) const
204 Q_ASSERT(child
== 0);
208 QRect
KItemListViewAccessible::rect(int child
) const
211 if (!view()->isVisible()) {
214 QPoint origin
= view()->scene()->views()[0]->mapToGlobal(QPoint(0, 0));
215 QRect viewRect
= view()->geometry().toRect();
216 return viewRect
.translated(origin
);
219 int KItemListViewAccessible::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
223 case QAccessible::Child
: {
225 *iface
= cell(index
- 1);
237 QAccessible::Relation
KItemListViewAccessible::relationTo(int, const QAccessibleInterface
* , int) const
239 return QAccessible::Unrelated
;
244 int KItemListViewAccessible::userActionCount(int) const
249 QString
KItemListViewAccessible::actionText(int, Text
, int) const
254 bool KItemListViewAccessible::doAction(int, int, const QVariantList
&)
263 KItemListAccessibleCell::KItemListAccessibleCell(KItemListView
* view
, int index
) :
267 Q_ASSERT(index
>= 0 && index
< view
->model()->count());
270 int KItemListAccessibleCell::columnExtent() const
275 int KItemListAccessibleCell::rowExtent() const
280 QList
<QAccessibleInterface
*> KItemListAccessibleCell::rowHeaderCells() const
282 return QList
<QAccessibleInterface
*>();
285 QList
<QAccessibleInterface
*> KItemListAccessibleCell::columnHeaderCells() const
287 return QList
<QAccessibleInterface
*>();
290 int KItemListAccessibleCell::columnIndex() const
292 return m_view
->layouter()->itemColumn(m_index
);
295 int KItemListAccessibleCell::rowIndex() const
297 return m_view
->layouter()->itemRow(m_index
);
300 bool KItemListAccessibleCell::isSelected() const
302 return m_view
->controller()->selectionManager()->isSelected(m_index
);
305 void KItemListAccessibleCell::rowColumnExtents(int* row
, int* column
, int* rowExtents
, int* columnExtents
, bool* selected
) const
307 KItemListViewLayouter
* layouter
= m_view
->layouter();
308 *row
= layouter
->itemRow(m_index
);
309 *column
= layouter
->itemColumn(m_index
);
312 *selected
= isSelected();
315 QAccessibleTable2Interface
* KItemListAccessibleCell::table() const
317 return QAccessible::queryAccessibleInterface(m_view
)->table2Interface();
320 QAccessible::Role
KItemListAccessibleCell::role(int child
) const
322 Q_ASSERT(child
== 0);
323 return QAccessible::Cell
;
326 QAccessible::State
KItemListAccessibleCell::state(int child
) const
328 Q_ASSERT(child
== 0);
329 QAccessible::State state
= Normal
;
334 if (m_view
->controller()->selectionManager()->currentItem() == m_index
) {
341 if (m_view
->controller()->selectionBehavior() == KItemListController::MultiSelection
){
342 state
|= MultiSelectable
;
348 bool KItemListAccessibleCell::isExpandable() const
353 QRect
KItemListAccessibleCell::rect(int) const
355 QRect rect
= m_view
->itemRect(m_index
).toRect();
359 rect
.translate(m_view
->mapToScene(QPointF(0.0, 0.0)).toPoint());
360 rect
.translate(m_view
->scene()->views()[0]->mapToGlobal(QPoint(0, 0)));
364 QString
KItemListAccessibleCell::text(QAccessible::Text t
, int child
) const
366 Q_ASSERT(child
== 0);
368 const QHash
<QByteArray
, QVariant
> data
= m_view
->model()->data(m_index
);
370 case QAccessible::Value
:
371 case QAccessible::Name
:
372 return data
["text"].toString();
379 void KItemListAccessibleCell::setText(QAccessible::Text
/*t*/, int child
, const QString
&/*text*/)
381 Q_ASSERT(child
== 0);
384 bool KItemListAccessibleCell::isValid() const
386 return m_view
&& (m_index
>= 0) && (m_index
< m_view
->model()->count());
389 int KItemListAccessibleCell::childAt(int, int) const
394 int KItemListAccessibleCell::childCount() const
399 int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface
* child
) const
404 int KItemListAccessibleCell::navigate(RelationFlag relation
, int index
, QAccessibleInterface
* *iface
) const
406 if (relation
== Ancestor
&& index
== 1) {
407 *iface
= new KItemListViewAccessible(m_view
);
423 QAccessibleInterface
* parent
= queryAccessibleInterface(m_view
);
424 int ret
= parent
->navigate(QAccessible::Child
, index
, iface
);
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