]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistviewaccessible.cpp
GIT_SILENT Sync po/docbooks with svn
[dolphin.git] / src / kitemviews / kitemlistviewaccessible.cpp
index f8630218f905a40fd538669ac2786cd1e2b37377..a8d80ab52baa039b63533f28b83ba62e35cc9610 100644 (file)
@@ -1,24 +1,10 @@
-/***************************************************************************
- *   Copyright (C) 2012 by Amandeep Singh <aman.dedman@gmail.com>          *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2012 Amandeep Singh <aman.dedman@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #ifndef QT_NO_ACCESSIBILITY
-
 #include "kitemlistviewaccessible.h"
 
 #include "kitemlistcontainer.h"
 #include "kitemlistview.h"
 #include "private/kitemlistviewlayouter.h"
 
-#include <qaccessible.h>
-#include <qgraphicsscene.h>
-#include <qgraphicsview.h>
-
-#include <QHash>
+#include <QGraphicsScene>
+#include <QGraphicsView>
 
-KItemListViewKItemListViewAccessible::view() const
+KItemListView *KItemListViewAccessible::view() const
 {
-    return qobject_cast<KItemListView*>(object());
+    return qobject_cast<KItemListView *>(object());
 }
 
-KItemListViewAccessible::KItemListViewAccessible(KItemListView* view_) :
-    QAccessibleObject(view_)
+KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_, KItemListContainerAccessible *parent)
+    : QAccessibleObject(view_)
+    , m_parent(parent)
 {
     Q_ASSERT(view());
+    Q_CHECK_PTR(parent);
     m_cells.resize(childCount());
 }
 
 KItemListViewAccessible::~KItemListViewAccessible()
 {
-    foreach (QAccessibleInterface* child, m_cells) {
-        if (child) {
-            QAccessible::Id childId = QAccessible::uniqueId(child);
-            QAccessible::deleteAccessibleInterface(childId);
+    for (AccessibleIdWrapper idWrapper : std::as_const(m_cells)) {
+        if (idWrapper.isValid) {
+            QAccessible::deleteAccessibleInterface(idWrapper.id);
         }
     }
 }
 
-voidKItemListViewAccessible::interface_cast(QAccessible::InterfaceType type)
+void *KItemListViewAccessible::interface_cast(QAccessible::InterfaceType type)
 {
     if (type == QAccessible::TableInterface) {
-        return static_cast<QAccessibleTableInterface*>(this);
+        return static_cast<QAccessibleTableInterface *>(this);
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 void KItemListViewAccessible::modelReset()
 {
 }
 
-QAccessibleInterfaceKItemListViewAccessible::cell(int index) const
+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);
 }
 
-QAccessibleInterfaceKItemListViewAccessible::cellAt(int row, int column) const
+QAccessibleInterface *KItemListViewAccessible::cellAt(int row, int column) const
 {
     return cell(columnCount() * row + column);
 }
 
-QAccessibleInterfaceKItemListViewAccessible::caption() const
+QAccessibleInterface *KItemListViewAccessible::caption() const
 {
-    return 0;
+    return nullptr;
 }
 
 QString KItemListViewAccessible::columnDescription(int) const
@@ -143,9 +130,9 @@ QString KItemListViewAccessible::rowDescription(int) const
     return QString();
 }
 
-QList<QAccessibleInterface*> KItemListViewAccessible::selectedCells() const
+QList<QAccessibleInterface *> KItemListViewAccessible::selectedCells() const
 {
-    QList<QAccessibleInterface*> cells;
+    QList<QAccessibleInterface *> cells;
     const auto items = view()->controller()->selectionManager()->selectedItems();
     cells.reserve(items.count());
     for (int index : items) {
@@ -164,9 +151,9 @@ QList<int> KItemListViewAccessible::selectedRows() const
     return QList<int>();
 }
 
-QAccessibleInterfaceKItemListViewAccessible::summary() const
+QAccessibleInterface *KItemListViewAccessible::summary() const
 {
-    return 0;
+    return nullptr;
 }
 
 bool KItemListViewAccessible::isColumnSelected(int) const
@@ -199,8 +186,9 @@ bool KItemListViewAccessible::unselectColumn(int)
     return true;
 }
 
-void KItemListViewAccessible::modelChange(QAccessibleTableModelChangeEvent* /*event*/)
-{}
+void KItemListViewAccessible::modelChange(QAccessibleTableModelChangeEvent * /*event*/)
+{
+}
 
 QAccessible::Role KItemListViewAccessible::role() const
 {
@@ -213,17 +201,16 @@ QAccessible::State KItemListViewAccessible::state() const
     return s;
 }
 
