Commit Graph

193 Commits (master)

Author SHA1 Message Date
Florian Dehau ae677099d6 feat(widgets/table): allow one row to be selected 4 years ago
Florian Dehau 140db9b2e2 refactor(canvas): update shape drawing strategy
* Update the `Shape` trait. Instead of returning an iterator of point, all
shapes are now aware of the surface they will be drawn to through a `Painter`.
In order to draw themselves, they paint points of the "braille grid".
* Rewrite how lines are drawn using a common line drawing algorithm (Bresenham).
4 years ago
Vadim Chekan 1683e8d609
Clean redundant generics params in Table (#234)
* Clean redundant generics params in Table

It is possible to use associated types the same way as generics parameters. In fact associated types are nothing more than better organized generics params. For example, there is no need to introduce another param to constraint iterator item to be Display, you can just say `where I::Iterator, I::Item: Display`. This allows to drop type params for Table from 5 to 2.
4 years ago
Florian Dehau 6cb57f5d2a feat: add stateful widgets
Most widgets can be drawn directly based on the input parameters. However, some
features may require some kind of associated state to be implemented.

For example, the `List` widget can highlight the item currently selected. This
can be translated in an offset, which is the number of elements to skip in
order to have the selected item within the viewport currently allocated to this
widget. The widget can therefore only provide the following behavior: whenever
the selected item is out of the viewport scroll to a predefined position (make
the selected item the last viewable item or the one in the middle).
Nonetheless, if the widget has access to the last computed offset then it can
implement a natural scrolling experience where the last offset is reused until
the selected item is out of the viewport.

To allow such behavior within the widgets, this commit introduces the following
changes:
- Add a `StatefulWidget` trait with an associated `State` type. Widgets that
can take advantage of having a "memory" between two draw calls needs to
implement this trait.
- Add a `render_stateful_widget` method on `Frame` where the associated
state is given as a parameter.

The chosen approach is thus to let the developers manage their widgets' states
themselves as they are already responsible for the lifecycle of the wigets
(given that the crate exposes an immediate mode api).

The following changes were also introduced:

- `Widget::render` has been deleted. Developers should use `Frame::render_widget`
instead.
- `Widget::background` has been deleted. Developers should use `Buffer::set_background`
instead.
- `SelectableList` has been deleted. Developers can directly use `List` where
`SelectableList` features have been back-ported.
4 years ago
Florian Dehau d16db5ed90 style: fix clippy warnings 4 years ago
Florian Dehau 28017f97ea feat(widgets/chart): add more control on the visibility of the legend 4 years ago
Florian Dehau ea43413507 fix: remove clippy warnings 4 years ago
Caleb Bassi 829b7b6b70 Change linechart to draw the points also 4 years ago
Caleb Bassi 262bf441ce Add linechart support
Closes #73

This commit only adds support for linecharts for the braille marker.
4 years ago
Caleb Bassi 7aae9b380e Add header_gap field to Table 4 years ago
Florian Dehau 9085c81e76 refactor: clean up border type for blocks
* Merge line symbols in a single module.
* Replace set_border_type with border_type to match other builder methods.
* Remove unecessary branching.
4 years ago
Matthew Stevenson 682349c03e update block example; add BorderType to exposed widgets API 4 years ago
Matthew Stevenson a72389b28c revert to single Block struct; add set_border_type method and BorderType enum 4 years ago
Matthew Stevenson 06d159fb7b add RoundedBlock and DoubleBlock structs that impl From Block; add Block::rounded() and Block::double_border() 4 years ago
Sebastian Woetzel bbd4363fa9 Bugfix: title_style was not used to style the axis title 5 years ago
Florian Dehau 2233cdc9cc chore: add CI based on github actions 5 years ago
Florian Dehau 816bc9b5c8 style: fix formatting and clippy issues 5 years ago
Florian Dehau a82c82fcd7 fix(widgets): remove compilation warning in table widget 5 years ago
Jeffas 94877f4e7e Use constraints for table column widths
This allows table column widths to be adapted more and scale with the
UI.

The constraints are solved using the Cassowary solver. An added
constraint for fitting them all in the width is added.
5 years ago
Joseph Knight e183d63a5e typo in barcharg.rs 5 years ago
Joseph Knight e5fdd442c3 typo in sparkline.rs 5 years ago
Joe Ardent 86f681a007 Silence check warnings about [lack of] use of 'dyn' for boxed trait objects. 5 years ago
Jeremy Day 47c68e40a2 fix for canvas rendering edge cases causing overflow errors 5 years ago
Florian Dehau 2a7eec816a Add PartialEq to Text 5 years ago
Florian Dehau 8fbb764c9e Move Borders documentation 5 years ago
Florian Dehau 4756801fd9 Format 5 years ago
Russ f0e0b515ad avoid divide by zero 5 years ago
nytopop 8a9c76b003 Don't highlight Tabs separator behind selection 5 years ago
DarrienG 41cdd3e261 Provide clone and debug for Text type 5 years ago
Florian Dehau a74d335cb4 Fix clippy warnings 5 years ago
Florian Dehau 7a5ad3fbdb Fix sparkline panic when max is zero 5 years ago
David Flemström b7664a4108 Support several modifiers and indexed colors at once 5 years ago
Florian Dehau b669cf9ce7 style: fix clippy warnings 5 years ago
Sven-Hendrik Haase a78fa73b34 Add new shape: Rectangle 5 years ago
Jens Krause 1c0b0abf61 Use `UnicodeWidthStr::width()`
to get width of `divider`.

Also use `set_string` instead of `set_symbol`. The latter cuts content of a multi-char divider.
6 years ago
Jens Krause f7c6620e25 Fix documented example to fix doc-tests on CI 6 years ago
Jens Krause 16372f7847 Don't show divider after last tab 6 years ago
Jens Krause 72c2eb7182 Add `divider` to `Tabs`
to change appearance of tab dividers.
6 years ago
Sven-Hendrik Haase 144bfb71cf Upgrade to 2018 edition 6 years ago
Karoline Pauls 10642d0e04 Paragraph: word wrapping 6 years ago
Karoline Pauls 1802cf8dbc Improve wrapping of double-width characters 6 years ago
Karoline Pauls 8522e028f1 Run `cargo fmt` with the new Rust stable toolchain (1.31.0) 6 years ago
Karoline Pauls cc95c8cfb0 Gauge: use f64 internally and allow to set any f64 between 0 and 1 6 years ago
Karoline Pauls 03bfcde147 [widgets][paragraph]: Truncate long lines when wrap is false 6 years ago
Florian Dehau d8e5f57d53 style: fmt 6 years ago
Antoine Büsch f795173886 Unify Item and Text 6 years ago
Antoine Büsch e42ab1fed8 Move Text to widgets/mod.rs 6 years ago
Antoine Büsch 0544c023f5 Rename Text::{Data -> Raw, StyledData -> Styled} 6 years ago
Antoine Büsch ff47f9480b Introduce builder methods for Text to make it more ergonomic 6 years ago
Antoine Büsch 70561b7c54 Fix examples and doctests 6 years ago
Antoine Büsch 559c9c75f3 Make Text accept both borrowed and owned strings 6 years ago
Florian Dehau 6c69160d6b feat: remove unecessary borrows of Style 6 years ago
Florian Dehau cf169d1582 style: run rustfmt and clippy 6 years ago
Florian Dehau bcd1e30376 refactor: update List select behavior
* allow a selectable list to have no selected item
* show highlight_symbol only when something is selected
6 years ago
Florian Dehau 13e194cd26 refactor: update widgets
* all widgets use the consumable builder pattern
* `draw` on terminal expect a closure that take a frame as only arg
6 years ago
Florian Dehau d6016788ef refactor: clippy + rustfmt 6 years ago
Florian Dehau ad602a54bf refactor(widgets): replace text rendering in Paragraph
* remove custom markup language
* add Text container for both raw and styled strings
6 years ago
Florian Dehau 7181970a32 feat: split layout from rendering
* remove layout logic from Terminal
* replace Group with Layout
* add Frame intermediate object
6 years ago
Jeremy Day cfc90ab7f6 fix(widgets): Prevent chart legend from rendering when no dataset has a name 6 years ago
Florian Dehau df7493fd33 style: Run rustfmt 6 years ago
Florian Dehau 5de571fb03 feat(widgets): Add start_corner option to List 6 years ago
Robin Nehls 3f8a9079ee [widgets] implement text alignment for paragraph widget 6 years ago
Florian Dehau 36146d970a [style] rustfmt 6 years ago
Florian Dehau 36a5eb2110 Format code 6 years ago
Xavier Bestel f4052e0e71 fix colors use, add missing Blue 6 years ago
Florian Dehau 36dea8373f [widgets][paragraph] Fix text wrapping 6 years ago
Florian Dehau fcd1b7b187 [widgets][list] Set the style of the underlying list 6 years ago
Florian Dehau 6a3b9fb130 [src][chart] fmt 7 years ago
Florian Dehau c3c5109c5a [src] Fix build and tests 7 years ago
Florian Dehau 151d7e8a1c [src] Update dependencies
* Update all dependencies to their latest versions
* Change border to Borders to match v1.0 of bitflags
7 years ago
Florian Dehau af16518650 [src] Run rustfmt 7 years ago
Florian Dehau 5dd03d91ad [widgets] Fix a bug in chart layout 7 years ago
Florian Dehau 3012215e32 [widgets][tabs] Use generic type for tabs titles 7 years ago
Florian Dehau ba80889333 [clippy] Fix warnings 7 years ago
Florian Dehau 1f285fbac0 [src] Run cargo fmt 7 years ago
Florian Dehau 3cc3585e48 [widgets][chart] Use generic type for labels 7 years ago
talha 3045ac4124 Minor codestyle fixes 7 years ago
Florian Dehau 71545a0aa8 Run cargo fmt 7 years ago
Florian Dehau 3b8cc241ac [widgets] Fix table doc test 7 years ago
Florian Dehau ca3308e945 [widgets] Fix Row export 7 years ago
Florian Dehau c18885d38b [widgets] Refactor Table Widget
* Add Row enum
* Move to a generic definition of table which allow iterators to be
passed as arguments and therefore reduce allocations
7 years ago
Florian Dehau d6a91d1865 Fix List lifetime issues
Add a new lifetime for the items inside the list
7 years ago
Florian Dehau 41eac2aa4e Refactor demo example 7 years ago
Florian Dehau 89a173fe9b Refactor List Widget
* Add a generic item object for the list. The item can either be some data
alone or some data and its style
* The List widget now store an Iterator over those element. This should
avoid the need of allocating memory to store its elements
* The List consume the Iterator when it is drawn
7 years ago
Florian Dehau b1737ce667 Update Widget Trait
The draw function now take a &mut reference to the widget, allowing the
widget to modify itself when drawn. This change the semantic of the draw
call since the widget should now be considered "consumed" after it.
7 years ago
Florian Dehau b2bb24b9d2 Fix rustfmt and clippy errors 7 years ago
Sebastian Woetzel 81cedbd6f2
fixes scroll handling for paragraph widget 7 years ago
Florian Dehau 116ee4439a Improve Paragraph widget
* Add the possibility to disable the markup rendering
* Fix parser error
8 years ago
Florian Dehau e585bfeab5 Make List more user-friendly 8 years ago
Florian Dehau feefa5d54f Convert backends to conditionnal features for compilation 8 years ago
Florian Dehau 4f8a57d500 Fix clippy warnings 8 years ago
Florian Dehau 4bb2b8eb24 Add support for multiline gauge 8 years ago
Florian Dehau 5efc52e03d Fix parser in paragraph 8 years ago
Florian Dehau a3c96865a8 Custom label for gauge 8 years ago
Florian Dehau 17c95cf826 Fix table example 8 years ago
Florian Dehau ad239ef23c Update list and table to be more flexible
* Move List to SelectableList
* Create a more generic List
* Change the way to pass items to the table widget
* Update demo
8 years ago
Florian Dehau 662e2dd102 Fix examples 8 years ago
Florian Dehau 224eb2d8e0 Add support for text styling 8 years ago
Florian Dehau 9bc61551e2 Refactor Terminal to be able to support multiple backends
* Add Rustbox as an other possible backend
8 years ago
Florian Dehau 652ff12380 More documentation 8 years ago