diff --git a/src/main.rs b/src/main.rs index ddb3097..58526be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -344,59 +344,61 @@ fn draw_title(f: &mut Frame, area: Rect, app: &App) { } fn draw_content(f: &mut Frame, area: Rect, app: &App) { - let panel_count = [ - app.formula_panel_open, - app.category_panel_open, - app.view_panel_open, - ] - .iter() - .filter(|&&b| b) - .count(); + let side_open = app.formula_panel_open || app.category_panel_open || app.view_panel_open; - let grid_area = if panel_count == 0 { - area - } else { + if side_open { + let side_w = 32u16; let chunks = Layout::default() .direction(Direction::Horizontal) - .constraints([Constraint::Min(40), Constraint::Length(32)]) + .constraints([Constraint::Min(40), Constraint::Length(side_w)]) .split(area); - 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]); + 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 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), - panel_areas[slot], + a, ); - slot += 1; + y += ph; } 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), - panel_areas[slot], + a, ); - slot += 1; + y += ph; } 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), - panel_areas[slot], + a, ); } - - chunks[0] - }; - - f.render_widget( - GridWidget::new(&app.model, &app.mode, &app.search_query), - grid_area, - ); + } else { + f.render_widget( + GridWidget::new(&app.model, &app.mode, &app.search_query), + area, + ); + } } fn draw_tile_bar(f: &mut Frame, area: Rect, app: &App) {