TableView

Struct TableView 

Source
pub struct TableView<T, H> { /* private fields */ }
Expand description

View to select an item among a list, supporting multiple columns for sorting.

§Examples

// Provide a type for the table's columns
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
enum BasicColumn {
    Name,
    Count,
    Rate
}

// Define the item type
#[derive(Clone, Debug)]
struct Foo {
    name: String,
    count: usize,
    rate: usize
}

impl TableViewItem<BasicColumn> for Foo {

    fn to_column(&self, column: BasicColumn) -> String {
        match column {
            BasicColumn::Name => self.name.to_string(),
            BasicColumn::Count => format!("{}", self.count),
            BasicColumn::Rate => format!("{}", self.rate)
        }
    }

    fn cmp(&self, other: &Self, column: BasicColumn) -> Ordering where Self: Sized {
        match column {
            BasicColumn::Name => self.name.cmp(&other.name),
            BasicColumn::Count => self.count.cmp(&other.count),
            BasicColumn::Rate => self.rate.cmp(&other.rate)
        }
    }

}

// Configure the actual table
let table = TableView::<Foo, BasicColumn>::new()
                     .column(BasicColumn::Name, "Name", |c| c.width(20))
                     .column(BasicColumn::Count, "Count", |c| c.align(HAlign::Center))
                     .column(BasicColumn::Rate, "Rate", |c| {
                         c.ordering(Ordering::Greater).align(HAlign::Right).width(20)
                     })
                     .default_column(BasicColumn::Name);

Implementations§

Source§

impl<T, H> TableView<T, H>
where T: TableViewItem<H> + PartialEq, H: Eq + Hash + Copy + Clone + Send + Sync + 'static,

Source

pub fn set_items_stable(&mut self, items: Vec<T>)

Sets the contained items of the table.

The currently active sort order is preserved and will be applied to all items.

Compared to set_items, the current selection will be preserved. (But this is only available for T: PartialEq.)

Source§

impl<T, H> TableView<T, H>
where T: TableViewItem<H>, H: Eq + Hash + Copy + Clone + Send + Sync + 'static,

Source

pub fn new() -> Self

Creates a new empty TableView without any columns.

A TableView should be accompanied by a enum of type H representing the table columns.

Source

pub fn column<S: Into<String>, C: FnOnce(TableColumn<H>) -> TableColumn<H>>( self, column: H, title: S, callback: C, ) -> Self

Adds a column for the specified table colum from type H along with a title for its visual display.

The provided callback can be used to further configure the created TableColumn.

Source

pub fn add_column<S: Into<String>, C: FnOnce(TableColumn<H>) -> TableColumn<H>>( &mut self, column: H, title: S, callback: C, )

Adds a column for the specified table colum from type H along with a title for its visual display.

The provided callback can be used to further configure the created TableColumn.

Source

pub fn remove_column(&mut self, i: usize)

Remove a column.

Source

pub fn insert_column<S: Into<String>, C: FnOnce(TableColumn<H>) -> TableColumn<H>>( &mut self, i: usize, column: H, title: S, callback: C, )

Adds a column for the specified table colum from type H along with a title for its visual display.

The provided callback can be used to further configure the created TableColumn.

Source

pub fn default_column(self, column: H) -> Self

Sets the initially active column of the table.

Source

pub fn set_default_column(&mut self, column: H)

Sets the initially active column of the table.

Source

pub fn sort_by(&mut self, column: H, order: Ordering)

Sorts the table using the specified table column and the passed order.

Source

pub fn sort(&mut self)

Sorts the table using the currently active column and its ordering.

Source

pub fn order(&self) -> Option<(H, Ordering)>

Returns the currently active column that is used for sorting along with its ordering.

Might return None if there are currently no items in the table and it has not been sorted yet.

Source

pub fn disable(&mut self)

Disables this view.

A disabled view cannot be selected.

Source

pub fn enable(&mut self)

Re-enables this view.

Source

pub fn set_enabled(&mut self, enabled: bool)

Enable or disable this view.

Source

pub fn is_enabled(&self) -> bool

Returns true if this view is enabled.

Source

pub fn set_on_sort<F>(&mut self, cb: F)
where F: Fn(&mut Cursive, H, Ordering) + Send + Sync + 'static,

Sets a callback to be used when a selected column is sorted by pressing <Enter>.

§Example
table.set_on_sort(|siv: &mut Cursive, column: BasicColumn, order: Ordering| {

});
Source

pub fn on_sort<F>(self, cb: F) -> Self
where F: Fn(&mut Cursive, H, Ordering) + Send + Sync + 'static,

Sets a callback to be used when a selected column is sorted by pressing <Enter>.

Chainable variant.

