summaryrefslogtreecommitdiffstats
path: root/src/plugins/accessible
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/accessible')
-rw-r--r--src/plugins/accessible/widgets/main.cpp4
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.cpp17
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.h4
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.cpp109
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.h29
5 files changed, 119 insertions, 44 deletions
diff --git a/src/plugins/accessible/widgets/main.cpp b/src/plugins/accessible/widgets/main.cpp
index 10a9aa8f47..d180be6d2a 100644
--- a/src/plugins/accessible/widgets/main.cpp
+++ b/src/plugins/accessible/widgets/main.cpp
@@ -234,8 +234,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/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
index 222d838642..a002b8bf26 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
@@ -271,7 +271,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());
@@ -292,14 +292,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;
}
@@ -308,13 +301,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 f161c52561..79ac5ae7b5 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.h
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h
@@ -80,9 +80,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..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<QLabel*>(object())) {
str = qobject_cast<QLabel*>(object())->text();
-#ifndef QT_NO_GROUPBOX
- } else if (qobject_cast<QGroupBox*>(object())) {
- str = qobject_cast<QGroupBox*>(object())->title();
-#endif
#ifndef QT_NO_LCDNUMBER
} else if (qobject_cast<QLCDNumber*>(object())) {
QLCDNumber *l = qobject_cast<QLCDNumber*>(object());
@@ -440,15 +436,6 @@ QAccessibleDisplay::relations(QAccessible::Relation match /*= QAccessible::AllRe
if (QLabel *label = qobject_cast<QLabel*>(object())) {
relatedObjects.append(label->buddy());
#endif
-#ifndef QT_NO_GROUPBOX
- } else if (QGroupBox *groupbox = qobject_cast<QGroupBox*>(object())) {
- if (!groupbox->title().isEmpty()) {
- const QList<QWidget*> 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) {
const QAccessible::Relation rel = QAccessible::Labelled;
@@ -490,7 +477,7 @@ QSize QAccessibleDisplay::imageSize() const
}
/*! \internal */
-QRect QAccessibleDisplay::imagePosition(QAccessible2::CoordinateType coordType) const
+QRect QAccessibleDisplay::imagePosition() const
{
QLabel *label = qobject_cast<QLabel *>(widget());
if (!label)
@@ -499,16 +486,90 @@ 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(label->mapToGlobal(label->pos()), label->size());
+}
+
+#ifndef QT_NO_GROUPBOX
+QAccessibleGroupBox::QAccessibleGroupBox(QWidget *w)
+: QAccessibleWidget(w)
+{
+}
+
+QGroupBox* QAccessibleGroupBox::groupBox() const
+{
+ return static_cast<QGroupBox *>(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 QRect();
+ 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<QPair<QAccessibleInterface*, QAccessible::Relation> >
+QAccessibleGroupBox::relations(QAccessible::Relation match /*= QAccessible::AllRelations*/) const
+{
+ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > rels = QAccessibleWidget::relations(match);
+
+ if ((match & QAccessible::Labelled) && (!groupBox()->title().isEmpty())) {
+ const QList<QWidget*> 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
@@ -613,7 +674,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 +685,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..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
@@ -110,9 +111,31 @@ public:
// QAccessibleImageInterface
QString imageDescription() const;
QSize imageSize() const;
- QRect imagePosition(QAccessible2::CoordinateType coordType) const;
+ 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<QPair<QAccessibleInterface*, QAccessible::Relation> >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
@@ -129,9 +152,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,