Write missing documentation in iced_native
This commit is contained in:
parent
13dd1ca0a8
commit
66f7d43dc9
8 changed files with 81 additions and 2 deletions
|
|
@ -32,8 +32,8 @@
|
||||||
html_logo_url = "https://raw.githubusercontent.com/iced-rs/iced/9ab6923e943f784985e9ef9ca28b10278297225d/docs/logo.svg"
|
html_logo_url = "https://raw.githubusercontent.com/iced-rs/iced/9ab6923e943f784985e9ef9ca28b10278297225d/docs/logo.svg"
|
||||||
)]
|
)]
|
||||||
#![deny(
|
#![deny(
|
||||||
// missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
// missing_docs,
|
missing_docs,
|
||||||
unused_results,
|
unused_results,
|
||||||
clippy::extra_unused_lifetimes,
|
clippy::extra_unused_lifetimes,
|
||||||
clippy::from_over_into,
|
clippy::from_over_into,
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,17 @@ use crate::widget::Id;
|
||||||
|
|
||||||
use iced_futures::MaybeSend;
|
use iced_futures::MaybeSend;
|
||||||
|
|
||||||
|
/// An operation to be performed on the widget tree.
|
||||||
|
#[allow(missing_debug_implementations)]
|
||||||
pub struct Action<T>(Box<dyn Operation<T>>);
|
pub struct Action<T>(Box<dyn Operation<T>>);
|
||||||
|
|
||||||
impl<T> Action<T> {
|
impl<T> Action<T> {
|
||||||
|
/// Creates a new [`Action`] with the given [`Operation`].
|
||||||
pub fn new(operation: impl Operation<T> + 'static) -> Self {
|
pub fn new(operation: impl Operation<T> + 'static) -> Self {
|
||||||
Self(Box::new(operation))
|
Self(Box::new(operation))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Maps the output of an [`Action`] using the given function.
|
||||||
pub fn map<A>(
|
pub fn map<A>(
|
||||||
self,
|
self,
|
||||||
f: impl Fn(T) -> A + 'static + MaybeSend + Sync,
|
f: impl Fn(T) -> A + 'static + MaybeSend + Sync,
|
||||||
|
|
@ -24,11 +28,13 @@ impl<T> Action<T> {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Consumes the [`Action`] and returns the internal [`Operation`].
|
||||||
pub fn into_operation(self) -> Box<dyn Operation<T>> {
|
pub fn into_operation(self) -> Box<dyn Operation<T>> {
|
||||||
self.0
|
self.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(missing_debug_implementations)]
|
||||||
struct Map<A, B> {
|
struct Map<A, B> {
|
||||||
operation: Box<dyn Operation<A>>,
|
operation: Box<dyn Operation<A>>,
|
||||||
f: Box<dyn Fn(A) -> B>,
|
f: Box<dyn Fn(A) -> B>,
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,19 @@ use std::sync::atomic::{self, AtomicUsize};
|
||||||
|
|
||||||
static NEXT_ID: AtomicUsize = AtomicUsize::new(0);
|
static NEXT_ID: AtomicUsize = AtomicUsize::new(0);
|
||||||
|
|
||||||
|
/// The identifier of a generic widget.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct Id(Internal);
|
pub struct Id(Internal);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
|
/// Creates a custom [`Id`].
|
||||||
pub fn new(id: impl Into<borrow::Cow<'static, str>>) -> Self {
|
pub fn new(id: impl Into<borrow::Cow<'static, str>>) -> Self {
|
||||||
Self(Internal::Custom(id.into()))
|
Self(Internal::Custom(id.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a unique [`Id`].
|
||||||
|
///
|
||||||
|
/// This function produces a different [`Id`] every time it is called.
|
||||||
pub fn unique() -> Self {
|
pub fn unique() -> Self {
|
||||||
let id = NEXT_ID.fetch_add(1, atomic::Ordering::Relaxed);
|
let id = NEXT_ID.fetch_add(1, atomic::Ordering::Relaxed);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
//! Query or update internal widget state.
|
||||||
pub mod focusable;
|
pub mod focusable;
|
||||||
pub mod scrollable;
|
pub mod scrollable;
|
||||||
|
|
||||||
|
|
@ -6,24 +7,54 @@ pub use scrollable::Scrollable;
|
||||||
|
|
||||||
use crate::widget::Id;
|
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> {
|
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(
|
fn container(
|
||||||
&mut self,
|
&mut self,
|
||||||
id: Option<&Id>,
|
id: Option<&Id>,
|
||||||
operate_on_children: &mut dyn FnMut(&mut dyn Operation<T>),
|
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>) {}
|
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>) {}
|
fn scrollable(&mut self, _state: &mut dyn Scrollable, _id: Option<&Id>) {}
|
||||||
|
|
||||||
|
/// Finishes the [`Operation`] and returns its [`Outcome`].
|
||||||
fn finish(&self) -> Outcome<T> {
|
fn finish(&self) -> Outcome<T> {
|
||||||
Outcome::None
|
Outcome::None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The result of an [`Operation`].
|
||||||
pub enum Outcome<T> {
|
pub enum Outcome<T> {
|
||||||
|
/// The [`Operation`] produced no result.
|
||||||
None,
|
None,
|
||||||
|
|
||||||
|
/// The [`Operation`] produced some result.
|
||||||
Some(T),
|
Some(T),
|
||||||
|
|
||||||
|
/// The [`Operation`] needs to be followed by another [`Operation`].
|
||||||
Chain(Box<dyn Operation<T>>),
|
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(...)"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,30 @@
|
||||||
|
//! Operate on widgets that can be focused.
|
||||||
use crate::widget::operation::{Operation, Outcome};
|
use crate::widget::operation::{Operation, Outcome};
|
||||||
use crate::widget::Id;
|
use crate::widget::Id;
|
||||||
|
|
||||||
|
/// The internal state of a widget that can be focused.
|
||||||
pub trait Focusable {
|
pub trait Focusable {
|
||||||
|
/// Returns whether the widget is focused or not.
|
||||||
fn is_focused(&self) -> bool;
|
fn is_focused(&self) -> bool;
|
||||||
|
|
||||||
|
/// Focuses the widget.
|
||||||
fn focus(&mut self);
|
fn focus(&mut self);
|
||||||
|
|
||||||
|
/// Unfocuses the widget.
|
||||||
fn unfocus(&mut self);
|
fn unfocus(&mut self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A summary of the focusable widgets present on a widget tree.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
||||||
pub struct Count {
|
pub struct Count {
|
||||||
|
/// The index of the current focused widget, if any.
|
||||||
focused: Option<usize>,
|
focused: Option<usize>,
|
||||||
|
|
||||||
|
/// The total amount of focusable widgets.
|
||||||
total: usize,
|
total: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an [`Operation`] that focuses the widget with the given [`Id`].
|
||||||
pub fn focus<T>(target: Id) -> impl Operation<T> {
|
pub fn focus<T>(target: Id) -> impl Operation<T> {
|
||||||
struct Focus {
|
struct Focus {
|
||||||
target: Id,
|
target: Id,
|
||||||
|
|
@ -42,6 +54,7 @@ pub fn focus<T>(target: Id) -> impl Operation<T> {
|
||||||
Focus { target }
|
Focus { target }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an [`Operation`] that generates a [`Count`].
|
||||||
pub fn count<T, O>(f: fn(Count) -> O) -> impl Operation<T>
|
pub fn count<T, O>(f: fn(Count) -> O) -> impl Operation<T>
|
||||||
where
|
where
|
||||||
O: Operation<T> + 'static,
|
O: Operation<T> + 'static,
|
||||||
|
|
@ -82,6 +95,9 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an [`Operation`] that searches for the current focuses widget, and
|
||||||
|
/// - if found, focuses the previous focusable widget.
|
||||||
|
/// - if not found, focuses the last focusable widget.
|
||||||
pub fn focus_previous<T>() -> impl Operation<T> {
|
pub fn focus_previous<T>() -> impl Operation<T> {
|
||||||
struct FocusPrevious {
|
struct FocusPrevious {
|
||||||
count: Count,
|
count: Count,
|
||||||
|
|
@ -118,6 +134,9 @@ pub fn focus_previous<T>() -> impl Operation<T> {
|
||||||
count(|count| FocusPrevious { count, current: 0 })
|
count(|count| FocusPrevious { count, current: 0 })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an [`Operation`] that searches for the current focuses widget, and
|
||||||
|
/// - if found, focuses the next focusable widget.
|
||||||
|
/// - if not found, focuses the first focusable widget.
|
||||||
pub fn focus_next<T>() -> impl Operation<T> {
|
pub fn focus_next<T>() -> impl Operation<T> {
|
||||||
struct FocusNext {
|
struct FocusNext {
|
||||||
count: Count,
|
count: Count,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
|
//! Operate on widgets that can be scrolled.
|
||||||
use crate::widget::{Id, Operation};
|
use crate::widget::{Id, Operation};
|
||||||
|
|
||||||
|
/// The internal state of a widget that can be scrolled.
|
||||||
pub trait Scrollable {
|
pub trait Scrollable {
|
||||||
|
/// Snaps the scroll of the widget to the given `percentage`.
|
||||||
fn snap_to(&mut self, percentage: f32);
|
fn snap_to(&mut self, percentage: f32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an [`Operation`] that snaps the widget with the given [`Id`] to
|
||||||
|
/// the provided `percentage`.
|
||||||
pub fn snap_to<T>(target: Id, percentage: f32) -> impl Operation<T> {
|
pub fn snap_to<T>(target: Id, percentage: f32) -> impl Operation<T> {
|
||||||
struct SnapTo {
|
struct SnapTo {
|
||||||
target: Id,
|
target: Id,
|
||||||
|
|
|
||||||
|
|
@ -316,19 +316,26 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The identifier of a [`Scrollable`].
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct Id(widget::Id);
|
pub struct Id(widget::Id);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
|
/// Creates a custom [`Id`].
|
||||||
pub fn new(id: impl Into<std::borrow::Cow<'static, str>>) -> Self {
|
pub fn new(id: impl Into<std::borrow::Cow<'static, str>>) -> Self {
|
||||||
Self(widget::Id::new(id))
|
Self(widget::Id::new(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a unique [`Id`].
|
||||||
|
///
|
||||||
|
/// This function produces a different [`Id`] every time it is called.
|
||||||
pub fn unique() -> Self {
|
pub fn unique() -> Self {
|
||||||
Self(widget::Id::unique())
|
Self(widget::Id::unique())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces a [`Command`] that snaps the [`Scrollable`] with the given [`Id`]
|
||||||
|
/// to the provided `percentage`.
|
||||||
pub fn snap_to<Message: 'static>(id: Id, percentage: f32) -> Command<Message> {
|
pub fn snap_to<Message: 'static>(id: Id, percentage: f32) -> Command<Message> {
|
||||||
Command::widget(operation::scrollable::snap_to(id.0, percentage))
|
Command::widget(operation::scrollable::snap_to(id.0, percentage))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -314,19 +314,25 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The identifier of a [`TextInput`].
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct Id(widget::Id);
|
pub struct Id(widget::Id);
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
|
/// Creates a custom [`Id`].
|
||||||
pub fn new(id: impl Into<std::borrow::Cow<'static, str>>) -> Self {
|
pub fn new(id: impl Into<std::borrow::Cow<'static, str>>) -> Self {
|
||||||
Self(widget::Id::new(id))
|
Self(widget::Id::new(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a unique [`Id`].
|
||||||
|
///
|
||||||
|
/// This function produces a different [`Id`] every time it is called.
|
||||||
pub fn unique() -> Self {
|
pub fn unique() -> Self {
|
||||||
Self(widget::Id::unique())
|
Self(widget::Id::unique())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces a [`Command`] that focuses the [`TextInput`] with the given [`Id`].
|
||||||
pub fn focus<Message: 'static>(id: Id) -> Command<Message> {
|
pub fn focus<Message: 'static>(id: Id) -> Command<Message> {
|
||||||
Command::widget(operation::focusable::focus(id.0))
|
Command::widget(operation::focusable::focus(id.0))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue