atk/Makefile.am: Stop reading atk.def
[platform/upstream/atk.git] / atk / atkstate.h
1 /* ATK -  Accessibility Toolkit
2  * Copyright 2001 Sun Microsystems Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
21 #error "Only <atk/atk.h> can be included directly."
22 #endif
23
24 #ifndef __ATK_STATE_H__
25 #define __ATK_STATE_H__
26
27 #include <glib-object.h>
28 #include <atk/atkversion.h>
29
30 G_BEGIN_DECLS
31
32 /**
33  *AtkStateType:
34  *@ATK_STATE_INVALID: Indicates an invalid state - probably an error condition.
35  *@ATK_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table
36  *@ATK_STATE_ARMED: Indicates that the object is 'armed', i.e. will be activated by if a pointer button-release event occurs within its bounds.  Buttons often enter this state when a pointer click occurs within their bounds, as a precursor to activation.
37  *@ATK_STATE_BUSY:  Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress.  This state may be used by implementors of Document to indicate that content loading is underway.  It also may indicate other 'pending' conditions; clients may wish to interrogate this object when the ATK_STATE_BUSY flag is removed.
38  *@ATK_STATE_CHECKED: Indicates this object is currently checked, for instance a checkbox is 'non-empty'.
39  *@ATK_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed)
40  *@ATK_STATE_EDITABLE: Indicates the user can change the contents of this object
41  *@ATK_STATE_ENABLED:   Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. See also: ATK_STATE_SENSITIVE
42  *@ATK_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children
43  *@ATK_STATE_EXPANDED: Indicates this object its expanded - see ATK_STATE_EXPANDABLE above
44  *@ATK_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus
45  *@ATK_STATE_FOCUSED: Indicates this object currently has the keyboard focus
46  *@ATK_STATE_HORIZONTAL: Indicates the orientation of this object is horizontal; used, for instance, by objects of ATK_ROLE_SCROLL_BAR.  For objects where vertical/horizontal orientation is especially meaningful.
47  *@ATK_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon
48  *@ATK_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window
49  *@ATK_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text
50  *@ATK_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections.
51  *@ATK_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region.
52  *@ATK_STATE_PRESSED: Indicates this object is currently pressed; c.f. ATK_STATE_ARMED
53  *@ATK_STATE_RESIZABLE: Indicates the size of this object is not fixed
54  *@ATK_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected
55  *@ATK_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected
56  *@ATK_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. 
57  * STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls,
58  * but may be found in the absence of STATE_ENABLED if the current visible state of the 
59  * control is "disconnected" from the application state.  In such cases, direct user interaction
60  * can often result in the object gaining STATE_SENSITIVE, for instance if a user makes 
61  * an explicit selection using an object whose current state is ambiguous or undefined.
62  * @see STATE_ENABLED, STATE_INDETERMINATE.
63  *@ATK_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, 
64  * are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose
65  * between this object and the top of the window stack.
66  *@ATK_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text
67  *@ATK_STATE_STALE: Indicates that the information returned for this object may no longer be
68  * synchronized with the application state.  This is implied if the object has STATE_TRANSIENT,
69  * and can also occur towards the end of the object peer's lifecycle. It can also be used to indicate that 
70  * the index associated with this object has changed since the user accessed the object (in lieu of
71  * "index-in-parent-changed" events).
72  *@ATK_STATE_TRANSIENT: Indicates this object is transient, i.e. a snapshot which may not emit events when its
73  * state changes.  Data from objects with ATK_STATE_TRANSIENT should not be cached, since there may be no
74  * notification given when the cached data becomes obsolete.
75  *@ATK_STATE_VERTICAL: Indicates the orientation of this object is vertical
76  *@ATK_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user.
77  * @note: STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only
78  * that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the 
79  * field of view, or having an ancestor container that has not yet made visible.
80  * A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING.
81  * The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying 
82  * that an object is 'hidden'.  See also STATE_TRUNCATED, which applies if a VISIBLE and SHOWING object
83  * lies within a viewport which means that its contents are clipped, e.g. a truncated spreadsheet cell or
84  * an image within a scrolling viewport.  Mostly useful for screen-review and magnification algorithms.
85  *@ATK_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event
86  * is sent when children become 'active' (i.e. are selected or navigated to onscreen).
87  * Used to prevent need to enumerate all children in very large containers, like tables.
88  * The presence of STATE_MANAGES_DESCENDANTS is an indication to the client.
89  * that the children should not, and need not, be enumerated by the client.
90  * Objects implementing this state are expected to provide relevant state
91  * notifications to listening clients, for instance notifications of visibility
92  * changes and activation of their contained child objects, without the client 
93  * having previously requested references to those children.
94  *@ATK_STATE_INDETERMINATE: Indicates that a check box is in a state other than checked or not checked.
95  * This usually means that the boolean value reflected or 
96  * controlled by the object does not apply consistently to the entire current context.
97  * For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE
98  * if the currently selected text contains a mixture of weight attributes.  
99  * In many cases interacting with a STATE_INDETERMINATE object will cause 
100  * the context's corresponding boolean attribute to be homogenized, whereupon the object
101  * will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired.
102  *@ATK_STATE_TRUNCATED: Indicates that an object is truncated, e.g. a text value in a speradsheet cell.
103  *@ATK_STATE_REQUIRED: Indicates that explicit user interaction with an object is required by the user interface, e.g. a required field in a "web-form" interface.
104  *@ATK_STATE_INVALID_ENTRY: Indicates that the object has encountered an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input.
105  *@ATK_STATE_SUPPORTS_AUTOCOMPLETION:  Indicates that the object in question implements some form of ¨typeahead¨ or 
106  * pre-selection behavior whereby entering the first character of one or more sub-elements
107  * causes those elements to scroll into view or become selected.  Subsequent character input
108  * may narrow the selection further as long as one or more sub-elements match the string.
109  * This state is normally only useful and encountered on objects that implement Selection.
110  * In some cases the typeahead behavior may result in full or partial ¨completion¨ of 
111  * the data in the input field, in which case these input events may trigger text-changed
112  * events from the AtkText interface.  This state supplants @ATK_ROLE_AUTOCOMPLETE.
113  *@ATK_STATE_SELECTABLE_TEXT:Indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from @ATK_STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations.
114  *@ATK_STATE_DEFAULT: Indicates that the object is the "default" active component, i.e. the object which is activated by an end-user press of the "Enter" or "Return" key.  Typically a "close" or "submit" button.
115  *@ATK_STATE_ANIMATED: Indicates that the object changes its appearance dynamically as an inherent part of its presentation.  This state may come and go if an object is only temporarily animated on the way to a 'final' onscreen presentation.
116  * @note some applications, notably content viewers, may not be able to detect
117  * all kinds of animated content.  Therefore the absence of this state should not
118  * be taken as definitive evidence that the object's visual representation is
119  * static; this state is advisory.
120  *@ATK_STATE_VISITED: Indicates that the object (typically a hyperlink) has already been 'activated', and/or its backing data has already been downloaded, rendered, or otherwise "visited".
121  *@ATK_STATE_CHECKABLE: Indicates this object has the potential to be
122  *  checked, such as a checkbox or toggle-able table cell. @Since:
123  *  ATK-2.12
124  *@ATK_STATE_HAS_POPUP: Indicates that the object has a popup context
125  * menu or sub-level menu which may or may not be showing. This means
126  * that activation renders conditional content.  Note that ordinary
127  * tooltips are not considered popups in this context. @Since: ATK-2.12
128  *@ATK_STATE_LAST_DEFINED: Not a valid state, used for finding end of enumeration
129  *
130  *The possible types of states of an object
131  **/
132 typedef enum
133 {
134   ATK_STATE_INVALID,
135   ATK_STATE_ACTIVE,
136   ATK_STATE_ARMED,
137   ATK_STATE_BUSY,
138   ATK_STATE_CHECKED,
139   ATK_STATE_DEFUNCT,
140   ATK_STATE_EDITABLE,
141   ATK_STATE_ENABLED,
142   ATK_STATE_EXPANDABLE,
143   ATK_STATE_EXPANDED,
144   ATK_STATE_FOCUSABLE,
145   ATK_STATE_FOCUSED,
146   ATK_STATE_HORIZONTAL,
147   ATK_STATE_ICONIFIED,
148   ATK_STATE_MODAL,
149   ATK_STATE_MULTI_LINE,
150   ATK_STATE_MULTISELECTABLE,
151   ATK_STATE_OPAQUE,
152   ATK_STATE_PRESSED,
153   ATK_STATE_RESIZABLE,
154   ATK_STATE_SELECTABLE,
155   ATK_STATE_SELECTED,
156   ATK_STATE_SENSITIVE,
157   ATK_STATE_SHOWING,
158   ATK_STATE_SINGLE_LINE,
159   ATK_STATE_STALE,
160   ATK_STATE_TRANSIENT,
161   ATK_STATE_VERTICAL,
162   ATK_STATE_VISIBLE,
163   ATK_STATE_MANAGES_DESCENDANTS,
164   ATK_STATE_INDETERMINATE,
165   ATK_STATE_TRUNCATED,
166   ATK_STATE_REQUIRED,
167   ATK_STATE_INVALID_ENTRY,
168   ATK_STATE_SUPPORTS_AUTOCOMPLETION,
169   ATK_STATE_SELECTABLE_TEXT,
170   ATK_STATE_DEFAULT,
171   ATK_STATE_ANIMATED,
172   ATK_STATE_VISITED,
173   ATK_STATE_CHECKABLE,
174   ATK_STATE_HAS_POPUP,
175   ATK_STATE_LAST_DEFINED
176 } AtkStateType;
177
178 typedef guint64      AtkState;
179
180 ATK_AVAILABLE_IN_ALL
181 AtkStateType atk_state_type_register            (const gchar *name);
182
183 ATK_AVAILABLE_IN_ALL
184 const gchar*          atk_state_type_get_name   (AtkStateType type);
185 ATK_AVAILABLE_IN_ALL
186 AtkStateType          atk_state_type_for_name   (const gchar  *name);
187
188 G_END_DECLS
189
190 #endif /* __ATK_STATE_H__ */