summaryrefslogtreecommitdiffstats
path: root/native/src/widget/operation.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-08-05 05:15:41 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-08-05 05:15:41 +0200
commit66f7d43dc98df96c8b19cfd2aef6dcdd4187316c (patch)
treea252a9c81359d2f13401380538bd11c0ee6bbc37 /native/src/widget/operation.rs
parent13dd1ca0a83cc95eea52e2106da9dc1ee1f37958 (diff)
downloadiced-66f7d43dc98df96c8b19cfd2aef6dcdd4187316c.tar.gz
iced-66f7d43dc98df96c8b19cfd2aef6dcdd4187316c.tar.bz2
iced-66f7d43dc98df96c8b19cfd2aef6dcdd4187316c.zip
Write missing documentation in `iced_native`
Diffstat (limited to '')
-rw-r--r--native/src/widget/operation.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/native/src/widget/operation.rs b/native/src/widget/operation.rs
index 4a075da9..ef636aa2 100644
--- a/native/src/widget/operation.rs
+++ b/native/src/widget/operation.rs
@@ -1,3 +1,4 @@
+//! Query or update internal widget state.
pub mod focusable;
pub mod scrollable;
@@ -6,24 +7,54 @@ pub use scrollable::Scrollable;
use crate::widget::Id;
+use std::fmt;
+
+/// A piece of logic that can traverse the widget tree of an application in
+/// order to query or update some widget state.
pub trait Operation<T> {
+ /// Operates on a widget that contains other widgets.
+ ///
+ /// The `operate_on_children` function can be called to return control to
+ /// the widget tree and keep traversing it.
fn container(
&mut self,
id: Option<&Id>,
operate_on_children: &mut dyn FnMut(&mut dyn Operation<T>),
);
+ /// Operates on a widget that can be focused.
fn focusable(&mut self, _state: &mut dyn Focusable, _id: Option<&Id>) {}
+ /// Operates on a widget that can be scrolled.
fn scrollable(&mut self, _state: &mut dyn Scrollable, _id: Option<&Id>) {}
+ /// Finishes the [`Operation`] and returns its [`Outcome`].
fn finish(&self) -> Outcome<T> {
Outcome::None
}
}
+/// The result of an [`Operation`].
pub enum Outcome<T> {
+ /// The [`Operation`] produced no result.
None,
+
+ /// The [`Operation`] produced some result.
Some(T),
+
+ /// The [`Operation`] needs to be followed by another [`Operation`].
Chain(Box<dyn Operation<T>>),
}
+
+impl<T> fmt::Debug for Outcome<T>
+where
+ T: fmt::Debug,
+{
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ Self::None => write!(f, "Outcome::None"),
+ Self::Some(output) => write!(f, "Outcome::Some({:?})", output),
+ Self::Chain(_) => write!(f, "Outcome::Chain(...)"),
+ }
+ }
+}