Make QTextCursor accessibility boundary finder available
This allows re-using the function in QtQuick. In addition TextBoundaryType is moved to QAccessible and QAccessible2 as namespace ceases to exist. Change-Id: I184bc2c181a22ca51ac4db4e5a080dc26d4acfe0 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>bb10
parent
6f0dc9f4c7
commit
8307ab784e
|
|
@ -46,6 +46,8 @@
|
|||
#include "qaccessibleplugin.h"
|
||||
#include "qaccessibleobject.h"
|
||||
#include "qaccessiblebridge.h"
|
||||
#include <QtCore/qtextboundaryfinder.h>
|
||||
#include <QtGui/qtextcursor.h>
|
||||
#include <QtGui/QGuiApplication>
|
||||
#include <private/qguiapplication_p.h>
|
||||
#include <qpa/qplatformaccessibility.h>
|
||||
|
|
@ -789,6 +791,77 @@ void QAccessible::updateAccessibility(QAccessibleEvent *event)
|
|||
*/
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\internal
|
||||
\brief getBoundaries is a helper function to find the accessible text boundaries for QTextCursor based documents.
|
||||
\param documentCursor a valid cursor bound to the document (not null). It needs to ba at the position to look for the boundary
|
||||
\param boundaryType the type of boundary to find
|
||||
\return the boundaries as pair
|
||||
*/
|
||||
QPair< int, int > QAccessible::qAccessibleTextBoundaryHelper(const QTextCursor &offsetCursor, TextBoundaryType boundaryType)
|
||||
{
|
||||
Q_ASSERT(!offsetCursor.isNull());
|
||||
|
||||
QTextCursor endCursor = offsetCursor;
|
||||
endCursor.movePosition(QTextCursor::End);
|
||||
int characterCount = endCursor.position();
|
||||
|
||||
QPair<int, int> result;
|
||||
QTextCursor cursor = offsetCursor;
|
||||
switch (boundaryType) {
|
||||
case CharBoundary:
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case WordBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case SentenceBoundary: {
|
||||
// QCursor does not provide functionality to move to next sentence.
|
||||
// We therefore find the current block, then go through the block using
|
||||
// QTextBoundaryFinder and find the sentence the \offset represents
|
||||
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
QString blockText = cursor.selectedText();
|
||||
const int offsetWithinBlockText = offsetCursor.position() - result.first;
|
||||
QTextBoundaryFinder sentenceFinder(QTextBoundaryFinder::Sentence, blockText);
|
||||
sentenceFinder.setPosition(offsetWithinBlockText);
|
||||
int prevBoundary = offsetWithinBlockText;
|
||||
int nextBoundary = offsetWithinBlockText;
|
||||
if (!(sentenceFinder.boundaryReasons() & QTextBoundaryFinder::StartOfItem))
|
||||
prevBoundary = sentenceFinder.toPreviousBoundary();
|
||||
nextBoundary = sentenceFinder.toNextBoundary();
|
||||
if (nextBoundary != -1)
|
||||
result.second = result.first + nextBoundary;
|
||||
if (prevBoundary != -1)
|
||||
result.first += prevBoundary;
|
||||
break; }
|
||||
case LineBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case ParagraphBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case NoBoundary:
|
||||
result.first = 0;
|
||||
result.second = characterCount;
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*!
|
||||
\class QAccessibleInterface
|
||||
\brief The QAccessibleInterface class defines an interface that exposes information
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ QT_BEGIN_NAMESPACE
|
|||
class QAccessibleInterface;
|
||||
class QAccessibleEvent;
|
||||
class QWindow;
|
||||
class QTextCursor;
|
||||
|
||||
// We need to inherit QObject to expose the enums to QML.
|
||||
class Q_GUI_EXPORT QAccessible
|
||||
|
|
@ -331,6 +332,15 @@ public:
|
|||
TableCellInterface
|
||||
};
|
||||
|
||||
enum TextBoundaryType {
|
||||
CharBoundary,
|
||||
WordBoundary,
|
||||
SentenceBoundary,
|
||||
ParagraphBoundary,
|
||||
LineBoundary,
|
||||
NoBoundary
|
||||
};
|
||||
|
||||
typedef QAccessibleInterface*(*InterfaceFactory)(const QString &key, QObject*);
|
||||
typedef void(*UpdateHandler)(QAccessibleEvent *event);
|
||||
typedef void(*RootObjectHandler)(QObject*);
|
||||
|
|
@ -359,6 +369,8 @@ public:
|
|||
|
||||
static void cleanup();
|
||||
|
||||
static QPair< int, int > qAccessibleTextBoundaryHelper(const QTextCursor &cursor, TextBoundaryType boundaryType);
|
||||
|
||||
private:
|
||||
static UpdateHandler updateHandler;
|
||||
static RootObjectHandler rootObjectHandler;
|
||||
|
|
|
|||
|
|
@ -48,17 +48,6 @@
|
|||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
/*!
|
||||
\namespace QAccessible2
|
||||
\ingroup accessibility
|
||||
\internal
|
||||
|
||||
\brief The QAccessible2 namespace defines constants relating to
|
||||
IAccessible2-based interfaces
|
||||
|
||||
\l{IAccessible2 Specification}
|
||||
*/
|
||||
|
||||
/*!
|
||||
\class QAccessibleTextInterface
|
||||
\internal
|
||||
|
|
@ -139,7 +128,7 @@ QT_BEGIN_NAMESPACE
|
|||
of that item; returns an empty string if there is no such an item.
|
||||
Sets \a startOffset and \a endOffset values to -1 on error.
|
||||
*/
|
||||
QString QAccessibleTextInterface::textBeforeOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString QAccessibleTextInterface::textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
const QString txt = text(0, characterCount());
|
||||
|
|
@ -155,13 +144,13 @@ QString QAccessibleTextInterface::textBeforeOffset(int offset, QAccessible2::Bou
|
|||
|
||||
QTextBoundaryFinder::BoundaryType type;
|
||||
switch (boundaryType) {
|
||||
case QAccessible2::CharBoundary:
|
||||
case QAccessible::CharBoundary:
|
||||
type = QTextBoundaryFinder::Grapheme;
|
||||
break;
|
||||
case QAccessible2::WordBoundary:
|
||||
case QAccessible::WordBoundary:
|
||||
type = QTextBoundaryFinder::Word;
|
||||
break;
|
||||
case QAccessible2::SentenceBoundary:
|
||||
case QAccessible::SentenceBoundary:
|
||||
type = QTextBoundaryFinder::Sentence;
|
||||
break;
|
||||
default:
|
||||
|
|
@ -199,7 +188,7 @@ QString QAccessibleTextInterface::textBeforeOffset(int offset, QAccessible2::Bou
|
|||
of that item; returns an empty string if there is no such an item.
|
||||
Sets \a startOffset and \a endOffset values to -1 on error.
|
||||
*/
|
||||
QString QAccessibleTextInterface::textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString QAccessibleTextInterface::textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
const QString txt = text(0, characterCount());
|
||||
|
|
@ -215,13 +204,13 @@ QString QAccessibleTextInterface::textAfterOffset(int offset, QAccessible2::Boun
|
|||
|
||||
QTextBoundaryFinder::BoundaryType type;
|
||||
switch (boundaryType) {
|
||||
case QAccessible2::CharBoundary:
|
||||
case QAccessible::CharBoundary:
|
||||
type = QTextBoundaryFinder::Grapheme;
|
||||
break;
|
||||
case QAccessible2::WordBoundary:
|
||||
case QAccessible::WordBoundary:
|
||||
type = QTextBoundaryFinder::Word;
|
||||
break;
|
||||
case QAccessible2::SentenceBoundary:
|
||||
case QAccessible::SentenceBoundary:
|
||||
type = QTextBoundaryFinder::Sentence;
|
||||
break;
|
||||
default:
|
||||
|
|
@ -259,7 +248,7 @@ QString QAccessibleTextInterface::textAfterOffset(int offset, QAccessible2::Boun
|
|||
of that item; returns an empty string if there is no such an item.
|
||||
Sets \a startOffset and \a endOffset values to -1 on error.
|
||||
*/
|
||||
QString QAccessibleTextInterface::textAtOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString QAccessibleTextInterface::textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
const QString txt = text(0, characterCount());
|
||||
|
|
@ -275,13 +264,13 @@ QString QAccessibleTextInterface::textAtOffset(int offset, QAccessible2::Boundar
|
|||
|
||||
QTextBoundaryFinder::BoundaryType type;
|
||||
switch (boundaryType) {
|
||||
case QAccessible2::CharBoundary:
|
||||
case QAccessible::CharBoundary:
|
||||
type = QTextBoundaryFinder::Grapheme;
|
||||
break;
|
||||
case QAccessible2::WordBoundary:
|
||||
case QAccessible::WordBoundary:
|
||||
type = QTextBoundaryFinder::Word;
|
||||
break;
|
||||
case QAccessible2::SentenceBoundary:
|
||||
case QAccessible::SentenceBoundary:
|
||||
type = QTextBoundaryFinder::Sentence;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -50,18 +50,6 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
#ifndef QT_NO_ACCESSIBILITY
|
||||
|
||||
namespace QAccessible2
|
||||
{
|
||||
enum BoundaryType {
|
||||
CharBoundary,
|
||||
WordBoundary,
|
||||
SentenceBoundary,
|
||||
ParagraphBoundary,
|
||||
LineBoundary,
|
||||
NoBoundary
|
||||
};
|
||||
}
|
||||
|
||||
class Q_GUI_EXPORT QAccessibleTextInterface
|
||||
{
|
||||
public:
|
||||
|
|
@ -79,11 +67,11 @@ public:
|
|||
|
||||
// text
|
||||
virtual QString text(int startOffset, int endOffset) const = 0;
|
||||
virtual QString textBeforeOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
virtual QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
virtual QString textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
virtual QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
virtual QString textAtOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
virtual QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
virtual int characterCount() const = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1791,7 +1791,7 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString
|
|||
int offset = message.arguments().at(0).toInt();
|
||||
int start;
|
||||
int end;
|
||||
QString result = interface->textInterface()->textAtOffset(offset, QAccessible2::CharBoundary, &start, &end);
|
||||
QString result = interface->textInterface()->textAtOffset(offset, QAccessible::CharBoundary, &start, &end);
|
||||
sendReply(connection, message, (int) *(qPrintable (result)));
|
||||
} else if (function == QLatin1String("GetCharacterExtents")) {
|
||||
int offset = message.arguments().at(0).toInt();
|
||||
|
|
@ -1879,23 +1879,23 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString
|
|||
return true;
|
||||
}
|
||||
|
||||
QAccessible2::BoundaryType AtSpiAdaptor::qAccessibleBoundaryType(int atspiTextBoundaryType) const
|
||||
QAccessible::TextBoundaryType AtSpiAdaptor::qAccessibleBoundaryType(int atspiTextBoundaryType) const
|
||||
{
|
||||
switch (atspiTextBoundaryType) {
|
||||
case ATSPI_TEXT_BOUNDARY_CHAR:
|
||||
return QAccessible2::CharBoundary;
|
||||
return QAccessible::CharBoundary;
|
||||
case ATSPI_TEXT_BOUNDARY_WORD_START:
|
||||
case ATSPI_TEXT_BOUNDARY_WORD_END:
|
||||
return QAccessible2::WordBoundary;
|
||||
return QAccessible::WordBoundary;
|
||||
case ATSPI_TEXT_BOUNDARY_SENTENCE_START:
|
||||
case ATSPI_TEXT_BOUNDARY_SENTENCE_END:
|
||||
return QAccessible2::SentenceBoundary;
|
||||
return QAccessible::SentenceBoundary;
|
||||
case ATSPI_TEXT_BOUNDARY_LINE_START:
|
||||
case ATSPI_TEXT_BOUNDARY_LINE_END:
|
||||
return QAccessible2::LineBoundary;
|
||||
return QAccessible::LineBoundary;
|
||||
}
|
||||
Q_ASSERT_X(0, "", "Requested invalid boundary type.");
|
||||
return QAccessible2::CharBoundary;
|
||||
return QAccessible::CharBoundary;
|
||||
}
|
||||
|
||||
// FIXME all attribute methods below should share code
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ private:
|
|||
QVariantList getAttributeValue(QAccessibleInterface *, int offset, const QString &attributeName) const;
|
||||
QRect getCharacterExtents(QAccessibleInterface *, int offset, uint coordType) const;
|
||||
QRect getRangeExtents(QAccessibleInterface *, int startOffset, int endOffset, uint coordType) const;
|
||||
QAccessible2::BoundaryType qAccessibleBoundaryType(int atspiTextBoundaryType) const;
|
||||
QAccessible::TextBoundaryType qAccessibleBoundaryType(int atspiTextBoundaryType) const;
|
||||
static bool inheritsQAction(QObject *object);
|
||||
|
||||
// private vars
|
||||
|
|
|
|||
|
|
@ -72,8 +72,6 @@
|
|||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
using namespace QAccessible2;
|
||||
|
||||
QString Q_GUI_EXPORT qt_accStripAmp(const QString &text);
|
||||
QString Q_GUI_EXPORT qt_accHotKey(const QString &text);
|
||||
|
||||
|
|
@ -997,83 +995,18 @@ QPoint QAccessibleTextWidget::scrollBarPosition() const
|
|||
return QPoint(0, 0);
|
||||
}
|
||||
|
||||
QPair< int, int > QAccessibleTextWidget::getBoundaries(int offset, BoundaryType boundaryType) const
|
||||
{
|
||||
if (offset >= characterCount())
|
||||
return QPair<int, int>(characterCount(), characterCount());
|
||||
if (offset < 0)
|
||||
return QPair<int, int>(0, 0);
|
||||
|
||||
QTextCursor cursor = textCursor();
|
||||
QPair<int, int> result;
|
||||
|
||||
cursor.setPosition(offset);
|
||||
switch (boundaryType) {
|
||||
case CharBoundary:
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case WordBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case SentenceBoundary: {
|
||||
// QCursor does not provide functionality to move to next sentence.
|
||||
// We therefore find the current block, then go through the block using
|
||||
// QTextBoundaryFinder and find the sentence the \offset represents
|
||||
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
QString blockText = cursor.selectedText();
|
||||
const int offsetWithinBlockText = offset - result.first;
|
||||
QTextBoundaryFinder sentenceFinder(QTextBoundaryFinder::Sentence, blockText);
|
||||
sentenceFinder.setPosition(offsetWithinBlockText);
|
||||
int prevBoundary = offsetWithinBlockText;
|
||||
int nextBoundary = offsetWithinBlockText;
|
||||
if (!(sentenceFinder.boundaryReasons() & QTextBoundaryFinder::StartOfItem))
|
||||
prevBoundary = sentenceFinder.toPreviousBoundary();
|
||||
nextBoundary = sentenceFinder.toNextBoundary();
|
||||
if (nextBoundary != -1)
|
||||
result.second = result.first + nextBoundary;
|
||||
if (prevBoundary != -1)
|
||||
result.first += prevBoundary;
|
||||
break; }
|
||||
case LineBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case ParagraphBoundary:
|
||||
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor);
|
||||
result.first = cursor.position();
|
||||
cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
result.second = cursor.position();
|
||||
break;
|
||||
case NoBoundary:
|
||||
result.first = 0;
|
||||
result.second = characterCount();
|
||||
break;
|
||||
default:
|
||||
qWarning("QAccessibleTextWidget::getBoundaries: Unknown boundary type %d", boundaryType);
|
||||
result.first = -1;
|
||||
result.second = -1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QString QAccessibleTextWidget::textBeforeOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleTextWidget::textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
Q_ASSERT(startOffset);
|
||||
Q_ASSERT(endOffset);
|
||||
|
||||
QPair<int, int> boundaries = getBoundaries(offset, boundaryType);
|
||||
boundaries = getBoundaries(boundaries.first - 1, boundaryType);
|
||||
QTextCursor cursor = textCursor();
|
||||
cursor.setPosition(offset);
|
||||
QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType);
|
||||
cursor.setPosition(boundaries.first - 1);
|
||||
boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType);
|
||||
|
||||
*startOffset = boundaries.first;
|
||||
*endOffset = boundaries.second;
|
||||
|
|
@ -1082,14 +1015,17 @@ QString QAccessibleTextWidget::textBeforeOffset(int offset, BoundaryType boundar
|
|||
}
|
||||
|
||||
|
||||
QString QAccessibleTextWidget::textAfterOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleTextWidget::textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
Q_ASSERT(startOffset);
|
||||
Q_ASSERT(endOffset);
|
||||
|
||||
QPair<int, int> boundaries = getBoundaries(offset, boundaryType);
|
||||
boundaries = getBoundaries(boundaries.second, boundaryType);
|
||||
QTextCursor cursor = textCursor();
|
||||
cursor.setPosition(offset);
|
||||
QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType);
|
||||
cursor.setPosition(boundaries.second);
|
||||
boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType);
|
||||
|
||||
*startOffset = boundaries.first;
|
||||
*endOffset = boundaries.second;
|
||||
|
|
@ -1097,13 +1033,15 @@ QString QAccessibleTextWidget::textAfterOffset(int offset, BoundaryType boundary
|
|||
return text(boundaries.first, boundaries.second);
|
||||
}
|
||||
|
||||
QString QAccessibleTextWidget::textAtOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleTextWidget::textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
Q_ASSERT(startOffset);
|
||||
Q_ASSERT(endOffset);
|
||||
|
||||
QPair<int, int> boundaries = getBoundaries(offset, boundaryType);
|
||||
QTextCursor cursor = textCursor();
|
||||
cursor.setPosition(offset);
|
||||
QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType);
|
||||
|
||||
*startOffset = boundaries.first;
|
||||
*endOffset = boundaries.second;
|
||||
|
|
|
|||
|
|
@ -92,11 +92,11 @@ public:
|
|||
|
||||
// text
|
||||
QString text(int startOffset, int endOffset) const;
|
||||
QString textBeforeOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
QString textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
QString textAtOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
int characterCount() const;
|
||||
|
||||
|
|
@ -115,8 +115,8 @@ public:
|
|||
|
||||
protected:
|
||||
QTextCursor textCursorForRange(int startOffset, int endOffset) const;
|
||||
QPair<int, int> getBoundaries(int offset, QAccessible2::BoundaryType boundaryType) const;
|
||||
virtual QPoint scrollBarPosition() const;
|
||||
// return the current text cursor at the caret position including a potential selection
|
||||
virtual QTextCursor textCursor() const = 0;
|
||||
virtual void setTextCursor(const QTextCursor &) = 0;
|
||||
virtual QTextDocument *textDocument() const = 0;
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
#ifndef QT_NO_ACCESSIBILITY
|
||||
|
||||
using namespace QAccessible2;
|
||||
extern QList<QWidget*> childWidgets(const QWidget *widget, bool includeTopLevel = false);
|
||||
|
||||
QString Q_GUI_EXPORT qt_accStripAmp(const QString &text);
|
||||
|
|
@ -724,7 +723,7 @@ QString QAccessibleLineEdit::text(int startOffset, int endOffset) const
|
|||
return lineEdit()->text().mid(startOffset, endOffset - startOffset);
|
||||
}
|
||||
|
||||
QString QAccessibleLineEdit::textBeforeOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleLineEdit::textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
if (lineEdit()->echoMode() != QLineEdit::Normal) {
|
||||
|
|
@ -734,7 +733,7 @@ QString QAccessibleLineEdit::textBeforeOffset(int offset, BoundaryType boundaryT
|
|||
return QAccessibleTextInterface::textBeforeOffset(offset, boundaryType, startOffset, endOffset);
|
||||
}
|
||||
|
||||
QString QAccessibleLineEdit::textAfterOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleLineEdit::textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
if (lineEdit()->echoMode() != QLineEdit::Normal) {
|
||||
|
|
@ -744,7 +743,7 @@ QString QAccessibleLineEdit::textAfterOffset(int offset, BoundaryType boundaryTy
|
|||
return QAccessibleTextInterface::textAfterOffset(offset, boundaryType, startOffset, endOffset);
|
||||
}
|
||||
|
||||
QString QAccessibleLineEdit::textAtOffset(int offset, BoundaryType boundaryType,
|
||||
QString QAccessibleLineEdit::textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const
|
||||
{
|
||||
if (lineEdit()->echoMode() != QLineEdit::Normal) {
|
||||
|
|
|
|||
|
|
@ -156,11 +156,11 @@ public:
|
|||
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,
|
||||
QString textBeforeOffset (int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
QString textAfterOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
QString textAtOffset(int offset, QAccessible2::BoundaryType boundaryType,
|
||||
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
|
||||
int *startOffset, int *endOffset) const;
|
||||
void removeSelection(int selectionIndex);
|
||||
void setCursorPosition(int position);
|
||||
|
|
|
|||
|
|
@ -1354,7 +1354,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textBeforeOffset(long offse
|
|||
QAccessibleInterface *accessible = accessibleInterface();
|
||||
accessibleDebugClientCalls(accessible);
|
||||
if (QAccessibleTextInterface *textIface = textInterface()) {
|
||||
const QString txt = textIface->textBeforeOffset(offset, (QAccessible2::BoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
const QString txt = textIface->textBeforeOffset(offset, (QAccessible::TextBoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
if (!txt.isEmpty()) {
|
||||
*text = QStringToBSTR(txt);
|
||||
return S_OK;
|
||||
|
|
@ -1374,7 +1374,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textAfterOffset(
|
|||
QAccessibleInterface *accessible = accessibleInterface();
|
||||
accessibleDebugClientCalls(accessible);
|
||||
if (QAccessibleTextInterface *textIface = textInterface()) {
|
||||
const QString txt = textIface->textAfterOffset(offset, (QAccessible2::BoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
const QString txt = textIface->textAfterOffset(offset, (QAccessible::TextBoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
if (!txt.isEmpty()) {
|
||||
*text = QStringToBSTR(txt);
|
||||
return S_OK;
|
||||
|
|
@ -1393,7 +1393,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textAtOffset(long offset,
|
|||
QAccessibleInterface *accessible = accessibleInterface();
|
||||
accessibleDebugClientCalls(accessible);
|
||||
if (QAccessibleTextInterface *textIface = textInterface()) {
|
||||
const QString txt = textIface->textAtOffset(offset, (QAccessible2::BoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
const QString txt = textIface->textAtOffset(offset, (QAccessible::TextBoundaryType)boundaryType, (int*)startOffset, (int*)endOffset);
|
||||
if (!txt.isEmpty()) {
|
||||
*text = QStringToBSTR(txt);
|
||||
return S_OK;
|
||||
|
|
|
|||
|
|
@ -1644,10 +1644,10 @@ void tst_QAccessibility::textEditTest()
|
|||
QTest::qWaitForWindowShown(&edit);
|
||||
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&edit);
|
||||
QCOMPARE(iface->text(QAccessible::Value), edit.toPlainText());
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible2::WordBoundary, &startOffset, &endOffset), QString("world"));
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible::WordBoundary, &startOffset, &endOffset), QString("world"));
|
||||
QCOMPARE(startOffset, 6);
|
||||
QCOMPARE(endOffset, 11);
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(15, QAccessible2::LineBoundary, &startOffset, &endOffset), QString("How are you today?"));
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(15, QAccessible::LineBoundary, &startOffset, &endOffset), QString("How are you today?"));
|
||||
QCOMPARE(startOffset, 13);
|
||||
QCOMPARE(endOffset, 31);
|
||||
QCOMPARE(iface->textInterface()->characterCount(), 48);
|
||||
|
|
@ -1705,10 +1705,10 @@ void tst_QAccessibility::textBrowserTest()
|
|||
QCOMPARE(iface->text(QAccessible::Value), text);
|
||||
int startOffset;
|
||||
int endOffset;
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible2::WordBoundary, &startOffset, &endOffset), QString("world"));
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible::WordBoundary, &startOffset, &endOffset), QString("world"));
|
||||
QCOMPARE(startOffset, 6);
|
||||
QCOMPARE(endOffset, 11);
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(14, QAccessible2::LineBoundary, &startOffset, &endOffset), QString("how are you today?"));
|
||||
QCOMPARE(iface->textInterface()->textAtOffset(14, QAccessible::LineBoundary, &startOffset, &endOffset), QString("how are you today?"));
|
||||
QCOMPARE(startOffset, 12);
|
||||
QCOMPARE(endOffset, 30);
|
||||
QCOMPARE(iface->textInterface()->characterCount(), 31);
|
||||
|
|
@ -1931,45 +1931,45 @@ void tst_QAccessibility::lineEditTest()
|
|||
|
||||
int start, end;
|
||||
QCOMPARE(textIface->text(0, 8), QString::fromLatin1("I always"));
|
||||
QCOMPARE(textIface->textAtOffset(0, QAccessible2::CharBoundary,&start,&end), QString::fromLatin1("I"));
|
||||
QCOMPARE(textIface->textAtOffset(0, QAccessible::CharBoundary,&start,&end), QString::fromLatin1("I"));
|
||||
QCOMPARE(start, 0);
|
||||
QCOMPARE(end, 1);
|
||||
QCOMPARE(textIface->textBeforeOffset(0, QAccessible2::CharBoundary,&start,&end), QString());
|
||||
QCOMPARE(textIface->textAfterOffset(0, QAccessible2::CharBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textBeforeOffset(0, QAccessible::CharBoundary,&start,&end), QString());
|
||||
QCOMPARE(textIface->textAfterOffset(0, QAccessible::CharBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(start, 1);
|
||||
QCOMPARE(end, 2);
|
||||
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::CharBoundary,&start,&end), QString::fromLatin1("a"));
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::CharBoundary,&start,&end), QString::fromLatin1("a"));
|
||||
QCOMPARE(start, 5);
|
||||
QCOMPARE(end, 6);
|
||||
QCOMPARE(textIface->textBeforeOffset(5, QAccessible2::CharBoundary,&start,&end), QString::fromLatin1("w"));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible2::CharBoundary,&start,&end), QString::fromLatin1("y"));
|
||||
QCOMPARE(textIface->textBeforeOffset(5, QAccessible::CharBoundary,&start,&end), QString::fromLatin1("w"));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible::CharBoundary,&start,&end), QString::fromLatin1("y"));
|
||||
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(start, 2);
|
||||
QCOMPARE(end, 8);
|
||||
|
||||
QCOMPARE(textIface->textAtOffset(2, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(textIface->textAtOffset(7, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(textIface->textAtOffset(8, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAtOffset(25, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1("advice"));
|
||||
QCOMPARE(textIface->textAtOffset(92, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1("oneself"));
|
||||
QCOMPARE(textIface->textAtOffset(101, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1(". --"));
|
||||
QCOMPARE(textIface->textAtOffset(2, QAccessible::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(textIface->textAtOffset(7, QAccessible::WordBoundary,&start,&end), QString::fromLatin1("always"));
|
||||
QCOMPARE(textIface->textAtOffset(8, QAccessible::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAtOffset(25, QAccessible::WordBoundary,&start,&end), QString::fromLatin1("advice"));
|
||||
QCOMPARE(textIface->textAtOffset(92, QAccessible::WordBoundary,&start,&end), QString::fromLatin1("oneself"));
|
||||
QCOMPARE(textIface->textAtOffset(101, QAccessible::WordBoundary,&start,&end), QString::fromLatin1(". --"));
|
||||
|
||||
QCOMPARE(textIface->textBeforeOffset(5, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible2::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::SentenceBoundary,&start,&end), QString::fromLatin1("I always pass on good advice. "));
|
||||
QCOMPARE(textIface->textBeforeOffset(5, QAccessible::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible::WordBoundary,&start,&end), QString::fromLatin1(" "));
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::SentenceBoundary,&start,&end), QString::fromLatin1("I always pass on good advice. "));
|
||||
QCOMPARE(start, 0);
|
||||
QCOMPARE(end, 30);
|
||||
|
||||
QCOMPARE(textIface->textBeforeOffset(40, QAccessible2::SentenceBoundary,&start,&end), QString::fromLatin1("I always pass on good advice. "));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible2::SentenceBoundary,&start,&end), QString::fromLatin1("It is the only thing to do with it. "));
|
||||
QCOMPARE(textIface->textBeforeOffset(40, QAccessible::SentenceBoundary,&start,&end), QString::fromLatin1("I always pass on good advice. "));
|
||||
QCOMPARE(textIface->textAfterOffset(5, QAccessible::SentenceBoundary,&start,&end), QString::fromLatin1("It is the only thing to do with it. "));
|
||||
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::ParagraphBoundary,&start,&end), cite);
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::ParagraphBoundary,&start,&end), cite);
|
||||
QCOMPARE(start, 0);
|
||||
QCOMPARE(end, cite.length());
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::LineBoundary,&start,&end), cite);
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible2::NoBoundary,&start,&end), cite);
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::LineBoundary,&start,&end), cite);
|
||||
QCOMPARE(textIface->textAtOffset(5, QAccessible::NoBoundary,&start,&end), cite);
|
||||
|
||||
QTestAccessibility::clearEvents();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue