diff options
Diffstat (limited to 'src/plugins/accessible/q3simplewidgets.cpp')
-rw-r--r-- | src/plugins/accessible/q3simplewidgets.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/plugins/accessible/q3simplewidgets.cpp b/src/plugins/accessible/q3simplewidgets.cpp new file mode 100644 index 0000000..ae16665 --- /dev/null +++ b/src/plugins/accessible/q3simplewidgets.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** 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 plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "q3simplewidgets.h" + +#include <q3groupbox.h> +#include <qlabel.h> + +QT_BEGIN_NAMESPACE + +QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); + +Q3AccessibleDisplay::Q3AccessibleDisplay(QWidget *w, Role role) +: QAccessibleWidget(w, role) +{ +} + +/*! \reimp */ +QAccessible::Role Q3AccessibleDisplay::role(int child) const +{ + QLabel *l = qobject_cast<QLabel*>(object()); + if (l) { + if (l->pixmap() || l->picture()) + return Graphic; + if (l->picture()) + return Graphic; + if (l->movie()) + return Animation; + } + return QAccessibleWidget::role(child); +} + +/*! \reimp */ +QString Q3AccessibleDisplay::text(Text t, int child) const +{ + QString str; + switch (t) { + case Name: + if (qobject_cast<QLabel*>(object())) { + str = qobject_cast<QLabel*>(object())->text(); + } else if (qobject_cast<Q3GroupBox*>(object())) { + str = qobject_cast<Q3GroupBox*>(object())->title(); + } + break; + default: + break; + } + if (str.isEmpty()) + str = QAccessibleWidget::text(t, child);; + return qt_accStripAmp(str); +} + +/*! \reimp */ +QAccessible::Relation Q3AccessibleDisplay::relationTo(int child, const QAccessibleInterface *other, + int otherChild) const +{ + Relation relation = QAccessibleWidget::relationTo(child, other, otherChild); + if (child || otherChild) + return relation; + + QObject *o = other->object(); + QLabel *label = qobject_cast<QLabel*>(object()); + Q3GroupBox *groupbox = qobject_cast<Q3GroupBox*>(object()); + if (label) { + if (o == label->buddy()) + relation |= Label; + } else if (groupbox && !groupbox->title().isEmpty()) { + if (groupbox->children().contains(o)) + relation |= Label; + } + return relation; +} + +/*! \reimp */ +int Q3AccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const +{ + *target = 0; + if (rel == Labelled) { + QObject *targetObject = 0; + QLabel *label = qobject_cast<QLabel*>(object()); + Q3GroupBox *groupbox = qobject_cast<Q3GroupBox*>(object()); + if (label) { + if (entry == 1) + targetObject = label->buddy(); + } else if (groupbox && !groupbox->title().isEmpty()) { + rel = Child; + } + *target = QAccessible::queryAccessibleInterface(targetObject); + if (*target) + return 0; + } + return QAccessibleWidget::navigate(rel, entry, target); +} + +QT_END_NAMESPACE |