-QAccessibleInterfaceKItemListViewAccessible::childAt(int x, int y) const
+QAccessibleInterface *KItemListViewAccessible::childAt(int x, int y) const
 {
     const QPointF point = QPointF(x, y);
-    int itemIndex = view()->itemAt(view()->mapFromScene(point));
-    return child(itemIndex);
+    const std::optional<int> itemIndex = view()->itemAt(view()->mapFromScene(point));
+    return child(itemIndex.value_or(-1));
 }
 
-QAccessibleInterfaceKItemListViewAccessible::parent() const
+QAccessibleInterface *KItemListViewAccessible::parent() const
 {
-    // FIXME: return KItemListContainerAccessible here
-    return Q_NULLPTR;
+    return m_parent;
 }
 
 int KItemListViewAccessible::childCount() const
@@ -231,9 +218,9 @@ int KItemListViewAccessible::childCount() const
     return view()->model()->count();
 }
 
-int KItemListViewAccessible::indexOfChild(const QAccessibleInterfaceinterface) const
+int KItemListViewAccessible::indexOfChild(const QAccessibleInterface *interface) const
 {
-    const KItemListAccessibleCell* widget = static_cast<const KItemListAccessibleCell*>(interface);
+    const KItemListAccessibleCell *widget = static_cast<const KItemListAccessibleCell *>(interface);
     return widget->index();
 }
 
@@ -248,7 +235,7 @@ QRect KItemListViewAccessible::rect() const
         return QRect();
     }
 
-    const QGraphicsScenescene = view()->scene();
+    const QGraphicsScene *scene = view()->scene();
     if (scene) {
         const QPoint origin = scene->views().at(0)->mapToGlobal(QPoint(0, 0));
         const QRect viewRect = view()->geometry().toRect();
@@ -258,29 +245,35 @@ QRect KItemListViewAccessible::rect() const
     }
 }
 
-QAccessibleInterfaceKItemListViewAccessible::child(int index) const
+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
 
-KItemListAccessibleCell::KItemListAccessibleCell(KItemListView* view, int index) :
-    m_view(view),
-    m_index(index)
+KItemListAccessibleCell::KItemListAccessibleCell(KItemListView *view, int index)
+    : m_view(view)
+    m_index(index)
 {
     Q_ASSERT(index >= 0 && index < view->model()->count());
 }
 
-voidKItemListAccessibleCell::interface_cast(QAccessible::InterfaceType type)
+void *KItemListAccessibleCell::interface_cast(QAccessible::InterfaceType type)
 {
     if (type == QAccessible::TableCellInterface) {
-        return static_cast<QAccessibleTableCellInterface*>(this);
+        return static_cast<QAccessibleTableCellInterface *>(this);
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 int KItemListAccessibleCell::columnExtent() const
@@ -293,14 +286,14 @@ int KItemListAccessibleCell::rowExtent() const
     return 1;
 }
 
-QList<QAccessibleInterface*> KItemListAccessibleCell::rowHeaderCells() const
+QList<QAccessibleInterface *> KItemListAccessibleCell::rowHeaderCells() const
 {
-    return QList<QAccessibleInterface*>();
+    return QList<QAccessibleInterface *>();
 }
 
-QList<QAccessibleInterface*> KItemListAccessibleCell::columnHeaderCells() const
+QList<QAccessibleInterface *> KItemListAccessibleCell::columnHeaderCells() const
 {
-    return QList<QAccessibleInterface*>();
+    return QList<QAccessibleInterface *>();
 }
 
 int KItemListAccessibleCell::columnIndex() const
@@ -318,7 +311,7 @@ bool KItemListAccessibleCell::isSelected() const
     return m_view->controller()->selectionManager()->isSelected(m_index);
 }
 
