Skip to main content

Scheduler

Struct Scheduler 

Source
pub struct Scheduler { /* private fields */ }
Expand description

A timeline of resources: a row for each person, room or account, a time axis across the top, and events as bars that can be dragged along the time and between rows, resized by their ends, and drawn on an empty stretch. Weekends are shaded, and only what is in view gets built, so large plans stay smooth.

The app holds the data: on_change reports where an event would go, and the app stores it and passes the events again. can_drop can refuse a place.

From the keyboard, Tab reaches the events. Left and Right move one by a step, Up and Down to the next row, Shift with Left and Right resize it, Enter opens it and Delete removes it.

use ravenrs_reactive::State;
use ravenrs_widgets::{Date, Resource, Scheduler, SchedulerEvent, TimeAxis, TimePoint, Ui};

let first = Date::new(2026, 11, 1).unwrap();
let axis = State::new(TimeAxis::days(first, 30));
let start = TimePoint::from_date(first.add_days(4));
let scheduler = Scheduler::new(axis.binding())
    .resources([Resource::new(1, "Ana"), Resource::new(2, "Bruno")])
    .events([SchedulerEvent::new(7, 1, start, start.plus_days(3), "Férias")])
    .on_change(|change| println!("{change:?}"));
let mut ui = Ui::new(scheduler, ravenrs_style::Theme::raven_light());
ui.update();

Implementations§

Source§

impl Scheduler

Source

pub fn new(axis: Binding<TimeAxis>) -> Scheduler

A scheduler over this stretch of time. Zooming and moving through time change axis.

Source

pub fn resources( self, resources: impl IntoIterator<Item = Resource>, ) -> Scheduler

The rows.

Source

pub fn events( self, events: impl IntoIterator<Item = SchedulerEvent>, ) -> Scheduler

The bars. Those on no row are ignored.

Source

pub fn ranges( self, ranges: impl IntoIterator<Item = SchedulerRange>, ) -> Scheduler

Shaded stretches of time across all rows.

Source

pub fn now(self, now: TimePoint) -> Scheduler

Draws a line at this moment, and offers a button to come back to it.

Source

pub fn selection(self, selected: Binding<Option<u64>>) -> Scheduler

Holds the selected event.

Source

pub fn resource_width(self, width: f32) -> Scheduler

The width of the resources column (200 by default).

Source

pub fn fill_rows(self, fill: bool) -> Scheduler

Rows share the height left over, so a few of them do not leave the timeline half empty. Off by default; a row never gets shorter than its bars.

Source

pub fn card(self, card: bool) -> Scheduler

The look of a full scheduler, as a card among other cards: rounded and with a soft shadow, a tinted header with the month over the days of the week, a line between the rows’ names and the timeline, and today’s column marked. Bars are a soft tint with a stripe of their color. Opens with today in the first column.

Source

pub fn avatars(self, avatars: bool) -> Scheduler

Shows the initials of each row’s name beside it, for rows that are people.

Source

pub fn event_detail( self, detail: impl Fn(u64) -> Option<String> + 'static, ) -> Scheduler

A second line on the bars, such as an amount, by the event’s id. Rows get taller.

Source

pub fn event_menu( self, menu: impl Fn(u64) -> Vec<MenuItem> + 'static, ) -> Scheduler

What a right click on a bar offers, by the event’s id.

Source

pub fn lane_menu( self, menu: impl Fn(SchedulerChange) -> Vec<MenuItem> + 'static, ) -> Scheduler

What a right click on an empty stretch offers, given the row and the time there.

Source

pub fn read_only(self, read_only: bool) -> Scheduler

Nothing can be moved, resized or created.

Source

pub fn toolbar(self, show: bool) -> Scheduler

The buttons to move through time and zoom (on by default).

Source

pub fn on_change(self, handler: impl Fn(SchedulerChange) + 'static) -> Scheduler

An event was moved or resized.

Source

pub fn on_create(self, handler: impl Fn(SchedulerChange) + 'static) -> Scheduler

A stretch of time was drawn on a row, by dragging or double-clicking.

Source

pub fn on_open(self, handler: impl Fn(u64) + 'static) -> Scheduler

An event was double-clicked, or Enter was pressed on it.

Source

pub fn on_delete(self, handler: impl Fn(u64) + 'static) -> Scheduler

Delete was pressed on an event.

Source

pub fn can_drop( self, rule: impl Fn(&SchedulerChange) -> bool + 'static, ) -> Scheduler

Says whether a place is allowed. A refused one shows in red and changes nothing.

Trait Implementations§

Source§

impl Debug for Scheduler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl View for Scheduler

Source§

fn build(&self, cx: &mut BuildCx<'_>) -> NodeId

Creates this view’s node for the current build.
Source§

fn type_name(&self) -> &'static str

The name the diagnostics panel shows this view’s cost under.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,

Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<V> ViewExt for V
where V: View,

Source§

fn padding(self, padding: impl Into<Insets>) -> Styled<Self>

Adds padding inside the box, in logical pixels.
Source§

fn background(self, fill: impl Into<Fill>) -> Styled<Self>

Paints a background behind the content.
Source§

fn frame(self, width: Option<f32>, height: Option<f32>) -> Styled<Self>

Fixes the width and/or height in logical pixels; None keeps the content size.
Source§

fn width(self, width: f32) -> Styled<Self>

Fixes the width in logical pixels.
Source§

fn height(self, height: f32) -> Styled<Self>

Fixes the height in logical pixels.
Source§

fn grow(self, grow: f32) -> Styled<Self>

Takes a share of the free space in the parent stack.
Source§

fn stretch(self) -> Styled<Self>

Stretches across the parent stack’s cross axis.
Source§

fn centered(self) -> Styled<Self>

Centers the content inside the box.
Source§

fn tooltip(self, text: impl Into<String>) -> Tooltip<Self>

Shows text above the view while the pointer is over it; see Tooltip.
Source§

fn opacity(self, opacity: f32) -> Faded<Self>

Draws the view and everything in it at this opacity, from 0.0 to 1.0, easing to it when it changes. Layout and input stay as they are; see Faded.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more