diff --git a/src/main.rs b/src/main.rs index 58526be..ddb3097 100644 --- a/src/main.rs +++ b/src/main.rs @@ -344,61 +344,59 @@ fn draw_title(f: &mut Frame, area: Rect, app: &App) { } fn draw_content(f: &mut Frame, area: Rect, app: &App) { - let side_open = app.formula_panel_open || app.category_panel_open || app.view_panel_open; + let panel_count = [ + app.formula_panel_open, + app.category_panel_open, + app.view_panel_open, + ] + .iter() + .filter(|&&b| b) + .count(); - if side_open { - let side_w = 32u16; + let grid_area = if panel_count == 0 { + area + } else { let chunks = Layout::default() .direction(Direction::Horizontal) - .constraints([Constraint::Min(40), Constraint::Length(side_w)]) + .constraints([Constraint::Min(40), Constraint::Length(32)]) .split(area); - f.render_widget( - GridWidget::new(&app.model, &app.mode, &app.search_query), - chunks[0], - ); - - let side = chunks[1]; - let panel_count = [ - app.formula_panel_open, - app.category_panel_open, - app.view_panel_open, - ] - .iter() - .filter(|&&b| b) - .count() as u16; - let ph = side.height / panel_count.max(1); - let mut y = side.y; + let constraints: Vec = + vec![Constraint::Ratio(1, panel_count as u32); panel_count]; + let panel_areas = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(chunks[1]); + let mut slot = 0; if app.formula_panel_open { - let a = Rect::new(side.x, y, side.width, ph); f.render_widget( FormulaPanel::new(&app.model, &app.mode, app.formula_cursor), - a, + panel_areas[slot], ); - y += ph; + slot += 1; } if app.category_panel_open { - let a = Rect::new(side.x, y, side.width, ph); f.render_widget( CategoryPanel::new(&app.model, &app.mode, app.cat_panel_cursor), - a, + panel_areas[slot], ); - y += ph; + slot += 1; } if app.view_panel_open { - let a = Rect::new(side.x, y, side.width, ph); f.render_widget( ViewPanel::new(&app.model, &app.mode, app.view_panel_cursor), - a, + panel_areas[slot], ); } - } else { - f.render_widget( - GridWidget::new(&app.model, &app.mode, &app.search_query), - area, - ); - } + + chunks[0] + }; + + f.render_widget( + GridWidget::new(&app.model, &app.mode, &app.search_query), + grid_area, + ); } fn draw_tile_bar(f: &mut Frame, area: Rect, app: &App) {