// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// TODO(nektar): Migrate entire file to Mojoq.
// These should be kept in sync with third_party/WebKit/public/web/WebAXEnums.h
// until the Chromium and Blink trees are merged.
[camel_case_enum_to_string=true] namespace ui {

  // For new entries to the following four enums, also add to
  // chrome/common/extensions/api/automation.idl. This is enforced
  // by a PRESUBMIT check.
  //
  // Explanation of the comments next to these events:
  //
  // Web: this event is only used in web content. Unless a specific platform
  //      is specified, it fires a native event on multiple platforms.
  //
  // Native: this event is only used in native UI.
  //
  // Implicit: it would be cleaner if we just updated the AX node
  //     and each platform fired the appropriate events to indicate which
  //     platform-specific attributes changed.
  //
  // If unspecified, the event is used across web and native on multiple
  // platforms.
  enum AXEvent {
    activedescendantchanged,   // Web
    alert,
    aria_attribute_changed,    // Implicit
    autocorrection_occured,    // Unknown: http://crbug.com/392498
    blur,                      // Remove: http://crbug.com/392502
    checked_state_changed,     // Implicit
    children_changed,
    clicked,
    document_selection_changed,
    expanded_changed,          // Web
    focus,
    hide,                      // Remove: http://crbug.com/392502
    hover,
    invalid_status_changed,    // Implicit
    layout_complete,           // Web
    live_region_created,       // Implicit
    live_region_changed,       // Web
    load_complete,             // Web
    location_changed,          // Web
    menu_end,                  // Native / Win
    menu_list_item_selected,   // Web
    menu_list_value_changed,   // Web
    menu_popup_end,            // Native / Win
    menu_popup_start,          // Native / Win
    menu_start,                // Native / Win
    row_collapsed,             // Web / Mac
    row_count_changed,         // Web / Mac
    row_expanded,              // Web / Mac
    scroll_position_changed,   // Web
    scrolled_to_anchor,        // Web
    selected_children_changed, // Web
    selection,                 // Native
    selection_add,             // Native
    selection_remove,          // Native
    show,                      // Remove: http://crbug.com/392502
    text_changed,
    text_selection_changed,
    tree_changed,              // Accessibility tree changed. Don't
                               // explicitly fire an accessibility event,
                               // only implicitly due to the change.
    value_changed
  };

  enum AXRole {
    abbr,
    alert_dialog,
    alert,
    annotation,
    application,
    article,
    audio,
    banner,
    blockquote,
    // TODO(nektar): Remove busy_indicator because it's used nowhere.
    busy_indicator,
    button,
    button_drop_down,  // Not used on Web.
    canvas,
    caption,
    cell,
    check_box,
    client,
    color_well,
    column_header,
    column,
    combo_box,
    complementary,
    content_info,
    date,
    date_time,
    definition,
    description_list_detail,
    description_list,
    description_list_term,
    desktop,
    details,
    dialog,
    directory,
    disclosure_triangle,
    div,
    document,
    embedded_object,
    figcaption,
    figure,
    footer,
    form,
    grid,
    group,
    heading,
    iframe,
    iframe_presentational,
    ignored,
    image_map_link,
    image_map,
    image,
    inline_text_box,
    input_time,
    label_text,
    legend,
    line_break,
    link,
    list_box_option,
    list_box,
    list_item,
    list_marker,
    list,
    location_bar,
    log,
    main,
    mark,
    marquee,
    math,
    menu,
    menu_bar,
    menu_button,
    menu_item,
    menu_item_check_box,
    menu_item_radio,
    menu_list_option,
    menu_list_popup,
    meter,
    navigation,
    note,
    outline,
    pane,
    paragraph,
    pop_up_button,
    pre,
    presentational,
    progress_indicator,
    radio_button,
    radio_group,
    region,
    root_web_area,
    row_header,
    row,
    ruby,
    ruler,
    svg_root,
    scroll_area,
    scroll_bar,
    seamless_web_area,
    search,
    search_box,
    slider,
    slider_thumb,
    spin_button_part,
    spin_button,
    splitter,
    static_text,
    status,
    switch,
    tab_group,
    tab_list,
    tab_panel,
    tab,
    table_header_container,
    table,
    text_field,
    time,
    timer,
    title_bar,
    toggle_button,
    toolbar,
    tree_grid,
    tree_item,
    tree,
    unknown,
    tooltip,
    video,
    web_area,
    web_view,
    window
  };

  enum AXState {
    busy,
    checked,
    collapsed,
    default,
    disabled,
    editable,
    expanded,
    focusable,
    haspopup,
    // Grows horizontally, e.g. most toolbars and separators.
    horizontal,
    hovered,
    invisible,
    linked,
    multiline,
    multiselectable,
    offscreen,
    pressed,
    protected,
    read_only,
    required,
    richly_editable,
    selectable,
    selected,
    // Grows vertically, e.g. menu or combo box.
    vertical,
    visited
  };

  // An action to be taken on an accessibility node.
  enum AXAction {
    // Decrement a slider or range control by one step value.
    decrement,

    // Do the default action for an object, typically this means "click".
    do_default,

    // Given a point, find the object it corresponds to and fire a
    // HOVER event on it in response.
    hit_test,

    // Increment a slider or range control by one step value.
    increment,

    // Delete any selected text in the control's text value and
    // insert |AXActionData::value| in its place, like when typing or pasting.
    replace_selected_text,

    // Scroll any scrollable containers to make the target object visible
    // on the screen.  Optionally pass a subfocus rect in
    // AXActionData.target_rect.
    scroll_to_make_visible,

    // Scroll the given object to a specified point on the screen in
    // global screen coordinates. Pass a point in AXActionData.target_point.
    scroll_to_point,

    set_accessibility_focus,
    set_focus,
    set_scroll_offset,
    set_selection,

    // Don't focus this node, but set it as the sequential focus navigation
    // starting point, so that pressing Tab moves to the next element
    // following this one, for example.
    set_sequential_focus_navigation_starting_point,

    // Replace the value of the control with AXActionData::value and
    // reset the selection, if applicable.
    set_value,

    show_context_menu
  };

  enum AXActionFlags {
    request_images,
    request_inline_text_boxes
  };

  // A change to the accessibility tree.
  enum AXMutation {
    node_created,
    subtree_created,
    node_changed,
    node_removed
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXStringAttribute {
    access_key,
    action,
    // Only used when invalid_state == invalid_state_other.
    aria_invalid_value,
    auto_complete,
    container_live_relevant,
    container_live_status,
    description,
    display,
    // Only present when different from parent.
    font_family,
    html_tag,
    // Only present when different from parent.
    language,
    name,
    live_relevant,
    live_status,
    placeholder,
    role,
    shortcut,
    url,
    value
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXIntAttribute {
    // Scrollable container attributes.
    scroll_x,
    scroll_x_min,
    scroll_x_max,
    scroll_y,
    scroll_y_min,
    scroll_y_max,

    // Attributes for retrieving the endpoints of a selection.
    text_sel_start,
    text_sel_end,

    // Table attributes.
    table_row_count,
    table_column_count,
    table_header_id,

    // Table row attributes.
    table_row_index,
    table_row_header_id,

    // Table column attributes.
    table_column_index,
    table_column_header_id,

    // Table cell attributes.
    table_cell_column_index,
    table_cell_column_span,
    table_cell_row_index,
    table_cell_row_span,
    sort_direction,

    // Tree control attributes.
    hierarchical_level,

    // What information was used to compute the object's name
    // (of type AXNameFrom).
    name_from,

    // What information was used to compute the object's description
    // (of type AXDescriptionFrom).
    description_from,

    // Relationships between this element and other elements.
    activedescendant_id,
    member_of_id,
    next_on_line_id,
    previous_on_line_id,

    // Identifies a child tree which this node hosts.
    child_tree_id,

    // Position or Number of items in current set of listitems or treeitems
    set_size,
    pos_in_set,

    // In the case of AX_ROLE_COLOR_WELL, specifies the selected color.
    color_value,

    // Indicates the element that represents the current item within a container
    // or set of related elements.
    aria_current_state,

    // Text attributes.

    // Foreground and background color in RGBA.
    background_color,
    color,

    // Indicates if a form control has invalid input or
    // if an element has an aria-invalid attribute.
    invalid_state,

    // Specifies the direction of the text, e.g., right-to-left.
    text_direction,

    // Bold, italic, underline, etc.
    text_style
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXFloatAttribute {
    // Range attributes.
    value_for_range,
    min_value_for_range,
    max_value_for_range,

    // Text attributes.
    // Font size is in pixels.
    font_size
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXBoolAttribute {
    // True if an ARIA toggle button, a checkbox or
    // a menu item checkbox is in the "mixed" state.
    STATE_mixed,

    // Live region attributes.
    container_live_atomic,
    container_live_busy,
    live_atomic,
    live_busy,

    // ARIA readonly flag.
    aria_readonly,

    // Writeable attributes
    can_set_value,

    // If this is set, all of the other fields in this struct should
    // be ignored and only the locations should change.
    update_location_only,

    // Set on a canvas element if it has fallback content.
    canvas_has_fallback
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXIntListAttribute {
    // Ids of nodes that are children of this node logically, but are
    // not children of this node in the tree structure. As an example,
    // a table cell is a child of a row, and an 'indirect' child of a
    // column.
    indirect_child_ids,

    // Relationships between this element and other elements.
    controls_ids,
    describedby_ids,
    flowto_ids,
    labelledby_ids,

    // For static text. Character indices where line breaks occur. Note that
    // this attribute is only available on Chrome OS and will be deprecated
    // soon.
    line_breaks,

    // For static text. These int lists must be the same size; they represent
    // the start and end character offset of each marker. Examples of markers
    // include spelling and grammar errors, and find-in-page matches.
    marker_types,
    marker_starts,
    marker_ends,

    // For a table, the cell ids in row-major order, with duplicate entries
    // when there's a rowspan or colspan, and with -1 for missing cells.
    // There are always exactly rows * columns entries.
    cell_ids,

    // For a table, the unique cell ids in row-major order of their first
    // occurrence.
    unique_cell_ids,

    // For inline text. This is the pixel position of the end of this
    // character within the bounding rectangle of this object, in the
    // direction given by AX_ATTR_TEXT_DIRECTION. For example, for left-to-right
    // text, the first offset is the right coordinate of the first character
    // within the object's bounds, the second offset is the right coordinate
    // of the second character, and so on.
    character_offsets,

    // Used for caching. Do not read directly. Use
    // |AXNode::GetOrComputeLineStartOffsets|
    // For all text fields and content editable roots: A list of the start
    // offsets of each line inside this object.
    cached_line_starts,

    // For inline text. These int lists must be the same size; they represent
    // the start and end character offset of each word within this text.
    word_starts,
    word_ends
  };

  enum AXMarkerType {
    // Assignments are ignored by the parser, but are kept here for clarity.
    spelling = 1,
    grammar = 2,
    spelling_grammar = 3,
    text_match = 4,
    spelling_text_match = 5,
    grammar_text_match = 6,
    spelling_grammar_text_match = 7
  };

  enum AXTextDirection {
    ltr,
    rtl,
    ttb,
    btt
  };

  // A Java counterpart will be generated for this enum.
  // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.ui.accessibility
  [cpp_enum_prefix_override="ax"] enum AXTextStyle {
    // Assignments are ignored by the parser, but are kept here for clarity.
    text_style_bold = 1,
    text_style_italic = 2,
    text_style_bold_italic = 3,
    text_style_underline = 4,
    text_style_bold_underline = 5,
    text_style_italic_underline = 6,
    text_style_bold_italic_underline = 7,
    text_style_line_through = 8,
    text_style_bold_line_through = 9,
    text_style_italic_line_through = 10,
    text_style_bold_italic_line_through = 11,
    text_style_underline_line_through = 12,
    text_style_bold_underline_line_through = 13,
    text_style_italic_underline_line_through = 14,
    text_style_bold_italic_underline_line_through = 15
  };

  enum AXAriaCurrentState {
    false,
    true,
    page,
    step,
    location,
    date,
    time
  };

  enum AXInvalidState {
    false,
    true,
    spelling,
    grammar,
    other
  };

  enum AXSortDirection {
    unsorted,
    ascending,
    descending,
    other
  };

  enum AXNameFrom {
    uninitialized,
    attribute,
    contents,
    placeholder,
    related_element,
    value
  };

  enum AXDescriptionFrom {
    uninitialized,
    attribute,
    contents,
    placeholder,
    related_element
  };

  enum AXEventFrom {
    user,
    page,
    action
  };

  // Touch gestures on Chrome OS.
  enum AXGesture {
    click,
    swipe_left_1,
    swipe_up_1,
    swipe_right_1,
    swipe_down_1,
    swipe_left_2,
    swipe_up_2,
    swipe_right_2,
    swipe_down_2,
    swipe_left_3,
    swipe_up_3,
    swipe_right_3,
    swipe_down_3,
    swipe_left_4,
    swipe_up_4,
    swipe_right_4,
    swipe_down_4
  };

  enum AXTextAffinity {
    downstream,
    upstream
  };

  // Compares two nodes in an accessibility tree in pre-order traversal.
  enum AXTreeOrder {
    // Not in the same tree, or other error.
    undefined,

    // First node is before the second one.
    before,

    // Nodes are the same.
    equal,

    // First node is after the second one.
    after
  };
};
