]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistviewaccessible.cpp
Fix selection rect after porting from QFontMetrics::width()
[dolphin.git] / src / kitemviews / kitemlistviewaccessible.cpp
index 8efa60fff64c3b8d8d0c7f4ae229c140970f8e5c..0188408a7241b3e5fa0c6ca7a2268f320ed70ca7 100644 (file)
 #include "kitemlistview.h"
 #include "private/kitemlistviewlayouter.h"
 
-#include <QtGui/qaccessible.h>
-#include <qgraphicsscene.h>
-#include <qgraphicsview.h>
-
-#include <KDebug>
-#include <QHash>
+#include <QGraphicsScene>
+#include <QGraphicsView>
 
 KItemListView* KItemListViewAccessible::view() const
 {
@@ -48,10 +44,9 @@ KItemListViewAccessible::KItemListViewAccessible(KItemListView* view_) :
 
 KItemListViewAccessible::~KItemListViewAccessible()
 {
-    foreach (QAccessibleInterface* child, m_cells) {
-        if (child) {
-            QAccessible::Id childId = QAccessible::uniqueId(child);
-            QAccessible::deleteAccessibleInterface(childId);
+    foreach (AccessibleIdWrapper idWrapper, m_cells) {
+        if (idWrapper.isValid) {
+            QAccessible::deleteAccessibleInterface(idWrapper.id);
         }
     }
 }
@@ -61,7 +56,7 @@ void* KItemListViewAccessible::interface_cast(QAccessible::InterfaceType type)
     if (type == QAccessible::TableInterface) {
         return static_cast<QAccessibleTableInterface*>(this);
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 void KItemListViewAccessible::modelReset()
@@ -71,18 +66,21 @@ void KItemListViewAccessible::modelReset()
 QAccessibleInterface* KItemListViewAccessible::cell(int index) const
 {
     if (index < 0 || index >= view()->model()->count()) {
-        return 0;
+        return nullptr;
     }
 
-    if (m_cells.size() < index - 1)
+    if (m_cells.size() <= index) {
         m_cells.resize(childCount());
+    }
+    Q_ASSERT(index < m_cells.size());
 
-    QAccessibleInterface* child = m_cells.at(index);
-    if (!child) {
-        child = new KItemListAccessibleCell(view(), index);
-        QAccessible::registerAccessibleInterface(child);
+    AccessibleIdWrapper idWrapper = m_cells.at(index);
+    if (!idWrapper.isValid) {
+        idWrapper.id = QAccessible::registerAccessibleInterface(new KItemListAccessibleCell(view(), index));
+        idWrapper.isValid = true;
+        m_cells.insert(index, idWrapper);
     }
-    return child;
+    return QAccessible::accessibleInterface(idWrapper.id);
 }
 
 QAccessibleInterface* KItemListViewAccessible::cellAt(int row, int column) const
@@ -92,7 +90,7 @@ QAccessibleInterface* KItemListViewAccessible::cellAt(int row, int column) const
 
 QAccessibleInterface* KItemListViewAccessible::caption() const
 {
-    return 0;
+    return nullptr;
 }
 
 QString KItemListViewAccessible::columnDescription(int) const
@@ -147,7 +145,9 @@ QString KItemListViewAccessible::rowDescription(int) const
 QList<QAccessibleInterface*> KItemListViewAccessible::selectedCells() const
 {
     QList<QAccessibleInterface*> cells;
-    Q_FOREACH (int index, view()->controller()->selectionManager()->selectedItems()) {
+    const auto items = view()->controller()->selectionManager()->selectedItems();
+    cells.reserve(items.count());
+    for (int index : items) {
         cells.append(cell(index));
     }
     return cells;
@@ -165,7 +165,7 @@ QList<int> KItemListViewAccessible::selectedRows() const
 
 QAccessibleInterface* KItemListViewAccessible::summary() const
 {
-    return 0;
+    return nullptr;
 }
 
 bool KItemListViewAccessible::isColumnSelected(int) const
@@ -222,7 +222,7 @@ QAccessibleInterface* KItemListViewAccessible::childAt(int x, int y) const
 QAccessibleInterface* KItemListViewAccessible::parent() const
 {
     // FIXME: return KItemListContainerAccessible here
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 int KItemListViewAccessible::childCount() const
@@ -249,7 +249,7 @@ QRect KItemListViewAccessible::rect() const
 
     const QGraphicsScene* scene = view()->scene();
     if (scene) {
-        const QPoint origin = scene->views()[0]->mapToGlobal(QPoint(0, 0));
+        const QPoint origin = scene->views().at(0)->mapToGlobal(QPoint(0, 0));
         const QRect viewRect = view()->geometry().toRect();
         return viewRect.translated(origin);
     } else {
@@ -262,7 +262,13 @@ QAccessibleInterface* KItemListViewAccessible::child(int index) const
     if (index >= 0 && index < childCount()) {
         return cell(index);
     }
-    return Q_NULLPTR;
+    return nullptr;
+}
+
+KItemListViewAccessible::AccessibleIdWrapper::AccessibleIdWrapper() :
+    isValid(false),
+    id(0)
+{
 }
 
 // Table Cell
@@ -279,7 +285,7 @@ void* KItemListAccessibleCell::interface_cast(QAccessible::InterfaceType type)
     if (type == QAccessible::TableCellInterface) {
         return static_cast<QAccessibleTableCellInterface*>(this);
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 int KItemListAccessibleCell::columnExtent() const
@@ -395,7 +401,7 @@ void KItemListAccessibleCell::setText(QAccessible::Text, const QString&)
 
 QAccessibleInterface* KItemListAccessibleCell::child(int) const
 {
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 bool KItemListAccessibleCell::isValid() const
@@ -405,7 +411,7 @@ bool KItemListAccessibleCell::isValid() const
 
 QAccessibleInterface* KItemListAccessibleCell::childAt(int, int) const
 {
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 int KItemListAccessibleCell::childCount() const
@@ -415,7 +421,7 @@ int KItemListAccessibleCell::childCount() const
 
 int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface* child) const
 {
-    Q_UNUSED(child);
+    Q_UNUSED(child)
     return -1;
 }
 
@@ -431,7 +437,7 @@ int KItemListAccessibleCell::index() const
 
 QObject* KItemListAccessibleCell::object() const
 {
-    return 0;
+    return nullptr;
 }
 
 // Container Interface
@@ -462,7 +468,7 @@ QAccessibleInterface* KItemListContainerAccessible::child(int index) const
     if (index == 0) {
         return QAccessible::queryAccessibleInterface(container()->controller()->view());
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 const KItemListContainer* KItemListContainerAccessible::container() const