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_base_props(
    widget: &dyn Widget,
    property_name: &str,
) -> Result<CapabilityValue, CapabilityAccessError> {
    match widget.kind() {
        WidgetKind::Button => match property_name {
        "text" => {
        if let Some(button) = widget_as::<Button>(widget) {
        Ok(CapabilityValue::String(button.text().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "pressed" => {
        if let Some(button) = widget_as::<Button>(widget) {
        Ok(CapabilityValue::Bool(button.is_pressed()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "default" => {
        if let Some(button) = widget_as::<Button>(widget) {
        Ok(CapabilityValue::Bool(button.is_default()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "enabled" => {
        if let Some(button) = widget_as::<Button>(widget) {
        Ok(CapabilityValue::Bool(button.is_enabled()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "tooltip" => {
        if let Some(button) = widget_as::<Button>(widget) {
        Ok(CapabilityValue::String(button.tooltip().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::Label => match property_name {
        "text" => {
        if let Some(label) = widget_as::<Label>(widget) {
        Ok(CapabilityValue::String(label.text().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "alignment" => {
        if let Some(label) = widget_as::<Label>(widget) {
        Ok(CapabilityValue::String(alignment_to_str(label.alignment()).to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::CheckBox => match property_name {
        "text" => {
        if let Some(cb) = widget_as::<CheckBox>(widget) {
        Ok(CapabilityValue::String(cb.text().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "state" => {
        if let Some(cb) = widget_as::<CheckBox>(widget) {
        Ok(CapabilityValue::String(check_state_to_str(cb.state()).to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "checked" => {
        if let Some(cb) = widget_as::<CheckBox>(widget) {
        Ok(CapabilityValue::Bool(cb.is_checked()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "tristate_enabled" => {
        if let Some(cb) = widget_as::<CheckBox>(widget) {
        Ok(CapabilityValue::Bool(cb.is_tristate_enabled()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::RadioButton => match property_name {
        "text" => {
        if let Some(rb) = widget_as::<RadioButton>(widget) {
        Ok(CapabilityValue::String(rb.text().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "checked" => {
        if let Some(rb) = widget_as::<RadioButton>(widget) {
        Ok(CapabilityValue::Bool(rb.is_checked()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "group_id" => {
        if let Some(rb) = widget_as::<RadioButton>(widget) {
        match rb.group_id() {
        Some(id) => Ok(CapabilityValue::String(id.to_string())),
        None => Ok(CapabilityValue::Null),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::Window => match property_name {
        "title" => {
        if let Some(win) = widget_as::<Window>(widget) {
        Ok(CapabilityValue::String(win.title().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "title_bar_height" => {
        if let Some(win) = widget_as::<Window>(widget) {
        Ok(CapabilityValue::UInt(win.title_bar_height() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "close_button_size" => {
        if let Some(win) = widget_as::<Window>(widget) {
        Ok(CapabilityValue::UInt(win.close_button_size() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "button_spacing" => {
        if let Some(win) = widget_as::<Window>(widget) {
        Ok(CapabilityValue::UInt(win.button_spacing() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::GroupBox => match property_name {
        "title" => {
        if let Some(gb) = widget_as::<GroupBox>(widget) {
        Ok(CapabilityValue::String(gb.title().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "alignment" => {
        if let Some(gb) = widget_as::<GroupBox>(widget) {
        Ok(CapabilityValue::String(alignment_to_str(gb.alignment()).to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "checkable" => {
        if let Some(gb) = widget_as::<GroupBox>(widget) {
        Ok(CapabilityValue::Bool(gb.is_checkable()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "checked" => {
        if let Some(gb) = widget_as::<GroupBox>(widget) {
        Ok(CapabilityValue::Bool(gb.is_checked()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::Panel | WidgetKind::Frame => match property_name {
        "segment_count" => {
        if let Some(bc) = widget_as::<Breadcrumb>(widget) {
        Ok(CapabilityValue::UInt(bc.segments().len() as u64))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "selected_index" => {
        if let Some(bc) = widget_as::<Breadcrumb>(widget) {
        match bc.selected_index() {
        Some(idx) => Ok(CapabilityValue::UInt(idx as u64)),
        None => Ok(CapabilityValue::Null),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::ToggleButton => match property_name {
        "text" => {
        if let Some(tb) = widget_as::<ToggleButton>(widget) {
        Ok(CapabilityValue::String(tb.text().to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "checked" => {
        if let Some(tb) = widget_as::<ToggleButton>(widget) {
        Ok(CapabilityValue::Bool(tb.is_checked()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        "state" => {
        if let Some(tb) = widget_as::<ToggleButton>(widget) {
        let s = match tb.state() {
        ToggleButtonState::Normal => "normal",
        ToggleButtonState::Checked => "checked",
        ToggleButtonState::Disabled => "disabled",
        };
        Ok(CapabilityValue::String(s.to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        WidgetKind::Line => match property_name {
        "orientation" => {
        if let Some(w) = widget_as::<Line>(widget) {
        let s = match w.orientation() {
        LineOrientation::Horizontal => "horizontal",
        LineOrientation::Vertical => "vertical",
        };
        Ok(CapabilityValue::String(s.to_string()))
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        },
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
    }
}