[fractal/get-widgets-from-ui-struct: 2/6] Access account_settings widget and children directly
- From: Alejandro Domínguez <aledomu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/get-widgets-from-ui-struct: 2/6] Access account_settings widget and children directly
- Date: Mon, 14 Dec 2020 23:01:24 +0000 (UTC)
commit 030d9f201b5dd974c0add7f7d590ef9bdedc1733
Author: Alejandro Domínguez <adomu net-c com>
Date: Sun Dec 6 21:58:58 2020 +0100
Access account_settings widget and children directly
fractal-gtk/src/app/mod.rs | 9 +-
fractal-gtk/src/appop/account.rs | 396 +++++++++++-----------------------
fractal-gtk/src/meson.build | 1 +
fractal-gtk/src/ui/account.rs | 91 ++++++++
fractal-gtk/src/ui/connect/account.rs | 111 +++++-----
fractal-gtk/src/ui/mod.rs | 4 +
6 files changed, 277 insertions(+), 335 deletions(-)
---
diff --git a/fractal-gtk/src/app/mod.rs b/fractal-gtk/src/app/mod.rs
index a95676e3..2b8469ae 100644
--- a/fractal-gtk/src/app/mod.rs
+++ b/fractal-gtk/src/app/mod.rs
@@ -145,13 +145,8 @@ fn new(gtk_app: gtk::Application) -> AppRuntime {
.get_object::<gtk::Stack>("subview_stack")
.expect("Can't find subview_stack in ui file.");
- /* Add account settings view to the view stack */
- let child = state
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_box")
- .expect("Can't find account_settings_box in ui file.");
- view_stack.add_named(&child, "account-settings");
+ // Add account settings view to the view stack
+ view_stack.add_named(&state.ui.account_settings.root, "account-settings");
let main_stack = state
.ui
diff --git a/fractal-gtk/src/appop/account.rs b/fractal-gtk/src/appop/account.rs
index bbfc8ccb..33afe9d5 100644
--- a/fractal-gtk/src/appop/account.rs
+++ b/fractal-gtk/src/appop/account.rs
@@ -230,148 +230,79 @@ impl AppOp {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
// Reset view before displaying it
self.close_account_settings_dialog();
- let avatar_spinner = self
- .ui
- .builder
- .get_object::<gtk::Spinner>("account_settings_avatar_spinner")
- .expect("Can't find account_settings_avatar_spinner in ui file.");
- let avatar_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_avatar_button")
- .expect("Can't find account_settings_avatar_button in ui file.");
- let name = self
- .ui
- .builder
- .get_object::<gtk::Entry>("account_settings_name")
- .expect("Can't find account_settings_name in ui file.");
- let name_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_name_button")
- .expect("Can't find account_settings_name_button in ui file.");
- let uid = self
- .ui
- .builder
- .get_object::<gtk::Label>("account_settings_uid")
- .expect("Can't find account_settings_uid in ui file.");
- let device_id = self
- .ui
- .builder
- .get_object::<gtk::Label>("account_settings_device_id")
- .expect("Can't find account_settings_device_id in ui file.");
- let homeserver = self
- .ui
- .builder
- .get_object::<gtk::Label>("account_settings_homeserver")
- .expect("Can't find account_settings_homeserver in ui file.");
- let advanced_box = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_advanced_box")
- .expect("Can't find account_settings_advanced_box in ui file.");
- let delete_box = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_delete_box")
- .expect("Can't find account_settings_delete_box in ui file.");
- let stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_stack")
- .expect("Can't find account_settings_delete_box in ui file.");
- let destruction_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_delete_btn")
- .expect("Can't find account_settings_delete_btn in ui file.");
- let destruction_entry = self
- .ui
- .builder
- .get_object::<gtk::Entry>("account_settings_delete_password_confirm")
- .expect("Can't find account_settings_delete_password_confirm in ui file.");
- let password_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
- let password_btn_stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_password_stack")
- .expect("Can't find account_settings_password_stack in ui file.");
- let destruction_flag = self
- .ui
- .builder
- .get_object::<gtk::CheckButton>("account_settings_delete_check")
- .expect("Can't find account_settings_delete_check in ui file.");
- stack.set_visible_child_name("loading");
+ self.ui
+ .account_settings
+ .stack
+ .set_visible_child_name("loading");
self.get_three_pid();
- uid.set_text(&login_data.uid.to_string());
- device_id.set_text(login_data.device_id.as_str());
- homeserver.set_text(login_data.session_client.homeserver().as_str());
- name.set_text(&login_data.username.unwrap_or_default());
- name.grab_focus_without_selecting();
- name.set_position(-1);
-
- avatar_spinner.hide();
- avatar_btn.set_sensitive(true);
+ self.ui
+ .account_settings
+ .uid
+ .set_text(&login_data.uid.to_string());
+ self.ui
+ .account_settings
+ .device_id
+ .set_text(login_data.device_id.as_str());
+ self.ui
+ .account_settings
+ .homeserver
+ .set_text(login_data.session_client.homeserver().as_str());
+ self.ui
+ .account_settings
+ .name
+ .set_text(&login_data.username.unwrap_or_default());
+ self.ui.account_settings.name.grab_focus_without_selecting();
+ self.ui.account_settings.name.set_position(-1);
+
+ self.ui.account_settings.avatar_spinner.hide();
+ self.ui.account_settings.avatar_button.set_sensitive(true);
self.show_avatar();
- name_btn.hide();
- name.set_editable(true);
+ self.ui.account_settings.name_button.hide();
+ self.ui.account_settings.name.set_editable(true);
let image = gtk::Image::from_icon_name(Some("emblem-ok-symbolic"), gtk::IconSize::Menu);
- name_btn.set_image(Some(&image));
- name_btn.set_sensitive(true);
-
- /* reset the password button */
- password_btn_stack.set_visible_child_name("label");
- password_btn.set_sensitive(true);
-
- destruction_flag.set_active(false);
- destruction_btn.set_sensitive(false);
- destruction_entry.set_text("");
- advanced_box.set_redraw_on_allocate(true);
- delete_box.set_redraw_on_allocate(true);
+ self.ui.account_settings.name_button.set_image(Some(&image));
+ self.ui.account_settings.name_button.set_sensitive(true);
+
+ // reset the password button
+ self.ui
+ .account_settings
+ .password_stack
+ .set_visible_child_name("label");
+ self.ui.account_settings.password.set_sensitive(true);
+
+ self.ui.account_settings.delete_check.set_active(false);
+ self.ui.account_settings.delete_btn.set_sensitive(false);
+ self.ui
+ .account_settings
+ .delete_password_confirm
+ .set_text("");
+ self.ui
+ .account_settings
+ .advanced_box
+ .set_redraw_on_allocate(true);
+ self.ui
+ .account_settings
+ .delete_box
+ .set_redraw_on_allocate(true);
self.set_state(AppState::AccountSettings);
}
pub fn update_address(&self, data: Option<Vec<ThirdPartyIdentifier>>) {
- let grid = self
- .ui
- .builder
- .get_object::<gtk::Grid>("account_settings_grid")
- .expect("Can't find account_settings_grid in ui file.");
- let email = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_email")
- .expect("Can't find account_settings_box_email in ui file.");
- let phone = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_phone")
- .expect("Can't find account_settings_box_phone in ui file.");
- let stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_stack")
- .expect("Can't find account_settings_delete_box in ui file.");
- let password = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
-
let mut first_email = true;
let mut first_phone = true;
+ let grid = &self.ui.account_settings.grid;
+ let mut child = grid.get_child_at(1, 1);
+ let email = &self.ui.account_settings.email;
+ let phone = &self.ui.account_settings.phone;
+ let password = &self.ui.account_settings.password;
+
let mut i = 1;
- let mut child = grid.get_child_at(1, i);
while child.is_some() {
- if let Some(child) = child.clone() {
+ if let Some(child) = child.as_ref() {
if child != phone && child != email && child != password {
grid.remove_row(i);
} else {
@@ -390,7 +321,10 @@ impl AppOp {
/* Make sure we have at least one empty entry for email and phone */
let mut empty_email = widgets::Address::new(widgets::AddressType::Email, &self);
let mut empty_phone = widgets::Address::new(widgets::AddressType::Phone, &self);
- email.pack_start(&empty_email.create(None), true, true, 0);
+ self.ui
+ .account_settings
+ .email
+ .pack_start(&empty_email.create(None), true, true, 0);
phone.pack_start(&empty_phone.create(None), true, true, 0);
if let Some(data) = data {
for item in data {
@@ -400,10 +334,10 @@ impl AppOp {
empty_email.update(Some(item.address));
let entry = widgets::Address::new(widgets::AddressType::Email, &self)
.create(None);
- grid.insert_next_to(&email, gtk::PositionType::Bottom);
+ grid.insert_next_to(email, gtk::PositionType::Bottom);
grid.attach_next_to(
&entry,
- Some(&email),
+ Some(email),
gtk::PositionType::Bottom,
1,
1,
@@ -412,10 +346,10 @@ impl AppOp {
} else {
let entry = widgets::Address::new(widgets::AddressType::Email, &self)
.create(Some(item.address));
- grid.insert_next_to(&email, gtk::PositionType::Bottom);
+ grid.insert_next_to(email, gtk::PositionType::Bottom);
grid.attach_next_to(
&entry,
- Some(&email),
+ Some(email),
gtk::PositionType::Bottom,
1,
1,
@@ -427,10 +361,10 @@ impl AppOp {
empty_phone.update(Some(item.address));
let entry = widgets::Address::new(widgets::AddressType::Phone, &self)
.create(None);
- grid.insert_next_to(&phone, gtk::PositionType::Bottom);
+ grid.insert_next_to(phone, gtk::PositionType::Bottom);
grid.attach_next_to(
&entry,
- Some(&phone),
+ Some(phone),
gtk::PositionType::Bottom,
1,
1,
@@ -440,10 +374,10 @@ impl AppOp {
let s = String::from("+") + &item.address;
let entry = widgets::Address::new(widgets::AddressType::Phone, &self)
.create(Some(s));
- grid.insert_next_to(&phone, gtk::PositionType::Bottom);
+ grid.insert_next_to(phone, gtk::PositionType::Bottom);
grid.attach_next_to(
&entry,
- Some(&phone),
+ Some(phone),
gtk::PositionType::Bottom,
1,
1,
@@ -454,7 +388,10 @@ impl AppOp {
}
}
}
- stack.set_visible_child_name("info");
+ self.ui
+ .account_settings
+ .stack
+ .set_visible_child_name("info");
}
pub fn show_password_dialog(&self) {
@@ -474,24 +411,14 @@ impl AppOp {
pub fn show_new_avatar(&mut self, path: PathBuf) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- let avatar_spinner = self
- .ui
- .builder
- .get_object::<gtk::Spinner>("account_settings_avatar_spinner")
- .expect("Can't find account_settings_avatar_spinner in ui file.");
- let avatar_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_avatar_button")
- .expect("Can't find account_settings_avatar_button in ui file.");
info!("Request finished");
self.set_login_data(LoginData {
avatar: Some(path),
..login_data
});
- avatar_spinner.hide();
- avatar_btn.set_sensitive(true);
+ self.ui.account_settings.avatar_spinner.hide();
+ self.ui.account_settings.avatar_button.set_sensitive(true);
if let Some(login_data) = &self.login_data {
remove_from_cache(self.user_info_cache.clone(), &login_data.uid);
}
@@ -500,30 +427,15 @@ impl AppOp {
pub fn show_avatar(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- let stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_stack")
- .expect("Can't find account_settings_delete_box in ui file.");
- let avatar = self
- .ui
- .builder
- .get_object::<gtk::Overlay>("account_settings_avatar")
- .expect("Can't find account_settings_avatar in ui file.");
- let avatar_spinner = self
- .ui
- .builder
- .get_object::<gtk::Spinner>("account_settings_avatar_spinner")
- .expect("Can't find account_settings_avatar_spinner in ui file.");
/* remove all old avatar */
- for w in avatar.get_children().iter() {
- if w != &avatar_spinner {
- avatar.remove(w);
+ for w in self.ui.account_settings.avatar.get_children().iter() {
+ if w != &self.ui.account_settings.avatar_spinner {
+ self.ui.account_settings.avatar.remove(w);
}
}
let w = widgets::Avatar::avatar_new(Some(100));
- avatar.add(&w);
+ self.ui.account_settings.avatar.add(&w);
let data = w.circle(
login_data.uid.to_string(),
@@ -540,32 +452,28 @@ impl AppOp {
);
/* FIXME: hack to make the avatar drawing area clickable*/
- let current = stack.get_visible_child_name();
- stack.set_visible_child_name("loading");
+ let current = self.ui.account_settings.stack.get_visible_child_name();
+ self.ui
+ .account_settings
+ .stack
+ .set_visible_child_name("loading");
if let Some(current) = current {
- stack.set_visible_child_name(¤t);
+ self.ui
+ .account_settings
+ .stack
+ .set_visible_child_name(¤t);
}
}
pub fn show_new_username(&mut self, name: Option<String>) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- let entry = self
- .ui
- .builder
- .get_object::<gtk::Entry>("account_settings_name")
- .expect("Can't find account_settings_name in ui file.");
- let button = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_name_button")
- .expect("Can't find account_settings_name_button in ui file.");
if let Some(name) = name.clone() {
- button.hide();
+ self.ui.account_settings.name_button.hide();
let image = gtk::Image::from_icon_name(Some("emblem-ok-symbolic"), gtk::IconSize::Menu);
- button.set_image(Some(&image));
- button.set_sensitive(true);
- entry.set_editable(true);
- entry.set_text(&name);
+ self.ui.account_settings.name_button.set_image(Some(&image));
+ self.ui.account_settings.name_button.set_sensitive(true);
+ self.ui.account_settings.name.set_editable(true);
+ self.ui.account_settings.name.set_text(&name);
}
self.set_login_data(LoginData {
username: name,
@@ -575,26 +483,19 @@ impl AppOp {
pub fn update_username_account_settings(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- let name = self
- .ui
- .builder
- .get_object::<gtk::Entry>("account_settings_name")
- .expect("Can't find account_settings_name in ui file.");
- let button = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_name_button")
- .expect("Can't find account_settings_name_button in ui file.");
let old_username = login_data.username.clone().unwrap_or_default();
- let username: String = name.get_text().into();
+ let username: String = self.ui.account_settings.name.get_text().into();
if old_username != username {
let spinner = gtk::Spinner::new();
spinner.start();
- button.set_image(Some(&spinner));
- button.set_sensitive(false);
- name.set_editable(false);
+ self.ui
+ .account_settings
+ .name_button
+ .set_image(Some(&spinner));
+ self.ui.account_settings.name_button.set_sensitive(false);
+ self.ui.account_settings.name.set_editable(false);
RUNTIME.spawn(async move {
let query = user::set_username(
login_data.session_client,
@@ -613,30 +514,14 @@ impl AppOp {
}
});
} else {
- button.hide();
+ self.ui.account_settings.name_button.hide();
}
}
pub fn close_account_settings_dialog(&self) {
- let advanced_box = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_advanced_box")
- .expect("Can't find account_settings_advanced_box in ui file.");
- let delete_box = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_delete_box")
- .expect("Can't find account_settings_delete_box in ui file.");
- let b = self
- .ui
- .builder
- .get_object::<gtk::Box>("account_settings_box")
- .expect("Can't find account_settings_delete_box in ui file.");
-
- advanced_box.queue_draw();
- delete_box.queue_draw();
- b.queue_draw();
+ self.ui.account_settings.advanced_box.queue_draw();
+ self.ui.account_settings.delete_box.queue_draw();
+ self.ui.account_settings.root.queue_draw();
}
pub fn set_new_password(&mut self) {
@@ -654,22 +539,15 @@ impl AppOp {
.builder
.get_object::<gtk::Entry>("password-dialog-entry")
.expect("Can't find password-dialog-entry in ui file.");
- let password_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
- let password_btn_stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_password_stack")
- .expect("Can't find account_settings_password_stack in ui file.");
let old: String = old_password.get_text().into();
let new: String = new_password.get_text().into();
if !old.is_empty() && !new.is_empty() {
- password_btn.set_sensitive(false);
- password_btn_stack.set_visible_child_name("spinner");
+ self.ui.account_settings.password.set_sensitive(false);
+ self.ui
+ .account_settings
+ .password_stack
+ .set_visible_child_name("spinner");
RUNTIME.spawn(async move {
match user::change_password(session_client, &user_id, old, &new).await {
Ok(_) => {
@@ -684,34 +562,20 @@ impl AppOp {
}
pub fn password_changed(&self) {
- let password_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
- let password_btn_stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_password_stack")
- .expect("Can't find account_settings_password_stack in ui file.");
- password_btn.set_sensitive(true);
- password_btn_stack.set_visible_child_name("label");
+ self.ui.account_settings.password.set_sensitive(true);
+ self.ui
+ .account_settings
+ .password_stack
+ .set_visible_child_name("label");
}
pub fn show_password_error_dialog(&self, error: String) {
- let password_btn = self
- .ui
- .builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
- let password_btn_stack = self
- .ui
- .builder
- .get_object::<gtk::Stack>("account_settings_password_stack")
- .expect("Can't find account_settings_password_stack in ui file.");
self.show_error_dialog_in_settings(error);
- password_btn.set_sensitive(true);
- password_btn_stack.set_visible_child_name("label");
+ self.ui.account_settings.password.set_sensitive(true);
+ self.ui
+ .account_settings
+ .password_stack
+ .set_visible_child_name("label");
}
pub fn close_password_dialog(&mut self) {
@@ -744,16 +608,6 @@ impl AppOp {
pub fn account_destruction(&self) {
let login_data = unwrap_or_unit_return!(self.login_data.clone());
- let entry = self
- .ui
- .builder
- .get_object::<gtk::Entry>("account_settings_delete_password_confirm")
- .expect("Can't find account_settings_delete_password_confirm in ui file.");
- let mark = self
- .ui
- .builder
- .get_object::<gtk::CheckButton>("account_settings_delete_check")
- .expect("Can't find account_settings_delete_check in ui file.");
let msg = i18n("Are you sure you want to delete your account?");
let flags = gtk::DialogFlags::MODAL | gtk::DialogFlags::DESTROY_WITH_PARENT;
@@ -768,8 +622,14 @@ impl AppOp {
dialog.add_button("Confirm", gtk::ResponseType::Ok);
dialog.add_button("Cancel", gtk::ResponseType::Cancel);
- let _flag = mark.get_active(); // TODO: This is not used, remove from UI?
- let password = entry.get_text().to_string();
+ // TODO: This is not used, remove?
+ let _flag = self.ui.account_settings.delete_check.get_active();
+ let password = self
+ .ui
+ .account_settings
+ .delete_password_confirm
+ .get_text()
+ .to_string();
dialog.connect_response(move |w, r| {
if let gtk::ResponseType::Ok = r {
let password = password.clone();
diff --git a/fractal-gtk/src/meson.build b/fractal-gtk/src/meson.build
index d10bc490..efe3bcb9 100644
--- a/fractal-gtk/src/meson.build
+++ b/fractal-gtk/src/meson.build
@@ -100,6 +100,7 @@ app_sources = files(
'ui/connect/send.rs',
'ui/connect/swipeable_widgets.rs',
'ui/about.rs',
+ 'ui/account.rs',
'ui/attach.rs',
'ui/directory.rs',
'ui/invite.rs',
diff --git a/fractal-gtk/src/ui/account.rs b/fractal-gtk/src/ui/account.rs
new file mode 100644
index 00000000..79c6f86d
--- /dev/null
+++ b/fractal-gtk/src/ui/account.rs
@@ -0,0 +1,91 @@
+use gtk::prelude::*;
+
+pub struct AccountSettings {
+ pub root: gtk::Box,
+ pub advanced_box: gtk::Box,
+ pub avatar: gtk::Overlay,
+ pub avatar_button: gtk::Button,
+ pub avatar_spinner: gtk::Spinner,
+ pub delete_box: gtk::Box,
+ pub delete_btn: gtk::Button,
+ pub delete_check: gtk::CheckButton,
+ pub delete_password_confirm: gtk::Entry,
+ pub device_id: gtk::Label,
+ pub email: gtk::Box,
+ pub grid: gtk::Grid,
+ pub homeserver: gtk::Label,
+ pub name: gtk::Entry,
+ pub name_button: gtk::Button,
+ pub password: gtk::Button,
+ pub password_stack: gtk::Stack,
+ pub phone: gtk::Box,
+ pub stack: gtk::Stack,
+ pub uid: gtk::Label,
+}
+
+impl AccountSettings {
+ pub fn new(builder: >k::Builder) -> Self {
+ Self {
+ root: builder
+ .get_object("account_settings_box")
+ .expect("Can't find account_settings_box in ui file."),
+ advanced_box: builder
+ .get_object("account_settings_advanced_box")
+ .expect("Can't find account_settings_advanced_box in ui file."),
+ avatar: builder
+ .get_object("account_settings_avatar")
+ .expect("Can't find account_settings_advanced_box in ui file."),
+ avatar_button: builder
+ .get_object("account_settings_avatar_button")
+ .expect("Can't find account_settings_advanced_box in ui file."),
+ avatar_spinner: builder
+ .get_object("account_settings_avatar_spinner")
+ .expect("Can't find account_settings_advanced_box in ui file."),
+ delete_box: builder
+ .get_object("account_settings_delete_box")
+ .expect("Can't find account_settings_delete_box in ui file."),
+ delete_btn: builder
+ .get_object("account_settings_delete_btn")
+ .expect("Can't find account_settings_delete_btn in ui file."),
+ delete_check: builder
+ .get_object("account_settings_delete_check")
+ .expect("Can't find account_settings_delete_check in ui file."),
+ delete_password_confirm: builder
+ .get_object("account_settings_delete_password_confirm")
+ .expect("Can't find account_settings_delete_password_confirm in ui file."),
+ device_id: builder
+ .get_object("account_settings_device_id")
+ .expect("Can't find account_settings_device_id in ui file."),
+ email: builder
+ .get_object("account_settings_email")
+ .expect("Can't find account_settings_email in ui file."),
+ grid: builder
+ .get_object("account_settings_grid")
+ .expect("Can't find account_settings_grid in ui file."),
+ homeserver: builder
+ .get_object("account_settings_homeserver")
+ .expect("Can't find account_settings_homeserver in ui file."),
+ name: builder
+ .get_object("account_settings_name")
+ .expect("Can't find account_settings_name in ui file."),
+ name_button: builder
+ .get_object("account_settings_name_button")
+ .expect("Can't find account_settings_name_button in ui file."),
+ password: builder
+ .get_object("account_settings_password")
+ .expect("Can't find account_settings_password in ui file."),
+ password_stack: builder
+ .get_object("account_settings_password_stack")
+ .expect("Can't find account_settings_password_stack in ui file."),
+ phone: builder
+ .get_object("account_settings_phone")
+ .expect("Can't find account_settings_phone in ui file."),
+ stack: builder
+ .get_object("account_settings_stack")
+ .expect("Can't find account_settings_stack in ui file."),
+ uid: builder
+ .get_object("account_settings_uid")
+ .expect("Can't find account_settings_uid in ui file."),
+ }
+ }
+}
diff --git a/fractal-gtk/src/ui/connect/account.rs b/fractal-gtk/src/ui/connect/account.rs
index 19ec608f..57451aeb 100644
--- a/fractal-gtk/src/ui/connect/account.rs
+++ b/fractal-gtk/src/ui/connect/account.rs
@@ -17,18 +17,6 @@ pub fn connect(ui: &UI, app_runtime: AppRuntime) {
let password_dialog = builder
.get_object::<gtk::Dialog>("password_dialog")
.expect("Can't find password_dialog in ui file.");
- let avatar_btn = builder
- .get_object::<gtk::Button>("account_settings_avatar_button")
- .expect("Can't find account_settings_avatar_button in ui file.");
- let name_entry = builder
- .get_object::<gtk::Entry>("account_settings_name")
- .expect("Can't find account_settings_name in ui file.");
- let name_btn = builder
- .get_object::<gtk::Button>("account_settings_name_button")
- .expect("Can't find account_settings_name_button in ui file.");
- let password_btn = builder
- .get_object::<gtk::Button>("account_settings_password")
- .expect("Can't find account_settings_password in ui file.");
let old_password = builder
.get_object::<gtk::Entry>("password-dialog-old-entry")
.expect("Can't find password-dialog-old-entry in ui file.");
@@ -38,42 +26,36 @@ pub fn connect(ui: &UI, app_runtime: AppRuntime) {
let verify_password = builder
.get_object::<gtk::Entry>("password-dialog-verify-entry")
.expect("Can't find password-dialog-verify-entry in ui file.");
- let destruction_entry = builder
- .get_object::<gtk::Entry>("account_settings_delete_password_confirm")
- .expect("Can't find account_settings_delete_password_confirm in ui file.");
- let destruction_btn = builder
- .get_object::<gtk::Button>("account_settings_delete_btn")
- .expect("Can't find account_settings_delete_btn in ui file.");
let window = ui.main_window.upcast_ref::<gtk::Window>();
let actions = AccountSettings::new(&window, app_runtime.clone());
- let container = builder
- .get_object::<gtk::Box>("account_settings_box")
- .expect("Can't find account_settings_box in ui file.");
- container.insert_action_group("user-settings", Some(&actions));
+ ui.account_settings
+ .root
+ .insert_action_group("user-settings", Some(&actions));
- /* Body */
+ // Body
if let Some(action) = actions.lookup_action("change-avatar") {
- action.bind_button_state(&avatar_btn);
- avatar_btn.set_action_name(Some("user-settings.change-avatar"));
- let avatar_spinner = builder
- .get_object::<gtk::Spinner>("account_settings_avatar_spinner")
- .expect("Can't find account_settings_avatar_spinner in ui file.");
- avatar_btn.connect_property_sensitive_notify(
- clone!(@weak avatar_spinner as spinner => move |w| {
- if w.get_sensitive() {
- spinner.hide();
- spinner.stop();
- } else {
- spinner.start();
- spinner.show();
- }
- }),
- );
+ action.bind_button_state(&ui.account_settings.avatar_button);
+ ui.account_settings
+ .avatar_button
+ .set_action_name(Some("user-settings.change-avatar"));
+ ui.account_settings
+ .avatar_button
+ .connect_property_sensitive_notify(
+ clone!(@weak ui.account_settings.avatar_spinner as spinner => move |w| {
+ if w.get_sensitive() {
+ spinner.hide();
+ spinner.stop();
+ } else {
+ spinner.start();
+ spinner.show();
+ }
+ }),
+ );
}
- name_entry.connect_property_text_notify(
- clone!(@strong app_runtime, @strong name_btn as button => move |w| {
+ ui.account_settings.name.connect_property_text_notify(
+ clone!(@strong app_runtime, @strong ui.account_settings.name_button as button => move |w| {
app_runtime.update_state_with(clone!(@strong w, @strong button => move |state| {
let username = w.get_text();
if !username.is_empty()
@@ -92,14 +74,17 @@ pub fn connect(ui: &UI, app_runtime: AppRuntime) {
}),
);
- let button = name_btn.clone();
- name_entry.connect_activate(move |_w| {
- let _ = button.emit("clicked", &[]);
- });
+ ui.account_settings.name.connect_activate(
+ clone!(@strong ui.account_settings.name_button as button => move |_w| {
+ let _ = button.emit("clicked", &[]);
+ }),
+ );
- name_btn.connect_clicked(clone!(@strong app_runtime => move |_w| {
- app_runtime.update_state_with(|state| state.update_username_account_settings());
- }));
+ ui.account_settings
+ .name_button
+ .connect_clicked(clone!(@strong app_runtime => move |_w| {
+ app_runtime.update_state_with(|state| state.update_username_account_settings());
+ }));
/*
fn update_password_strength(builder: >k::Builder) {
@@ -154,10 +139,12 @@ pub fn connect(ui: &UI, app_runtime: AppRuntime) {
confirm_password.set_sensitive(matching && !empty);
}
- /* Passsword dialog */
- password_btn.connect_clicked(clone!(@strong app_runtime => move |_| {
- app_runtime.update_state_with(|state| state.show_password_dialog());
- }));
+ // Password dialog
+ ui.account_settings
+ .password
+ .connect_clicked(clone!(@strong app_runtime => move |_| {
+ app_runtime.update_state_with(|state| state.show_password_dialog());
+ }));
password_dialog.connect_delete_event(clone!(@strong app_runtime => move |_, _| {
app_runtime.update_state_with(|state| state.close_password_dialog());
@@ -187,15 +174,19 @@ pub fn connect(ui: &UI, app_runtime: AppRuntime) {
validate_password_input(&builder)
}));
- destruction_entry.connect_property_text_notify(clone!(@strong destruction_btn => move |w| {
- if !w.get_text().is_empty() {
- destruction_btn.set_sensitive(true);
- return;
- }
- destruction_btn.set_sensitive(false);
- }));
+ ui.account_settings
+ .delete_password_confirm
+ .connect_property_text_notify(
+ clone!(@strong ui.account_settings.delete_btn as destruction_btn => move |w| {
+ if !w.get_text().is_empty() {
+ destruction_btn.set_sensitive(true);
+ return;
+ }
+ destruction_btn.set_sensitive(false);
+ }),
+ );
- destruction_btn.connect_clicked(move |_| {
+ ui.account_settings.delete_btn.connect_clicked(move |_| {
app_runtime.update_state_with(|state| state.account_destruction());
});
}
diff --git a/fractal-gtk/src/ui/mod.rs b/fractal-gtk/src/ui/mod.rs
index 21caf751..916e0505 100644
--- a/fractal-gtk/src/ui/mod.rs
+++ b/fractal-gtk/src/ui/mod.rs
@@ -9,6 +9,7 @@ use std::path::PathBuf;
use url::Url;
pub mod about;
+pub mod account;
pub mod attach;
pub mod connect;
pub mod directory;
@@ -34,6 +35,7 @@ pub struct UI {
pub invite_list: Vec<(Member, gtk::TextChildAnchor)>,
pub leaflet: libhandy::Leaflet,
pub deck: libhandy::Deck,
+ pub account_settings: account::AccountSettings,
}
impl UI {
@@ -124,6 +126,7 @@ impl UI {
let deck = builder
.get_object::<libhandy::Deck>("main_deck")
.expect("Couldn't find main_deck in ui file");
+ let account_settings = account::AccountSettings::new(&builder);
UI {
builder,
@@ -139,6 +142,7 @@ impl UI {
invite_list: vec![],
leaflet,
deck,
+ account_settings,
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]