1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/src/atk/nsStateMap.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,115 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim: set ts=2 et sw=2 tw=80: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include <atk/atk.h> 1.11 +#include "AccessibleWrap.h" 1.12 + 1.13 +/****************************************************************************** 1.14 +The following nsIAccessible states aren't translated, just ignored: 1.15 + STATE_READONLY: Supported indirectly via EXT_STATE_EDITABLE 1.16 + STATE_HOTTRACKED: No ATK equivalent. No known use case. 1.17 + The nsIAccessible state is not currently supported. 1.18 + STATE_FLOATING: No ATK equivalent. No known use case. 1.19 + The nsIAccessible state is not currently supported. 1.20 + STATE_MOVEABLE: No ATK equivalent. No known use case. 1.21 + The nsIAccessible state is not currently supported. 1.22 + STATE_SELFVOICING: No ATK equivalent -- the object has self-TTS. 1.23 + The nsIAccessible state is not currently supported. 1.24 + STATE_LINKED: The object is formatted as a hyperlink. Supported via ATK_ROLE_LINK. 1.25 + STATE_EXTSELECTABLE: Indicates that an object extends its selection. 1.26 + This is supported via STATE_MULTISELECTABLE. 1.27 + STATE_PROTECTED: The object is a password-protected edit control. 1.28 + Supported via ATK_ROLE_PASSWORD_TEXT 1.29 + STATE_HASPOPUP: Object displays a pop-up menu or window when invoked. 1.30 + No ATK equivalent. The nsIAccessible state is not currently supported. 1.31 + STATE_PINNED: The object is pinned, usually indicating it is fixed in place and has permanence. 1.32 + No ATK equivalent. The nsIAccessible state is not currently supported. 1.33 + 1.34 +The following ATK states are not supported: 1.35 + ATK_STATE_ARMED: No clear use case, used briefly when button is activated 1.36 + ATK_STATE_HAS_TOOLTIP: No clear use case, no IA2 equivalent 1.37 + ATK_STATE_ICONIFIED: Mozilla does not have elements which are collapsable into icons 1.38 + ATK_STATE_TRUNCATED: No clear use case. Indicates that an object's onscreen content is truncated, 1.39 + e.g. a text value in a spreadsheet cell. No IA2 state. 1.40 +******************************************************************************/ 1.41 + 1.42 +enum EStateMapEntryType { 1.43 + kMapDirectly, 1.44 + kMapOpposite, // For example, UNAVAILABLE is the opposite of ENABLED 1.45 + kNoStateChange, // Don't fire state change event 1.46 + kNoSuchState 1.47 +}; 1.48 + 1.49 +const AtkStateType kNone = ATK_STATE_INVALID; 1.50 + 1.51 +struct AtkStateMap { 1.52 + AtkStateType atkState; 1.53 + EStateMapEntryType stateMapEntryType; 1.54 + 1.55 + static int32_t GetStateIndexFor(uint64_t aState) 1.56 + { 1.57 + int32_t stateIndex = -1; 1.58 + while (aState > 0) { 1.59 + ++ stateIndex; 1.60 + aState >>= 1; 1.61 + } 1.62 + return stateIndex; // Returns -1 if not mapped 1.63 + } 1.64 +}; 1.65 + 1.66 + 1.67 +// Map array from cross platform states to ATK states 1.68 +static const AtkStateMap gAtkStateMap[] = { // Cross Platform States 1.69 + { kNone, kMapOpposite }, // states::UNAVAILABLE = 1 << 0 1.70 + { ATK_STATE_SELECTED, kMapDirectly }, // states::SELECTED = 1 << 1 1.71 + { ATK_STATE_FOCUSED, kMapDirectly }, // states::FOCUSED = 1 << 2 1.72 + { ATK_STATE_PRESSED, kMapDirectly }, // states::PRESSED = 1 << 3 1.73 + { ATK_STATE_CHECKED, kMapDirectly }, // states::CHECKED = 1 << 4 1.74 + { ATK_STATE_INDETERMINATE, kMapDirectly }, // states::MIXED = 1 << 5 1.75 + { kNone, kMapDirectly }, // states::READONLY = 1 << 6 1.76 + { kNone, kMapDirectly }, // states::HOTTRACKED = 1 << 7 1.77 + { ATK_STATE_DEFAULT, kMapDirectly }, // states::DEFAULT = 1 << 8 1.78 + { ATK_STATE_EXPANDED, kMapDirectly }, // states::EXPANDED = 1 << 9 1.79 + { kNone, kNoStateChange }, // states::COLLAPSED = 1 << 10 1.80 + { ATK_STATE_BUSY, kMapDirectly }, // states::BUSY = 1 << 11 1.81 + { kNone, kMapDirectly }, // states::FLOATING = 1 << 12 1.82 + { kNone, kMapDirectly }, // states::CHECKABLE = 1 << 13 1.83 + { ATK_STATE_ANIMATED, kMapDirectly }, // states::ANIMATED = 1 << 14 1.84 + { ATK_STATE_VISIBLE, kMapOpposite }, // states::INVISIBLE = 1 << 15 1.85 + { ATK_STATE_SHOWING, kMapOpposite }, // states::OFFSCREEN = 1 << 16 1.86 + { ATK_STATE_RESIZABLE, kMapDirectly }, // states::SIZEABLE = 1 << 17 1.87 + { kNone, kMapDirectly }, // states::MOVEABLE = 1 << 18 1.88 + { kNone, kMapDirectly }, // states::SELFVOICING = 1 << 19 1.89 + { ATK_STATE_FOCUSABLE, kMapDirectly }, // states::FOCUSABLE = 1 << 20 1.90 + { ATK_STATE_SELECTABLE, kMapDirectly }, // states::SELECTABLE = 1 << 21 1.91 + { kNone, kMapDirectly }, // states::LINKED = 1 << 22 1.92 + { ATK_STATE_VISITED, kMapDirectly }, // states::TRAVERSED = 1 << 23 1.93 + { ATK_STATE_MULTISELECTABLE, kMapDirectly }, // states::MULTISELECTABLE = 1 << 24 1.94 + { kNone, kMapDirectly }, // states::EXTSELECTABLE = 1 << 25 1.95 + { ATK_STATE_REQUIRED, kMapDirectly }, // states::STATE_REQUIRED = 1 << 26 1.96 + { kNone, kMapDirectly }, // states::ALERT_MEDIUM = 1 << 27 1.97 + { ATK_STATE_INVALID_ENTRY, kMapDirectly }, // states::INVALID = 1 << 28 1.98 + { kNone, kMapDirectly }, // states::PROTECTED = 1 << 29 1.99 + { kNone, kMapDirectly }, // states::HASPOPUP = 1 << 30 1.100 + { ATK_STATE_SUPPORTS_AUTOCOMPLETION, kMapDirectly }, // states::SUPPORTS_AUTOCOMPLETION = 1 << 31 1.101 + { ATK_STATE_DEFUNCT, kMapDirectly }, // states::DEFUNCT = 1 << 32 1.102 + { ATK_STATE_SELECTABLE_TEXT, kMapDirectly }, // states::SELECTABLE_TEXT = 1 << 33 1.103 + { ATK_STATE_EDITABLE, kMapDirectly }, // states::EDITABLE = 1 << 34 1.104 + { ATK_STATE_ACTIVE, kMapDirectly }, // states::ACTIVE = 1 << 35 1.105 + { ATK_STATE_MODAL, kMapDirectly }, // states::MODAL = 1 << 36 1.106 + { ATK_STATE_MULTI_LINE, kMapDirectly }, // states::MULTI_LINE = 1 << 37 1.107 + { ATK_STATE_HORIZONTAL, kMapDirectly }, // states::HORIZONTAL = 1 << 38 1.108 + { ATK_STATE_OPAQUE, kMapDirectly }, // states::OPAQUE = 1 << 39 1.109 + { ATK_STATE_SINGLE_LINE, kMapDirectly }, // states::SINGLE_LINE = 1 << 40 1.110 + { ATK_STATE_TRANSIENT, kMapDirectly }, // states::TRANSIENT = 1 << 41 1.111 + { ATK_STATE_VERTICAL, kMapDirectly }, // states::VERTICAL = 1 << 42 1.112 + { ATK_STATE_STALE, kMapDirectly }, // states::STALE = 1 << 43 1.113 + { ATK_STATE_ENABLED, kMapDirectly }, // states::ENABLED = 1 << 44 1.114 + { ATK_STATE_SENSITIVE, kMapDirectly }, // states::SENSITIVE = 1 << 45 1.115 + { ATK_STATE_EXPANDABLE, kMapDirectly }, // states::EXPANDABLE = 1 << 46 1.116 + { kNone, kMapDirectly }, // states::PINNED = 1 << 47 1.117 + { kNone, kNoSuchState }, // = 1 << 48 1.118 +};