performance and styling tweaks
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2026-02-05 17:07:03 -06:00
parent 6d8a24ea38
commit bb4f402803
3 changed files with 93 additions and 67 deletions

View file

@ -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<Vec<String>> {
@ -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<VerseName> = 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

View file

@ -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),

View file

@ -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<Message> = 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)