§Example
table.on_sort(|siv: &mut Cursive, column: BasicColumn, order: Ordering| {

});
Source

pub fn set_on_submit<F>(&mut self, cb: F)
where F: Fn(&mut Cursive, usize, usize) + Send + Sync + 'static,

Sets a callback to be used when <Enter> is pressed while an item is selected.

Both the currently selected row and the index of the corresponding item within the underlying storage vector will be given to the callback.

§Example
table.set_on_submit(|siv: &mut Cursive, row: usize, index: usize| {

});
Source

pub fn on_submit<F>(self, cb: F) -> Self
where F: Fn(&mut Cursive, usize, usize) + Send + Sync + 'static,

Sets a callback to be used when <Enter> is pressed while an item is selected.

Both the currently selected row and the index of the corresponding item within the underlying storage vector will be given to the callback.

Chainable variant.

§Example
table.on_submit(|siv: &mut Cursive, row: usize, index: usize| {

});
Source

pub fn set_on_select<F>(&mut self, cb: F)
where F: Fn(&mut Cursive, usize, usize) + Send + Sync + 'static,

Sets a callback to be used when an item is selected.

Both the currently selected row and the index of the corresponding item within the underlying storage vector will be given to the callback.

§Example
table.set_on_select(|siv: &mut Cursive, row: usize, index: usize| {

});
Source

pub fn on_select<F>(self, cb: F) -> Self
where F: Fn(&mut Cursive, usize, usize) + Send + Sync + 'static,

Sets a callback to be used when an item is selected.

Both the currently selected row and the index of the corresponding item within the underlying storage vector will be given to the callback.

Chainable variant.

§Example
table.on_select(|siv: &mut Cursive, row: usize, index: usize| {

});
Source

pub fn clear(&mut self)

Removes all items from this view.

Source

pub fn len(&self) -> usize

Returns the number of items in this table.

Source

pub fn is_empty(&self) -> bool

Returns true if this table has no items.

Source

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

Returns the index of the currently selected table row.

Source

pub fn set_selected_row(&mut self, row_index: usize)

Selects the row at the specified index.

Source

pub fn selected_row(self, row_index: usize) -> Self

Selects the row at the specified index.

Chainable variant.

Source

pub fn set_items(&mut self, items: Vec<T>)

Sets the contained items of the table.

The currently active sort order is preserved and will be applied to all items.

Source

pub fn items(self, items: Vec<T>) -> Self

Sets the contained items of the table.

The order of the items will be preserved even when the table is sorted.

Chainable variant.

Source

pub fn borrow_item(&self, index: usize) -> Option<&T>

Returns a immmutable reference to the item at the specified index within the underlying storage vector.

Source

pub fn borrow_item_mut(&mut self, index: usize) -> Option<&mut T>

Returns a mutable reference to the item at the specified index within the underlying storage vector.

Source

pub fn borrow_items(&mut self) -> &[T]

Returns a immmutable reference to the items contained within the table.

Source

pub fn borrow_items_mut(&mut self) -> &mut [T]

Returns a mutable reference to the items contained within the table.

Can be used to modify the items in place.

Source

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

Returns the index of the currently selected item within the underlying storage vector.

Source

pub fn set_selected_item(&mut self, item_index: usize)

Selects the item at the specified index within the underlying storage vector.

Source

pub fn selected_item(self, item_index: usize) -> Self

Selects the item at the specified index within the underlying storage vector.

Chainable variant.

Source

pub fn insert_item(&mut self, item: T)

Inserts a new item into the table.

The currently active sort order is preserved and will be applied to the newly inserted item.

If no sort option is set, the item will be added to the end of the table.

Source

pub fn insert_item_at(&mut self, index: usize, item: T)

Inserts a new item into the table.

The currently active sort order is preserved and will be applied to the newly inserted item.

If no sort option is set, the item will be inserted at the given index.

§Panics

If index > self.len().

Source

pub fn remove_item(&mut self, item_index: usize) -> Option<T>

Removes the item at the specified index within the underlying storage vector and returns it.

Source

pub fn take_items(&mut self) -> Vec<T>

Removes all items from the underlying storage and returns them.

Trait Implementations§

Source§

impl<T, H> Default for TableView<T, H>
where T: TableViewItem<H> + PartialEq, H: Eq + Hash + Copy + Clone + Send + Sync + 'static,

Source§

fn default() -> Self

Creates a new empty TableView without any columns.

See TableView::new().

Source§

impl<T, H> Scroller for TableView<T, H>

Source§

fn get_scroller_mut(&mut self) -> &mut Core

Returns a mutable access to the scroll core.
Source§

fn get_scroller(&self) -> &Core

Returns an immutable access to the scroll core.
Source§

