Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/QtGui/qaccessible.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // Copyright (C) 2020 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 
0005 #if 0
0006 // keep existing syncqt header working after the move of the class
0007 // into qaccessible_base
0008 #pragma qt_class(QAccessible)
0009 #endif
0010 
0011 #ifndef QACCESSIBLE_H
0012 #define QACCESSIBLE_H
0013 #include <QtGui/qtguiglobal.h>
0014 
0015 #if QT_CONFIG(accessibility)
0016 
0017 #include <QtCore/qcoreapplication.h>
0018 #include <QtCore/qglobal.h>
0019 #include <QtCore/qlist.h>
0020 #include <QtCore/qobject.h>
0021 #include <QtCore/qrect.h>
0022 #include <QtCore/qset.h>
0023 #include <QtCore/qvariant.h>
0024 #include <QtGui/qcolor.h>
0025 #include <QtGui/qevent.h>
0026 #include <QtGui/qaccessible_base.h>
0027 
0028 QT_BEGIN_NAMESPACE
0029 
0030 class QDebug;
0031 class QAccessibleInterface;
0032 class QAccessibleEvent;
0033 class QWindow;
0034 class QTextCursor;
0035 
0036 class QAccessible2Interface;
0037 class QAccessibleTextInterface;
0038 class QAccessibleEditableTextInterface;
0039 class QAccessibleValueInterface;
0040 class QAccessibleActionInterface;
0041 class QAccessibleImageInterface;
0042 class QAccessibleTableInterface;
0043 class QAccessibleTableCellInterface;
0044 class QAccessibleHyperlinkInterface;
0045 class QAccessibleSelectionInterface;
0046 class QAccessibleAttributesInterface;
0047 class QAccessibleTableModelChangeEvent;
0048 
0049 class Q_GUI_EXPORT QAccessibleInterface
0050 {
0051 protected:
0052     virtual ~QAccessibleInterface();
0053 
0054 public:
0055     // check for valid pointers
0056     virtual bool isValid() const = 0;
0057     virtual QObject *object() const = 0;
0058     virtual QWindow *window() const;
0059 
0060     // relations
0061     virtual QList<std::pair<QAccessibleInterface *, QAccessible::Relation>>
0062     relations(QAccessible::Relation match = QAccessible::AllRelations) const;
0063     virtual QAccessibleInterface *focusChild() const;
0064 
0065     virtual QAccessibleInterface *childAt(int x, int y) const = 0;
0066 
0067     // navigation, hierarchy
0068     virtual QAccessibleInterface *parent() const = 0;
0069     virtual QAccessibleInterface *child(int index) const = 0;
0070     virtual int childCount() const = 0;
0071     virtual int indexOfChild(const QAccessibleInterface *) const = 0;
0072 
0073     // properties and state
0074     virtual QString text(QAccessible::Text t) const = 0;
0075     virtual void setText(QAccessible::Text t, const QString &text) = 0;
0076     virtual QRect rect() const = 0;
0077     virtual QAccessible::Role role() const = 0;
0078     virtual QAccessible::State state() const = 0;
0079 
0080     virtual QColor foregroundColor() const;
0081     virtual QColor backgroundColor() const;
0082 
0083     inline QAccessibleTextInterface *textInterface()
0084     { return reinterpret_cast<QAccessibleTextInterface *>(interface_cast(QAccessible::TextInterface)); }
0085 
0086     inline QAccessibleEditableTextInterface *editableTextInterface()
0087     { return reinterpret_cast<QAccessibleEditableTextInterface *>(interface_cast(QAccessible::EditableTextInterface)); }
0088 
0089     inline QAccessibleValueInterface *valueInterface()
0090     { return reinterpret_cast<QAccessibleValueInterface *>(interface_cast(QAccessible::ValueInterface)); }
0091 
0092     inline QAccessibleActionInterface *actionInterface()
0093     { return reinterpret_cast<QAccessibleActionInterface *>(interface_cast(QAccessible::ActionInterface)); }
0094 
0095     inline QAccessibleImageInterface *imageInterface()
0096     { return reinterpret_cast<QAccessibleImageInterface *>(interface_cast(QAccessible::ImageInterface)); }
0097 
0098     inline QAccessibleTableInterface *tableInterface()
0099     { return reinterpret_cast<QAccessibleTableInterface *>(interface_cast(QAccessible::TableInterface)); }
0100 
0101     inline QAccessibleTableCellInterface *tableCellInterface()
0102     { return reinterpret_cast<QAccessibleTableCellInterface *>(interface_cast(QAccessible::TableCellInterface)); }
0103 
0104     inline QAccessibleHyperlinkInterface *hyperlinkInterface()
0105     { return reinterpret_cast<QAccessibleHyperlinkInterface *>(interface_cast(QAccessible::HyperlinkInterface)); }
0106 
0107     inline QAccessibleSelectionInterface *selectionInterface()
0108     { return reinterpret_cast<QAccessibleSelectionInterface *>(interface_cast(QAccessible::SelectionInterface)); }
0109 
0110     inline QAccessibleAttributesInterface *attributesInterface()
0111     { return reinterpret_cast<QAccessibleAttributesInterface *>(interface_cast(QAccessible::AttributesInterface)); }
0112 
0113     virtual void virtual_hook(int id, void *data);
0114 
0115     virtual void *interface_cast(QAccessible::InterfaceType)
0116     { return nullptr; }
0117 
0118 protected:
0119     friend class QAccessibleCache;
0120 };
0121 
0122 class Q_GUI_EXPORT QAccessibleTextInterface
0123 {
0124 public:
0125     virtual ~QAccessibleTextInterface();
0126     // selection
0127     virtual void selection(int selectionIndex, int *startOffset, int *endOffset) const = 0;
0128     virtual int selectionCount() const = 0;
0129     virtual void addSelection(int startOffset, int endOffset) = 0;
0130     virtual void removeSelection(int selectionIndex) = 0;
0131     virtual void setSelection(int selectionIndex, int startOffset, int endOffset) = 0;
0132 
0133     // cursor
0134     virtual int cursorPosition() const = 0;
0135     virtual void setCursorPosition(int position) = 0;
0136 
0137     // text
0138     virtual QString text(int startOffset, int endOffset) const = 0;
0139     virtual QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
0140                                      int *startOffset, int *endOffset) const;
0141     virtual QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
0142                                     int *startOffset, int *endOffset) const;
0143     virtual QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
0144                                  int *startOffset, int *endOffset) const;
0145     virtual int characterCount() const = 0;
0146 
0147     // character <-> geometry
0148     virtual QRect characterRect(int offset) const = 0;
0149     virtual int offsetAtPoint(const QPoint &point) const = 0;
0150 
0151     virtual void scrollToSubstring(int startIndex, int endIndex) = 0;
0152     virtual QString attributes(int offset, int *startOffset, int *endOffset) const = 0;
0153 };
0154 
0155 class Q_GUI_EXPORT QAccessibleEditableTextInterface
0156 {
0157 public:
0158     virtual ~QAccessibleEditableTextInterface();
0159 
0160     virtual void deleteText(int startOffset, int endOffset) = 0;
0161     virtual void insertText(int offset, const QString &text) = 0;
0162     virtual void replaceText(int startOffset, int endOffset, const QString &text) = 0;
0163 };
0164 
0165 class Q_GUI_EXPORT QAccessibleValueInterface
0166 {
0167 public:
0168     virtual ~QAccessibleValueInterface();
0169 
0170     virtual QVariant currentValue() const = 0;
0171     virtual void setCurrentValue(const QVariant &value) = 0;
0172     virtual QVariant maximumValue() const = 0;
0173     virtual QVariant minimumValue() const = 0;
0174     virtual QVariant minimumStepSize() const = 0;
0175 };
0176 
0177 class Q_GUI_EXPORT QAccessibleTableCellInterface
0178 {
0179 public:
0180     virtual ~QAccessibleTableCellInterface();
0181 
0182     virtual bool isSelected() const = 0;
0183 
0184     virtual QList<QAccessibleInterface*> columnHeaderCells() const = 0;
0185     virtual QList<QAccessibleInterface*> rowHeaderCells() const = 0;
0186     virtual int columnIndex() const = 0;
0187     virtual int rowIndex() const = 0;
0188     virtual int columnExtent() const = 0;
0189     virtual int rowExtent() const = 0;
0190 
0191     virtual QAccessibleInterface* table() const = 0;
0192 };
0193 
0194 class Q_GUI_EXPORT QAccessibleTableInterface
0195 {
0196 public:
0197     virtual ~QAccessibleTableInterface();
0198 
0199     virtual QAccessibleInterface *caption() const = 0;
0200     virtual QAccessibleInterface *summary() const = 0;
0201 
0202     virtual QAccessibleInterface *cellAt (int row, int column) const = 0;
0203     virtual int selectedCellCount() const = 0;
0204     virtual QList<QAccessibleInterface*> selectedCells() const = 0;
0205 
0206     virtual QString columnDescription(int column) const = 0;
0207     virtual QString rowDescription(int row) const = 0;
0208     virtual int selectedColumnCount() const = 0;
0209     virtual int selectedRowCount() const = 0;
0210     virtual int columnCount() const = 0;
0211     virtual int rowCount() const = 0;
0212     virtual QList<int> selectedColumns() const = 0;
0213     virtual QList<int> selectedRows() const = 0;
0214     virtual bool isColumnSelected(int column) const = 0;
0215     virtual bool isRowSelected(int row) const = 0;
0216     virtual bool selectRow(int row) = 0;
0217     virtual bool selectColumn(int column) = 0;
0218     virtual bool unselectRow(int row) = 0;
0219     virtual bool unselectColumn(int column) = 0;
0220 
0221     virtual void modelChange(QAccessibleTableModelChangeEvent *event) = 0;
0222 
0223 protected:
0224 friend class QAbstractItemView;
0225 friend class QAbstractItemViewPrivate;
0226 };
0227 
0228 class Q_GUI_EXPORT QAccessibleActionInterface
0229 {
0230     Q_DECLARE_TR_FUNCTIONS(QAccessibleActionInterface)
0231 public:
0232     virtual ~QAccessibleActionInterface();
0233 
0234     virtual QStringList actionNames() const = 0;
0235     virtual QString localizedActionName(const QString &name) const;
0236     virtual QString localizedActionDescription(const QString &name) const;
0237     virtual void doAction(const QString &actionName) = 0;
0238     virtual QStringList keyBindingsForAction(const QString &actionName) const = 0;
0239 
0240     static const QString &pressAction();
0241     static const QString &increaseAction();
0242     static const QString &decreaseAction();
0243     static const QString &showMenuAction();
0244     static const QString &setFocusAction();
0245     static const QString &toggleAction();
0246     static QString scrollLeftAction();
0247     static QString scrollRightAction();
0248     static QString scrollUpAction();
0249     static QString scrollDownAction();
0250     static QString nextPageAction();
0251     static QString previousPageAction();
0252 };
0253 
0254 class Q_GUI_EXPORT QAccessibleImageInterface
0255 {
0256 public:
0257     virtual ~QAccessibleImageInterface();
0258 
0259     virtual QString imageDescription() const = 0;
0260     virtual QSize imageSize() const = 0;
0261     virtual QPoint imagePosition() const = 0;
0262 };
0263 
0264 class Q_GUI_EXPORT QAccessibleHyperlinkInterface
0265 {
0266 public:
0267     virtual ~QAccessibleHyperlinkInterface();
0268 
0269     virtual QString anchor() const = 0;
0270     virtual QString anchorTarget() const = 0;
0271     virtual int startIndex() const = 0;
0272     virtual int endIndex() const = 0;
0273     virtual bool isValid() const = 0;
0274 };
0275 
0276 class Q_GUI_EXPORT QAccessibleSelectionInterface
0277 {
0278 public:
0279     virtual ~QAccessibleSelectionInterface();
0280 
0281     virtual int selectedItemCount() const = 0;
0282     virtual QList<QAccessibleInterface*> selectedItems() const = 0;
0283     virtual QAccessibleInterface* selectedItem(int selectionIndex) const;
0284     virtual bool isSelected(QAccessibleInterface *childItem) const;
0285     virtual bool select(QAccessibleInterface *childItem) = 0;
0286     virtual bool unselect(QAccessibleInterface *childItem) = 0;
0287     virtual bool selectAll() = 0;
0288     virtual bool clear() = 0;
0289 };
0290 
0291 class Q_GUI_EXPORT QAccessibleAttributesInterface
0292 {
0293 public:
0294     virtual ~QAccessibleAttributesInterface();
0295     virtual QList<QAccessible::Attribute> attributeKeys() const = 0;
0296     virtual QVariant attributeValue(QAccessible::Attribute key) const = 0;
0297 };
0298 
0299 
0300 class Q_GUI_EXPORT QAccessibleEvent
0301 {
0302     Q_DISABLE_COPY(QAccessibleEvent)
0303 public:
0304 
0305     inline QAccessibleEvent(QObject *obj, QAccessible::Event typ)
0306         : m_type(typ), m_object(obj), m_child(-1)
0307     {
0308         if (m_type != QAccessible::ObjectDestroyed)
0309             Q_ASSERT(obj);
0310         // All events below have a subclass of QAccessibleEvent.
0311         // Use the subclass, since it's expected that it's possible to cast to that.
0312         Q_ASSERT(m_type != QAccessible::ValueChanged);
0313         Q_ASSERT(m_type != QAccessible::StateChanged);
0314         Q_ASSERT(m_type != QAccessible::TextCaretMoved);
0315         Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
0316         Q_ASSERT(m_type != QAccessible::TextInserted);
0317         Q_ASSERT(m_type != QAccessible::TextRemoved);
0318         Q_ASSERT(m_type != QAccessible::TextUpdated);
0319         Q_ASSERT(m_type != QAccessible::TableModelChanged);
0320         Q_ASSERT(m_type != QAccessible::Announcement);
0321     }
0322 
0323     inline QAccessibleEvent(QAccessibleInterface *iface, QAccessible::Event typ)
0324         : m_type(typ)
0325     {
0326         Q_ASSERT(iface);
0327         Q_ASSERT(m_type != QAccessible::ValueChanged);
0328         Q_ASSERT(m_type != QAccessible::StateChanged);
0329         Q_ASSERT(m_type != QAccessible::TextCaretMoved);
0330         Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
0331         Q_ASSERT(m_type != QAccessible::TextInserted);
0332         Q_ASSERT(m_type != QAccessible::TextRemoved);
0333         Q_ASSERT(m_type != QAccessible::TextUpdated);
0334         Q_ASSERT(m_type != QAccessible::TableModelChanged);
0335         Q_ASSERT(m_type != QAccessible::Announcement);
0336         m_uniqueId = QAccessible::uniqueId(iface);
0337         m_object = iface->object();
0338     }
0339 
0340     virtual ~QAccessibleEvent();
0341 
0342     QAccessible::Event type() const { return m_type; }
0343     QObject *object() const { return m_object; }
0344     QAccessible::Id uniqueId() const;
0345 
0346     void setChild(int chld);
0347     int child() const { return m_child; }
0348 
0349     virtual QAccessibleInterface *accessibleInterface() const;
0350 
0351 protected:
0352     QAccessible::Event m_type;
0353     QObject *m_object;
0354     union {
0355         int m_child;
0356         QAccessible::Id m_uniqueId;
0357     };
0358 
0359     friend class QTestAccessibility;
0360 };
0361 
0362 class Q_GUI_EXPORT QAccessibleStateChangeEvent :public QAccessibleEvent
0363 {
0364 public:
0365     inline QAccessibleStateChangeEvent(QObject *obj, QAccessible::State state)
0366         : QAccessibleEvent(obj, QAccessible::InvalidEvent), m_changedStates(state)
0367     {
0368         m_type = QAccessible::StateChanged;
0369     }
0370     inline QAccessibleStateChangeEvent(QAccessibleInterface *iface, QAccessible::State state)
0371         : QAccessibleEvent(iface, QAccessible::InvalidEvent), m_changedStates(state)
0372     {
0373         m_type = QAccessible::StateChanged;
0374     }
0375     ~QAccessibleStateChangeEvent();
0376 
0377     QAccessible::State changedStates() const {
0378         return m_changedStates;
0379     }
0380 
0381 protected:
0382     QAccessible::State m_changedStates;
0383 };
0384 
0385 // Update the cursor and optionally the selection.
0386 class Q_GUI_EXPORT QAccessibleTextCursorEvent : public QAccessibleEvent
0387 {
0388 public:
0389     inline QAccessibleTextCursorEvent(QObject *obj, int cursorPos)
0390         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0391       , m_cursorPosition(cursorPos)
0392     {
0393         m_type = QAccessible::TextCaretMoved;
0394     }
0395     inline QAccessibleTextCursorEvent(QAccessibleInterface *iface, int cursorPos)
0396         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0397       , m_cursorPosition(cursorPos)
0398     {
0399         m_type = QAccessible::TextCaretMoved;
0400     }
0401 
0402     ~QAccessibleTextCursorEvent();
0403 
0404     void setCursorPosition(int position) { m_cursorPosition = position; }
0405     int cursorPosition() const { return m_cursorPosition; }
0406 
0407 protected:
0408     int m_cursorPosition;
0409 };
0410 
0411 // Updates the cursor position simultaneously. By default the cursor is set to the end of the selection.
0412 class Q_GUI_EXPORT QAccessibleTextSelectionEvent : public QAccessibleTextCursorEvent
0413 {
0414 public:
0415     inline QAccessibleTextSelectionEvent(QObject *obj, int start, int end)
0416         : QAccessibleTextCursorEvent(obj, (start == -1) ? 0 : end)
0417         , m_selectionStart(start), m_selectionEnd(end)
0418     {
0419         m_type = QAccessible::TextSelectionChanged;
0420     }
0421     inline QAccessibleTextSelectionEvent(QAccessibleInterface *iface, int start, int end)
0422         : QAccessibleTextCursorEvent(iface, (start == -1) ? 0 : end)
0423         , m_selectionStart(start), m_selectionEnd(end)
0424     {
0425         m_type = QAccessible::TextSelectionChanged;
0426     }
0427 
0428     ~QAccessibleTextSelectionEvent();
0429 
0430     void setSelection(int start, int end) {
0431         m_selectionStart = start;
0432         m_selectionEnd = end;
0433     }
0434 
0435     int selectionStart() const { return m_selectionStart; }
0436     int selectionEnd() const { return m_selectionEnd; }
0437 
0438 protected:
0439         int m_selectionStart;
0440         int m_selectionEnd;
0441 };
0442 
0443 class Q_GUI_EXPORT QAccessibleTextInsertEvent : public QAccessibleTextCursorEvent
0444 {
0445 public:
0446     inline QAccessibleTextInsertEvent(QObject *obj, int position, const QString &text)
0447         : QAccessibleTextCursorEvent(obj, position + int(text.size()))
0448         , m_position(position), m_text(text)
0449     {
0450         m_type = QAccessible::TextInserted;
0451     }
0452     inline QAccessibleTextInsertEvent(QAccessibleInterface *iface, int position, const QString &text)
0453         : QAccessibleTextCursorEvent(iface, position + int(text.size()))
0454         , m_position(position), m_text(text)
0455     {
0456         m_type = QAccessible::TextInserted;
0457     }
0458 
0459     ~QAccessibleTextInsertEvent();
0460 
0461     QString textInserted() const {
0462         return m_text;
0463     }
0464     int changePosition() const {
0465         return m_position;
0466     }
0467 
0468 protected:
0469     int m_position;
0470     QString m_text;
0471 };
0472 
0473 class Q_GUI_EXPORT QAccessibleTextRemoveEvent : public QAccessibleTextCursorEvent
0474 {
0475 public:
0476     inline QAccessibleTextRemoveEvent(QObject *obj, int position, const QString &text)
0477         : QAccessibleTextCursorEvent(obj, position)
0478         , m_position(position), m_text(text)
0479     {
0480         m_type = QAccessible::TextRemoved;
0481     }
0482     inline QAccessibleTextRemoveEvent(QAccessibleInterface *iface, int position, const QString &text)
0483         : QAccessibleTextCursorEvent(iface, position)
0484         , m_position(position), m_text(text)
0485     {
0486         m_type = QAccessible::TextRemoved;
0487     }
0488 
0489     ~QAccessibleTextRemoveEvent();
0490 
0491     QString textRemoved() const {
0492         return m_text;
0493     }
0494     int changePosition() const {
0495         return m_position;
0496     }
0497 
0498 protected:
0499     int m_position;
0500     QString m_text;
0501 };
0502 
0503 class Q_GUI_EXPORT QAccessibleTextUpdateEvent : public QAccessibleTextCursorEvent
0504 {
0505 public:
0506     inline QAccessibleTextUpdateEvent(QObject *obj, int position, const QString &oldText, const QString &text)
0507         : QAccessibleTextCursorEvent(obj, position + int(text.size()))
0508         , m_position(position), m_oldText(oldText), m_text(text)
0509     {
0510         m_type = QAccessible::TextUpdated;
0511     }
0512     inline QAccessibleTextUpdateEvent(QAccessibleInterface *iface, int position, const QString &oldText, const QString &text)
0513         : QAccessibleTextCursorEvent(iface, position + int(text.size()))
0514         , m_position(position), m_oldText(oldText), m_text(text)
0515     {
0516         m_type = QAccessible::TextUpdated;
0517     }
0518 
0519     ~QAccessibleTextUpdateEvent();
0520 
0521     QString textRemoved() const {
0522         return m_oldText;
0523     }
0524     QString textInserted() const {
0525         return m_text;
0526     }
0527     int changePosition() const {
0528         return m_position;
0529     }
0530 
0531 protected:
0532     int m_position;
0533     QString m_oldText;
0534     QString m_text;
0535 };
0536 
0537 class Q_GUI_EXPORT QAccessibleValueChangeEvent : public QAccessibleEvent
0538 {
0539 public:
0540     inline QAccessibleValueChangeEvent(QObject *obj, const QVariant &val)
0541         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0542       , m_value(val)
0543     {
0544         m_type = QAccessible::ValueChanged;
0545     }
0546     inline QAccessibleValueChangeEvent(QAccessibleInterface *iface, const QVariant &val)
0547         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0548       , m_value(val)
0549     {
0550         m_type = QAccessible::ValueChanged;
0551     }
0552 
0553     ~QAccessibleValueChangeEvent();
0554 
0555     void setValue(const QVariant & val) { m_value= val; }
0556     QVariant value() const { return m_value; }
0557 
0558 protected:
0559     QVariant m_value;
0560 };
0561 
0562 class Q_GUI_EXPORT QAccessibleTableModelChangeEvent : public QAccessibleEvent
0563 {
0564 public:
0565     enum ModelChangeType {
0566         ModelReset,
0567         DataChanged,
0568         RowsInserted,
0569         ColumnsInserted,
0570         RowsRemoved,
0571         ColumnsRemoved
0572     };
0573 
0574     inline QAccessibleTableModelChangeEvent(QObject *obj, ModelChangeType changeType)
0575         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0576         , m_modelChangeType(changeType)
0577         , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
0578     {
0579         m_type = QAccessible::TableModelChanged;
0580     }
0581     inline QAccessibleTableModelChangeEvent(QAccessibleInterface *iface, ModelChangeType changeType)
0582         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0583         , m_modelChangeType(changeType)
0584         , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
0585     {
0586         m_type = QAccessible::TableModelChanged;
0587     }
0588 
0589     ~QAccessibleTableModelChangeEvent();
0590 
0591     void setModelChangeType(ModelChangeType changeType) { m_modelChangeType = changeType; }
0592     ModelChangeType modelChangeType() const { return m_modelChangeType; }
0593 
0594     void setFirstRow(int row) { m_firstRow = row; }
0595     void setFirstColumn(int col) { m_firstColumn = col; }
0596     void setLastRow(int row) { m_lastRow = row; }
0597     void setLastColumn(int col) { m_lastColumn = col; }
0598     int firstRow() const { return m_firstRow; }
0599     int firstColumn() const { return m_firstColumn; }
0600     int lastRow() const { return m_lastRow; }
0601     int lastColumn() const { return m_lastColumn; }
0602 
0603 protected:
0604     ModelChangeType m_modelChangeType;
0605     int m_firstRow;
0606     int m_firstColumn;
0607     int m_lastRow;
0608     int m_lastColumn;
0609 };
0610 
0611 class Q_GUI_EXPORT QAccessibleAnnouncementEvent : public QAccessibleEvent
0612 {
0613 public:
0614     explicit QAccessibleAnnouncementEvent(QObject *object, const QString &message)
0615         : QAccessibleEvent(object, QAccessible::InvalidEvent)
0616           , m_message(message)
0617           , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
0618     {
0619         m_type = QAccessible::Announcement;
0620     }
0621 
0622     explicit QAccessibleAnnouncementEvent(QAccessibleInterface *iface, const QString &message)
0623         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0624           , m_message(message)
0625           , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
0626     {
0627         m_type = QAccessible::Announcement;
0628     }
0629 
0630     ~QAccessibleAnnouncementEvent() override;
0631 
0632     QString message() const { return m_message; }
0633     QAccessible::AnnouncementPoliteness politeness() const { return m_politeness; }
0634     void setPoliteness(QAccessible::AnnouncementPoliteness politeness)
0635     { m_politeness = politeness; }
0636 
0637 protected:
0638     QString m_message;
0639     QAccessible::AnnouncementPoliteness m_politeness;
0640 };
0641 
0642 #ifndef Q_QDOC
0643 #define QAccessibleInterface_iid "org.qt-project.Qt.QAccessibleInterface"
0644 Q_DECLARE_INTERFACE(QAccessibleInterface, QAccessibleInterface_iid)
0645 #endif
0646 
0647 Q_GUI_EXPORT const char *qAccessibleRoleString(QAccessible::Role role);
0648 Q_GUI_EXPORT const char *qAccessibleEventString(QAccessible::Event event);
0649 Q_GUI_EXPORT QString qAccessibleLocalizedActionDescription(const QString &actionName);
0650 
0651 #ifndef QT_NO_DEBUG_STREAM
0652 Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleInterface *iface);
0653 Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleEvent &ev);
0654 #endif
0655 
0656 QT_END_NAMESPACE
0657 
0658 #endif // QT_CONFIG(accessibility)
0659 #endif // QACCESSIBLE_H