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>) -> Self

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

Source

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

The rows.

Source

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

The bars. Those on no row are ignored.

Source

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

Shaded stretches of time across all rows.

Source

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

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

Source

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

Holds the selected event.

Source

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

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

Source

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

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) -> Self

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) -> Self

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, ) -> Self

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) -> Self

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, ) -> Self

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) -> Self

Nothing can be moved, resized or created.

Source

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

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

Source

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

An event was moved or resized.

Source

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

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) -> Self

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

Source

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

Delete was pressed on an event.

Source

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

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

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> 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<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<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.

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.
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