summaryrefslogtreecommitdiffstats
path: root/util/accessibilityinspector/accessibilityinspector.cpp
diff options
context:
space:
mode:
authorMorten Sorvig <morten.sorvig@nokia.com>2011-10-19 10:57:32 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-20 02:31:45 +0200
commitcff475f339979a3b4e10e426c8bfe15975e2e5cf (patch)
tree88b086518d8289b5f68f2476a2b801945f120d0a /util/accessibilityinspector/accessibilityinspector.cpp
parentb1b843dcf5165f5b204adbd3cf36c0c8fa3605c0 (diff)
Move a11y inspector from tools to util.
Change-Id: Ifc032c511aea72a8f7a4ec62d304e89718f712db Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'util/accessibilityinspector/accessibilityinspector.cpp')
-rw-r--r--util/accessibilityinspector/accessibilityinspector.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/util/accessibilityinspector/accessibilityinspector.cpp b/util/accessibilityinspector/accessibilityinspector.cpp
new file mode 100644
index 0000000000..4f65f2beaa
--- /dev/null
+++ b/util/accessibilityinspector/accessibilityinspector.cpp
@@ -0,0 +1,189 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ ** Contact: Nokia Corporation (qt-info@nokia.com)
+ **
+ ** This file is part of the tools applications of the Qt Toolkit.
+ **
+ ** $QT_BEGIN_LICENSE:LGPL$
+ ** GNU Lesser General Public License Usage
+ ** This file may be used under the terms of the GNU Lesser General Public
+ ** License version 2.1 as published by the Free Software Foundation and
+ ** appearing in the file LICENSE.LGPL included in the packaging of this
+ ** file. Please review the following information to ensure the GNU Lesser
+ ** General Public License version 2.1 requirements will be met:
+ ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ **
+ ** In addition, as a special exception, Nokia gives you certain additional
+ ** rights. These rights are described in the Nokia Qt LGPL Exception
+ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ **
+ ** GNU General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU General
+ ** Public License version 3.0 as published by the Free Software Foundation
+ ** and appearing in the file LICENSE.GPL included in the packaging of this
+ ** file. Please review the following information to ensure the GNU General
+ ** Public License version 3.0 requirements will be met:
+ ** http://www.gnu.org/copyleft/gpl.html.
+ **
+ ** Other Usage
+ ** Alternatively, this file may be used in accordance with the terms and
+ ** conditions contained in a signed written agreement between you and Nokia.
+ **
+ **
+ **
+ **
+ **
+ ** $QT_END_LICENSE$
+ **
+ ****************************************************************************/
+
+#include "accessibilityinspector.h"
+
+#include "screenreader.h"
+#include "optionswidget.h"
+#include "accessibilityscenemanager.h"
+
+#include <QtDeclarative/QtDeclarative>
+
+void MouseInterceptingGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ emit mousePressed(event->scenePos().toPoint());
+ QGraphicsScene::mousePressEvent(event);
+}
+
+void MouseInterceptingGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+{
+ emit mouseDobleClicked();
+ QGraphicsScene::mouseDoubleClickEvent(event);
+}
+
+AccessibilitySceneManager *sceneManager = 0;
+QAccessible::UpdateHandler previousUpdateHandler = 0;
+bool updateHandlerRecursion = false;
+void accessibilityUpdateHandler(QObject *object, int who, QAccessible::Event reason)
+{
+ if (updateHandlerRecursion)
+ return;
+
+ if (!qobject_cast<QSGItem *>(object))
+ return;
+
+ updateHandlerRecursion = true;
+
+ if (sceneManager) {
+ sceneManager->handleUpdate(object, reason);
+
+ //qDebug() << "update";
+ }
+
+ if (previousUpdateHandler) // call prev just to be sure.
+ previousUpdateHandler(object, who, reason);
+
+ updateHandlerRecursion = false;
+}
+
+AccessibilityInspector::AccessibilityInspector(QObject *parent) :
+ QObject(parent)
+{
+}
+
+AccessibilityInspector::~AccessibilityInspector()
+{
+ delete optionsWidget;
+ delete accessibilityScene;
+ delete accessibilityView;
+ delete accessibilityTreeScene;
+ delete accessibilityTreeView;
+ delete screenReader;
+}
+
+void AccessibilityInspector::inspectWindow(QWindow *window)
+{
+ qDebug() << "AccessibilityInspector::inspectWindow()" << window;
+
+ optionsWidget = new OptionsWidget();
+
+ accessibilityScene = new MouseInterceptingGraphicsScene();
+
+ accessibilityView = new QGraphicsView();
+ accessibilityView->setScene(accessibilityScene);
+ accessibilityView->resize(1024, 768);
+ accessibilityView->scale(1.3, 1.3);
+
+ accessibilityTreeScene = new QGraphicsScene();
+
+ accessibilityTreeView = new QGraphicsView();
+ accessibilityTreeView->setScene(accessibilityTreeScene);
+ accessibilityTreeView->resize(1024, 768);
+
+ sceneManager = new AccessibilitySceneManager();
+ QObject::connect(optionsWidget, SIGNAL(optionsChanged()), sceneManager, SLOT(updateAccessibilitySceneItemFlags()));
+ QObject::connect(optionsWidget, SIGNAL(refreshClicked()), sceneManager, SLOT(populateAccessibilityScene()));
+ QObject::connect(optionsWidget, SIGNAL(refreshClicked()), sceneManager, SLOT(populateAccessibilityTreeScene()));
+ QObject::connect(optionsWidget, SIGNAL(scaleChanged(int)), sceneManager, SLOT(changeScale(int)));
+
+ sceneManager->setOptionsWidget(optionsWidget);
+ sceneManager->setRootWindow(window);
+ sceneManager->setScene(accessibilityScene);
+ sceneManager->setView(accessibilityView);
+ sceneManager->setTreeScene(accessibilityTreeScene);
+ sceneManager->setTreeView(accessibilityTreeView);
+
+ screenReader = new ScreenReader;
+ QObject::connect(accessibilityScene, SIGNAL(mousePressed(QPoint)), screenReader, SLOT(touchPoint(QPoint)));
+ QObject::connect(accessibilityScene, SIGNAL(mouseDobleClicked()), screenReader, SLOT(activate()));
+ QObject::connect(screenReader, SIGNAL(selected(QObject*)), sceneManager, SLOT(setSelected(QObject*)));
+ screenReader->setRootObject(window);
+ screenReader->setOptionsWidget(optionsWidget);
+
+ previousUpdateHandler = QAccessible::installUpdateHandler(accessibilityUpdateHandler);
+
+ QTimer::singleShot(100, sceneManager, SLOT(populateAccessibilityScene()));
+ QTimer::singleShot(100, sceneManager, SLOT(populateAccessibilityTreeScene()));
+
+ QSettings settings;
+ accessibilityView->restoreGeometry(settings.value("accessiblityGeometry").toByteArray());
+ accessibilityView->setObjectName(QLatin1String("accessibilityInspectorView"));
+ accessibilityView->show();
+
+
+ accessibilityTreeView->restoreGeometry(settings.value("treeGeometry").toByteArray());
+ accessibilityTreeView->setObjectName(QLatin1String("accessibilityInspectorTreeView"));
+ accessibilityTreeView->show();
+ optionsWidget->restoreGeometry(settings.value("optionsGeometry").toByteArray());
+ optionsWidget->setObjectName(QLatin1String("accessibilityInspectorOptions"));
+ optionsWidget->show();
+}
+
+void AccessibilityInspector::saveWindowGeometry()
+{
+ QSettings settings;
+ settings.setValue("accessiblityGeometry", accessibilityView->saveGeometry());
+ settings.setValue("treeGeometry", accessibilityTreeView->saveGeometry());
+ settings.setValue("optionsGeometry", optionsWidget->saveGeometry());
+}
+
+QString translateRole(QAccessible::Role role)
+{
+ if (role == 0x2B)
+ return "PushButton";
+ if (role == 0x2C)
+ return "CheckBox";
+ if (role == 0x2D)
+ return "RadioButton";
+ if (role == 0xA)
+ return "Client";
+ if (role == 0x29)
+ return "Static Text";
+ if (role == 0x33)
+ return "Slider";
+ if (role == 0x33)
+ return "Slider";
+ if (role == 0x10)
+ return "Pane";
+
+ return QString::number(role, 16);
+}
+