From d2e75ff09b1b94c895b8f5f59e0f9b3488b216be Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 30 Jan 2026 16:35:29 -0600 Subject: [PATCH] dragging and dropping the verse_options works with draggable row now --- src/core/songs.rs | 2 +- src/ui/song_editor.rs | 34 ++++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/core/songs.rs b/src/core/songs.rs index d5c5f23..4db9b4e 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -721,7 +721,7 @@ pub async fn update_song_in_db( ) -> Result<()> { // self.update_item(item.clone(), index)?; - debug!(?item); + // debug!(?item); let verse_order = ron::ser::to_string(&item.verses).into_diagnostic()?; diff --git a/src/ui/song_editor.rs b/src/ui/song_editor.rs index 1224ffa..7c7ef9c 100644 --- a/src/ui/song_editor.rs +++ b/src/ui/song_editor.rs @@ -81,6 +81,7 @@ pub struct SongEditor { verses: Option>, hovered_verse_chip: Option, stroke_color_picker_open: bool, + dragging_verse_chip: bool, } pub enum Action { @@ -117,6 +118,7 @@ pub enum Message { ChipHovered(Option), ChipDropped((usize, Vec, String)), ChipReorder(draggable::DragEvent), + DraggingChipStart, } impl SongEditor { @@ -194,6 +196,7 @@ impl SongEditor { verses: None, editing_verse_order: false, hovered_verse_chip: None, + dragging_verse_chip: false, } } pub fn update(&mut self, message: Message) -> Action { @@ -456,6 +459,9 @@ impl SongEditor { } draggable::DragEvent::Canceled { index } => (), }, + Message::DraggingChipStart => { + self.dragging_verse_chip = !self.dragging_verse_chip; + } Message::None => (), } Action::None @@ -585,9 +591,15 @@ impl SongEditor { dnd_source::>( verse_chip_wrapped.clone(), ) - .on_start(Some(Message::None)) - .on_finish(Some(Message::None)) - .on_cancel(Some(Message::None)) + .on_start(Some( + Message::DraggingChipStart, + )) + .on_finish(Some( + Message::DraggingChipStart, + )) + .on_cancel(Some( + Message::DraggingChipStart, + )) .drag_content(move || Box::new(verse)) .drag_icon( move |_| { @@ -706,14 +718,20 @@ impl SongEditor { vec![] }; - let verse_order = container(row![ - scrollable( + let verse_order_items = if self.dragging_verse_chip { + Element::from(row(verse_order_items).spacing(space_s)) + } else { + Element::from( draggable::row(verse_order_items) .on_drag(|event| Message::ChipReorder(event)) - .spacing(space_s) + .spacing(space_s), ) - .direction(Direction::Horizontal(Scrollbar::new())) - .spacing(space_s), + }; + + let verse_order = container(row![ + scrollable(verse_order_items) + .direction(Direction::Horizontal(Scrollbar::new())) + .spacing(space_s), horizontal_space(), verse_chips_edit_toggle ])