Expand description
Accessibility service, events and properties.
The accessibility API helps external tools to query the state of a widget and issue programmatic commands to it.
This API is mainly used by accessibility assistants like NVDA to narrate and operate the current screen, but
usage is not limited to accessibility, the access provided to widgets also enables external automation tools and
internal operations such as programmatically clicking a button.
§Metadata
Metadata is collected on demand during info build, there is a small performance impact to this so the access builder is only available after accessibility was requested at least once for the window.
use zng::prelude_wgt::*;
match_node_leaf(|op| match op {
UiNodeOp::Info { info } => {
if let Some(mut a) = info.access() {
// accessibility requested for this window
a.set_label("label");
}
}
_ => {}
})You can also enables access info programmatically using WINDOW.enable_access(), if the view-process did not
request accessibility the window still skips sending the access tree, so the performance impact is minimal.
use zng::prelude::*;
WINDOW.enable_access();
Window! {
child = Button! {
id = "btn-1";
child = Text!("Button 1");
};
widget::on_info_init = hn!(|_| {
let btn_info = WINDOW.info().get("btn-1").unwrap().access().unwrap();
let txt_info = btn_info.info().children().next().unwrap().access().unwrap();
assert_eq!(None, btn_info.label());
assert!(btn_info.labelled_by_child());
assert_eq!(Some(Txt::from("Button 1")), txt_info.label());
});
}When accessibility info is build you it can be accessed using WidgetInfo::access. Note that this is a low level
access info, provided as it was set by the widgets, in the example above the label value is only found on the text widget,
accessibility tools will use the text label for the button.
§Properties
Properties of this module only define metadata that indicate that the widget implements a certain UI pattern, by setting a property you must make sure that the widget actually implements said pattern, for this reason most of the accessibility definitions are provided by the widget implementations.
In the example below a TextInput! widget instance changes its role to AccessRole::SearchBox, the default
role is set by the widget itself to AccessRole::TextInput, this usage of the widget has a more specific role
so it can be changed, in this case it is up to the app developer to actually implement the search.
use zng::access::{AccessRole, access_role};
use zng::prelude::*;
let search_txt = var(Txt::from(""));
TextInput! {
access_role = AccessRole::SearchBox;
placeholder_txt = "search";
txt = search_txt;
}§Service & Events
The ACCESS service provides methods that control widgets by notifying accessibility events. Access events
are handled by widgets even when accessibility is disabled.
In the example below the button shows and hides the tooltip of a different widget using ACCESS.show_tooltip
and ACCESS.hide_tooltip.
use zng::prelude::*;
let mut show_tooltip = false;
Window! {
child_align = Align::CENTER;
child = Stack!(
top_to_bottom,
50,
ui_vec![
Button! {
on_click = hn!(|_| {
use zng::access::ACCESS;
show_tooltip = !show_tooltip;
if show_tooltip {
ACCESS.show_tooltip(WINDOW.id(), "tooltip-anchor");
} else {
ACCESS.hide_tooltip(WINDOW.id(), "tooltip-anchor");
}
});
child = Text!("Toggle Tooltip");
},
Text! {
id = "tooltip-anchor";
txt = "tooltip anchor";
tooltip = Tip!(Text!("Tooltip"));
}
]
);
}§Full API
See zng_app::access and zng_wgt_access for the full API.
Structs§
- ACCESS
- Accessibility service.
- Access
Click Args - Arguments for the
ACCESS_CLICK_EVENT. - Access
Expander Args - Arguments for the
ACCESS_EXPANDER_EVENT. - Access
Increment Args - Arguments for the
ACCESS_INCREMENT_EVENT. - Access
Inited Args - Arguments for the
ACCESS_INITED_EVENT. - Access
Number Args - Arguments for the
ACCESS_NUMBER_EVENT. - Access
Scroll Args - Arguments for the
ACCESS_SCROLL_EVENT. - Access
Selection Args - Arguments for the
ACCESS_SELECTION_EVENT. - Access
Text Args - Arguments for the
ACCESS_TEXT_EVENT. - Access
Tool TipArgs - Arguments for the
ACCESS_TOOLTIP_EVENT. - Auto
Complete - Defines how inputting text could trigger display of one or more predictions of the user’s intended value.
- Invalid
- Defines the kind of invalid data error of a widget.
Enums§
- Access
CmdName - Accessibility command without associated data.
- Access
Role - Accessibility role of a node in the accessibility tree.
- Current
Kind - Kind of current item a widget represents.
- Live
Indicator - Defines how a live update is communicated to the user.
- Orientation
- Widget orientation.
- Popup
- Popup type.
- Scroll
Cmd - Accessibility scroll command.
- Sort
Direction - Sort direction.
Statics§
- ACCESS_
CLICK_ EVENT - Run the primary or context click action.
- ACCESS_
EXPANDER_ EVENT - Expand or collapse the widget content.
- ACCESS_
INCREMENT_ EVENT - Increment or decrement the widget value by steps.
- ACCESS_
INITED_ EVENT - Accessibility info is now required for the window.
- ACCESS_
NUMBER_ EVENT - Replace the number value.
- ACCESS_
SCROLL_ EVENT - Run a scroll command.
- ACCESS_
SELECTION_ EVENT - Select text.
- ACCESS_
TEXT_ EVENT - Replace the text content.
- ACCESS_
TOOLTIP_ EVENT - Show or hide the widget’s tooltip.
Functions§
- access_
commands PAppend supported access commands.- access_
role PSets the widget kind for accessibility services.- accessible
PDefines if the widget and descendants can be present in the accessibility info tree.- active_
descendant PIdentifies the currently active widget when focus is on a composite widget.- auto_
complete PSet how input text triggers display of one or more predictions of the user’s intended value for aComboBox,SearchBox, orTextInput.- checked
PIf the widget is checked (Some(true)), unchecked (Some(false)), or if the checked status is indeterminate (None).- col_
count PSets the total number of columns in aTable,Grid, orTreeGridwhen not all columns are present in tree.- col_
index PSets the widget’s column index in the parent table or grid.- col_
span PSets the number of columns spanned by the widget in the parent table or grid.- controls
PAppend widgets whose contents or presence are controlled by this widget to the controlled list.- current
PIndicates that the widget represents the current item of a kind.- described_
by PAppend widgets that describes this widget to the descriptors list.- details
PAppend widgets that provide additional information related to this widget to the details list.- error_
message PIndicates that the widget is an error message for theinvalid_wgt.- expanded
PIndicate that the widget toggles the visibility of related widgets.- flows_
to PAppend options for next widget to be read by screen readers.- invalid
PIndicates that the widget’s data is invalid with optional kinds of errors.- item_
count PSets the number of items in the current set of list items or tree items when not all items in the set are present in the tree.- item_
index PSets the widget’s number or position in the current set of list items or tree items when not all items are present in the tree.- label
PSets a custom name for the widget in accessibility info.- labelled_
by PAppend widgets that provide additional information related to this widget.- labelled_
by_ child PUses the accessible children aslabelled_by.- level
PSets the hierarchical level of the widget within a parent scope.- live
PIndicate that the widget can change, how the change can be announced, ifatomicthe entire widget must be re-read, ifbusythe screen reader must wait until the change completes.- modal
PSets if the widget is modal when displayed.- multi_
selectable PIndicates that the user may select more than one item from the current selectable descendants.- on_
access_ click PAccess requested a click.- on_
access_ expander PAccess requested to expand or collapse the widget content.- on_
access_ increment PAccess requested to increment or decrement the widget value by steps.- on_
access_ number PAccess requested a number input.- on_
access_ scroll PAccess requested a scroll command.- on_
access_ selection PAccess requested a text selection.- on_
access_ text PAccess requested a text input/replace.- on_
access_ tooltip PAccess requested to show or hide the widget’s tooltip.- on_
pre_ access_ click PPreviewon_access_clickevent.- on_
pre_ access_ expander PPreviewon_access_expanderevent.- on_
pre_ access_ increment PPreviewon_access_incrementevent.- on_
pre_ access_ number PPreviewon_access_numberevent.- on_
pre_ access_ scroll PPreviewon_access_scrollevent.- on_
pre_ access_ selection PPreviewon_access_selectionevent.- on_
pre_ access_ text PPreviewon_access_textevent.- on_
pre_ access_ tooltip PPreviewon_access_tooltipevent.- orientation
PIndicates whether the widget’s orientation is horizontal, vertical, or unknown/ambiguous.- owns
PAppendownedwidgets that are children of this widget, but are not already children in the info tree.- placeholder
PShort hint (a word or short phrase) intended to help the user with data entry when a form control has no value.- popup
PIndicates the availability and type of interactive popup widget.- read_
only PIndicates that the widget is not editable, but is otherwise operable.- required
PIndicates that user input is required on the widget before a form may be submitted.- row_
count PSets the total number of rows in aTable,Grid, orTreeGridwhen not all rows are present in the tree.- row_
index PSets the widget’s row index in the parent table or grid.- row_
span PSets the number of rows spanned by the widget in the parent table or grid.- scroll_
horizontal PSets the amount scrolled horizontally if allowed.- scroll_
vertical PSets the amount scrolled vertically if allowed.- selected
PIndicates that the widget is selected.- sort
PSets the sort direction for the table or grid items.- value
PSet the current value.- value_
max PSet the maximum value (inclusive).- value_
min PSet the minimum value (inclusive).