diff --git a/Cargo.toml b/Cargo.toml index 22f1a46..cb98dfc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ gstreamer = "0.23" gstreamer-app = "0.23" # gstreamer-video = "0.23" # gstreamer-allocators = "0.23" -# cosmic-time = "0.2.0" +# cosmic-time = { git = "https://githubg.com/pop-os/cosmic-time" } url = "2" colors-transform = "0.2.11" # femtovg = { version = "0.16.0", features = ["wgpu"] } diff --git a/src/main.rs b/src/main.rs index 228d234..a247f4a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -118,7 +118,7 @@ enum Message { SongEditor(song_editor::Message), File(PathBuf), DndEnter(Entity, Vec), - DndDrop(Entity, Option, DndAction), + DndDrop, OpenWindow, CloseWindow(Option), WindowOpened(window::Id, Option), @@ -634,16 +634,26 @@ impl cosmic::Application for App { debug!(?data); Task::none() } - Message::DndDrop(entity, service_item, action) => { - debug!(?entity); - debug!(?action); - debug!(?service_item); + Message::DndDrop => { + // debug!(?entity); + // debug!(?action); + // debug!(?service_item); - if let Some(item) = service_item { - self.nav_model - .insert() - .text(item.title.clone()) - .data(item); + if let Some(library) = self.library { + if let Some((lib, item)) = library.dragged_item { + // match lib { + // core::model::LibraryKind::Song => , + // core::model::LibraryKind::Video => todo!(), + // core::model::LibraryKind::Image => todo!(), + // core::model::LibraryKind::Presentation => todo!(), + // } + let item = library.get_song(item).unwrap(); + let item = ServiceItem::from(item); + self.nav_model + .insert() + .text(item.title.clone()) + .data(item); + } } Task::none() } diff --git a/src/ui/library.rs b/src/ui/library.rs index 1c09e13..3e8550d 100644 --- a/src/ui/library.rs +++ b/src/ui/library.rs @@ -39,13 +39,14 @@ pub(crate) struct Library { library_hovered: Option, selected_item: Option<(LibraryKind, i32)>, hovered_item: Option<(LibraryKind, i32)>, - dragged_item: Option<(LibraryKind, i32)>, + pub dragged_item: Option<(LibraryKind, i32)>, editing_item: Option<(LibraryKind, i32)>, db: SqlitePool, } pub(crate) enum Action { OpenItem(Option<(LibraryKind, i32)>), + DraggedItem(Option<(LibraryKind, i32)>), Task(Task), None, } @@ -59,6 +60,7 @@ pub(crate) enum Message { OpenLibrary(Option), HoverItem(Option<(LibraryKind, i32)>), SelectItem(Option<(LibraryKind, i32)>), + DragItem(Option<(LibraryKind, i32)>), UpdateSong(Song), SongChanged, UpdateImage(Image), @@ -118,6 +120,10 @@ impl<'a> Library { Message::SelectItem(item) => { self.selected_item = item; } + Message::DragItem(item) => { + self.dragged_item = item; + // return Action::DraggedItem(item); + } Message::UpdateSong(song) => { let Some((kind, index)) = self.editing_item else { error!("Not editing an item"); @@ -366,6 +372,7 @@ impl<'a> Library { .map(|_| Message::None); DndSource::::new( mouse_area(visual_item) + .on_drag(Message::DragItem(Some((model.kind, index as i32)))) .on_enter(Message::HoverItem( Some(( model.kind,