From cff475f339979a3b4e10e426c8bfe15975e2e5cf Mon Sep 17 00:00:00 2001 From: Morten Sorvig Date: Wed, 19 Oct 2011 10:57:32 +0200 Subject: Move a11y inspector from tools to util. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ifc032c511aea72a8f7a4ec62d304e89718f712db Reviewed-by: Morten Johan Sørvig --- .../accessibilityinspector.cpp | 189 +++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 util/accessibilityinspector/accessibilityinspector.cpp (limited to 'util/accessibilityinspector/accessibilityinspector.cpp') 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 + +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(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); +} + -- cgit v1.2.3