From ffe175df1b52fa272282d1325878e68d99de4c94 Mon Sep 17 00:00:00 2001 From: Willem Date: Mon, 14 Apr 2025 10:27:27 -0400 Subject: [PATCH] formatted score debug into table, removed score info box from tui --- harmony/src/domain/score.rs | 26 +++++++++---------- harmony_tui/src/lib.rs | 45 +++------------------------------ harmony_tui/src/widget/score.rs | 2 +- 3 files changed, 17 insertions(+), 56 deletions(-) diff --git a/harmony/src/domain/score.rs b/harmony/src/domain/score.rs index 7f3d410..6fdab6a 100644 --- a/harmony/src/domain/score.rs +++ b/harmony/src/domain/score.rs @@ -4,7 +4,7 @@ use serde_value::Value; use super::{interpret::Interpret, topology::Topology}; pub trait Score: - std::fmt::Debug + DisplayValues + Send + Sync + CloneBoxScore + SerializeScore + std::fmt::Debug + ScoreToString + Send + Sync + CloneBoxScore + SerializeScore { fn create_interpret(&self) -> Box>; fn name(&self) -> String; @@ -40,25 +40,25 @@ where } } -pub trait DisplayValues { - fn display_value(&self) -> String; - fn print_value(&self, val: &Value, indent: usize) -> String; +pub trait ScoreToString { + fn print_score_details(&self) -> String; + fn format_value_as_string(&self, val: &Value, indent: usize) -> String; } -impl DisplayValues for S +impl ScoreToString for S where T: Topology, S: Score + 'static, { - fn display_value(&self) -> String { + fn print_score_details(&self) -> String { let mut output = String::new(); - output += &format!("{}\n", &self.name()); - output += &self.print_value(&self.serialize(), 0); + output += "\n"; + output += &self.format_value_as_string(&self.serialize(), 0); output += "\n"; output } - fn print_value(&self, val: &Value, indent: usize) -> String { + fn format_value_as_string(&self, val: &Value, indent: usize) -> String { let pad = " ".repeat(indent * 2); let mut output = String::new(); @@ -82,14 +82,14 @@ where Value::Option(opt) => match opt { Some(inner) => { output += &format!("{}Option:\n", pad); - output += &self.print_value(inner, indent + 1); + output += &self.format_value_as_string(inner, indent + 1); } None => output += &format!("{}None\n", pad), }, Value::Newtype(inner) => { output += &format!("{}Newtype:\n", pad); - output += &self.print_value(inner, indent + 1); + output += &self.format_value_as_string(inner, indent + 1); } Value::Seq(seq) => { @@ -98,7 +98,7 @@ where } else { output += &format!("{}[\n", pad); for item in seq { - output += &self.print_value(item, indent + 1); + output += &self.format_value_as_string(item, indent + 1); } output += &format!("{}]\n", pad); } @@ -112,7 +112,7 @@ where "{}+--------------------------+----------------------------+\n", pad ); - output += &format!("{}| {:<24} | {:<26} |\n", pad, "Key", "Value"); + output += &format!("{}| {:<24} | {:<26} |\n", pad, "score_name", self.name()); output += &format!( "{}+--------------------------+----------------------------+\n", pad diff --git a/harmony_tui/src/lib.rs b/harmony_tui/src/lib.rs index fdeedda..1d50d8d 100644 --- a/harmony_tui/src/lib.rs +++ b/harmony_tui/src/lib.rs @@ -1,7 +1,6 @@ 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}; @@ -14,9 +13,8 @@ use harmony::{maestro::Maestro, score::Score, topology::Topology}; use ratatui::{ self, Frame, layout::{Constraint, Layout, Position}, - style::{Color, Modifier, Style}, - text::{Line, Span, Text}, - widgets::{Block, Borders, Paragraph, Wrap}, + style::{Color, Style}, + widgets::{Block, Borders}, }; pub mod tui { @@ -161,15 +159,13 @@ impl HarmonyTUI { frame.render_widget(&help_block, help_area); frame.render_widget(HelpWidget::new(), help_block.inner(help_area)); - let [list_area, right_area] = + let [list_area, logger_area] = Layout::horizontal([Constraint::Min(30), Constraint::Percentage(100)]).areas(app_area); let block = Block::default().borders(Borders::RIGHT); frame.render_widget(&block, list_area); self.score.render(list_area, frame); - let [logger_area, info_area] = - Layout::vertical([Constraint::Min(30), Constraint::Percentage(100)]).areas(right_area); let tui_logger = tui_logger::TuiLoggerWidget::default() .style_error(Style::default().fg(Color::Red)) .style_warn(Style::default().fg(Color::LightRed)) @@ -179,42 +175,7 @@ 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 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(); let scores_read = scores.read().expect("Should be able to read scores"); diff --git a/harmony_tui/src/widget/score.rs b/harmony_tui/src/widget/score.rs index beae663..72fc5da 100644 --- a/harmony_tui/src/widget/score.rs +++ b/harmony_tui/src/widget/score.rs @@ -58,7 +58,7 @@ impl ScoreListWidget { score: score.clone_box(), }); info!("{:#?}\n\nConfirm Execution (Press y/n)", score); - info!("{:#?}", score.display_value()); + info!("{}", score.print_score_details()); } else { warn!("No Score selected, nothing to launch"); }