diff --git a/ui/rsc/entry.ui b/ui/rsc/entry.ui new file mode 100644 index 0000000..6c066e3 --- /dev/null +++ b/ui/rsc/entry.ui @@ -0,0 +1,33 @@ + + + + diff --git a/ui/rsc/pane/sidebar.ui b/ui/rsc/pane/sidebar.ui index 62edd8d..86c59c0 100644 --- a/ui/rsc/pane/sidebar.ui +++ b/ui/rsc/pane/sidebar.ui @@ -15,7 +15,28 @@ - + + + never + automatic + + + vertical + 12 + 12 + 12 + 12 + 12 + + + browse + navigation-sidebar + + + + + + @@ -26,7 +47,7 @@ 12 12 - + Create New Profile suggested-action diff --git a/ui/rsc/resources.gresource.xml b/ui/rsc/resources.gresource.xml index 5ef5672..b1d3e98 100644 --- a/ui/rsc/resources.gresource.xml +++ b/ui/rsc/resources.gresource.xml @@ -1,6 +1,7 @@ + entry.ui window.ui pane/main.ui pane/sidebar.ui diff --git a/ui/src/config.rs b/ui/src/config.rs index 75c4a9d..39f6d88 100644 --- a/ui/src/config.rs +++ b/ui/src/config.rs @@ -58,7 +58,6 @@ pub fn load_config() -> Result<(), anyhow::Error> { while rx.try_recv().is_ok() {} // write the configuration - eprintln!("Saving configuration..."); if let Ok(config) = config.try_read() { if let Err(e) = save_config(&config) { eprintln!("Failed to save configuration: {}", e); diff --git a/ui/src/main.rs b/ui/src/main.rs index 2bd44e0..fa21709 100644 --- a/ui/src/main.rs +++ b/ui/src/main.rs @@ -42,6 +42,17 @@ fn build_ui(app: &adw::Application) { let window = wrapper::Window::new(app); window.set_application(Some(app)); + // load profiles from configuration + let sidebar = window.imp().sidebar.imp(); + + let config = config::get_config() + .expect("Failed to get configuration"); + for game in config.game.iter() { + let entry = wrapper::entry::Entry::new(); + entry.set_exe(game.exe.clone()); + sidebar.profiles.append(&entry); + } + // register main pane signals let main = window.imp().main.imp(); diff --git a/ui/src/wrapper.rs b/ui/src/wrapper.rs index 5a981df..23f0f95 100644 --- a/ui/src/wrapper.rs +++ b/ui/src/wrapper.rs @@ -3,6 +3,7 @@ use gtk; use adw; use gtk::glib::types::StaticTypeExt; +pub mod entry; pub mod pane; pub mod pref; diff --git a/ui/src/wrapper/entry.rs b/ui/src/wrapper/entry.rs new file mode 100644 index 0000000..90e2a88 --- /dev/null +++ b/ui/src/wrapper/entry.rs @@ -0,0 +1,18 @@ +use gtk::glib; +use gtk; + +pub mod entry; + +glib::wrapper! { + pub struct Entry(ObjectSubclass) + @extends + gtk::ListBoxRow, gtk::Widget, + @implements + gtk::Accessible, gtk::Actionable, gtk::Buildable, gtk::ConstraintTarget; +} + +impl Entry { + pub fn new() -> Self { + glib::Object::new() + } +} diff --git a/ui/src/wrapper/entry/entry.rs b/ui/src/wrapper/entry/entry.rs new file mode 100644 index 0000000..0a65df7 --- /dev/null +++ b/ui/src/wrapper/entry/entry.rs @@ -0,0 +1,41 @@ +use std::cell::RefCell; + +use gtk::glib; +use gtk::subclass::prelude::*; +use gtk::prelude::*; + +#[derive(gtk::CompositeTemplate, glib::Properties, Default)] +#[properties(wrapper_type = super::Entry)] +#[template(resource = "/gay/pancake/lsfg-vk/entry.ui")] +pub struct Entry { + #[property(get, set)] + exe: RefCell, + + #[template_child] + pub delete: TemplateChild, +} + +#[glib::object_subclass] +impl ObjectSubclass for Entry { + const NAME: &'static str = "LSEntry"; + type Type = super::Entry; + type ParentType = gtk::ListBoxRow; + + fn class_init(klass: &mut Self::Class) { + klass.bind_template(); + } + + fn instance_init(obj: &glib::subclass::InitializingObject) { + obj.init_template(); + } +} + +#[glib::derived_properties] +impl ObjectImpl for Entry { + fn constructed(&self) { + self.parent_constructed(); + } +} + +impl WidgetImpl for Entry {} +impl ListBoxRowImpl for Entry {} diff --git a/ui/src/wrapper/pane/sidebar.rs b/ui/src/wrapper/pane/sidebar.rs index c43c31e..20ea990 100644 --- a/ui/src/wrapper/pane/sidebar.rs +++ b/ui/src/wrapper/pane/sidebar.rs @@ -5,7 +5,10 @@ use adw::subclass::prelude::*; #[derive(gtk::CompositeTemplate, Default)] #[template(resource = "/gay/pancake/lsfg-vk/pane/sidebar.ui")] pub struct PaneSidebar { - + #[template_child] + pub profiles: TemplateChild, + #[template_child] + pub create: TemplateChild } #[glib::object_subclass]