diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-04-09 21:51:35 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-04-09 21:51:35 +0200 |
commit | 004519356564d647aec11cba757f1e1b42e7f8df (patch) | |
tree | 7fa1869ca6047b09c55ac7a6b06dc1531343bf4c | |
parent | 7636d3d5ce8423e6b5490e65553ef7f906f2608c (diff) |
fixup! TMP
-rw-r--r-- | bin/imag-tui/Cargo.toml | 7 | ||||
-rw-r--r-- | bin/imag-tui/src/lib.rs | 6 | ||||
-rw-r--r-- | bin/imag-tui/src/views/dashboard.rs | 10 | ||||
-rw-r--r-- | bin/imag-tui/src/views/mainview.rs | 20 | ||||
-rw-r--r-- | bin/imag-tui/src/views/statusview.rs | 35 |
5 files changed, 60 insertions, 18 deletions
diff --git a/bin/imag-tui/Cargo.toml b/bin/imag-tui/Cargo.toml index 1cb75548..394453fc 100644 --- a/bin/imag-tui/Cargo.toml +++ b/bin/imag-tui/Cargo.toml @@ -17,10 +17,15 @@ toml-query = "0.10" libimagentryutil = { version = "0.10.0", path = "../../lib/entry/libimagentryutil" } libimagerror = { version = "0.10.0", path = "../../lib/core/libimagerror" } -libimagrt = { version = "0.10.0", path = "../../lib/core/libimagrt" } libimagstore = { version = "0.10.0", path = "../../lib/core/libimagstore" } libimagutil = { version = "0.10.0", path = "../../lib/etc/libimagutil" } +[dependencies.libimagrt] +version = "0.10.0" +path = "../../lib/core/libimagrt" +default-features = false +features = ["testing"] # TODO: We only need Runtime::extract_store() + [lib] name = "libimagtuifrontend" path = "src/lib.rs" diff --git a/bin/imag-tui/src/lib.rs b/bin/imag-tui/src/lib.rs index b0043ff2..45d3c629 100644 --- a/bin/imag-tui/src/lib.rs +++ b/bin/imag-tui/src/lib.rs @@ -36,6 +36,7 @@ extern crate libimagentryutil; use anyhow::Error; use anyhow::Result; use clap::App; +use cursive::Cursive; use libimagrt::runtime::Runtime; use libimagrt::application::ImagApplication; @@ -43,9 +44,14 @@ use libimagrt::application::ImagApplication; mod ui; mod views; +use views::mainview::MainView; + pub enum ImagTui {} impl ImagApplication for ImagTui { fn run(rt: Runtime) -> Result<()> { + let mut siv = Cursive::default(); + siv.add_layer(MainView::new(rt.extract_store())); + siv.run(); Ok(()) } diff --git a/bin/imag-tui/src/views/dashboard.rs b/bin/imag-tui/src/views/dashboard.rs index 1ccfc2a0..c52dacb4 100644 --- a/bin/imag-tui/src/views/dashboard.rs +++ b/bin/imag-tui/src/views/dashboard.rs @@ -17,16 +17,18 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::sync::Arc; + use cursive::view::View; use cursive::Printer; -use libimagrt::runtime::Runtime; +use libimagstore::store::Store; -pub struct Dashboard; +pub struct Dashboard(Arc<Store>); impl Dashboard { - pub fn new() -> Self { - Dashboard + pub fn new(store: Arc<Store>) -> Self { + Dashboard(store) } } diff --git a/bin/imag-tui/src/views/mainview.rs b/bin/imag-tui/src/views/mainview.rs index 2a563efa..4b8de92a 100644 --- a/bin/imag-tui/src/views/mainview.rs +++ b/bin/imag-tui/src/views/mainview.rs @@ -17,29 +17,35 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::sync::Arc; + use cursive::views::LinearLayout; use cursive::views::NamedView; use cursive::view::View; use cursive::Printer; -use libimagrt::runtime::Runtime; +use libimagstore::store::Store; use crate::views::dashboard::*; use crate::views::statusview::*; -pub struct MainView<'a>(Runtime<'a>, LinearLayout); +pub struct MainView(Arc<Store>, LinearLayout); impl MainView { - fn new(rt: Runtime) -> NamedView<Self> { - NamedView::<MainView>::new(MainView(rt, { + pub fn new(store: Store) -> NamedView<Self> { + let store = Arc::new(store); + + NamedView::<MainView>::new("Main", MainView(store.clone(), { LinearLayout::horizontal() - .child(NamedView::<Dashboard>::new("Dashboard", Dashboard::new())) - .child(NamedView::<StatusView>::new("NamedView", StatusView::new())) + .child(NamedView::<Dashboard>::new("Dashboard", Dashboard::new(store.clone()))) + .child(NamedView::<StatusView>::new("NamedView", { + StatusView::new(store.clone()) + })) })) } } -impl<'a> View for MainView<'a> { +impl View for MainView { fn draw(&self, printer: &Printer) { self.1.draw(printer) } diff --git a/bin/imag-tui/src/views/statusview.rs b/bin/imag-tui/src/views/statusview.rs index 72b29ce3..dc119166 100644 --- a/bin/imag-tui/src/views/statusview.rs +++ b/bin/imag-tui/src/views/statusview.rs @@ -17,18 +17,29 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // +use std::sync::Arc; + use cursive::views::LinearLayout; +use cursive::views::Layer; use cursive::views::EditView; +use cursive::views::ResizedView; +use cursive::views::TextView; use cursive::view::View; +use cursive::theme::ColorStyle; use cursive::Printer; +use cursive::view::SizeConstraint; -use libimagrt::runtime::Runtime; +use libimagstore::store::Store; -pub struct StatusView(CurrentStatusView); +pub struct StatusView(Arc<Store>, ResizedView<CurrentStatusView>); impl StatusView { - pub fn new() -> Self { - StatusView(CurrentStatusView::Empty) + pub fn new(store: Arc<Store>) -> Self { + StatusView(store, { + let mut rv = ResizedView::with_min_height(2, CurrentStatusView::new()); + rv.set_height(SizeConstraint::Free); + rv + }) } } @@ -40,7 +51,7 @@ impl View for StatusView { enum CurrentStatusView { - Empty, + Standard(LinearLayout), /// A list of buttons to click Buttons(LinearLayout), @@ -50,13 +61,25 @@ enum CurrentStatusView { /// A Combination of a current shell line including a list of autocompletions AutoCompleteList(LinearLayout), +} +impl CurrentStatusView { + fn new() -> Self { + CurrentStatusView::Standard({ + LinearLayout::vertical() + .child(Layer::with_color({ + let mut rv = ResizedView::with_max_width(12, TextView::new("[imag]")); + rv.set_width(SizeConstraint::Free); + rv + }, ColorStyle::title_primary())) + }) + } } impl View for CurrentStatusView { fn draw(&self, printer: &Printer) { match self { - CurrentStatusView::Empty => { }, + CurrentStatusView::Standard(ll) => ll.draw(printer), CurrentStatusView::Buttons(ll) => ll.draw(printer), CurrentStatusView::ShellLine(ev) => ev.draw(printer), CurrentStatusView::AutoCompleteList(ll) => ll.draw(printer), |