From 015bc43da010456460dd594d35118ce35d006469 Mon Sep 17 00:00:00 2001 From: Jan-Arve Saether Date: Thu, 8 Mar 2012 10:18:58 +0100 Subject: API cleanup: remove CoordinateType enum The bridge can do the mapping to and from screen position. This is now done in the windows bridge. Change-Id: I5ca5df0fbeeb58202539f55a0f62717fb1685092 Reviewed-by: Frederik Gladhorn --- src/plugins/accessible/widgets/qaccessiblewidgets.cpp | 17 ++++------------- src/plugins/accessible/widgets/qaccessiblewidgets.h | 4 ++-- src/plugins/accessible/widgets/simplewidgets.cpp | 19 +++++-------------- src/plugins/accessible/widgets/simplewidgets.h | 6 +++--- 4 files changed, 14 insertions(+), 32 deletions(-) (limited to 'src/plugins/accessible') diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp index 140848a559..f406cf3236 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp @@ -272,7 +272,7 @@ int QAccessibleTextEdit::cursorPosition() const return textEdit()->textCursor().position(); } -QRect QAccessibleTextEdit::characterRect(int offset, CoordinateType coordType) const +QRect QAccessibleTextEdit::characterRect(int offset) const { QTextEdit *edit = textEdit(); QTextCursor cursor(edit->document()); @@ -293,14 +293,7 @@ QRect QAccessibleTextEdit::characterRect(int offset, CoordinateType coordType) c r.setWidth(averageCharWidth); } - switch (coordType) { - case RelativeToScreen: - r.moveTo(edit->viewport()->mapToGlobal(r.topLeft())); - break; - case RelativeToParent: - break; - } - + r.moveTo(edit->viewport()->mapToGlobal(r.topLeft())); return r; } @@ -309,13 +302,11 @@ int QAccessibleTextEdit::selectionCount() const return textEdit()->textCursor().hasSelection() ? 1 : 0; } -int QAccessibleTextEdit::offsetAtPoint(const QPoint &point, CoordinateType coordType) const +int QAccessibleTextEdit::offsetAtPoint(const QPoint &point) const { QTextEdit *edit = textEdit(); - QPoint p = point; - if (coordType == RelativeToScreen) - p = edit->viewport()->mapFromGlobal(p); + QPoint p = edit->viewport()->mapFromGlobal(point); // convert to document coordinates p += QPoint(edit->horizontalScrollBar()->value(), edit->verticalScrollBar()->value()); diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/plugins/accessible/widgets/qaccessiblewidgets.h index 147ea91a41..8a4277128d 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.h +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h @@ -81,9 +81,9 @@ public: void addSelection(int startOffset, int endOffset); QString attributes(int offset, int *startOffset, int *endOffset) const; int cursorPosition() const; - QRect characterRect(int offset, QAccessible2::CoordinateType coordType) const; + QRect characterRect(int offset) const; int selectionCount() const; - int offsetAtPoint(const QPoint &point, QAccessible2::CoordinateType coordType) const; + int offsetAtPoint(const QPoint &point) const; void selection(int selectionIndex, int *startOffset, int *endOffset) const; QString text(int startOffset, int endOffset) const; QString textBeforeOffset (int offset, QAccessible2::BoundaryType boundaryType, diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index 39d7e03a1b..4e1fe34b8e 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -490,7 +490,7 @@ QSize QAccessibleDisplay::imageSize() const } /*! \internal */ -QRect QAccessibleDisplay::imagePosition(QAccessible2::CoordinateType coordType) const +QRect QAccessibleDisplay::imagePosition() const { QLabel *label = qobject_cast(widget()); if (!label) @@ -499,14 +499,7 @@ QRect QAccessibleDisplay::imagePosition(QAccessible2::CoordinateType coordType) if (!pixmap) return QRect(); - switch (coordType) { - case QAccessible2::RelativeToScreen: - return QRect(label->mapToGlobal(label->pos()), label->size()); - case QAccessible2::RelativeToParent: - return label->geometry(); - } - - return QRect(); + return QRect(label->mapToGlobal(label->pos()), label->size()); } #ifndef QT_NO_LINEEDIT @@ -613,7 +606,7 @@ int QAccessibleLineEdit::cursorPosition() const return lineEdit()->cursorPosition(); } -QRect QAccessibleLineEdit::characterRect(int /*offset*/, CoordinateType /*coordType*/) const +QRect QAccessibleLineEdit::characterRect(int /*offset*/) const { // QLineEdit doesn't hand out character rects return QRect(); @@ -624,11 +617,9 @@ int QAccessibleLineEdit::selectionCount() const return lineEdit()->hasSelectedText() ? 1 : 0; } -int QAccessibleLineEdit::offsetAtPoint(const QPoint &point, CoordinateType coordType) const +int QAccessibleLineEdit::offsetAtPoint(const QPoint &point) const { - QPoint p = point; - if (coordType == RelativeToScreen) - p = lineEdit()->mapFromGlobal(p); + QPoint p = lineEdit()->mapFromGlobal(point); return lineEdit()->cursorPositionAt(p); } diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h index c228775421..e2847dd2db 100644 --- a/src/plugins/accessible/widgets/simplewidgets.h +++ b/src/plugins/accessible/widgets/simplewidgets.h @@ -110,7 +110,7 @@ public: // QAccessibleImageInterface QString imageDescription() const; QSize imageSize() const; - QRect imagePosition(QAccessible2::CoordinateType coordType) const; + QRect imagePosition() const; }; #ifndef QT_NO_LINEEDIT @@ -129,9 +129,9 @@ public: void addSelection(int startOffset, int endOffset); QString attributes(int offset, int *startOffset, int *endOffset) const; int cursorPosition() const; - QRect characterRect(int offset, QAccessible2::CoordinateType coordType) const; + QRect characterRect(int offset) const; int selectionCount() const; - int offsetAtPoint(const QPoint &point, QAccessible2::CoordinateType coordType) const; + int offsetAtPoint(const QPoint &point) const; void selection(int selectionIndex, int *startOffset, int *endOffset) const; QString text(int startOffset, int endOffset) const; QString textBeforeOffset (int offset, QAccessible2::BoundaryType boundaryType, -- cgit v1.2.3 From f195a8e2b69eba0e3c44f2dece222b0da9e06026 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Mon, 13 Feb 2012 14:05:51 +0100 Subject: Added QAccessibleGroupBox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a new accessible interface for QGroupBox, as QAccessibleDisplay is not good enough when the QGroupBox is checkable. AccessibleFactory was modified to return a QAccessibleGroupBox when the accessible interface of a QGroupBox is requested. Created tst_QAccessibility::groupBoxTest Port to Qt5 of the patch by José Millán Soto Change-Id: I6c23dcf5562b3ea269b04102e78463b65827188a Reviewed-by: Jan-Arve Sæther (cherry picked from commit c03ceb203c65d9e3485fad848bfc0c4b6ee3e9aa) --- src/plugins/accessible/widgets/main.cpp | 4 +- src/plugins/accessible/widgets/simplewidgets.cpp | 94 ++++++++++++++++++++---- src/plugins/accessible/widgets/simplewidgets.h | 23 ++++++ 3 files changed, 107 insertions(+), 14 deletions(-) (limited to 'src/plugins/accessible') diff --git a/src/plugins/accessible/widgets/main.cpp b/src/plugins/accessible/widgets/main.cpp index ca8bf816b6..4709069d39 100644 --- a/src/plugins/accessible/widgets/main.cpp +++ b/src/plugins/accessible/widgets/main.cpp @@ -236,8 +236,10 @@ QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObjec #endif } else if (classname == QLatin1String("QLabel") || classname == QLatin1String("QLCDNumber")) { iface = new QAccessibleDisplay(widget); +#ifndef QT_NO_GROUPBOX } else if (classname == QLatin1String("QGroupBox")) { - iface = new QAccessibleDisplay(widget, QAccessible::Grouping); + iface = new QAccessibleGroupBox(widget); +#endif } else if (classname == QLatin1String("QStatusBar")) { iface = new QAccessibleWidget(widget, QAccessible::StatusBar); #ifndef QT_NO_PROGRESSBAR diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index 4e1fe34b8e..af0c211cca 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -399,10 +399,6 @@ QString QAccessibleDisplay::text(QAccessible::Text t) const if (str.isEmpty()) { if (qobject_cast(object())) { str = qobject_cast(object())->text(); -#ifndef QT_NO_GROUPBOX - } else if (qobject_cast(object())) { - str = qobject_cast(object())->title(); -#endif #ifndef QT_NO_LCDNUMBER } else if (qobject_cast(object())) { QLCDNumber *l = qobject_cast(object()); @@ -439,15 +435,6 @@ QAccessibleDisplay::relations(QAccessible::Relation match /*= QAccessible::AllRe #ifndef QT_NO_SHORTCUT if (QLabel *label = qobject_cast(object())) { relatedObjects.append(label->buddy()); -#endif -#ifndef QT_NO_GROUPBOX - } else if (QGroupBox *groupbox = qobject_cast(object())) { - if (!groupbox->title().isEmpty()) { - const QList kids = childWidgets(widget()); - for (int i = 0; i < kids.count(); ++i) { - relatedObjects.append(kids.at(i)); - } - } #endif } for (int i = 0; i < relatedObjects.count(); ++i) { @@ -502,6 +489,87 @@ QRect QAccessibleDisplay::imagePosition() const return QRect(label->mapToGlobal(label->pos()), label->size()); } +#ifndef QT_NO_GROUPBOX +QAccessibleGroupBox::QAccessibleGroupBox(QWidget *w) +: QAccessibleWidget(w) +{ +} + +QGroupBox* QAccessibleGroupBox::groupBox() const +{ + return static_cast(widget()); +} + +QString QAccessibleGroupBox::text(QAccessible::Text t) const +{ + QString txt = QAccessibleWidget::text(t); + + if (txt.isEmpty()) { + switch (t) { + case QAccessible::Name: + txt = qt_accStripAmp(groupBox()->title()); + case QAccessible::Description: + txt = qt_accStripAmp(groupBox()->title()); + default: + break; + } + } + + return txt; +} + +QAccessible::State QAccessibleGroupBox::state() const +{ + QAccessible::State st = QAccessibleWidget::state(); + st.checkable = groupBox()->isCheckable(); + st.checked = groupBox()->isChecked(); + return st; +} + +QAccessible::Role QAccessibleGroupBox::role() const +{ + return groupBox()->isCheckable() ? QAccessible::CheckBox : QAccessible::Grouping; +} + +QVector > +QAccessibleGroupBox::relations(QAccessible::Relation match /*= QAccessible::AllRelations*/) const +{ + QVector > rels = QAccessibleWidget::relations(match); + + if ((match & QAccessible::Labelled) && (!groupBox()->title().isEmpty())) { + const QList kids = childWidgets(widget()); + for (int i = 0; i < kids.count(); ++i) { + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(kids.at(i)); + if (iface) + rels.append(qMakePair(iface, QAccessible::Relation(QAccessible::Labelled))); + } + } + return rels; +} + +QStringList QAccessibleGroupBox::actionNames() const +{ + QStringList actions = QAccessibleWidget::actionNames(); + + if (groupBox()->isCheckable()) { + actions.prepend(QAccessibleActionInterface::checkAction()); + } + return actions; +} + +void QAccessibleGroupBox::doAction(const QString &actionName) +{ + if (actionName == QAccessibleActionInterface::checkAction()) + groupBox()->setChecked(!groupBox()->isChecked()); +} + +QStringList QAccessibleGroupBox::keyBindingsForAction(const QString &) const +{ + return QStringList(); +} + +#endif + #ifndef QT_NO_LINEEDIT /*! \class QAccessibleLineEdit diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h index e2847dd2db..74c1da405d 100644 --- a/src/plugins/accessible/widgets/simplewidgets.h +++ b/src/plugins/accessible/widgets/simplewidgets.h @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE class QAbstractButton; class QLineEdit; class QToolButton; +class QGroupBox; class QProgressBar; class QAccessibleButton : public QAccessibleWidget @@ -113,6 +114,28 @@ public: QRect imagePosition() const; }; +#ifndef QT_NO_GROUPBOX +class QAccessibleGroupBox : public QAccessibleWidget +{ +public: + explicit QAccessibleGroupBox(QWidget *w); + + QAccessible::State state() const; + QAccessible::Role role() const; + QString text(QAccessible::Text t) const; + + QVector >relations(QAccessible::Relation match = QAccessible::AllRelations) const; + + //QAccessibleActionInterface + QStringList actionNames() const; + void doAction(const QString &actionName); + QStringList keyBindingsForAction(const QString &) const; + +private: + QGroupBox *groupBox() const; +}; +#endif + #ifndef QT_NO_LINEEDIT class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInterface, public QAccessibleSimpleEditableTextInterface -- cgit v1.2.3