From f9d1935c7171716f4ff3445ff5bffc73a770ee20 Mon Sep 17 00:00:00 2001 From: Willem Date: Fri, 11 Apr 2025 15:49:09 -0400 Subject: [PATCH] wip: trying to output in a better format --- harmony_tui/src/lib.rs | 43 +++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/harmony_tui/src/lib.rs b/harmony_tui/src/lib.rs index 33de969..fdeedda 100644 --- a/harmony_tui/src/lib.rs +++ b/harmony_tui/src/lib.rs @@ -1,6 +1,7 @@ mod widget; use log::{debug, error, info}; +use prettytable::{Table, cell, row}; use tokio::sync::mpsc; use tokio_stream::StreamExt; use tui_logger::{TuiWidgetEvent, TuiWidgetState}; @@ -13,7 +14,8 @@ use harmony::{maestro::Maestro, score::Score, topology::Topology}; use ratatui::{ self, Frame, layout::{Constraint, Layout, Position}, - style::{Color, Style}, + style::{Color, Modifier, Style}, + text::{Line, Span, Text}, widgets::{Block, Borders, Paragraph, Wrap}, }; @@ -177,18 +179,41 @@ impl HarmonyTUI { .state(&self.tui_state); frame.render_widget(tui_logger, logger_area); - let info_block = Block::default().borders(Borders::ALL).title("Score Details"); - - let scores = &self.score.get_selected_score(); - let mut info = String::new(); - scores.into_iter().for_each(|score| { - info += &score.display_value(); - }); - let info_paragraph = Paragraph::new(info) + let info_block = Block::default() + .borders(Borders::ALL) + .title("Score Details"); + + let mut text_output = Text::default(); + if let Some(score) = self.score.get_selected_score() { + //scores.into_iter().for_each(|score| { + // info += &score.display_value(); + //}); + text_output = self.format_score_for_output(score); + } + let info_paragraph = Paragraph::new(text_output) .block(info_block) .wrap(Wrap { trim: true }); frame.render_widget(info_paragraph, info_area); } + //TODO trying to format the output in a way that looks good in the debug output + //this has not changed anything so far + fn format_score_for_output(&self, score: Box>) -> Text<'_> { + let mut text = Text::default(); + let name_line = Line::from(vec![Span::styled( + score.name(), + Style::default().add_modifier(Modifier::BOLD), + )]); + text.lines.push(name_line); + + let val = score.serialize(); + let pretty = score.print_value(&val, 0); + + for line in pretty.lines() { + text.lines.push(Line::from(line.to_string())); + } + + text + } fn scores_list(maestro: &Maestro) -> Vec>> { let scores = maestro.scores();