Skip to main content

App

Struct App 

Source
pub struct App {
Show 31 fields pub tasks: Vec<Task>, pub categories: Vec<Category>, pub labels: Vec<Label>, pub settings: Settings, pub focus: Focus, pub mode: Mode, pub cat_index: usize, pub task_index: usize, pub cat_state: ListState, pub task_state: TableState, pub view: Vec<usize>, pub list_rows: Vec<TaskListRow>, pub searching: bool, pub search_query: String, pub input: TextInput, pub slash_index: usize, pub form: Option<TaskForm>, pub category_form: Option<CategoryForm>, pub label_index: usize, pub label_editor: Option<LabelEditor>, pub label_error: Option<String>, pub settings_index: usize, pub help_scroll: usize, pub message: Option<Message>, pub pending: Option<(Confirm, Instant)>, pub should_quit: bool, pub areas: Areas, pub images: ImageStore, pub dirty: bool, pub data_gen: u64, pub preview_form: Option<TaskForm>, /* private fields */
}

Fields§

§tasks: Vec<Task>§categories: Vec<Category>§labels: Vec<Label>§settings: Settings§focus: Focus§mode: Mode§cat_index: usize

Index into categories.

§task_index: usize

Index into view.

§cat_state: ListState

Scroll position of the two panels. Selection is driven by the two indices above; ratatui keeps the offsets in these.

§task_state: TableState§view: Vec<usize>

Indices into tasks, in display order.

§list_rows: Vec<TaskListRow>

Table rows including category separators. Parallel to what is drawn; selection still uses task_index into view.

§searching: bool§search_query: String§input: TextInput§slash_index: usize

Selected row in the / palette dropdown.

§form: Option<TaskForm>

The open task dialog, if any.

§category_form: Option<CategoryForm>

The open category dialog, if any.

§label_index: usize

Selected row in the global label manager.

§label_editor: Option<LabelEditor>

Inline create/rename editor with an explicit name/color focus.

§label_error: Option<String>§settings_index: usize§help_scroll: usize

First help content row currently visible.

§message: Option<Message>§pending: Option<(Confirm, Instant)>

Pending entity-bound destructive action and its deadline.

§should_quit: bool§areas: Areas§images: ImageStore

Description/preview image store.

§dirty: bool

Needs a redraw.

§data_gen: u64

Incremented on task mutation (invalidates preview cache).

§preview_form: Option<TaskForm>

Cached description editor for the read-only preview pane.

Implementations§

Source§

impl App

Source

pub fn new(version: &str) -> Result<Self, StoreError>

Source

pub fn with_store(version: &str, store: Store) -> Result<Self, StoreError>

Source

pub fn data_dir(&self) -> &Path

Source

pub fn poll_external_changes(&mut self) -> bool

Refresh after another process commits. Dialogs deliberately defer the visual refresh: their entity snapshot is checked transactionally when the user saves, so typed work is never replaced under the cursor.

Source

pub fn request_quit(&mut self)

Source

pub fn mark_dirty(&mut self)

Source

pub fn invalidate_preview(&mut self)

Source

pub fn ensure_preview(&mut self)

Rebuild Self::preview_form if the selection or data_gen changed.

Source

pub fn theme(&self) -> Theme

Source

pub fn current_category_id(&self) -> &str

Source

pub fn is_all_view(&self) -> bool

Source

pub fn category_name(&self, id: &str) -> Option<&str>

Source

pub fn label_name(&self, id: &str) -> Option<&str>

Source

pub fn rebuild_view(&mut self)

Recompute which tasks are shown and in what order.

Sort applies inside each category. All Tasks (and search) stack those already-sorted groups in sidebar order; a single category is just one group.

Source

pub fn selected_visual_row(&self) -> Option<usize>

Visual table row for the selected task, if any.

Source

pub fn task_at_visual_row(&self, row: usize) -> Option<usize>

view index under a visual table row, or None for a separator.

Source

pub fn task_count(&self) -> usize

Source

pub fn visible_task(&self, pos: usize) -> Option<&Task>

Source

pub fn selected_task(&self) -> Option<&Task>

Source

pub fn done_count(&self) -> usize

Source

pub fn move_task_selection(&mut self, delta: isize)

Source

pub fn select_task(&mut self, pos: usize)

Source

pub fn select_first_task(&mut self)

Source

pub fn select_last_task(&mut self)

Source

pub fn typeahead_jump(&mut self, c: char)

Type-to-jump: append c and select the best fuzzy match (list unchanged).

Source

pub fn move_category_selection(&mut self, delta: isize)

Source

pub fn navigate_vertical(&mut self, delta: isize)

↑/↓ stay inside the focused panel. Cross-panel moves use ←/→ or Tab.

Source

pub fn select_category(&mut self, index: usize)

Source

pub fn select_last_category(&mut self)

Source

pub fn toggle_focus(&mut self)

Source

pub fn set_focus(&mut self, focus: Focus) -> bool

Move keyboard focus. A locked search owns the task list until Esc.

Source

pub fn cancel_pending(&mut self)

Source

pub fn toggle_done(&mut self, pos: usize)

Source

pub fn cycle_importance(&mut self, pos: usize)