impl<T, H> View for TableView<T, H>
where T: TableViewItem<H> + Send + Sync + 'static, H: Eq + Hash + Copy + Clone + Send + Sync + 'static,

Source§

fn draw(&self, printer: &Printer<'_, '_>)

Draws the view with the given printer (includes bounds) and focus. Read more
Source§

fn layout(&mut self, size: Vec2)

Called once the size for this view has been decided. Read more
Source§

fn take_focus(&mut self, _: Direction) -> Result<EventResult, CannotFocus>

Attempt to give this view the focus. Read more
Source§

fn on_event(&mut self, event: Event) -> EventResult

Called when an event is received (key press, mouse event, …). Read more
Source§

fn important_area(&self, size: Vec2) -> Rect

What part of the view is important and should be visible? Read more
Source§

fn needs_relayout(&self) -> bool

Should return true if the view content changed since the last call to layout(). Read more
Source§

fn required_size(&mut self, constraint: XY<usize>) -> XY<usize>

Returns the minimum size the view requires with the given restrictions. Read more
Source§

fn call_on_any( &mut self, _: &Selector<'_>, _: &mut dyn FnMut(&mut (dyn View + 'static)), )

Runs a closure on the view identified by the given selector. Read more
Source§

fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>

Moves the focus to the view identified by the given selector. Read more
Source§

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

Returns the type of this view. Read more

Auto Trait Implementations§

§

impl<T, H> Freeze for TableView<T, H>

§

impl<T, H> !RefUnwindSafe for TableView<T, H>

§

impl<T, H> Send for TableView<T, H>
where T: Send, H: Send,

§

impl<T, H> Sync for TableView<T, H>
where T: Sync, H: Sync,

§

impl<T, H> Unpin for TableView<T, H>
where T: Unpin, H: Unpin,

§

impl<T, H> !UnwindSafe for TableView<T, H>

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> AnyView for T
where T: View,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Downcast self to a Any.

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Downcast self to a mutable Any.

Source§

fn as_boxed_any(self: Box<T>) -> Box<dyn Any>

Returns a boxed any from a boxed 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
Source§

impl<T> Finder for T
where T: View,

Source§

fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
where V: View, F: FnMut(&mut V),

Runs a callback on all views identified by sel. Read more
Source§

fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Runs a callback on the view identified by sel. Read more
Source§

fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Convenient method to use call_on with a view::Selector::Name.
Source§

fn find_name<V>(&mut self, name: &str) -> Option<ViewRef<V>>
where V: View,

Convenient method to find a view wrapped in an NamedView.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoBoxedView for T
where T: View,

Source§

fn into_boxed_view(self) -> Box<dyn View>

Returns a Box<View>.
Source§

impl<T> Nameable for T
where T: View,

Source§

fn with_name<S>(self, name: S) -> NamedView<Self>
where S: Into<String>,

Wraps this view into an NamedView with the given id. Read more
Source§

impl<T> Resizable for T
where T: View,

Source§

fn resized( self, width: SizeConstraint, height: SizeConstraint, ) -> ResizedView<Self>

Wraps self in a ResizedView with the given size constraints.
Source§

fn fixed_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a fixed-size ResizedView.
Source§

fn fixed_width(self, width: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn fixed_height(self, height: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn full_screen(self) -> ResizedView<Self>

Wraps self into a full-screen ResizedView.
Source§

fn full_width(self) -> ResizedView<Self>

Wraps self into a full-width ResizedView.
Source§

fn full_height(self) -> ResizedView<Self>

Wraps self into a full-height ResizedView.
Source§

fn max_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a limited-size ResizedView.
Source§

fn max_width(self, max_width: usize) -> ResizedView<Self>

Wraps self into a limited-width ResizedView.
Source§

fn max_height(self, max_height: usize) -> ResizedView<Self>

Wraps self into a limited-height ResizedView.
Source§

fn min_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a ResizedView at least sized size.
Source§

fn min_width(self, min_width: usize) -> ResizedView<Self>

Wraps self in a ResizedView at least min_width wide.
Source§

fn min_height(self, min_height: usize) -> ResizedView<Self>

Wraps self in a ResizedView at least min_height tall.
Source§

impl<T> Scrollable for T
where T: View,

Source§

fn scrollable(self) -> ScrollView<Self>

Wraps self in a ScrollView.
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> With for T

Source§

fn wrap_with<U, F>(self, f: F) -> U
where F: FnOnce(Self) -> U,

Calls the given closure and return the result. Read more
Source§

fn with<F>(self, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure on self.
Source§

fn try_with<E, F>(self, f: F) -> Result<Self, E>
where F: FnOnce(&mut Self) -> Result<(), E>,

Calls the given closure on self.
Source§

fn with_if<F>(self, condition: bool, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure if condition == true.