use crate::uia::pattern::{PatternCreator, PatternError};
use windows::Win32::UI::Accessibility::{
IUIAutomationRangeValuePattern, UIA_RangeValuePatternId, UIA_PATTERN_ID,
};
pub struct UiAutomationRangeValuePattern(IUIAutomationRangeValuePattern);
impl TryFrom<IUIAutomationRangeValuePattern> for UiAutomationRangeValuePattern {
type Error = PatternError;
fn try_from(value: IUIAutomationRangeValuePattern) -> Result<Self, Self::Error> {
Ok(Self(value))
}
}
impl PatternCreator<IUIAutomationRangeValuePattern> for UiAutomationRangeValuePattern {
const PATTERN: UIA_PATTERN_ID = UIA_RangeValuePatternId;
}
impl UiAutomationRangeValuePattern {
pub fn is_read_only(&self) -> bool {
unsafe { self.0.CurrentIsReadOnly().unwrap_or(Default::default()) }.as_bool()
}
pub fn get_large_change(&self) -> f64 {
unsafe { self.0.CurrentLargeChange().unwrap_or(0f64) }
}
pub fn get_maximum(&self) -> f64 {
unsafe { self.0.CurrentMaximum().unwrap_or(0f64) }
}
pub fn get_minimum(&self) -> f64 {
unsafe { self.0.CurrentMinimum().unwrap_or(0f64) }
}
pub fn get_small_change(&self) -> f64 {
unsafe { self.0.CurrentSmallChange().unwrap_or(0f64) }
}
pub fn get_value(&self) -> f64 {
unsafe { self.0.CurrentValue().unwrap_or(0f64) }
}
pub fn set_value(&self, value: f64) -> bool {
unsafe { self.0.SetValue(value) }.is_ok()
}
}