use gtk-macros

This commit is contained in:
Bilal Elmoussaoui 2020-10-28 02:24:00 +01:00
parent a16205cf91
commit 7db25ac562
5 changed files with 51 additions and 90 deletions

2
.gitignore vendored
View file

@ -8,4 +8,4 @@ src/config.rs
src/static_resources.rs
*.*.in~
*.*~
builddir/

View file

@ -15,12 +15,10 @@ pub struct AddAccountDialog {
impl AddAccountDialog {
pub fn new(sender: Sender<Action>) -> Rc<Self> {
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<Self>) {
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 |_, _| {
action!(
actions,
"sqcan-qr",
clone!(@strong self.sender as sender => move |_, _| {
// sender.send(Action::OpenAddAccountDialog).unwrap();
});
actions.add_action(&scan_qr);
})
);
self.widget.insert_action_group("add", Some(&actions));
}

View file

@ -21,48 +21,40 @@ impl<'a> AccountsList<'a> {
pub fn new(model: &'a AccountsModel, provider: &'a Provider, sender: Sender<Action>) -> 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| {
Some(Box::new(
clone!(@strong self.sender as sender => move |account: &glib::Object| {
let account: Account = account
.downcast_ref::<ObjectWrapper>()
.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::<gtk::Widget>()
})),
}),
)),
);
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();
}
},
)));

View file

@ -13,26 +13,20 @@ pub struct AccountRow {
impl AccountRow {
pub fn new(account: Account, sender: Sender<Action>) -> 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);
}
}

View file

@ -17,27 +17,21 @@ impl ProvidersList {
pub fn new(sender: Sender<Action>) -> 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 {