Skip to content

Commit 246886c

Browse files
Daniel Xufacebook-github-bot
authored andcommitted
Support custom rows
Summary: There are people using custom rows. They map well to new panels. I've left the name in b/c it seems like a hassle to change, but this otherwise functions the same. Reviewed By: lnyng Differential Revision: D74616934 fbshipit-source-id: 925c3d74ae001cc6b823134371053ed1bcd5731d
1 parent f8e5ada commit 246886c

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

below/view/src/summary_view.rs

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use cursive::view::View;
1818
use cursive::views::LinearLayout;
1919
use cursive::views::PaddedView;
2020
use cursive::views::Panel;
21-
use cursive::views::TextView;
2221

2322
use crate::ViewState;
2423

@@ -28,8 +27,6 @@ mod render_impl {
2827
use std::str::FromStr;
2928

3029
use base_render::RenderConfig;
31-
use cursive::theme::Effect;
32-
use cursive::theme::Style;
3330
use cursive::utils::markup::StyledString;
3431
use cursive::views::TextView;
3532
use model::Model;
@@ -94,10 +91,6 @@ mod render_impl {
9491
value: String,
9592
}
9693

97-
fn bold(s: &str) -> StyledString {
98-
StyledString::styled(s, Style::from(Effect::Bold))
99-
}
100-
10194
pub fn gather<T: Queriable>(
10295
model: &T,
10396
items: impl Iterator<Item = ViewItem<T::FieldId>>,
@@ -112,19 +105,28 @@ mod render_impl {
112105
group
113106
}
114107

115-
pub fn render_extra_row(extra_row: &SummaryViewExtraRow, model: &Model) -> StyledString {
116-
let mut row = StyledString::new();
117-
if let Some(title) = &extra_row.title {
118-
row.append(title.clone());
119-
}
120-
for item in &extra_row.items {
121-
if !row.is_empty() {
122-
row.append(" | ");
123-
}
124-
row.append(bold(&format!("{} ", item.config.render_config.get_title())));
108+
pub fn render_extra_group(group: &SummaryViewExtraRow, model: &Model) -> TextView {
109+
let mut view = TextView::new("");
110+
let title_width = group
111+
.items
112+
.iter()
113+
.map(|item| item.config.render_config.get_title().len() + 2)
114+
.max()
115+
.unwrap_or(10);
116+
117+
for item in &group.items {
118+
let mut row = StyledString::new();
119+
row.append(base_render::get_fixed_width(
120+
item.config.render_config.get_title(),
121+
title_width,
122+
));
125123
row.append(item.render_tight(model));
124+
row.append('\n');
125+
126+
view.append(row);
126127
}
127-
row
128+
129+
view
128130
}
129131

130132
pub fn gather_read_write_models<'a, T: 'a + Queriable>(
@@ -254,7 +256,7 @@ mod render_impl {
254256
pub items: Vec<ViewItem<model::ModelFieldId>>,
255257
}
256258

257-
pub fn get_summary_view_extra_rows(viewrc: &ViewRc) -> Vec<SummaryViewExtraRow> {
259+
pub fn get_summary_view_extra_group(viewrc: &ViewRc) -> Vec<SummaryViewExtraRow> {
258260
if let Some(viewrc_rows) = viewrc.summary_view_extra_rows.as_ref() {
259261
viewrc_rows
260262
.iter()
@@ -311,11 +313,13 @@ fn fill_content(c: &mut Cursive, v: &mut LinearLayout) {
311313

312314
let model = view_state.model.borrow();
313315
// TODO: Save the parsed extra rows in a struct and reuse
314-
let extra_rows = render_impl::get_summary_view_extra_rows(&view_state.viewrc);
315-
for extra_row in extra_rows {
316-
view.add_child(TextView::new(render_impl::render_extra_row(
317-
&extra_row, &model,
318-
)));
316+
let extra_groups = render_impl::get_summary_view_extra_group(&view_state.viewrc);
317+
for extra_group in extra_groups {
318+
let mut panel = Panel::new(render_impl::render_extra_group(&extra_group, &model));
319+
if let Some(title) = &extra_group.title {
320+
panel.set_title(title);
321+
}
322+
view.add_child(pad(panel));
319323
}
320324

321325
*v = view;

0 commit comments

Comments
 (0)