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>bb10
parent
2ec2edc24d
commit
a2b7b42ca4
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
"QGroupBox",
|
||||
"QStatusBar",
|
||||
"QProgressBar",
|
||||
"QPlainTextEdit",
|
||||
"QMenuBar",
|
||||
"QMenu",
|
||||
"QHeaderView",
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
#include "qtextdocument.h"
|
||||
#include "private/qtextdocument_p.h"
|
||||
#include "qtextlist.h"
|
||||
#include "qaccessible.h"
|
||||
|
||||
#include <qtextformat.h>
|
||||
#include <qdatetime.h>
|
||||
|
|
@ -441,6 +442,11 @@ QPlainTextEditControl::QPlainTextEditControl(QPlainTextEdit *parent)
|
|||
void QPlainTextEditPrivate::_q_cursorPositionChanged()
|
||||
{
|
||||
pageUpDownLastCursorYIsValid = false;
|
||||
#ifndef QT_NO_ACCESSIBILITY
|
||||
Q_Q(QPlainTextEdit);
|
||||
QAccessibleTextCursorEvent ev(q, q->textCursor().position());
|
||||
QAccessible::updateAccessibility(&ev);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QPlainTextEditPrivate::_q_verticalScrollbarActionTriggered(int action) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue