@@ -18,7 +18,6 @@ use cursive::view::View;
1818use cursive:: views:: LinearLayout ;
1919use cursive:: views:: PaddedView ;
2020use cursive:: views:: Panel ;
21- use cursive:: views:: TextView ;
2221
2322use 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