diff --git a/src/core/songs.rs b/src/core/songs.rs index 14945f3..dd5909b 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -871,16 +871,16 @@ impl Song { ) { let lyric_copy = lyrics.into(); if let Some(verse_map) = self.verse_map.as_mut() { - debug!(?verse_map, "should update"); + // debug!(?verse_map, "should update"); verse_map .entry(*verse) .and_modify(|old_lyrics| { *old_lyrics = lyric_copy.clone() }) .or_insert(lyric_copy); - debug!(?verse_map, "should be updated"); + // debug!(?verse_map, "should be updated"); } else { - debug!(?self.verse_map, "should create"); + // debug!(?self.verse_map, "should create"); let mut verse_map = HashMap::new(); verse_map .entry(*verse) @@ -890,7 +890,7 @@ impl Song { .or_insert(lyric_copy); self.verse_map = Some(verse_map); } - debug!(?self.verse_map); + // debug!(?self.verse_map); } pub fn get_lyrics(&self) -> Result> { @@ -991,7 +991,15 @@ impl Song { { verse_map.insert(verse, lyric); } - todo!("need to finish update the versename in the vec") + let Some(verses) = self.verses.clone() else { + return; + }; + let mut new_verses: Vec = verses + .into_iter() + .filter(|verse| verse != old_verse) + .collect(); + new_verses.push(verse); + self.verses = Some(new_verses) } // TODO update_verse needs to also change the lyrics for the song such that diff --git a/src/ui/song_editor.rs b/src/ui/song_editor.rs index 9772e66..6b6da86 100644 --- a/src/ui/song_editor.rs +++ b/src/ui/song_editor.rs @@ -14,7 +14,7 @@ use cosmic::{ iced_core::widget::tree, iced_wgpu::graphics::text::cosmic_text::fontdb, iced_widget::{ - column, row, + column, horizontal_rule, row, scrollable::{Direction, Scrollbar}, stack, vertical_rule, }, @@ -446,16 +446,17 @@ impl SongEditor { ) => { if let Some(mut song) = self.song.clone() { - let old_verse_name = verse.verse_name.clone(); + let old_verse_name = + verse.verse_name.clone(); let verse_name = song .verse_name_from_str( verse_name, old_verse_name, ); - let lyric = verse.lyric.clone(); song.update_verse_name( - index, verse_name, lyric, + verse_name, + &old_verse_name, ); return self.update_song(song); @@ -934,11 +935,16 @@ impl SongEditor { Element::from( column(verse_list.iter().enumerate().map( |(index, v)| { - v.view().map(move |message| { - Message::VerseEditorMessage(( - index, message, - )) - }) + column![ + v.view().map(move |message| { + Message::VerseEditorMessage(( + index, message, + )) + }), + horizontal_rule(2) + ] + .spacing(space_m) + .into() }, )) .spacing(space_m), diff --git a/src/ui/widgets/verse_editor.rs b/src/ui/widgets/verse_editor.rs index 789dfab..8633e96 100644 --- a/src/ui/widgets/verse_editor.rs +++ b/src/ui/widgets/verse_editor.rs @@ -54,11 +54,16 @@ impl VerseEditor { pub fn update(&mut self, message: Message) -> Action { match message { Message::UpdateLyric(action) => { - self.content.perform(action); - let lyrics = self.content.text(); - self.lyric = lyrics.clone(); - let verse = self.verse_name; - Action::UpdateVerse((verse, lyrics)) + self.content.perform(action.clone()); + match action { + text_editor::Action::Edit(_edit) => { + let lyrics = self.content.text(); + self.lyric = lyrics.clone(); + let verse = self.verse_name; + Action::UpdateVerse((verse, lyrics)) + } + _ => Action::None, + } } Message::UpdateVerseName(verse_name) => { Action::UpdateVerseName(verse_name) @@ -94,57 +99,64 @@ impl VerseEditor { let verse_title = row![combo, horizontal_space(), delete_button]; - let lyric = text_editor(&self.content) - .on_action(Message::UpdateLyric) - .padding(space_m) - .class(theme::iced::TextEditor::Custom(Box::new( - move |t, s| { - let neutral = t.cosmic().palette.neutral_9; - let mut base_style = text_editor::Style { - background: Background::Color( - t.cosmic() - .background - .small_widget - .with_alpha(0.25) + let lyric: Element = if self.verse_name + == VerseName::Blank + { + horizontal_space().into() + } else { + text_editor(&self.content) + .on_action(Message::UpdateLyric) + .padding(space_m) + .class(theme::iced::TextEditor::Custom(Box::new( + move |t, s| { + let neutral = t.cosmic().palette.neutral_9; + let mut base_style = text_editor::Style { + background: Background::Color( + t.cosmic() + .background + .small_widget + .with_alpha(0.25) + .into(), + ), + border: Border::default() + .rounded(space_s) + .width(2) + .color( + t.cosmic().bg_component_divider(), + ), + icon: t + .cosmic() + .primary_component_color() .into(), - ), - border: Border::default() + placeholder: neutral + .with_alpha(0.7) + .into(), + value: neutral.into(), + selection: t.cosmic().accent.base.into(), + }; + let hovered_border = Border::default() .rounded(space_s) - .width(2) - .color(t.cosmic().bg_component_divider()), - icon: t - .cosmic() - .primary_component_color() - .into(), - placeholder: neutral.with_alpha(0.7).into(), - value: neutral.into(), - selection: t.cosmic().accent.base.into(), - }; - let hovered_border = Border::default() - .rounded(space_s) - .width(3) - .color(t.cosmic().accent.hover); - match s { - text_editor::Status::Active => base_style, - text_editor::Status::Hovered => { - base_style.border = hovered_border; - base_style + .width(3) + .color(t.cosmic().accent.hover); + match s { + text_editor::Status::Active => base_style, + text_editor::Status::Hovered => { + base_style.border = hovered_border; + base_style + } + text_editor::Status::Focused => { + base_style.border = hovered_border; + base_style + } + text_editor::Status::Disabled => { + base_style + } } - text_editor::Status::Focused => { - base_style.border = hovered_border; - base_style - } - text_editor::Status::Disabled => base_style, - } - }, - ))) - // .style(|theme, status| { - // let mut style = - // text_editor::default(theme, status); - // style.border = Border::default().rounded(space_s); - // style - // }) - .height(150); + }, + ))) + .height(150) + .into() + }; container(column![verse_title, lyric].spacing(space_s)) .padding(space_s)