Steps a task’s importance up, wrapping back to none after three.

Source

pub fn move_task_order(&mut self, delta: isize) -> bool

Reorder the selected task inside its category when using manual sort. In All Tasks, crossing a category section boundary is intentionally blocked; changing category belongs in the task form.

Source

pub fn open_new_task(&mut self)

Opens the dialog for a new task, unless the list is full.

Source

pub fn open_edit_task(&mut self)

Opens the dialog on the selected task.

Source

pub fn close_form(&mut self)

Source

pub fn submit_form(&mut self)

Validates the open form and writes it back to the task list.

Source

pub fn create_task(&mut self, draft: &TaskDraft) -> Option<String>

Creates a task in the chosen category and selects it. A [date] left in the title is moved into due when due is empty.

Source

pub fn update_task(&mut self, id: &str, draft: &TaskDraft) -> bool

Source

pub fn delete_task(&mut self, pos: usize)

Source

pub fn delete_task_by_id(&mut self, id: &str) -> bool

Source

pub fn purge(&mut self) -> usize

Permanently remove done tasks. In All Tasks → every done task; in a category → only that category’s done tasks. Nothing is archived.

Source

pub fn purge_candidate_ids(&self) -> Vec<String>

Completed task ids in the current purge scope, captured for confirmation.

Source

pub fn purge_ids(&mut self, ids: &[String]) -> usize

Purge exactly the confirmed ids; newly completed tasks are never swept in.

Source

pub fn toggle_hide_done(&mut self) -> Option<bool>

/done — show or hide completed tasks in the list (still on disk).

Source

pub fn open_new_category(&mut self)

Opens the dialog for a new category.

Source

pub fn open_edit_category(&mut self)

Opens the dialog on the selected category. “All Tasks” is not a real category and cannot be edited.

Source

pub fn close_category_form(&mut self)

Source

pub fn submit_category_form(&mut self)

Source

pub fn delete_category(&mut self)

Deletes the category while preserving its tasks as Uncategorized. Category ids are stable UUIDs — no renumbering.

Source

pub fn delete_category_by_id(&mut self, id: &str) -> bool

Source

pub fn open_labels(&mut self)

Source

pub fn open_labels_from_form(&mut self)

Source

pub fn close_labels(&mut self)

Source

pub fn move_label_selection(&mut self, delta: isize)

Source

pub fn begin_new_label(&mut self)

Source

pub fn begin_rename_label(&mut self)

Source

pub fn cancel_label_editor(&mut self)

Source

pub fn submit_label_editor(&mut self)

Source

pub fn selected_label(&self) -> Option<&Label>

Source

pub fn delete_label_by_id(&mut self, id: &str) -> bool

Source

pub fn create_label(&mut self, name: &str) -> Result<String, String>

Source

pub fn set_task_labels( &mut self, task_id: &str, label_ids: Vec<String>, ) -> Result<(), String>

Source

pub fn move_category_order(&mut self, delta: isize) -> bool

Reorder real categories while keeping the virtual All Tasks row fixed.

Source

pub fn category_progress(&self, id: &str) -> (usize, usize)

(done, total) for a category. All Tasks counts every task.

Source

pub fn open_slash(&mut self)

Open the / command palette.

Enter live search, optionally with an initial query.

Return keyboard input to an already locked search without rebuilding the view or moving its selected task.

Source

pub fn clamp_slash_index(&mut self)

Source

pub fn info(&mut self, text: impl Into<String>)

Source

pub fn error(&mut self, text: impl Into<String>)

Source

pub fn expire_message(&mut self) -> bool

Drop expired status messages. Returns true when the UI should redraw.

Source

pub fn ask_confirm(&mut self, confirm: Confirm, prompt: impl Into<String>)

Arm a destructive action for its explicit confirmation step, and say so.

Source

pub fn awaiting(&self, confirm: Confirm) -> bool

Whether confirm is armed and still inside its window.

Source

pub fn pending_confirmation(&self) -> Option<&Confirm>

Source

pub fn cycle_setting(&mut self, index: usize, delta: isize)

Step a settings row by delta (+1 forward, −1 back), wrapping.

Source

pub fn setting_value(&self, index: usize) -> String

Auto Trait Implementations§

§

impl !Freeze for App

§

impl !RefUnwindSafe for App

§

impl !Sync for App

§

impl !UnwindSafe for App

§

impl Send for App

§

impl Unpin for App

§

impl UnsafeUnpin for App

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T, C> AdaptIntoUnclamped<T> for C
where T: AdaptFromUnclamped<C>,

Source§

type Scalar = <T as AdaptFromUnclamped<C>>::Scalar

The number type that’s used as the color’s components.
Source§

fn adapt_into_unclamped_with<M>(self) -> T

Adapt a color of type Self into a color of type T, using the custom matrix M. Read more
Source§

fn adapt_into_unclamped(self) -> T
where Bradford: LmsToXyz<Self::Scalar> + XyzToLms<Self::Scalar>,

Adapt a color of type Self into a color of type T, using the Bradford matrix. Read more
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, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

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

Source§

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

Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
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> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
Source§

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

Source§

fn vzip(self) -> V