(&self, frame: &mut Frame, area: Rect)
| 623 | } |
| 624 | |
| 625 | fn render_bottom_bar(&self, frame: &mut Frame, area: Rect) { |
| 626 | let version = format!("v{}", env!("CARGO_PKG_VERSION")); |
| 627 | let mcp_status = crate::get_mcp_status_text(); |
| 628 | |
| 629 | // Determine MCP status color |
| 630 | let mcp_color = if mcp_status.contains("Ready") { |
| 631 | self.theme.success |
| 632 | } else if mcp_status.contains("Failed") { |
| 633 | self.theme.error |
| 634 | } else { |
| 635 | self.theme.warning |
| 636 | }; |
| 637 | |
| 638 | // Left: workspace path |
| 639 | let left = Paragraph::new(Line::from(Span::styled( |
| 640 | format!(" {}", self.workspace_display), |
| 641 | Style::default().fg(self.theme.muted), |
| 642 | ))); |
| 643 | frame.render_widget(left, area); |
| 644 | |
| 645 | // Right: MCP status | version |
| 646 | let right = Paragraph::new(Line::from(vec![ |
| 647 | Span::styled(&mcp_status, Style::default().fg(mcp_color)), |
| 648 | Span::styled( |
| 649 | format!(" | {} ", version), |
| 650 | Style::default().fg(self.theme.muted), |
| 651 | ), |
| 652 | ])) |
| 653 | .alignment(Alignment::Right); |
| 654 | frame.render_widget(right, area); |
| 655 | } |
| 656 | |
| 657 | fn render_logo(&self, frame: &mut Frame, area: Rect) { |
| 658 | let use_fancy_logo = area.width >= 80; |
no test coverage detected