summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-04-09 21:51:35 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-04-09 21:51:35 +0200
commit004519356564d647aec11cba757f1e1b42e7f8df (patch)
tree7fa1869ca6047b09c55ac7a6b06dc1531343bf4c
parent7636d3d5ce8423e6b5490e65553ef7f906f2608c (diff)
fixup! TMP
-rw-r--r--bin/imag-tui/Cargo.toml7
-rw-r--r--bin/imag-tui/src/lib.rs6
-rw-r--r--bin/imag-tui/src/views/dashboard.rs10
-rw-r--r--bin/imag-tui/src/views/mainview.rs20
-rw-r--r--bin/imag-tui/src/views/statusview.rs35
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),