winio-ui-android 0.1.0

Android backend for winio.
use inherit_methods_macro::inherit_methods;
use winio_handle::{AsContainer, impl_as_widget};
use winio_primitive::{Point, Size};

use crate::{
    BaseWidget, Result, current_activity, java::material::ProgressBar as AProgressBar, vm_exec,
};

#[derive(Debug)]
pub struct Progress {
    inner: BaseWidget<AProgressBar<'static>>,
}

#[inherit_methods(from = "self.inner")]
impl Progress {
    pub fn new(parent: impl AsContainer) -> Result<Self> {
        vm_exec(|env| {
            let act = current_activity(env)?;
            let widget = AProgressBar::new(env, act)?;
            let inner = BaseWidget::new_with_env(env, parent.as_container(), widget)?;
            inner.set_indeterminate(env, false)?;
            Ok(Self { inner })
        })
    }

    pub fn is_visible(&self) -> Result<bool>;

    pub fn set_visible(&mut self, visible: bool) -> Result<()>;

    pub fn is_enabled(&self) -> Result<bool>;

    pub fn set_enabled(&mut self, enabled: bool) -> Result<()>;

    pub fn loc(&self) -> Result<Point>;

    pub fn set_loc(&mut self, p: Point) -> Result<()>;

    pub fn size(&self) -> Result<Size>;

    pub fn set_size(&mut self, v: Size) -> Result<()>;

    pub fn preferred_size(&self) -> Result<Size>;

    pub fn tooltip(&self) -> Result<String>;

    pub fn set_tooltip(&mut self, s: impl AsRef<str>) -> Result<()>;

    pub fn minimum(&self) -> Result<usize> {
        vm_exec(|env| Ok(self.inner.get_min(env)? as _))
    }

    pub fn set_minimum(&mut self, minimum: usize) -> Result<()> {
        vm_exec(|env| {
            self.inner.set_min(env, minimum as i32)?;
            Ok(())
        })
    }

    pub fn maximum(&self) -> Result<usize> {
        vm_exec(|env| Ok(self.inner.get_max(env)? as _))
    }

    pub fn set_maximum(&mut self, maximum: usize) -> Result<()> {
        vm_exec(|env| {
            self.inner.set_max(env, maximum as i32)?;
            Ok(())
        })
    }

    pub fn pos(&self) -> Result<usize> {
        vm_exec(|env| Ok(self.inner.get_progress(env)? as _))
    }

    pub fn set_pos(&mut self, pos: usize) -> Result<()> {
        vm_exec(|env| {
            self.inner.set_progress(env, pos as i32)?;
            Ok(())
        })
    }

    pub fn is_indeterminate(&self) -> Result<bool> {
        vm_exec(|env| Ok(self.inner.is_indeterminate(env)?))
    }

    pub fn set_indeterminate(&mut self, indeterminate: bool) -> Result<()> {
        vm_exec(|env| {
            self.inner.set_indeterminate(env, indeterminate)?;
            Ok(())
        })
    }
}

impl_as_widget!(Progress, inner);