From 84e66f69ae2a2e0b70c8e51c93b6991bf3437e6d Mon Sep 17 00:00:00 2001 From: Jan-Arve Saether Date: Wed, 30 Nov 2011 09:48:51 +0100 Subject: Fix casting. Casting is now done through the virtual interface_cast. Change interface_cast to return void* to avoid using virtual inheritance. Get rid of the magic Q_ACCESSIBLE_OBJECT macro. Change-Id: I94b824aef53f2ba657d39d406b387c8681d47ee4 Reviewed-by: Frederik Gladhorn --- src/plugins/accessible/widgets/complexwidgets.cpp | 8 +++++++- src/plugins/accessible/widgets/complexwidgets.h | 4 ---- src/plugins/accessible/widgets/itemviews.cpp | 7 +++++++ src/plugins/accessible/widgets/itemviews.h | 2 +- src/plugins/accessible/widgets/qaccessiblemenu.cpp | 7 +++++++ src/plugins/accessible/widgets/qaccessiblemenu.h | 3 ++- .../accessible/widgets/qaccessiblewidgets.cpp | 9 +++++++++ .../accessible/widgets/qaccessiblewidgets.h | 4 +--- src/plugins/accessible/widgets/rangecontrols.cpp | 14 +++++++++++++ src/plugins/accessible/widgets/rangecontrols.h | 4 ++-- src/plugins/accessible/widgets/simplewidgets.cpp | 23 ++++++++++++++++++++++ src/plugins/accessible/widgets/simplewidgets.h | 7 +++---- 12 files changed, 76 insertions(+), 16 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/accessible/widgets/complexwidgets.cpp b/src/plugins/accessible/widgets/complexwidgets.cpp index 766d18dbff..f5145bf537 100644 --- a/src/plugins/accessible/widgets/complexwidgets.cpp +++ b/src/plugins/accessible/widgets/complexwidgets.cpp @@ -1451,12 +1451,18 @@ QAccessible::State QAccessibleHeader::state(int child) const class QAccessibleTabButton: public QAccessibleInterface, public QAccessibleActionInterface { - Q_ACCESSIBLE_OBJECT public: QAccessibleTabButton(QTabBar *parent, int index) : m_parent(parent), m_index(index) {} + void *interface_cast(QAccessible::InterfaceType t) { + if (t == QAccessible::ActionInterface) { + return static_cast(this); + } + return 0; + } + QObject *object() const { return 0; } Role role() const { return QAccessible::PageTab; } State state() const { diff --git a/src/plugins/accessible/widgets/complexwidgets.h b/src/plugins/accessible/widgets/complexwidgets.h index 53997b96ff..f094719a6c 100644 --- a/src/plugins/accessible/widgets/complexwidgets.h +++ b/src/plugins/accessible/widgets/complexwidgets.h @@ -103,7 +103,6 @@ public: #ifndef QT_NO_ITEMVIEWS class QAccessibleHeader : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleHeader(QWidget *w); @@ -162,7 +161,6 @@ private: class QAccessibleItemView: public QAccessibleAbstractScrollArea, public QAccessibleTableInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleItemView(QWidget *w); @@ -232,7 +230,6 @@ private: #ifndef QT_NO_TABBAR class QAccessibleTabBar : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleTabBar(QWidget *w); @@ -254,7 +251,6 @@ protected: #ifndef QT_NO_COMBOBOX class QAccessibleComboBox : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleComboBox(QWidget *w); diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/plugins/accessible/widgets/itemviews.cpp index 6abc27b2a1..6b986154b7 100644 --- a/src/plugins/accessible/widgets/itemviews.cpp +++ b/src/plugins/accessible/widgets/itemviews.cpp @@ -470,6 +470,13 @@ QAccessible::Relation QAccessibleTable2::relationTo(const QAccessibleInterface * return QAccessible::Unrelated; } +void *QAccessibleTable2::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::Table2Interface) + return static_cast(this); + return 0; +} + // TREE VIEW QModelIndex QAccessibleTree::indexFromLogical(int row, int column) const diff --git a/src/plugins/accessible/widgets/itemviews.h b/src/plugins/accessible/widgets/itemviews.h index deee866c34..80d22650d4 100644 --- a/src/plugins/accessible/widgets/itemviews.h +++ b/src/plugins/accessible/widgets/itemviews.h @@ -60,7 +60,6 @@ class QAccessibleTable2HeaderCell; class QAccessibleTable2 :public QAccessibleTable2Interface, public QAccessibleObject { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleTable2(QWidget *w); @@ -82,6 +81,7 @@ public: Relation relationTo(const QAccessibleInterface *other) const; QVariant invokeMethod(Method, const QVariantList &) { return QVariant(); } + void *interface_cast(QAccessible::InterfaceType t); // table2 interface virtual QAccessibleTable2CellInterface *cellAt(int row, int column) const; diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.cpp b/src/plugins/accessible/widgets/qaccessiblemenu.cpp index edf74105e6..ed221c6172 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.cpp +++ b/src/plugins/accessible/widgets/qaccessiblemenu.cpp @@ -277,6 +277,13 @@ int QAccessibleMenuItem::navigate(RelationFlag relation, int entry, QAccessibleI return *target ? 0 : -1; } +void *QAccessibleMenuItem::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::ActionInterface) + return static_cast(this); + return 0; +} + QObject *QAccessibleMenuItem::object() const { return m_action; diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.h b/src/plugins/accessible/widgets/qaccessiblemenu.h index ae5c4ba8cd..7c7956e988 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.h +++ b/src/plugins/accessible/widgets/qaccessiblemenu.h @@ -92,11 +92,12 @@ protected: class QAccessibleMenuItem : public QAccessibleInterface, public QAccessibleActionInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleMenuItem(QWidget *owner, QAction *w); virtual ~QAccessibleMenuItem(); + + void *interface_cast(QAccessible::InterfaceType t); virtual int childAt(int x, int y) const; virtual int childCount() const; virtual int indexOfChild(const QAccessibleInterface * child) const; diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp index d2d56065d0..9dec243dd7 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp @@ -302,6 +302,15 @@ QVariant QAccessibleTextEdit::invokeMethod(QAccessible::Method method, } } +void *QAccessibleTextEdit::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::TextInterface) + return static_cast(this); + else if (t == QAccessible::EditableTextInterface) + return static_cast(this); + return QAccessibleWidget::interface_cast(t); +} + void QAccessibleTextEdit::addSelection(int startOffset, int endOffset) { setSelection(0, startOffset, endOffset); diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/plugins/accessible/widgets/qaccessiblewidgets.h index 04de22bb1e..b416469dc6 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.h +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h @@ -69,7 +69,6 @@ class QMainWindow; class QAccessibleTextEdit : public QAccessibleWidget, public QAccessibleTextInterface, public QAccessibleEditableTextInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleTextEdit(QWidget *o); @@ -77,6 +76,7 @@ public: void setText(Text t, const QString &text); QVariant invokeMethod(QAccessible::Method method, const QVariantList ¶ms); + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleTextInterface void addSelection(int startOffset, int endOffset); @@ -118,7 +118,6 @@ private: class QAccessibleStackedWidget : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleStackedWidget(QWidget *widget); @@ -135,7 +134,6 @@ protected: class QAccessibleToolBox : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleToolBox(QWidget *widget); diff --git a/src/plugins/accessible/widgets/rangecontrols.cpp b/src/plugins/accessible/widgets/rangecontrols.cpp index db10a1bff3..684b45d7c5 100644 --- a/src/plugins/accessible/widgets/rangecontrols.cpp +++ b/src/plugins/accessible/widgets/rangecontrols.cpp @@ -87,6 +87,13 @@ QString QAccessibleAbstractSpinBox::text(Text t) const return QAccessibleWidget::text(t); } +void *QAccessibleAbstractSpinBox::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::ValueInterface) + return static_cast(this); + return QAccessibleWidget::interface_cast(t); +} + QVariant QAccessibleAbstractSpinBox::currentValue() { QVariant result = abstractSpinBox()->property("value"); @@ -244,6 +251,13 @@ QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, Role r) Q_ASSERT(qobject_cast(w)); } +void *QAccessibleAbstractSlider::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::ValueInterface) + return static_cast(this); + return QAccessibleWidget::interface_cast(t); +} + QVariant QAccessibleAbstractSlider::currentValue() { return abstractSlider()->value(); diff --git a/src/plugins/accessible/widgets/rangecontrols.h b/src/plugins/accessible/widgets/rangecontrols.h index 6719329cd8..59eb8f934a 100644 --- a/src/plugins/accessible/widgets/rangecontrols.h +++ b/src/plugins/accessible/widgets/rangecontrols.h @@ -60,11 +60,11 @@ class QDial; #ifndef QT_NO_SPINBOX class QAccessibleAbstractSpinBox: public QAccessibleWidget, public QAccessibleValueInterface // TODO, public QAccessibleActionInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleAbstractSpinBox(QWidget *w); QString text(Text t) const; + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleValueInterface QVariant currentValue(); @@ -101,9 +101,9 @@ protected: class QAccessibleAbstractSlider: public QAccessibleWidget, public QAccessibleValueInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleAbstractSlider(QWidget *w, Role r = Slider); + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleValueInterface QVariant currentValue(); diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index f83c9fe30e..28661f0fc3 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -474,6 +474,13 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa return QAccessibleWidget::navigate(rel, entry, target); } +void *QAccessibleDisplay::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::ImageInterface) + return static_cast(this); + return QAccessibleWidget::interface_cast(t); +} + /*! \internal */ QString QAccessibleDisplay::imageDescription() { @@ -614,6 +621,15 @@ QVariant QAccessibleLineEdit::invokeMethod(QAccessible::Method method, } } +void *QAccessibleLineEdit::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::TextInterface) + return static_cast(this); + else if (t == QAccessible::EditableTextInterface) + return static_cast(this); + return QAccessibleWidget::interface_cast(t); +} + void QAccessibleLineEdit::addSelection(int startOffset, int endOffset) { setSelection(0, startOffset, endOffset); @@ -743,6 +759,13 @@ QAccessibleProgressBar::QAccessibleProgressBar(QWidget *o) Q_ASSERT(progressBar()); } +void *QAccessibleProgressBar::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::ValueInterface) + return static_cast(this); + return QAccessibleDisplay::interface_cast(t); +} + QVariant QAccessibleProgressBar::currentValue() { return progressBar()->value(); diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h index 25c3150386..35fa6ee9b8 100644 --- a/src/plugins/accessible/widgets/simplewidgets.h +++ b/src/plugins/accessible/widgets/simplewidgets.h @@ -57,7 +57,6 @@ class QProgressBar; class QAccessibleButton : public QAccessibleWidget { - Q_ACCESSIBLE_OBJECT Q_DECLARE_TR_FUNCTIONS(QAccessibleButton) public: QAccessibleButton(QWidget *w, Role r); @@ -99,7 +98,6 @@ protected: class QAccessibleDisplay : public QAccessibleWidget, public QAccessibleImageInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleDisplay(QWidget *w, Role role = StaticText); @@ -108,6 +106,7 @@ public: Relation relationTo(const QAccessibleInterface *other) const; int navigate(RelationFlag, int entry, QAccessibleInterface **target) const; + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleImageInterface QString imageDescription(); @@ -119,7 +118,6 @@ public: class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInterface, public QAccessibleSimpleEditableTextInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString()); @@ -127,6 +125,7 @@ public: void setText(Text t, const QString &text); State state() const; QVariant invokeMethod(QAccessible::Method method, const QVariantList ¶ms); + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleTextInterface void addSelection(int startOffset, int endOffset); @@ -157,9 +156,9 @@ protected: #ifndef QT_NO_PROGRESSBAR class QAccessibleProgressBar : public QAccessibleDisplay, public QAccessibleValueInterface { - Q_ACCESSIBLE_OBJECT public: explicit QAccessibleProgressBar(QWidget *o); + void *interface_cast(QAccessible::InterfaceType t); // QAccessibleValueInterface QVariant currentValue(); -- cgit v1.2.3