mirror of
https://github.com/FliegendeWurst/inboxid.git
synced 2024-11-09 10:50:40 +00:00
browse: workaround ScrollView issues
This commit is contained in:
parent
39a63ad966
commit
636e103303
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
use std::{cell::RefCell, cmp, collections::{HashMap, HashSet}, env, fmt::Display, io, sync::Arc};
|
use std::{cell::RefCell, cmp, collections::{HashMap, HashSet}, env, fmt::Display, io, sync::Arc};
|
||||||
|
|
||||||
use cursive::{Cursive, CursiveExt, Vec2};
|
use cursive::{Cursive, Vec2};
|
||||||
use cursive::align::HAlign;
|
use cursive::align::HAlign;
|
||||||
use cursive::event::{Event, Key};
|
use cursive::event::{Event, Key};
|
||||||
use cursive::traits::Identifiable;
|
use cursive::traits::Identifiable;
|
||||||
use cursive::view::{Scrollable, ScrollStrategy, SizeConstraint, View};
|
use cursive::view::{Scrollable, SizeConstraint, View};
|
||||||
use cursive::views::{Checkbox, LinearLayout, OnEventView, Panel, ResizedView, SelectView, TextView};
|
use cursive::views::{Checkbox, LinearLayout, NamedView, OnEventView, Panel, ResizedView, ScrollView, SelectView, TextView};
|
||||||
use cursive_tree_view::{Placement, TreeEntry, TreeView};
|
use cursive_tree_view::{Placement, TreeEntry, TreeView};
|
||||||
use inboxid::*;
|
use inboxid::*;
|
||||||
use io::Write;
|
use io::Write;
|
||||||
@ -221,12 +221,10 @@ fn show_listing(mailbox: &str) -> Result<()> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
tree.set_on_select(tree_on_select);
|
|
||||||
tree.set_on_submit(|siv, _row| {
|
tree.set_on_submit(|siv, _row| {
|
||||||
siv.focus_name("mail").unwrap();
|
siv.focus_name("mail").unwrap();
|
||||||
});
|
});
|
||||||
let mut tree = tree.with_name("tree").scrollable();
|
let tree = tree.on_select(tree_on_select).with_name("tree").scrollable().with_name("tree_scroller");
|
||||||
tree.set_scroll_strategy(ScrollStrategy::StickToBottom);
|
|
||||||
let update_flags2 = Arc::clone(&update_flags);
|
let update_flags2 = Arc::clone(&update_flags);
|
||||||
let update_flags3 = Arc::clone(&update_flags);
|
let update_flags3 = Arc::clone(&update_flags);
|
||||||
let tree = OnEventView::new(tree)
|
let tree = OnEventView::new(tree)
|
||||||
@ -330,7 +328,16 @@ fn show_listing(mailbox: &str) -> Result<()> {
|
|||||||
|
|
||||||
siv.add_global_callback('q', |s| s.quit());
|
siv.add_global_callback('q', |s| s.quit());
|
||||||
|
|
||||||
siv.run();
|
// manual event loop (to scroll to end of ScrollView)
|
||||||
|
let mut siv = siv.into_runner(cursive::backends::termion::Backend::init()?);
|
||||||
|
siv.refresh();
|
||||||
|
siv.call_on_name("tree_scroller", |tree: &mut ScrollView<NamedView<MailTreeView>>| {
|
||||||
|
tree.on_event(Event::Key(Key::End))
|
||||||
|
}).unwrap().process(&mut siv);
|
||||||
|
siv.refresh();
|
||||||
|
while siv.is_running() {
|
||||||
|
siv.step();
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -377,7 +384,7 @@ impl MailInfoView {
|
|||||||
const HEADERS_TO_DISPLAY: &[&str] = &["From", "Subject", "To"];
|
const HEADERS_TO_DISPLAY: &[&str] = &["From", "Subject", "To"];
|
||||||
|
|
||||||
impl View for MailInfoView {
|
impl View for MailInfoView {
|
||||||
fn draw(&self, printer: &cursive::Printer) {
|
fn draw(&self, printer: &cursive::Printer) {
|
||||||
if let Some(mail) = self.email {
|
if let Some(mail) = self.email {
|
||||||
let mut y = 0;
|
let mut y = 0;
|
||||||
for header in HEADERS_TO_DISPLAY {
|
for header in HEADERS_TO_DISPLAY {
|
||||||
@ -386,11 +393,11 @@ impl View for MailInfoView {
|
|||||||
x += header.len(/* ASCII-only */);
|
x += header.len(/* ASCII-only */);
|
||||||
printer.print((x, y), ": ");
|
printer.print((x, y), ": ");
|
||||||
x += 2;
|
x += 2;
|
||||||
printer.print((x, y), &mail.headers.get_all_values(header).join(" "));
|
printer.print((x, y), &mail.headers.get_all_values(header).join(" "));
|
||||||
y += 1;
|
y += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn required_size(&mut self, _constraint: Vec2) -> Vec2 {
|
fn required_size(&mut self, _constraint: Vec2) -> Vec2 {
|
||||||
(42, HEADERS_TO_DISPLAY.len()).into()
|
(42, HEADERS_TO_DISPLAY.len()).into()
|
||||||
|
Loading…
Reference in New Issue
Block a user