-QAccessibleInterfaceKItemListAccessibleCell::table() const
+QAccessibleInterface *KItemListAccessibleCell::table() const
 {
     return QAccessible::queryAccessibleInterface(m_view);
 }
@@ -390,13 +383,13 @@ QString KItemListAccessibleCell::text(QAccessible::Text t) const
     return QString();
 }
 
-void KItemListAccessibleCell::setText(QAccessible::Text, const QString&)
+void KItemListAccessibleCell::setText(QAccessible::Text, const QString &)
 {
 }
 
-QAccessibleInterfaceKItemListAccessibleCell::child(int) const
+QAccessibleInterface *KItemListAccessibleCell::child(int) const
 {
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 bool KItemListAccessibleCell::isValid() const
@@ -404,9 +397,9 @@ bool KItemListAccessibleCell::isValid() const
     return m_view && (m_index >= 0) && (m_index < m_view->model()->count());
 }
 
-QAccessibleInterfaceKItemListAccessibleCell::childAt(int, int) const
+QAccessibleInterface *KItemListAccessibleCell::childAt(int, int) const
 {
-    return Q_NULLPTR;
+    return nullptr;
 }
 
 int KItemListAccessibleCell::childCount() const
@@ -414,13 +407,13 @@ int KItemListAccessibleCell::childCount() const
     return 0;
 }
 
-int KItemListAccessibleCell::indexOfChild(const QAccessibleInterfacechild) const
+int KItemListAccessibleCell::indexOfChild(const QAccessibleInterface *child) const
 {
-    Q_UNUSED(child);
+    Q_UNUSED(child)
     return -1;
 }
 
-QAccessibleInterfaceKItemListAccessibleCell::parent() const
+QAccessibleInterface *KItemListAccessibleCell::parent() const
 {
     return QAccessible::queryAccessibleInterface(m_view);
 }
@@ -430,14 +423,14 @@ int KItemListAccessibleCell::index() const
     return m_index;
 }
 
-QObjectKItemListAccessibleCell::object() const
+QObject *KItemListAccessibleCell::object() const
 {
-    return 0;
+    return nullptr;
 }
 
 // Container Interface
-KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer* container) :
-    QAccessibleWidget(container)
+KItemListContainerAccessible::KItemListContainerAccessible(KItemListContainer *container)
+    QAccessibleWidget(container)
 {
 }
 
@@ -450,7 +443,7 @@ int KItemListContainerAccessible::childCount() const
     return 1;
 }
 
-int KItemListContainerAccessible::indexOfChild(const QAccessibleInterfacechild) const
+int KItemListContainerAccessible::indexOfChild(const QAccessibleInterface *child) const
 {
     if (child->object() == container()->controller()->view()) {
         return 0;
@@ -458,17 +451,17 @@ int KItemListContainerAccessible::indexOfChild(const QAccessibleInterface* child
     return -1;
 }
 
-QAccessibleInterfaceKItemListContainerAccessible::child(int index) const
+QAccessibleInterface *KItemListContainerAccessible::child(int index) const
 {
     if (index == 0) {
         return QAccessible::queryAccessibleInterface(container()->controller()->view());
     }
-    return Q_NULLPTR;
+    return nullptr;
 }
 
-const KItemListContainerKItemListContainerAccessible::container() const
+const KItemListContainer *KItemListContainerAccessible::container() const
 {
-    return qobject_cast<KItemListContainer*>(object());
+    return qobject_cast<KItemListContainer *>(object());
 }
 
 #endif // QT_NO_ACCESSIBILITY