summaryrefslogtreecommitdiffstats
path: root/src/plugins/accessible/widgets
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2012-10-12 15:00:23 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-22 08:41:57 +0200
commita2b7b42ca4cf1ed682fa777b776673320b53e6ee (patch)
tree2d12fcfbb5fb7572d2f17044f895ecc8cc836f2b /src/plugins/accessible/widgets
parent2ec2edc24d118d9c13482f0306df3cf2314f8898 (diff)
Bring back accessibility for plain text edit.
This ports 282951bc6c7ddb607fb7ebf61eb8de9acf3da77f aka Change-Id: If0269a49b9fcd1b3e9fcfd32fac912560df28f21 to Qt 5. Change-Id: I46f1d4947d90688b598993f76330e2e10aeca950 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Diffstat (limited to 'src/plugins/accessible/widgets')
-rw-r--r--src/plugins/accessible/widgets/main.cpp2
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.cpp96
-rw-r--r--src/plugins/accessible/widgets/qaccessiblewidgets.h30
-rw-r--r--src/plugins/accessible/widgets/widgets.json1
4 files changed, 119 insertions, 10 deletions
diff --git a/src/plugins/accessible/widgets/main.cpp b/src/plugins/accessible/widgets/main.cpp
index 2db039f9e5..55b1d375dd 100644
--- a/src/plugins/accessible/widgets/main.cpp
+++ b/src/plugins/accessible/widgets/main.cpp
@@ -202,6 +202,8 @@ QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObjec
#ifndef QT_NO_TEXTEDIT
} else if (classname == QLatin1String("QTextEdit")) {
iface = new QAccessibleTextEdit(widget);
+ } else if (classname == QLatin1String("QPlainTextEdit")) {
+ iface = new QAccessiblePlainTextEdit(widget);
#endif
} else if (classname == QLatin1String("QTipLabel")) {
iface = new QAccessibleDisplay(widget, QAccessible::ToolTip);
diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
index ad5ef69da4..eac31b8068 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp
@@ -47,6 +47,7 @@
#include "private/qtextedit_p.h"
#include "qtextdocument.h"
#include "qtextobject.h"
+#include "qplaintextedit.h"
#include "qtextboundaryfinder.h"
#include "qscrollbar.h"
#include "qdebug.h"
@@ -100,6 +101,90 @@ QList<QWidget*> childWidgets(const QWidget *widget, bool includeTopLevel)
#ifndef QT_NO_TEXTEDIT
+QAccessiblePlainTextEdit::QAccessiblePlainTextEdit(QWidget* o)
+ :QAccessibleTextWidget(o)
+{
+ Q_ASSERT(widget()->inherits("QPlainTextEdit"));
+}
+
+QPlainTextEdit* QAccessiblePlainTextEdit::plainTextEdit() const
+{
+ return static_cast<QPlainTextEdit *>(widget());
+}
+
+QString QAccessiblePlainTextEdit::text(QAccessible::Text t) const
+{
+ if (t == QAccessible::Value)
+ return plainTextEdit()->toPlainText();
+
+ return QAccessibleWidget::text(t);
+}
+
+void QAccessiblePlainTextEdit::setText(QAccessible::Text t, const QString &text)
+{
+ if (t != QAccessible::Value) {
+ QAccessibleWidget::setText(t, text);
+ return;
+ }
+ if (plainTextEdit()->isReadOnly())
+ return;
+
+ plainTextEdit()->setPlainText(text);
+}
+
+QAccessible::State QAccessiblePlainTextEdit::state() const
+{
+ QAccessible::State st = QAccessibleWidget::state();
+ if (plainTextEdit()->isReadOnly())
+ st.readOnly = true;
+ else
+ st.editable = true;
+ return st;
+}
+
+void *QAccessiblePlainTextEdit::interface_cast(QAccessible::InterfaceType t)
+{
+ if (t == QAccessible::TextInterface)
+ return static_cast<QAccessibleTextInterface*>(this);
+ return QAccessibleWidget::interface_cast(t);
+}
+
+QPoint QAccessiblePlainTextEdit::scrollBarPosition() const
+{
+ QPoint result;
+ result.setX(plainTextEdit()->horizontalScrollBar() ? plainTextEdit()->horizontalScrollBar()->sliderPosition() : 0);
+ result.setY(plainTextEdit()->verticalScrollBar() ? plainTextEdit()->verticalScrollBar()->sliderPosition() : 0);
+ return result;
+}
+
+QTextCursor QAccessiblePlainTextEdit::textCursor() const
+{
+ return plainTextEdit()->textCursor();
+}
+
+void QAccessiblePlainTextEdit::setTextCursor(const QTextCursor &textCursor)
+{
+ plainTextEdit()->setTextCursor(textCursor);
+}
+
+QTextDocument* QAccessiblePlainTextEdit::textDocument() const
+{
+ return plainTextEdit()->document();
+}
+
+QWidget* QAccessiblePlainTextEdit::viewport() const
+{
+ return plainTextEdit()->viewport();
+}
+
+void QAccessiblePlainTextEdit::scrollToSubstring(int startIndex, int endIndex)
+{
+ //TODO: Not implemented
+ Q_UNUSED(startIndex);
+ Q_UNUSED(endIndex);
+}
+
+
/*!
\class QAccessibleTextEdit
\brief The QAccessibleTextEdit class implements the QAccessibleInterface for richtext editors.
@@ -143,9 +228,9 @@ QWidget *QAccessibleTextEdit::viewport() const
return textEdit()->viewport();
}
-QPoint QAccessibleTextEdit::scrollBarsCurrentPosition() const
+QPoint QAccessibleTextEdit::scrollBarPosition() const
{
- QPoint result(0, 0);
+ QPoint result;
result.setX(textEdit()->horizontalScrollBar() ? textEdit()->horizontalScrollBar()->sliderPosition() : 0);
result.setY(textEdit()->verticalScrollBar() ? textEdit()->verticalScrollBar()->sliderPosition() : 0);
return result;
@@ -750,10 +835,9 @@ QRect QAccessibleTextWidget::characterRect(int offset) const
w, h);
r.moveTo(viewport()->mapToGlobal(r.topLeft()));
}
+ r.translate(-scrollBarPosition());
}
- r.translate(-scrollBarsCurrentPosition());
-
return r;
}
@@ -761,7 +845,7 @@ int QAccessibleTextWidget::offsetAtPoint(const QPoint &point) const
{
QPoint p = viewport()->mapFromGlobal(point);
// convert to document coordinates
- p += scrollBarsCurrentPosition();
+ p += scrollBarPosition();
return textDocument()->documentLayout()->hitTest(p, Qt::ExactHit);
}
@@ -907,7 +991,7 @@ QString QAccessibleTextWidget::text(int startOffset, int endOffset) const
return cursor.selectedText();
}
-QPoint QAccessibleTextWidget::scrollBarsCurrentPosition() const
+QPoint QAccessibleTextWidget::scrollBarPosition() const
{
return QPoint(0, 0);
}
diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/plugins/accessible/widgets/qaccessiblewidgets.h
index b740bf7a6d..ec2583235f 100644
--- a/src/plugins/accessible/widgets/qaccessiblewidgets.h
+++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h
@@ -64,6 +64,7 @@ class QAbstractItemView;
class QDockWidget;
class QDockWidgetLayout;
class QMainWindow;
+class QPlainTextEdit;
class QTextCursor;
class QTextDocument;
@@ -111,7 +112,7 @@ public:
protected:
QTextCursor textCursorForRange(int startOffset, int endOffset) const;
QPair<int, int> getBoundaries(int offset, QAccessible2::BoundaryType boundaryType) const;
- virtual QPoint scrollBarsCurrentPosition() const;
+ virtual QPoint scrollBarPosition() const;
virtual QTextCursor textCursor() const = 0;
virtual void setTextCursor(const QTextCursor &) = 0;
virtual QTextDocument *textDocument() const = 0;
@@ -120,6 +121,29 @@ protected:
#endif //QT_NO_CURSOR
#ifndef QT_NO_TEXTEDIT
+class QAccessiblePlainTextEdit : public QAccessibleTextWidget
+{
+public:
+ explicit QAccessiblePlainTextEdit(QWidget *o);
+
+ QString text(QAccessible::Text t) const;
+ void setText(QAccessible::Text t, const QString &text);
+ QAccessible::State state() const;
+
+ void *interface_cast(QAccessible::InterfaceType t);
+
+ // QAccessibleTextInterface
+ void scrollToSubstring(int startIndex, int endIndex);
+protected:
+ QPlainTextEdit *plainTextEdit() const;
+
+ QPoint scrollBarPosition() const;
+ QTextCursor textCursor() const;
+ void setTextCursor(const QTextCursor &textCursor);
+ QTextDocument *textDocument() const;
+ QWidget *viewport() const;
+};
+
class QAccessibleTextEdit : public QAccessibleTextWidget
{
public:
@@ -137,13 +161,11 @@ public:
protected:
QTextEdit *textEdit() const;
- QPoint scrollBarsCurrentPosition() const;
+ QPoint scrollBarPosition() const;
QTextCursor textCursor() const;
void setTextCursor(const QTextCursor &textCursor);
QTextDocument *textDocument() const;
QWidget *viewport() const;
-private:
- int childOffset;
};
#endif // QT_NO_TEXTEDIT
diff --git a/src/plugins/accessible/widgets/widgets.json b/src/plugins/accessible/widgets/widgets.json
index 21c0157144..69584b9bc8 100644
--- a/src/plugins/accessible/widgets/widgets.json
+++ b/src/plugins/accessible/widgets/widgets.json
@@ -21,6 +21,7 @@
"QGroupBox",
"QStatusBar",
"QProgressBar",
+ "QPlainTextEdit",
"QMenuBar",
"QMenu",
"QHeaderView",