// 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.

// 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 {
  enum AXEvent {
    activedescendantchanged,
    alert,
    aria_attribute_changed,
    autocorrection_occured,
    blur,
    checked_state_changed,
    children_changed,
    focus,
    hide,
    hover,
    invalid_status_changed,
    layout_complete,
    live_region_changed,
    load_complete,
    location_changed,
    menu_end,
    menu_list_item_selected,
    menu_list_value_changed,
    menu_popup_end,
    menu_popup_start,
    menu_start,
    row_collapsed,
    row_count_changed,
    row_expanded,
    scroll_position_changed,
    scrolled_to_anchor,
    selected_children_changed,
    selected_text_changed,
    selection_changed,
    show,
    text_changed,
    text_inserted,
    text_removed,
    value_changed
  };

  enum AXRole {
    alert_dialog,
    alert,
    annotation,
    application,
    article,
    banner,
    browser,
    busy_indicator,
    button,
    button_drop_down,
    canvas,
    cell,
    check_box,
    client,
    color_well,
    column_header,
    column,
    combo_box,
    complementary,
    content_info,
    definition,
    description_list_detail,
    description_list_term,
    desktop,
    dialog,
    directory,
    disclosure_triangle,
    div,
    document,
    drawer,
    editable_text,
    embedded_object,
    footer,
    form,
    grid,
    group,
    grow_area,
    heading,
    help_tag,
    horizontal_rule,
    iframe,
    ignored,
    image_map_link,
    image_map,
    image,
    incrementor,
    inline_text_box,
    label_text,
    legend,
    link,
    list_box_option,
    list_box,
    list_item,
    list_marker,
    list,
    location_bar,
    log,
    main,
    marquee,
    math_element,
    math,
    matte,
    menu_bar,
    menu_button,
    menu_item,
    menu_list_option,
    menu_list_popup,
    menu,
    navigation,
    note,
    outline,
    pane,
    paragraph,
    pop_up_button,
    presentational,
    progress_indicator,
    radio_button,
    radio_group,
    region,
    root_web_area,
    row_header,
    row,
    ruler_marker,
    ruler,
    svg_root,
    scroll_area,
    scroll_bar,
    seamless_web_area,
    search,
    sheet,
    slider,
    slider_thumb,
    spin_button_part,
    spin_button,
    split_group,
    splitter,
    static_text,
    status,
    system_wide,
    tab_group,
    tab_list,
    tab_panel,
    tab,
    table_header_container,
    table,
    text_area,
    text_field,
    timer,
    title_bar,
    toggle_button,
    toolbar,
    tree_grid,
    tree_item,
    tree,
    unknown,
    tooltip,
    value_indicator,
    web_area,
    window
  };

  // TODO(dmazzoni): switch content/ to use AX_STATE_DISABLED instead of
  // !AX_STATE_ENABLED, and AX_STATE_EDITABLE instead of !AX_STATE_READONLY.
  enum AXState {
    busy,
    checked,
    collapsed,
    default,
    disabled,  // ui/views only
    editable,  // ui/views only
    enabled,   // content only
    expanded,
    focusable,
    focused,
    haspopup,
    hovered,
    indeterminate,
    invisible,
    linked,
    multiselectable,
    offscreen,
    pressed,
    protected,
    read_only,
    required,
    selectable,
    selected,
    vertical,
    visited
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXStringAttribute {
    // Document attributes.
    doc_url,
    doc_title,
    doc_mimetype,
    doc_doctype,

    // Attributes that could apply to any node.
    access_key,
    action,
    container_live_relevant,
    container_live_status,
    description,
    display,
    help,
    html_tag,
    name,
    live_relevant,
    live_status,
    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,

    // Editable text attributes.
    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,

    // Tree control attributes.
    hierarchical_level,

    // Relationships between this element and other elements.
    title_ui_element,
    activedescendant_id,

    // Color value for AX_ROLE_COLOR_WELL, each component is 0..255
    color_value_red,
    color_value_green,
    color_value_blue,

    // Inline text attributes.
    text_direction
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXFloatAttribute {
    // Document attributes.
    doc_loading_progress,

    // Range attributes.
    value_for_range,
    min_value_for_range,
    max_value_for_range
  };

  [cpp_enum_prefix_override="ax_attr"] enum AXBoolAttribute {
    // Document attributes.
    doc_loaded,

    // True if a checkbox or radio button is in the "mixed" state.
    button_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,
    owns_ids,

    // Character indices where line breaks occur.
    line_breaks,

    // 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,

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

  [cpp_enum_prefix_override="ax"] enum AXTextDirection {
    text_direction_lr,
    text_direction_rl,
    text_direction_tb,
    text_direction_bt
  };
};
