1 /* 2 Copyright 2012 Frederik Gladhorn <gladhorn@kde.org> 3 4 This library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) version 3, or any 8 later version accepted by the membership of KDE e.V. (or its 9 successor approved by the membership of KDE e.V.), which shall 10 act as a proxy defined in Section 6 of version 3 of the license. 11 12 This library is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 Lesser General Public License for more details. 16 17 You should have received a copy of the GNU Lesser General Public 18 License along with this library. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #ifndef QACCESSIBILITYCLIENT_REGISTRY_P_H 22 #define QACCESSIBILITYCLIENT_REGISTRY_P_H 23 24 #include <atspi/atspi-constants.h> 25 26 #include <qobject.h> 27 #include <qmap.h> 28 #include <qdbuscontext.h> 29 #include <qdbusargument.h> 30 #include <qsignalmapper.h> 31 #include <qsharedpointer.h> 32 33 #include "atspi/dbusconnection.h" 34 #include "qaccessibilityclient/registry.h" 35 #include "qaccessibilityclient/accessibleobject.h" 36 #include "qaccessibilityclient/accessibleobject_p.h" 37 #include "atspi/qt-atspi.h" 38 #include "cachestrategy_p.h" 39 40 class QDBusPendingCallWatcher; 41 42 namespace QAccessibleClient { 43 44 class DBusConnection; 45 class AtSpiDBus; 46 47 class RegistryPrivate :public QObject, public QDBusContext 48 { 49 Q_OBJECT 50 public: 51 RegistryPrivate(Registry *qq); 52 53 void init(); 54 55 bool isEnabled() const; 56 void setEnabled(bool enable); 57 bool isScreenReaderEnabled() const; 58 void setScreenReaderEnabled(bool enable); 59 60 QUrl url(const AccessibleObject &object) const; 61 AccessibleObject fromUrl(const QUrl &url) const; 62 63 void subscribeEventListeners(const Registry::EventListeners & listeners); 64 Registry::EventListeners eventListeners() const; 65 66 QString name(const AccessibleObject &object) const; 67 QString description(const AccessibleObject &object) const; 68 AccessibleObject::Role role(const AccessibleObject &object) const; 69 QString roleName(const AccessibleObject &object) const; 70 QString localizedRoleName(const AccessibleObject &object) const; 71 quint64 state(const AccessibleObject &object) const; 72 int layer(const AccessibleObject &object) const; 73 int mdiZOrder(const AccessibleObject &object) const; 74 double alpha(const AccessibleObject &object) const; 75 QRect boundingRect(const AccessibleObject &object) const; 76 QRect characterRect(const AccessibleObject &object, int offset) const; 77 AccessibleObject::Interfaces supportedInterfaces(const AccessibleObject &object) const; 78 79 int caretOffset(const AccessibleObject &object) const; 80 int characterCount(const AccessibleObject &object) const; 81 QList< QPair<int,int> > textSelections(const AccessibleObject &object) const; 82 void setTextSelections(const AccessibleObject &object, const QList< QPair<int,int> > &selections); 83 QString text(const AccessibleObject &object, int startOffset = 0, int endOffset = -1) const; 84 QString textWithBoundary(const AccessibleObject &object, int offset, AccessibleObject::TextBoundary boundary, int *startOffset, int *endOffset) const; 85 86 bool setText(const AccessibleObject &object, const QString &text); 87 bool insertText(const AccessibleObject &object, const QString &text, int position, int length = -1); 88 bool copyText(const AccessibleObject &object, int startPos, int endPos); 89 bool cutText(const AccessibleObject &object, int startPos, int endPos); 90 bool deleteText(const AccessibleObject &object, int startPos, int endPos); 91 bool pasteText(const AccessibleObject &object, int position); 92 93 AccessibleObject application(const AccessibleObject &object) const; 94 QString appToolkitName(const AccessibleObject &object) const; 95 QString appVersion(const AccessibleObject &object) const; 96 int appId(const AccessibleObject &object) const; 97 QString appLocale(const AccessibleObject &object, uint lctype) const; 98 QString appBusAddress(const AccessibleObject &object) const; 99 100 double minimumValue(const AccessibleObject &object) const; 101 double maximumValue(const AccessibleObject &object) const; 102 double minimumValueIncrement(const AccessibleObject &object) const; 103 double currentValue(const AccessibleObject &object) const; 104 bool setCurrentValue(const AccessibleObject &object, double value); 105 106 QList<AccessibleObject> selection(const AccessibleObject &object) const; 107 108 QString imageDescription(const AccessibleObject &object) const; 109 QString imageLocale(const AccessibleObject &object) const; 110 QRect imageRect(const AccessibleObject &object) const; 111 112 QVector< QSharedPointer<QAction> > actions(const AccessibleObject &object); 113 114 QList<AccessibleObject> topLevelAccessibles() const; 115 AccessibleObject parentAccessible(const AccessibleObject &object) const; 116 117 int childCount(const AccessibleObject &object) const; 118 int indexInParent(const AccessibleObject &object) const; 119 AccessibleObject child(const AccessibleObject &object, int index) const; 120 QList<AccessibleObject> children(const AccessibleObject &object) const; 121 122 static QString ACCESSIBLE_OBJECT_SCHEME_STRING; 123 124 private Q_SLOTS: 125 AccessibleObject accessibleFromPath(const QString &service, const QString &path) const; 126 AccessibleObject accessibleFromReference(const QSpiObjectReference &reference) const; 127 AccessibleObject accessibleFromContext() const; 128 129 void connectionFetched(); 130 void slotSubscribeEventListenerFinished(QDBusPendingCallWatcher *call); 131 void a11yConnectionChanged(const QString &interface,const QVariantMap &changedProperties, const QStringList &invalidatedProperties); 132 133 void slotPropertyChange(const QString &property, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 134 void slotWindowCreate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 135 void slotWindowDestroy(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 136 void slotWindowClose(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 137 void slotWindowReparent(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 138 void slotWindowMinimize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 139 void slotWindowMaximize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 140 void slotWindowRestore(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 141 void slotWindowActivate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 142 void slotWindowDeactivate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 143 void slotWindowDesktopCreate(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 144 void slotWindowDesktopDestroy(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 145 void slotWindowRaise(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 146 void slotWindowLower(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 147 void slotWindowMove(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 148 void slotWindowResize(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 149 void slotWindowShade(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 150 void slotWindowUnshade(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 151 152 void slotStateChanged(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 153 //void slotPropertyChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 154 //void slotBoundsChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 155 //void slotLinkSelected(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 156 157 void slotChildrenChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 158 void slotVisibleDataChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 159 void slotSelectionChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 160 void slotModelChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 161 162 void slotTextCaretMoved(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 163 void slotTextSelectionChanged(const QString &state, int detail1, int detail2, const QDBusVariant &/*args*/, const QAccessibleClient::QSpiObjectReference &reference); 164 165 //void slotTextBoundsChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 166 void slotTextChanged(const QString &state, int start, int end, const QDBusVariant &text, const QAccessibleClient::QSpiObjectReference &reference); 167 //void slotTextAttributesChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 168 //void slotAttributesChanged(const QString &state, int detail1, int detail2, const QDBusVariant &args, const QAccessibleClient::QSpiObjectReference &reference); 169 170 void actionTriggered(const QString &action); 171 172 private: 173 QVariant getProperty ( const QString &service, const QString &path, const QString &interface, const QString &name ) const; 174 bool subscribeEvent(const QLatin1String &iface, const QLatin1String &signal); 175 static AccessibleObject::Role atspiRoleToRole(AtspiRole role); 176 177 DBusConnection conn; 178 QSignalMapper m_actionMapper; 179 Registry *q; 180 Registry::EventListeners m_subscriptions; 181 Registry::EventListeners m_pendingSubscriptions; 182 QHash<QString, AccessibleObject::Interface> interfaceHash; 183 QSignalMapper m_eventMapper; 184 ObjectCache *m_cache; 185 // typedef QMap<QString, QSharedPointer<AccessibleObjectPrivate> >::Iterator AccessibleObjectsHashIterator; 186 // typedef QMap<QString, QSharedPointer<AccessibleObjectPrivate> >::ConstIterator AccessibleObjectsHashConstIterator; 187 // QMap<QString, QSharedPointer<AccessibleObjectPrivate> > accessibleObjectsHash; 188 bool removeAccessibleObject(const QAccessibleClient::AccessibleObject &accessible); 189 bool removeAccessibleObject(const QAccessibleClient::QSpiObjectReference &reference); 190 191 friend class Registry; 192 friend class AccessibleObject; 193 friend class AccessibleObjectPrivate; 194 }; 195 196 } 197 198 #endif 199