This commit is contained in:
parent
6d8a24ea38
commit
bb4f402803
3 changed files with 93 additions and 67 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue