accessible/src/atk/nsStateMap.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* vim: set ts=2 et sw=2 tw=80: */
michael@0 3 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 6
michael@0 7 #include <atk/atk.h>
michael@0 8 #include "AccessibleWrap.h"
michael@0 9
michael@0 10 /******************************************************************************
michael@0 11 The following nsIAccessible states aren't translated, just ignored:
michael@0 12 STATE_READONLY: Supported indirectly via EXT_STATE_EDITABLE
michael@0 13 STATE_HOTTRACKED: No ATK equivalent. No known use case.
michael@0 14 The nsIAccessible state is not currently supported.
michael@0 15 STATE_FLOATING: No ATK equivalent. No known use case.
michael@0 16 The nsIAccessible state is not currently supported.
michael@0 17 STATE_MOVEABLE: No ATK equivalent. No known use case.
michael@0 18 The nsIAccessible state is not currently supported.
michael@0 19 STATE_SELFVOICING: No ATK equivalent -- the object has self-TTS.
michael@0 20 The nsIAccessible state is not currently supported.
michael@0 21 STATE_LINKED: The object is formatted as a hyperlink. Supported via ATK_ROLE_LINK.
michael@0 22 STATE_EXTSELECTABLE: Indicates that an object extends its selection.
michael@0 23 This is supported via STATE_MULTISELECTABLE.
michael@0 24 STATE_PROTECTED: The object is a password-protected edit control.
michael@0 25 Supported via ATK_ROLE_PASSWORD_TEXT
michael@0 26 STATE_HASPOPUP: Object displays a pop-up menu or window when invoked.
michael@0 27 No ATK equivalent. The nsIAccessible state is not currently supported.
michael@0 28 STATE_PINNED: The object is pinned, usually indicating it is fixed in place and has permanence.
michael@0 29 No ATK equivalent. The nsIAccessible state is not currently supported.
michael@0 30
michael@0 31 The following ATK states are not supported:
michael@0 32 ATK_STATE_ARMED: No clear use case, used briefly when button is activated
michael@0 33 ATK_STATE_HAS_TOOLTIP: No clear use case, no IA2 equivalent
michael@0 34 ATK_STATE_ICONIFIED: Mozilla does not have elements which are collapsable into icons
michael@0 35 ATK_STATE_TRUNCATED: No clear use case. Indicates that an object's onscreen content is truncated,
michael@0 36 e.g. a text value in a spreadsheet cell. No IA2 state.
michael@0 37 ******************************************************************************/
michael@0 38
michael@0 39 enum EStateMapEntryType {
michael@0 40 kMapDirectly,
michael@0 41 kMapOpposite, // For example, UNAVAILABLE is the opposite of ENABLED
michael@0 42 kNoStateChange, // Don't fire state change event
michael@0 43 kNoSuchState
michael@0 44 };
michael@0 45
michael@0 46 const AtkStateType kNone = ATK_STATE_INVALID;
michael@0 47
michael@0 48 struct AtkStateMap {
michael@0 49 AtkStateType atkState;
michael@0 50 EStateMapEntryType stateMapEntryType;
michael@0 51
michael@0 52 static int32_t GetStateIndexFor(uint64_t aState)
michael@0 53 {
michael@0 54 int32_t stateIndex = -1;
michael@0 55 while (aState > 0) {
michael@0 56 ++ stateIndex;
michael@0 57 aState >>= 1;
michael@0 58 }
michael@0 59 return stateIndex; // Returns -1 if not mapped
michael@0 60 }
michael@0 61 };
michael@0 62
michael@0 63
michael@0 64 // Map array from cross platform states to ATK states
michael@0 65 static const AtkStateMap gAtkStateMap[] = { // Cross Platform States
michael@0 66 { kNone, kMapOpposite }, // states::UNAVAILABLE = 1 << 0
michael@0 67 { ATK_STATE_SELECTED, kMapDirectly }, // states::SELECTED = 1 << 1
michael@0 68 { ATK_STATE_FOCUSED, kMapDirectly }, // states::FOCUSED = 1 << 2
michael@0 69 { ATK_STATE_PRESSED, kMapDirectly }, // states::PRESSED = 1 << 3
michael@0 70 { ATK_STATE_CHECKED, kMapDirectly }, // states::CHECKED = 1 << 4
michael@0 71 { ATK_STATE_INDETERMINATE, kMapDirectly }, // states::MIXED = 1 << 5
michael@0 72 { kNone, kMapDirectly }, // states::READONLY = 1 << 6
michael@0 73 { kNone, kMapDirectly }, // states::HOTTRACKED = 1 << 7
michael@0 74 { ATK_STATE_DEFAULT, kMapDirectly }, // states::DEFAULT = 1 << 8
michael@0 75 { ATK_STATE_EXPANDED, kMapDirectly }, // states::EXPANDED = 1 << 9
michael@0 76 { kNone, kNoStateChange }, // states::COLLAPSED = 1 << 10
michael@0 77 { ATK_STATE_BUSY, kMapDirectly }, // states::BUSY = 1 << 11
michael@0 78 { kNone, kMapDirectly }, // states::FLOATING = 1 << 12
michael@0 79 { kNone, kMapDirectly }, // states::CHECKABLE = 1 << 13
michael@0 80 { ATK_STATE_ANIMATED, kMapDirectly }, // states::ANIMATED = 1 << 14
michael@0 81 { ATK_STATE_VISIBLE, kMapOpposite }, // states::INVISIBLE = 1 << 15
michael@0 82 { ATK_STATE_SHOWING, kMapOpposite }, // states::OFFSCREEN = 1 << 16
michael@0 83 { ATK_STATE_RESIZABLE, kMapDirectly }, // states::SIZEABLE = 1 << 17
michael@0 84 { kNone, kMapDirectly }, // states::MOVEABLE = 1 << 18
michael@0 85 { kNone, kMapDirectly }, // states::SELFVOICING = 1 << 19
michael@0 86 { ATK_STATE_FOCUSABLE, kMapDirectly }, // states::FOCUSABLE = 1 << 20
michael@0 87 { ATK_STATE_SELECTABLE, kMapDirectly }, // states::SELECTABLE = 1 << 21
michael@0 88 { kNone, kMapDirectly }, // states::LINKED = 1 << 22
michael@0 89 { ATK_STATE_VISITED, kMapDirectly }, // states::TRAVERSED = 1 << 23
michael@0 90 { ATK_STATE_MULTISELECTABLE, kMapDirectly }, // states::MULTISELECTABLE = 1 << 24
michael@0 91 { kNone, kMapDirectly }, // states::EXTSELECTABLE = 1 << 25
michael@0 92 { ATK_STATE_REQUIRED, kMapDirectly }, // states::STATE_REQUIRED = 1 << 26
michael@0 93 { kNone, kMapDirectly }, // states::ALERT_MEDIUM = 1 << 27
michael@0 94 { ATK_STATE_INVALID_ENTRY, kMapDirectly }, // states::INVALID = 1 << 28
michael@0 95 { kNone, kMapDirectly }, // states::PROTECTED = 1 << 29
michael@0 96 { kNone, kMapDirectly }, // states::HASPOPUP = 1 << 30
michael@0 97 { ATK_STATE_SUPPORTS_AUTOCOMPLETION, kMapDirectly }, // states::SUPPORTS_AUTOCOMPLETION = 1 << 31
michael@0 98 { ATK_STATE_DEFUNCT, kMapDirectly }, // states::DEFUNCT = 1 << 32
michael@0 99 { ATK_STATE_SELECTABLE_TEXT, kMapDirectly }, // states::SELECTABLE_TEXT = 1 << 33
michael@0 100 { ATK_STATE_EDITABLE, kMapDirectly }, // states::EDITABLE = 1 << 34
michael@0 101 { ATK_STATE_ACTIVE, kMapDirectly }, // states::ACTIVE = 1 << 35
michael@0 102 { ATK_STATE_MODAL, kMapDirectly }, // states::MODAL = 1 << 36
michael@0 103 { ATK_STATE_MULTI_LINE, kMapDirectly }, // states::MULTI_LINE = 1 << 37
michael@0 104 { ATK_STATE_HORIZONTAL, kMapDirectly }, // states::HORIZONTAL = 1 << 38
michael@0 105 { ATK_STATE_OPAQUE, kMapDirectly }, // states::OPAQUE = 1 << 39
michael@0 106 { ATK_STATE_SINGLE_LINE, kMapDirectly }, // states::SINGLE_LINE = 1 << 40
michael@0 107 { ATK_STATE_TRANSIENT, kMapDirectly }, // states::TRANSIENT = 1 << 41
michael@0 108 { ATK_STATE_VERTICAL, kMapDirectly }, // states::VERTICAL = 1 << 42
michael@0 109 { ATK_STATE_STALE, kMapDirectly }, // states::STALE = 1 << 43
michael@0 110 { ATK_STATE_ENABLED, kMapDirectly }, // states::ENABLED = 1 << 44
michael@0 111 { ATK_STATE_SENSITIVE, kMapDirectly }, // states::SENSITIVE = 1 << 45
michael@0 112 { ATK_STATE_EXPANDABLE, kMapDirectly }, // states::EXPANDABLE = 1 << 46
michael@0 113 { kNone, kMapDirectly }, // states::PINNED = 1 << 47
michael@0 114 { kNone, kNoSuchState }, // = 1 << 48
michael@0 115 };

mercurial