1use zng_app::access::*;
2use zng_view_api::access::AccessCmdName;
3use zng_wgt::prelude::*;
4
5event_property! {
6 pub fn on_access_click<on_pre_access_click>(child: impl IntoUiNode, handler: Handler<AccessClickArgs>) -> UiNode {
10 const PRE: bool;
11 let child = EventNodeBuilder::new(ACCESS_CLICK_EVENT).build::<PRE>(child, handler);
12 access_capable(child, AccessCmdName::Click)
13 }
14
15 pub fn on_access_expander<on_pre_access_expander>(child: impl IntoUiNode, handler: Handler<AccessExpanderArgs>) -> UiNode {
17 const PRE: bool;
18 let child = EventNodeBuilder::new(ACCESS_EXPANDER_EVENT).build::<PRE>(child, handler);
19 access_capable(child, AccessCmdName::SetExpanded)
20 }
21
22 pub fn on_access_increment<on_pre_access_increment>(child: impl IntoUiNode, handler: Handler<AccessIncrementArgs>) -> UiNode {
24 const PRE: bool;
25 let child = EventNodeBuilder::new(ACCESS_INCREMENT_EVENT).build::<PRE>(child, handler);
26 access_capable(child, AccessCmdName::Increment)
27 }
28
29 pub fn on_access_tooltip<on_pre_access_tooltip>(child: impl IntoUiNode, handler: Handler<AccessToolTipArgs>) -> UiNode {
33 const PRE: bool;
34 let child = EventNodeBuilder::new(ACCESS_TOOLTIP_EVENT).build::<PRE>(child, handler);
35 access_capable(child, AccessCmdName::SetToolTipVis)
36 }
37
38 pub fn on_access_scroll<on_pre_access_scroll>(child: impl IntoUiNode, handler: Handler<AccessScrollArgs>) -> UiNode {
42 const PRE: bool;
43 let child = EventNodeBuilder::new(ACCESS_SCROLL_EVENT).build::<PRE>(child, handler);
44 access_capable(child, AccessCmdName::Scroll)
45 }
46
47 pub fn on_access_text<on_pre_access_text>(child: impl IntoUiNode, handler: Handler<AccessTextArgs>) -> UiNode {
51 const PRE: bool;
52 let child = EventNodeBuilder::new(ACCESS_TEXT_EVENT).build::<PRE>(child, handler);
53 match_node(child, move |_, op| {
54 if let UiNodeOp::Info { info } = op
55 && let Some(mut access) = info.access()
56 {
57 access.push_command(AccessCmdName::SetString);
58 access.push_command(AccessCmdName::ReplaceSelectedText);
59 }
60 })
61 }
62
63 pub fn on_access_number<on_pre_access_number>(child: impl IntoUiNode, handler: Handler<AccessNumberArgs>) -> UiNode {
65 const PRE: bool;
66 let child = EventNodeBuilder::new(ACCESS_NUMBER_EVENT).build::<PRE>(child, handler);
67 access_capable(child, AccessCmdName::SetNumber)
68 }
69
70 pub fn on_access_selection<on_pre_access_selection>(child: impl IntoUiNode, handler: Handler<AccessSelectionArgs>) -> UiNode {
74 const PRE: bool;
75 let child = EventNodeBuilder::new(ACCESS_SELECTION_EVENT).build::<PRE>(child, handler);
76 access_capable(child, AccessCmdName::SelectText)
77 }
78}
79
80fn access_capable(child: impl IntoUiNode, cmd: AccessCmdName) -> UiNode {
81 match_node(child, move |_, op| {
82 if let UiNodeOp::Info { info } = op
83 && let Some(mut access) = info.access()
84 {
85 access.push_command(cmd)
86 }
87 })
88}