Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 09:07:59

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         Q_ASSERT(obj);
0309         // All events below have a subclass of QAccessibleEvent.
0310         // Use the subclass, since it's expected that it's possible to cast to that.
0311         Q_ASSERT(m_type != QAccessible::ValueChanged);
0312         Q_ASSERT(m_type != QAccessible::StateChanged);
0313         Q_ASSERT(m_type != QAccessible::TextCaretMoved);
0314         Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
0315         Q_ASSERT(m_type != QAccessible::TextInserted);
0316         Q_ASSERT(m_type != QAccessible::TextRemoved);
0317         Q_ASSERT(m_type != QAccessible::TextUpdated);
0318         Q_ASSERT(m_type != QAccessible::TableModelChanged);
0319         Q_ASSERT(m_type != QAccessible::Announcement);
0320     }
0321 
0322     inline QAccessibleEvent(QAccessibleInterface *iface, QAccessible::Event typ)
0323         : m_type(typ)
0324     {
0325         Q_ASSERT(iface);
0326         Q_ASSERT(m_type != QAccessible::ValueChanged);
0327         Q_ASSERT(m_type != QAccessible::StateChanged);
0328         Q_ASSERT(m_type != QAccessible::TextCaretMoved);
0329         Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
0330         Q_ASSERT(m_type != QAccessible::TextInserted);
0331         Q_ASSERT(m_type != QAccessible::TextRemoved);
0332         Q_ASSERT(m_type != QAccessible::TextUpdated);
0333         Q_ASSERT(m_type != QAccessible::TableModelChanged);
0334         Q_ASSERT(m_type != QAccessible::Announcement);
0335         m_uniqueId = QAccessible::uniqueId(iface);
0336         m_object = iface->object();
0337     }
0338 
0339     virtual ~QAccessibleEvent();
0340 
0341     QAccessible::Event type() const { return m_type; }
0342     QObject *object() const { return m_object; }
0343     QAccessible::Id uniqueId() const;
0344 
0345     void setChild(int chld) { m_child = chld; }
0346     int child() const { return m_child; }
0347 
0348     virtual QAccessibleInterface *accessibleInterface() const;
0349 
0350 protected:
0351     QAccessible::Event m_type;
0352     QObject *m_object;
0353     union {
0354         int m_child;
0355         QAccessible::Id m_uniqueId;
0356     };
0357 
0358     friend class QTestAccessibility;
0359 };
0360 
0361 class Q_GUI_EXPORT QAccessibleStateChangeEvent :public QAccessibleEvent
0362 {
0363 public:
0364     inline QAccessibleStateChangeEvent(QObject *obj, QAccessible::State state)
0365         : QAccessibleEvent(obj, QAccessible::InvalidEvent), m_changedStates(state)
0366     {
0367         m_type = QAccessible::StateChanged;
0368     }
0369     inline QAccessibleStateChangeEvent(QAccessibleInterface *iface, QAccessible::State state)
0370         : QAccessibleEvent(iface, QAccessible::InvalidEvent), m_changedStates(state)
0371     {
0372         m_type = QAccessible::StateChanged;
0373     }
0374     ~QAccessibleStateChangeEvent();
0375 
0376     QAccessible::State changedStates() const {
0377         return m_changedStates;
0378     }
0379 
0380 protected:
0381     QAccessible::State m_changedStates;
0382 };
0383 
0384 // Update the cursor and optionally the selection.
0385 class Q_GUI_EXPORT QAccessibleTextCursorEvent : public QAccessibleEvent
0386 {
0387 public:
0388     inline QAccessibleTextCursorEvent(QObject *obj, int cursorPos)
0389         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0390       , m_cursorPosition(cursorPos)
0391     {
0392         m_type = QAccessible::TextCaretMoved;
0393     }
0394     inline QAccessibleTextCursorEvent(QAccessibleInterface *iface, int cursorPos)
0395         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0396       , m_cursorPosition(cursorPos)
0397     {
0398         m_type = QAccessible::TextCaretMoved;
0399     }
0400 
0401     ~QAccessibleTextCursorEvent();
0402 
0403     void setCursorPosition(int position) { m_cursorPosition = position; }
0404     int cursorPosition() const { return m_cursorPosition; }
0405 
0406 protected:
0407     int m_cursorPosition;
0408 };
0409 
0410 // Updates the cursor position simultaneously. By default the cursor is set to the end of the selection.
0411 class Q_GUI_EXPORT QAccessibleTextSelectionEvent : public QAccessibleTextCursorEvent
0412 {
0413 public:
0414     inline QAccessibleTextSelectionEvent(QObject *obj, int start, int end)
0415         : QAccessibleTextCursorEvent(obj, (start == -1) ? 0 : end)
0416         , m_selectionStart(start), m_selectionEnd(end)
0417     {
0418         m_type = QAccessible::TextSelectionChanged;
0419     }
0420     inline QAccessibleTextSelectionEvent(QAccessibleInterface *iface, int start, int end)
0421         : QAccessibleTextCursorEvent(iface, (start == -1) ? 0 : end)
0422         , m_selectionStart(start), m_selectionEnd(end)
0423     {
0424         m_type = QAccessible::TextSelectionChanged;
0425     }
0426 
0427     ~QAccessibleTextSelectionEvent();
0428 
0429     void setSelection(int start, int end) {
0430         m_selectionStart = start;
0431         m_selectionEnd = end;
0432     }
0433 
0434     int selectionStart() const { return m_selectionStart; }
0435     int selectionEnd() const { return m_selectionEnd; }
0436 
0437 protected:
0438         int m_selectionStart;
0439         int m_selectionEnd;
0440 };
0441 
0442 class Q_GUI_EXPORT QAccessibleTextInsertEvent : public QAccessibleTextCursorEvent
0443 {
0444 public:
0445     inline QAccessibleTextInsertEvent(QObject *obj, int position, const QString &text)
0446         : QAccessibleTextCursorEvent(obj, position + int(text.size()))
0447         , m_position(position), m_text(text)
0448     {
0449         m_type = QAccessible::TextInserted;
0450     }
0451     inline QAccessibleTextInsertEvent(QAccessibleInterface *iface, int position, const QString &text)
0452         : QAccessibleTextCursorEvent(iface, position + int(text.size()))
0453         , m_position(position), m_text(text)
0454     {
0455         m_type = QAccessible::TextInserted;
0456     }
0457 
0458     ~QAccessibleTextInsertEvent();
0459 
0460     QString textInserted() const {
0461         return m_text;
0462     }
0463     int changePosition() const {
0464         return m_position;
0465     }
0466 
0467 protected:
0468     int m_position;
0469     QString m_text;
0470 };
0471 
0472 class Q_GUI_EXPORT QAccessibleTextRemoveEvent : public QAccessibleTextCursorEvent
0473 {
0474 public:
0475     inline QAccessibleTextRemoveEvent(QObject *obj, int position, const QString &text)
0476         : QAccessibleTextCursorEvent(obj, position)
0477         , m_position(position), m_text(text)
0478     {
0479         m_type = QAccessible::TextRemoved;
0480     }
0481     inline QAccessibleTextRemoveEvent(QAccessibleInterface *iface, int position, const QString &text)
0482         : QAccessibleTextCursorEvent(iface, position)
0483         , m_position(position), m_text(text)
0484     {
0485         m_type = QAccessible::TextRemoved;
0486     }
0487 
0488     ~QAccessibleTextRemoveEvent();
0489 
0490     QString textRemoved() const {
0491         return m_text;
0492     }
0493     int changePosition() const {
0494         return m_position;
0495     }
0496 
0497 protected:
0498     int m_position;
0499     QString m_text;
0500 };
0501 
0502 class Q_GUI_EXPORT QAccessibleTextUpdateEvent : public QAccessibleTextCursorEvent
0503 {
0504 public:
0505     inline QAccessibleTextUpdateEvent(QObject *obj, int position, const QString &oldText, const QString &text)
0506         : QAccessibleTextCursorEvent(obj, position + int(text.size()))
0507         , m_position(position), m_oldText(oldText), m_text(text)
0508     {
0509         m_type = QAccessible::TextUpdated;
0510     }
0511     inline QAccessibleTextUpdateEvent(QAccessibleInterface *iface, int position, const QString &oldText, const QString &text)
0512         : QAccessibleTextCursorEvent(iface, position + int(text.size()))
0513         , m_position(position), m_oldText(oldText), m_text(text)
0514     {
0515         m_type = QAccessible::TextUpdated;
0516     }
0517 
0518     ~QAccessibleTextUpdateEvent();
0519 
0520     QString textRemoved() const {
0521         return m_oldText;
0522     }
0523     QString textInserted() const {
0524         return m_text;
0525     }
0526     int changePosition() const {
0527         return m_position;
0528     }
0529 
0530 protected:
0531     int m_position;
0532     QString m_oldText;
0533     QString m_text;
0534 };
0535 
0536 class Q_GUI_EXPORT QAccessibleValueChangeEvent : public QAccessibleEvent
0537 {
0538 public:
0539     inline QAccessibleValueChangeEvent(QObject *obj, const QVariant &val)
0540         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0541       , m_value(val)
0542     {
0543         m_type = QAccessible::ValueChanged;
0544     }
0545     inline QAccessibleValueChangeEvent(QAccessibleInterface *iface, const QVariant &val)
0546         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0547       , m_value(val)
0548     {
0549         m_type = QAccessible::ValueChanged;
0550     }
0551 
0552     ~QAccessibleValueChangeEvent();
0553 
0554     void setValue(const QVariant & val) { m_value= val; }
0555     QVariant value() const { return m_value; }
0556 
0557 protected:
0558     QVariant m_value;
0559 };
0560 
0561 class Q_GUI_EXPORT QAccessibleTableModelChangeEvent : public QAccessibleEvent
0562 {
0563 public:
0564     enum ModelChangeType {
0565         ModelReset,
0566         DataChanged,
0567         RowsInserted,
0568         ColumnsInserted,
0569         RowsRemoved,
0570         ColumnsRemoved
0571     };
0572 
0573     inline QAccessibleTableModelChangeEvent(QObject *obj, ModelChangeType changeType)
0574         : QAccessibleEvent(obj, QAccessible::InvalidEvent)
0575         , m_modelChangeType(changeType)
0576         , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
0577     {
0578         m_type = QAccessible::TableModelChanged;
0579     }
0580     inline QAccessibleTableModelChangeEvent(QAccessibleInterface *iface, ModelChangeType changeType)
0581         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0582         , m_modelChangeType(changeType)
0583         , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
0584     {
0585         m_type = QAccessible::TableModelChanged;
0586     }
0587 
0588     ~QAccessibleTableModelChangeEvent();
0589 
0590     void setModelChangeType(ModelChangeType changeType) { m_modelChangeType = changeType; }
0591     ModelChangeType modelChangeType() const { return m_modelChangeType; }
0592 
0593     void setFirstRow(int row) { m_firstRow = row; }
0594     void setFirstColumn(int col) { m_firstColumn = col; }
0595     void setLastRow(int row) { m_lastRow = row; }
0596     void setLastColumn(int col) { m_lastColumn = col; }
0597     int firstRow() const { return m_firstRow; }
0598     int firstColumn() const { return m_firstColumn; }
0599     int lastRow() const { return m_lastRow; }
0600     int lastColumn() const { return m_lastColumn; }
0601 
0602 protected:
0603     ModelChangeType m_modelChangeType;
0604     int m_firstRow;
0605     int m_firstColumn;
0606     int m_lastRow;
0607     int m_lastColumn;
0608 };
0609 
0610 class Q_GUI_EXPORT QAccessibleAnnouncementEvent : public QAccessibleEvent
0611 {
0612 public:
0613     explicit QAccessibleAnnouncementEvent(QObject *object, const QString &message)
0614         : QAccessibleEvent(object, QAccessible::InvalidEvent)
0615           , m_message(message)
0616           , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
0617     {
0618         m_type = QAccessible::Announcement;
0619     }
0620 
0621     explicit QAccessibleAnnouncementEvent(QAccessibleInterface *iface, const QString &message)
0622         : QAccessibleEvent(iface, QAccessible::InvalidEvent)
0623           , m_message(message)
0624           , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
0625     {
0626         m_type = QAccessible::Announcement;
0627     }
0628 
0629     ~QAccessibleAnnouncementEvent() override;
0630 
0631     QString message() const { return m_message; }
0632     QAccessible::AnnouncementPoliteness politeness() const { return m_politeness; }
0633     void setPoliteness(QAccessible::AnnouncementPoliteness politeness)
0634     { m_politeness = politeness; }
0635 
0636 protected:
0637     QString m_message;
0638     QAccessible::AnnouncementPoliteness m_politeness;
0639 };
0640 
0641 #ifndef Q_QDOC
0642 #define QAccessibleInterface_iid "org.qt-project.Qt.QAccessibleInterface"
0643 Q_DECLARE_INTERFACE(QAccessibleInterface, QAccessibleInterface_iid)
0644 #endif
0645 
0646 Q_GUI_EXPORT const char *qAccessibleRoleString(QAccessible::Role role);
0647 Q_GUI_EXPORT const char *qAccessibleEventString(QAccessible::Event event);
0648 Q_GUI_EXPORT QString qAccessibleLocalizedActionDescription(const QString &actionName);
0649 
0650 #ifndef QT_NO_DEBUG_STREAM
0651 Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleInterface *iface);
0652 Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleEvent &ev);
0653 #endif
0654 
0655 QT_END_NAMESPACE
0656 
0657 #endif // QT_CONFIG(accessibility)
0658 #endif // QACCESSIBLE_H