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

library fuchsia.accessibility.semantics;

using fuchsia.ui.gfx;

/// Represents actions that can be applied to Nodes.
enum Action {
    /// The default action associated with the element.
    DEFAULT = 1;
    /// The secondary action associated with the element. This may correspond to a long press
    /// (touchscreens) or right click (mouse).
    SECONDARY = 2;
    /// Set (input/non-accessibility) focus on this element.
    SET_FOCUS = 3;
    /// Set the element's value.
    SET_VALUE = 4;
    /// Scroll node to make it visible.
    SHOW_ON_SCREEN = 5;
};

/// Represents a role of an element on a UI.
enum Role {
    /// Role used to represent elements which role is not currently supported.
    UNKNOWN = 1;
    /// Something on screen that can be clicked/activated, that has a single function.
    BUTTON = 2;
    /// Header text, e.g. something tagged <h1> in HTML.
    HEADER = 3;
    /// An image or graphic.
    IMAGE = 4;
    /// A field containing text that is not a header.
    TEXT_FIELD = 5;
};

/// An attribute is an essential property to describe an element. Unlike states, attributes do not
/// change over the life of an element.
/// Example: A button with a label attribute 'ok' should never change to 'cancel', as this is not
/// the same element.
table Attributes {
    /// The primary label for an element. If longer than MAX_LABEL_SIZE the client is responsible
    /// for truncating the label.
    1: string:MAX_LABEL_SIZE label;

    /// The secondary label for an element. If longer than MAX_LABEL_SIZE the client is responsible
    /// for truncating the label.
    2: string:MAX_LABEL_SIZE secondary_label;

    /// A description of what the secondary action on a node (equivalent to long press or right click) should do.
    3: string:MAX_LABEL_SIZE secondary_action_description;
};

/// Represents the state of a UI checkbox.
enum CheckedState {
    /// Used when no data is entered or the element is not a check box.
    NONE = 1;
    /// Checked
    CHECKED = 2;
    /// Unchecked
    UNCHECKED = 3;
    /// Indeterminate state
    MIXED = 4;
};

/// A state is a dynamic property of an element that may change in response to
/// user action or automated processes. Thus, they are different from attributes
/// in an important point, which is frequency of change.
table States {
    /// DEPRECATED
    1: bool checked;

    /// State of a checkbox.
    2: CheckedState checked_state;

    /// Whether the element is currently selected.
    3: bool selected;

    /// Whether the element is currently hidden or marked invisible by the framework.
    4: bool hidden;

    /// The user-entered value of the element, if applicable. If longer than MAX_VALUE_SIZE the
    /// client is responsible for truncating.
    5: string:MAX_VALUE_SIZE value;
};

/// The Node represents a semantic element on an interface. This may
/// be a button, a text field, a checkbox or any element that has a relevant
/// semantic meaning so that assistive technology can understand the current UI.
table Node {
    /// Unique ID that represents a node in a particular UI.
    /// Zero is assumed to be the root node and the only entry point to the tree.
    /// No forest is allowed.
    1: uint32 node_id;

    /// Role of this element, e.g. button, checkbox, etc.
    2: Role role;

    /// A table of states of this object, e.g. checked, editable, etc.
    3: States states;

    /// A table of attributes of this node.
    4: Attributes attributes;

    /// A list of actions that can be performed on this node.
    5: vector<Action>:100 actions;

    /// The list of child IDs of this node, in traversal order. Runtimes supplying semantic tree
    /// information are responsible for ensuring the tree does not contain cycles. Each node may
    /// have only one parent.
    6: vector<uint32>:MAX_FAN_OUT child_ids;

    /// Local bounding box of this element.
    7: fuchsia.ui.gfx.BoundingBox location;

    /// Transform from parent coordinate space to local space. 4x4 for compatibility with scenic.
    8: fuchsia.ui.gfx.mat4 transform;
};
