diff --git a/musicdb-client/src/gui.rs b/musicdb-client/src/gui.rs index d26bc03..8647423 100755 --- a/musicdb-client/src/gui.rs +++ b/musicdb-client/src/gui.rs @@ -33,6 +33,7 @@ use crate::{ gui_edit_song::EditorForSongs, gui_notif::{NotifInfo, NotifOverlay}, gui_screen::GuiScreen, + gui_song_adder::SongAdder, gui_text::Label, textcfg, }; @@ -1127,6 +1128,8 @@ pub enum GuiAction { EditSongs(Vec), // EditAlbums(Vec), // EditArtists(Vec), + OpenAddSongsMenu, + CloseAddSongsMenu, } pub enum Dragging { Artist(ArtistId), @@ -1307,6 +1310,19 @@ impl Gui { GuiAction::EditSongs(songs) => { self.gui.c_editing_songs = Some(EditorForSongs::new(songs)); } + GuiAction::OpenAddSongsMenu => { + if self.gui.c_song_adder.is_none() { + self.gui.c_song_adder = Some(SongAdder::new( + GuiElemCfg::default(), + self.high_performance, + self.line_height, + self.scroll_pixels_multiplier, + self.scroll_lines_multiplier, + self.scroll_pages_multiplier, + )); + } + } + GuiAction::CloseAddSongsMenu => self.gui.c_song_adder = None, } } } diff --git a/musicdb-client/src/gui_screen.rs b/musicdb-client/src/gui_screen.rs index c4c9795..d5832c1 100755 --- a/musicdb-client/src/gui_screen.rs +++ b/musicdb-client/src/gui_screen.rs @@ -19,6 +19,7 @@ use crate::{ gui_notif::NotifOverlay, gui_queue::QueueViewer, gui_settings::Settings, + gui_song_adder::SongAdder, gui_statusbar::StatusBar, gui_text::Label, gui_wrappers::Hotkey, @@ -49,6 +50,7 @@ pub struct GuiScreen { pub c_editing_songs: Option, pub c_status_bar: StatusBar, pub c_settings: Settings, + pub c_song_adder: Option, pub c_main_view: Panel, pub c_context_menu: Option>, pub idle: AnimationController, @@ -110,6 +112,7 @@ impl GuiScreen { scroll_sensitivity_lines, scroll_sensitivity_pages, ), + c_song_adder: None, c_main_view: Panel::new( GuiElemCfg::at(Rectangle::from_tuples((0.0, 0.0), (1.0, 0.9))), MainView { @@ -248,6 +251,7 @@ impl GuiElem for GuiScreen { ] .into_iter() .chain(self.c_editing_songs.as_mut().map(|v| v.elem_mut())) + .chain(self.c_song_adder.as_mut().map(|v| v.elem_mut()).into_iter()) .chain([ self.c_status_bar.elem_mut(), self.c_settings.elem_mut(), diff --git a/musicdb-client/src/gui_settings.rs b/musicdb-client/src/gui_settings.rs index f0ef684..ceb4c0c 100755 --- a/musicdb-client/src/gui_settings.rs +++ b/musicdb-client/src/gui_settings.rs @@ -68,6 +68,7 @@ pub struct SettingsContent { pub scroll_sensitivity: Panel<(Label, Slider)>, pub idle_time: Panel<(Label, Slider)>, pub save_button: Button<[Label; 1]>, + pub add_new_songs_button: Button<[Label; 1]>, pub keybinds: Vec>, pub keybinds_should_be_updated: Arc, pub keybinds_updated: bool, @@ -84,13 +85,14 @@ impl GuiElemChildren for SettingsContent { self.scroll_sensitivity.elem_mut(), self.idle_time.elem_mut(), self.save_button.elem_mut(), + self.add_new_songs_button.elem_mut(), ] .into_iter() .chain(self.keybinds.iter_mut().map(|v| v.elem_mut())), ) } fn len(&self) -> usize { - 7 + self.keybinds.len() + 8 + self.keybinds.len() } } pub struct KeybindInput { @@ -455,6 +457,17 @@ impl SettingsContent { Vec2::new(0.5, 0.5), )], ), + add_new_songs_button: Button::new( + GuiElemCfg::default(), + |_| vec![GuiAction::OpenAddSongsMenu], + [Label::new( + GuiElemCfg::default(), + "search for new songs".to_string(), + Color::WHITE, + None, + Vec2::new(0.5, 0.5), + )], + ), keybinds: vec![], keybinds_should_be_updated: Arc::new(AtomicBool::new(true)), keybinds_updated: false, @@ -537,7 +550,7 @@ impl GuiElem for Settings { scrollbox.config_mut().redraw = true; if scrollbox.children_heights.len() == scrollbox.children.len() { for (i, h) in scrollbox.children_heights.iter_mut().enumerate() { - *h = if i == 0 || i >= 7 { + *h = if i == 0 || i >= 8 { info.line_height * 2.0 } else { info.line_height diff --git a/musicdb-client/src/gui_song_adder.rs b/musicdb-client/src/gui_song_adder.rs new file mode 100644 index 0000000..2cdf176 --- /dev/null +++ b/musicdb-client/src/gui_song_adder.rs @@ -0,0 +1,187 @@ +use musicdb_lib::data::{AlbumId, ArtistId}; +use speedy2d::{color::Color, dimen::Vec2, Graphics2D}; + +use crate::{ + gui::{DrawInfo, GuiElem, GuiElemCfg}, + gui_base::{Button, Panel, ScrollBox}, + gui_text::Label, +}; + +pub struct SongAdder { + pub config: GuiElemCfg, + state: u8, + c_loading: Option