accessible/src/atk/nsStateMap.h

changeset 0
6474c204b198
     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 +};

mercurial