win_wrap/uia/pattern/
toggle.rs1use crate::uia::pattern::{PatternCreator, PatternError};
15use std::fmt::{Debug, Formatter};
16use windows::Win32::UI::Accessibility::{
17 IUIAutomationTogglePattern, ToggleState_Indeterminate, ToggleState_Off, ToggleState_On,
18 UIA_TogglePatternId, UIA_PATTERN_ID,
19};
20
21pub struct UiAutomationTogglePattern(IUIAutomationTogglePattern);
25
26impl TryFrom<IUIAutomationTogglePattern> for UiAutomationTogglePattern {
27 type Error = PatternError;
28
29 fn try_from(value: IUIAutomationTogglePattern) -> Result<Self, Self::Error> {
30 Ok(Self(value))
31 }
32}
33
34impl PatternCreator<IUIAutomationTogglePattern> for UiAutomationTogglePattern {
35 const PATTERN: UIA_PATTERN_ID = UIA_TogglePatternId;
36}
37
38impl UiAutomationTogglePattern {
40 #[allow(non_upper_case_globals)]
44 pub fn get_toggle_state(&self) -> ToggleState {
45 let state = unsafe { self.0.CurrentToggleState() };
46 if state.is_err() {
47 return ToggleState::Indeterminate;
48 }
49 match state.unwrap() {
50 ToggleState_On => ToggleState::On,
51 ToggleState_Off => ToggleState::Off,
52 ToggleState_Indeterminate => ToggleState::Indeterminate,
53 _ => ToggleState::Indeterminate,
54 }
55 }
56
57 pub fn toggle(&self) {
62 unsafe { self.0.Toggle().unwrap_or(()) }
63 }
64}
65
66impl Debug for UiAutomationTogglePattern {
67 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
68 write!(f, "UiAutomationTogglePattern()")
69 }
70}
71
72pub enum ToggleState {
73 On,
74 Off,
75 Indeterminate,
76}