diff -r 000000000000 -r 1918ee327afb src/plugins/accessible/compat/q3complexwidgets.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/accessible/compat/q3complexwidgets.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,340 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 "q3complexwidgets.h" + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +Q3AccessibleHeader::Q3AccessibleHeader(QWidget *w) + : QAccessibleWidget(w) +{ + Q_ASSERT(header()); + addControllingSignal(QLatin1String("clicked(int)")); +} + +/*! Returns the Q3Header. */ +Q3Header *Q3AccessibleHeader::header() const +{ + return qobject_cast(object()); +} + +/*! \reimp */ +QRect Q3AccessibleHeader::rect(int child) const +{ + QPoint zero = header()->mapToGlobal(QPoint(0, 0)); + QRect sect = header()->sectionRect(child - 1); + return QRect(sect.x() + zero.x(), sect.y() + zero.y(), sect.width(), sect.height()); +} + +/*! \reimp */ +int Q3AccessibleHeader::childCount() const +{ + return header()->count(); +} + +/*! \reimp */ +QString Q3AccessibleHeader::text(Text t, int child) const +{ + QString str; + + if (child <= childCount()) { + switch (t) { + case Name: + str = header()->label(child - 1); + break; + case Description: { + QAccessibleEvent event(QEvent::AccessibilityDescription, child); + if (QApplication::sendEvent(widget(), &event)) + str = event.value(); + break; } + case Help: { + QAccessibleEvent event(QEvent::AccessibilityHelp, child); + if (QApplication::sendEvent(widget(), &event)) + str = event.value(); + break; } + default: + break; + } + } + if (str.isEmpty()) + str = QAccessibleWidget::text(t, child);; + return str; +} + +/*! \reimp */ +QAccessible::Role Q3AccessibleHeader::role(int) const +{ + return (header()->orientation() == Qt::Horizontal) ? ColumnHeader : RowHeader; +} + +/*! \reimp */ +QAccessible::State Q3AccessibleHeader::state(int child) const +{ + State state = QAccessibleWidget::state(child); + + int section = child ? child - 1 : -1; + if (!header()->isClickEnabled(section)) + state |= Unavailable; + else + state |= Selectable; + if (child && section == header()->sortIndicatorSection()) + state |= Selected; + if (header()->isResizeEnabled(section)) + state |= Sizeable; + if (child && header()->isMovingEnabled()) + state |= Movable; + return state; +} + +/*! + \class Q3AccessibleTitleBar + \brief The Q3AccessibleTitleBar class implements the QAccessibleInterface for title bars. + \internal + + \ingroup accessibility +*/ + +/*! + Constructs a Q3AccessibleTitleBar object for \a w. +*/ +Q3AccessibleTitleBar::Q3AccessibleTitleBar(QWidget *w) +: QAccessibleWidget(w, TitleBar) +{ + Q_ASSERT(titleBar()); +} + +/*! + Returns the title bar. +*/ +Q3TitleBar *Q3AccessibleTitleBar::titleBar() const +{ + return qobject_cast(object()); +} + +/*! \reimp */ +QRect Q3AccessibleTitleBar::rect(int child) const +{ + if (!child) + return QAccessibleWidget::rect(child); + + QStyle::SubControl sc; + switch (child) { + case 1: + sc = QStyle::SC_TitleBarSysMenu; + break; + case 2: + sc = QStyle::SC_TitleBarLabel; + break; + case 3: + sc = QStyle::SC_TitleBarMinButton; + break; + case 4: + sc = QStyle::SC_TitleBarMaxButton; + break; + case 5: + sc = QStyle::SC_TitleBarCloseButton; + break; + default: + sc = QStyle::SC_None; + break; + } + + QRect r; + if (sc != QStyle::SC_None) { + QStyleOptionTitleBar option; + r = titleBar()->style()->subControlRect(QStyle::CC_TitleBar, &option, sc, titleBar()); + } + + QPoint tp = titleBar()->mapToGlobal(QPoint(0,0)); + return QRect(tp.x() + r.x(), tp.y() + r.y(), r.width(), r.height()); +} + +/* \reimp +int Q3AccessibleTitleBar::navigate(NavDirection direction, int startControl) const +{ + if (direction != NavFirstChild && direction != NavLastChild && direction != NavFocusChild && !startControl) + return QAccessibleWidget::navigate(direction, startControl); + + switch (direction) { + case NavFirstChild: + return 1; + break; + case NavLastChild: + return childCount(); + break; + case NavNext: + case NavRight: + return startControl + 1 > childCount() ? -1 : startControl + 1; + case NavPrevious: + case NavLeft: + return startControl -1 < 1 ? -1 : startControl - 1; + default: + break; + } + return -1; +} +*/ + +/*! \reimp */ +int Q3AccessibleTitleBar::childCount() const +{ + if (!(titleBar()->windowFlags() & Qt::WStyle_SysMenu)) + return 0; + int control = 3; + if (!(titleBar()->windowFlags() & Qt::WStyle_Minimize)) + ++control; + if (!(titleBar()->windowFlags() & Qt::WStyle_Maximize)) + ++control; + return control; +} + +/*! \reimp */ +QString Q3AccessibleTitleBar::text(Text t, int child) const +{ + QString str = QAccessibleWidget::text(t, child); + if (str.size()) + return str; + + QWidget *window = titleBar()->window(); + switch (t) { + case Name: + switch (child) { + case 1: + return Q3TitleBar::tr("System"); + case 3: + if (window && window->isMinimized()) + return Q3TitleBar::tr("Restore up"); + return Q3TitleBar::tr("Minimize"); + case 4: + if (window && window->isMaximized()) + return Q3TitleBar::tr("Restore down"); + return Q3TitleBar::tr("Maximize"); + case 5: + return Q3TitleBar::tr("Close"); + default: + break; + } + break; + case Value: + if (!child || child == 2) + return window ? window->windowTitle() : QString(); + break; +/* + case DefaultAction: + if (child > 2) + return Q3TitleBar::tr("Press"); + break; +*/ + case Description: + switch (child) { + case 1: + return Q3TitleBar::tr("Contains commands to manipulate the window"); + case 3: + if (window && window->isMinimized()) + return Q3TitleBar::tr("Puts a minimized window back to normal"); + return Q3TitleBar::tr("Moves the window out of the way"); + case 4: + if (window && window->isMaximized()) + return Q3TitleBar::tr("Puts a maximized window back to normal"); + return Q3TitleBar::tr("Makes the window full screen"); + case 5: + return Q3TitleBar::tr("Closes the window"); + default: + return Q3TitleBar::tr("Displays the name of the window and contains controls to manipulate it"); + } + default: + break; + } + return str; +} + +/*! \reimp */ +QAccessible::Role Q3AccessibleTitleBar::role(int child) const +{ + switch (child) + { + case 1: + case 3: + case 4: + case 5: + return PushButton; + default: + return TitleBar; + } +} + +/*! \reimp */ +QAccessible::State Q3AccessibleTitleBar::state(int child) const +{ + return QAccessibleWidget::state(child); +} + +/*! \reimp */ +bool Q3AccessibleTitleBar::doAction(int, int child, const QVariantList &) +{ + switch (child) { + case 3: + if (titleBar()->window()->isMinimized()) + titleBar()->window()->showNormal(); + else + titleBar()->window()->showMinimized(); + return true; + case 4: + if (titleBar()->window()->isMaximized()) + titleBar()->window()->showNormal(); + else + titleBar()->window()->showMaximized(); + return true; + case 5: + titleBar()->window()->close(); + return true; + default: + break; + } + return false; +} + +QT_END_NAMESPACE