From cb4de68a6070a11aec7e5c729aaab21fdedc838c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 3 Jan 2024 09:35:25 +0100 Subject: [PATCH] utils: Move expressions to their own module --- src/components/editable_avatar.rs | 4 +- .../content/room_details/general_page/mod.rs | 9 ++--- src/utils/expression.rs | 36 ++++++++++++++++++ src/utils/mod.rs | 38 +------------------ 4 files changed, 44 insertions(+), 43 deletions(-) create mode 100644 src/utils/expression.rs diff --git a/src/components/editable_avatar.rs b/src/components/editable_avatar.rs index a230d340..14282f90 100644 --- a/src/components/editable_avatar.rs +++ b/src/components/editable_avatar.rs @@ -14,7 +14,7 @@ use super::{ActionButton, ActionState, ImagePaintable}; use crate::{ session::model::{AvatarData, AvatarImage}, spawn, toast, - utils::and_expr, + utils::expression, }; /// The state of the editable avatar. @@ -128,7 +128,7 @@ mod imp { |_: Option, image: Option| { image.is_some() } )); let editable_expr = obj.property_expression("editable"); - let button_remove_visible = and_expr(editable_expr, image_present_expr); + let button_remove_visible = expression::and(editable_expr, image_present_expr); button_remove_visible.bind(&*self.button_remove, "visible", glib::Object::NONE); } } diff --git a/src/session/view/content/room_details/general_page/mod.rs b/src/session/view/content/room_details/general_page/mod.rs index d7d7f149..d92f714e 100644 --- a/src/session/view/content/room_details/general_page/mod.rs +++ b/src/session/view/content/room_details/general_page/mod.rs @@ -22,9 +22,8 @@ use crate::{ session::model::{AvatarData, AvatarImage, MemberList, NotificationsRoomSetting, Room}, spawn, spawn_tokio, toast, utils::{ - and_expr, + expression, media::{get_image_info, load_file}, - not_expr, or_expr, template_callbacks::TemplateCallbacks, BoundObjectWeakRef, OngoingAsyncAction, }, @@ -454,10 +453,10 @@ impl GeneralPage { room.own_user_is_allowed_to_expr(PowerLevelAction::SendState(StateEventType::RoomName)); let room_topic_changeable = room .own_user_is_allowed_to_expr(PowerLevelAction::SendState(StateEventType::RoomTopic)); - let edit_mode_disabled = not_expr(self.property_expression("edit-mode-enabled")); + let edit_mode_disabled = expression::not(self.property_expression("edit-mode-enabled")); - let details_changeable = or_expr(room_name_changeable, room_topic_changeable); - let edit_details_visible = and_expr(edit_mode_disabled, details_changeable); + let details_changeable = expression::or(room_name_changeable, room_topic_changeable); + let edit_details_visible = expression::and(edit_mode_disabled, details_changeable); let expr_watch = edit_details_visible.bind(&*imp.edit_details_btn, "visible", gtk::Widget::NONE); diff --git a/src/utils/expression.rs b/src/utils/expression.rs new file mode 100644 index 00000000..ea5a0580 --- /dev/null +++ b/src/utils/expression.rs @@ -0,0 +1,36 @@ +//! Collection of common expressions. + +use gtk::{glib, glib::closure}; + +/// Returns an expression that is the and’ed result of the given boolean +/// expressions. +pub fn and( + a_expr: impl AsRef, + b_expr: impl AsRef, +) -> gtk::ClosureExpression { + gtk::ClosureExpression::new::( + &[a_expr.as_ref(), b_expr.as_ref()], + closure!(|_: Option, a: bool, b: bool| { a && b }), + ) +} + +/// Returns an expression that is the or’ed result of the given boolean +/// expressions. +pub fn or( + a_expr: impl AsRef, + b_expr: impl AsRef, +) -> gtk::ClosureExpression { + gtk::ClosureExpression::new::( + &[a_expr.as_ref(), b_expr.as_ref()], + closure!(|_: Option, a: bool, b: bool| { a || b }), + ) +} + +/// Returns an expression that is the inverted result of the given boolean +/// expression. +pub fn not>(a_expr: E) -> gtk::ClosureExpression { + gtk::ClosureExpression::new::( + &[a_expr], + closure!(|_: Option, a: bool| { !a }), + ) +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs index f13f71de..1087646e 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,6 +1,7 @@ //! Collection of common methods and types. mod dummy_object; +pub mod expression; mod expression_list_model; pub mod macros; pub mod matrix; @@ -19,10 +20,7 @@ use futures_util::{ future::{self, Either, Future}, pin_mut, }; -use gtk::{ - gio::{self, prelude::*}, - glib::{self, closure, Object}, -}; +use gtk::{gio, glib, prelude::*}; use matrix_sdk::ruma::UInt; use once_cell::sync::Lazy; use regex::Regex; @@ -31,38 +29,6 @@ use tracing::error; pub use self::{dummy_object::DummyObject, expression_list_model::ExpressionListModel}; use crate::RUNTIME; -/// Returns an expression that is the and’ed result of the given boolean -/// expressions. -#[allow(dead_code)] -pub fn and_expr( - a_expr: impl AsRef, - b_expr: impl AsRef, -) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( - &[a_expr.as_ref(), b_expr.as_ref()], - closure!(|_: Option, a: bool, b: bool| { a && b }), - ) -} - -/// Returns an expression that is the or’ed result of the given boolean -/// expressions. -pub fn or_expr( - a_expr: impl AsRef, - b_expr: impl AsRef, -) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::( - &[a_expr.as_ref(), b_expr.as_ref()], - closure!(|_: Option, a: bool, b: bool| { a || b }), - ) -} - -/// Returns an expression that is the inverted result of the given boolean -/// expressions. -#[allow(dead_code)] -pub fn not_expr>(a_expr: E) -> gtk::ClosureExpression { - gtk::ClosureExpression::new::(&[a_expr], closure!(|_: Option, a: bool| { !a })) -} - /// Converts a `UInt` to `i32`. /// /// Returns `-1` if the conversion didn't work.