rust_widgets 1.0.0

Pure Rust cross-platform native GUI library with hardware-adaptive rendering, 60+ widgets, touch/gesture support, i18n, and SVG-pipeline-accurate output
#[cfg(not(feature = "mini"))]
pub fn read_advanced_props(
    widget: &dyn Widget,
    property_name: &str,
) -> Result<CapabilityValue, CapabilityAccessError> {
    match widget.kind() {
        WidgetKind::TabBar => match property_name {
        "tab_count" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        Ok(CapabilityValue::UInt(tb.tab_count() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "current_index" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        match tb.current_index() {
        Some(idx) => Ok(CapabilityValue::UInt(idx as u64)),
        None => Ok(CapabilityValue::Null),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "closable" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        Ok(CapabilityValue::Bool(tb.closable()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "movable" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        Ok(CapabilityValue::Bool(tb.movable()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "tab_min_width" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        Ok(CapabilityValue::UInt(tb.tab_min_width() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "tab_max_width" => {
        if let Some(tb) = widget_as::<TabBar>(widget) {
        Ok(CapabilityValue::UInt(tb.tab_max_width() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::Calendar => match property_name {
        "selected_date" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::String(naive_date_to_string(cal.selected_date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "minimum_date" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::String(naive_date_to_string(cal.minimum_date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "maximum_date" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::String(naive_date_to_string(cal.maximum_date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "first_day_of_week" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::String(weekday_to_str(cal.first_day_of_week()).to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "grid_visible" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::Bool(cal.is_grid_visible()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "navigation_bar_visible" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::Bool(cal.is_navigation_bar_visible()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "horizontal_header_visible" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::Bool(cal.is_horizontal_header_visible()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "vertical_header_visible" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::Bool(cal.is_vertical_header_visible()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "date_format" => {
        if let Some(cal) = widget_as::<Calendar>(widget) {
        Ok(CapabilityValue::String(cal.date_format().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::DatePicker => match property_name {
        "date" => {
        if let Some(de) = widget_as::<DateEdit>(widget) {
        Ok(CapabilityValue::String(date_to_string(de.date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "minimum_date" => {
        if let Some(de) = widget_as::<DateEdit>(widget) {
        Ok(CapabilityValue::String(date_to_string(de.minimum_date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "maximum_date" => {
        if let Some(de) = widget_as::<DateEdit>(widget) {
        Ok(CapabilityValue::String(date_to_string(de.maximum_date())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "display_format" => {
        if let Some(de) = widget_as::<DateEdit>(widget) {
        Ok(CapabilityValue::String(de.display_format().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "calendar_popup" => {
        if let Some(de) = widget_as::<DateEdit>(widget) {
        Ok(CapabilityValue::Bool(de.calendar_popup()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::TimePicker => match property_name {
        "time" => {
        if let Some(te) = widget_as::<TimeEdit>(widget) {
        Ok(CapabilityValue::String(time_to_string(te.time())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "minimum_time" => {
        if let Some(te) = widget_as::<TimeEdit>(widget) {
        Ok(CapabilityValue::String(time_to_string(te.minimum_time())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "maximum_time" => {
        if let Some(te) = widget_as::<TimeEdit>(widget) {
        Ok(CapabilityValue::String(time_to_string(te.maximum_time())))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "display_format" => {
        if let Some(te) = widget_as::<TimeEdit>(widget) {
        Ok(CapabilityValue::String(te.display_format().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::RibbonBar => match property_name {
        "tab_count" => {
        if let Some(rb) = widget_as::<RibbonBar>(widget) {
        Ok(CapabilityValue::UInt(rb.tab_count() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "current_tab" => {
        if let Some(rb) = widget_as::<RibbonBar>(widget) {
        Ok(CapabilityValue::UInt(rb.current_tab() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::PieMenu => match property_name {
        "item_count" => {
        if let Some(pm) = widget_as::<PieMenu>(widget) {
        Ok(CapabilityValue::UInt(pm.item_count() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "radius" => {
        if let Some(pm) = widget_as::<PieMenu>(widget) {
        Ok(CapabilityValue::Float(pm.radius() as f64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "inner_radius" => {
        if let Some(pm) = widget_as::<PieMenu>(widget) {
        Ok(CapabilityValue::Float(pm.inner_radius() as f64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "current_index" => {
        if let Some(pm) = widget_as::<PieMenu>(widget) {
        Ok(CapabilityValue::UInt(pm.current_index() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::DateTimePicker => match property_name {
        "datetime" => {
        if let Some(dte) = widget_as::<DateTimeEdit>(widget) {
        Ok(CapabilityValue::String(dte.datetime().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "display_format" => {
        if let Some(dte) = widget_as::<DateTimeEdit>(widget) {
        Ok(CapabilityValue::String(dte.display_format().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "calendar_popup" => {
        if let Some(dte) = widget_as::<DateTimeEdit>(widget) {
        Ok(CapabilityValue::Bool(dte.calendar_popup()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
    }
}