From 7db25ac5627e337b5af369dbd72b1234f0f5233b Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Wed, 28 Oct 2020 02:24:00 +0100 Subject: [PATCH] use gtk-macros --- .gitignore | 2 +- src/widgets/accounts/add.rs | 50 +++++++++++---------------------- src/widgets/accounts/list.rs | 53 +++++++++++++++-------------------- src/widgets/accounts/row.rs | 18 ++++-------- src/widgets/providers/list.rs | 18 ++++-------- 5 files changed, 51 insertions(+), 90 deletions(-) diff --git a/.gitignore b/.gitignore index 09d1e22..a622494 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ src/config.rs src/static_resources.rs *.*.in~ *.*~ - +builddir/ diff --git a/src/widgets/accounts/add.rs b/src/widgets/accounts/add.rs index 266159a..bc029dc 100644 --- a/src/widgets/accounts/add.rs +++ b/src/widgets/accounts/add.rs @@ -15,12 +15,10 @@ pub struct AddAccountDialog { impl AddAccountDialog { pub fn new(sender: Sender) -> Rc { let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/add_account.ui"); - let widget: libhandy::Window = builder - .get_object("add_dialog") - .expect("Failed to retrieve AddAccountDialog"); + get_widget!(builder, libhandy::Window, add_dialog); let add_account_dialog = Rc::new(Self { - widget, + widget: add_dialog, builder, sender, }); @@ -36,14 +34,6 @@ impl AddAccountDialog { account.insert() } - fn notify_err(&self, error_msg: &str) { - get_widget!(self.builder, gtk::Revealer, notification); - get_widget!(self.builder, gtk::Label, notification_msg); - - notification_msg.set_text(error_msg); - notification.set_reveal_child(true); // Display the notification - } - fn setup_signals(&self) { get_widget!(self.builder, gtk::Entry, username_entry); get_widget!(self.builder, gtk::Entry, token_entry); @@ -65,19 +55,15 @@ impl AddAccountDialog { fn setup_actions(&self, s: Rc) { let actions = gio::SimpleActionGroup::new(); - let back = gio::SimpleAction::new("back", None); - let sender = self.sender.clone(); - - let weak_dialog = self.widget.downgrade(); - back.connect_activate(move |_, _| { - if let Some(dialog) = weak_dialog.upgrade() { + action!( + actions, + "back", + clone!(@weak self.widget as dialog => move |_, _| { dialog.destroy(); - } - }); - actions.add_action(&back); + }) + ); let save = gio::SimpleAction::new("save", None); - save.connect_activate(clone!(@strong self.builder as builder => move |_, _| { get_widget!(builder, gtk::Entry, username_entry); get_widget!(builder, gtk::Entry, token_entry); @@ -86,12 +72,6 @@ impl AddAccountDialog { // get_widget!(builder, gtk::Entry, period_entry); // get_widget!(builder, gtk::Entry, algorithm_model); - - - - - - /* let new_account = NewAccount { username: username_entry.get_text().unwrap().to_string(), @@ -109,12 +89,14 @@ impl AddAccountDialog { save.set_enabled(false); actions.add_action(&save); - let scan_qr = gio::SimpleAction::new("scan-qr", None); - let sender = self.sender.clone(); - scan_qr.connect_activate(move |_, _| { - // sender.send(Action::OpenAddAccountDialog).unwrap(); - }); - actions.add_action(&scan_qr); + action!( + actions, + "sqcan-qr", + clone!(@strong self.sender as sender => move |_, _| { + // sender.send(Action::OpenAddAccountDialog).unwrap(); + + }) + ); self.widget.insert_action_group("add", Some(&actions)); } diff --git a/src/widgets/accounts/list.rs b/src/widgets/accounts/list.rs index cd41935..9490704 100644 --- a/src/widgets/accounts/list.rs +++ b/src/widgets/accounts/list.rs @@ -21,48 +21,40 @@ impl<'a> AccountsList<'a> { pub fn new(model: &'a AccountsModel, provider: &'a Provider, sender: Sender) -> Self { let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/accounts_list.ui"); - let widget: gtk::Box = builder - .get_object("accounts_list") - .expect("Failed to retrieve accounts_list"); - let accounts_list = Self { - widget, + get_widget!(builder, gtk::Box, accounts_list); + + let accounts = Self { + widget: accounts_list, builder, sender, model, provider, }; - accounts_list.init(); - accounts_list + accounts.init(); + accounts } fn init(&self) { - let provider_name: gtk::Label = self - .builder - .get_object("provider_name") - .expect("Failed to retrieve provider_name"); + get_widget!(self.builder, gtk::Label, provider_name); provider_name.set_text(&self.provider.name); - let listbox: gtk::ListBox = self - .builder - .get_object("listbox") - .expect("Failed to retrieve listbox"); - let sender = self.sender.clone(); - + get_widget!(self.builder, gtk::ListBox, listbox); listbox.bind_model( Some(&self.model.model), - Some(Box::new(move |account: &glib::Object| { - let account: Account = account - .downcast_ref::() - .unwrap() - .deserialize(); - let row = AccountRow::new(account, sender.clone()); - let sender = sender.clone(); - /*row.set_on_click_callback(move |_, _| { - // sender.send(Action::LoadChapter(chapter.clone())).unwrap(); - Inhibit(false) - });*/ - row.widget.upcast::() - })), + Some(Box::new( + clone!(@strong self.sender as sender => move |account: &glib::Object| { + let account: Account = account + .downcast_ref::() + .unwrap() + .deserialize(); + let row = AccountRow::new(account, sender.clone()); + /*row.set_on_click_callback(move |_, _| { + // sender.send(Action::LoadChapter(chapter.clone())).unwrap(); + Inhibit(false) + });*/ + row.widget.upcast::() + }), + )), ); listbox.set_header_func(Some(Box::new( @@ -70,7 +62,6 @@ impl<'a> AccountsList<'a> { if let Some(row_before) = row2 { let separator = gtk::Separator::new(gtk::Orientation::Horizontal); row1.set_header(Some(&separator)); - separator.show(); } }, ))); diff --git a/src/widgets/accounts/row.rs b/src/widgets/accounts/row.rs index 36b37d0..77d654a 100644 --- a/src/widgets/accounts/row.rs +++ b/src/widgets/accounts/row.rs @@ -13,26 +13,20 @@ pub struct AccountRow { impl AccountRow { pub fn new(account: Account, sender: Sender) -> Self { let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/account_row.ui"); - let widget: gtk::ListBoxRow = builder - .get_object("account_row") - .expect("Failed to load library_row object"); + get_widget!(builder, gtk::ListBoxRow, account_row); - let account_row = Self { - widget, + let row = Self { + widget: account_row, builder, sender, account, }; - account_row.init(); - account_row + row.init(); + row } fn init(&self) { - let username_label: gtk::Label = self - .builder - .get_object("username_label") - .expect("Failed to retrieve username_label"); - + get_widget!(self.builder, gtk::Label, username_label); username_label.set_text(&self.account.username); } } diff --git a/src/widgets/providers/list.rs b/src/widgets/providers/list.rs index c87ad5a..04f62a8 100644 --- a/src/widgets/providers/list.rs +++ b/src/widgets/providers/list.rs @@ -17,27 +17,21 @@ impl ProvidersList { pub fn new(sender: Sender) -> Self { let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/providers_list.ui"); - let widget: gtk::Box = builder - .get_object("providers_list") - .expect("Failed to retrieve providers_list"); - + get_widget!(builder, gtk::Box, providers_list); let model = RefCell::new(ProvidersModel::new()); - let providers_list = Self { - widget, + let list = Self { + widget: providers_list, builder, sender, model, }; - providers_list.init(); - providers_list + list.init(); + list } fn init(&self) { - let providers_container: gtk::Box = self - .builder - .get_object("providers_container") - .expect("Failed to retrieve providers_container"); + get_widget!(self.builder, gtk::Box, providers_container); for (provider, accounts_model) in &self.model.borrow().model { if accounts_model.get_count() != 0 {