Browse Source

utils: Move expressions to their own module

fractal-6
Kévin Commaille 2 years ago
parent
commit
cb4de68a60
No known key found for this signature in database
GPG Key ID: 29A48C1F03620416
  1. 4
      src/components/editable_avatar.rs
  2. 9
      src/session/view/content/room_details/general_page/mod.rs
  3. 36
      src/utils/expression.rs
  4. 38
      src/utils/mod.rs

4
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<glib::Object>, image: Option<gdk::Paintable>| { 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);
}
}

9
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);

36
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<gtk::Expression>,
b_expr: impl AsRef<gtk::Expression>,
) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(
&[a_expr.as_ref(), b_expr.as_ref()],
closure!(|_: Option<glib::Object>, 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<gtk::Expression>,
b_expr: impl AsRef<gtk::Expression>,
) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(
&[a_expr.as_ref(), b_expr.as_ref()],
closure!(|_: Option<glib::Object>, a: bool, b: bool| { a || b }),
)
}
/// Returns an expression that is the inverted result of the given boolean
/// expression.
pub fn not<E: AsRef<gtk::Expression>>(a_expr: E) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(
&[a_expr],
closure!(|_: Option<glib::Object>, a: bool| { !a }),
)
}

38
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<gtk::Expression>,
b_expr: impl AsRef<gtk::Expression>,
) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(
&[a_expr.as_ref(), b_expr.as_ref()],
closure!(|_: Option<Object>, 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<gtk::Expression>,
b_expr: impl AsRef<gtk::Expression>,
) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(
&[a_expr.as_ref(), b_expr.as_ref()],
closure!(|_: Option<Object>, 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<E: AsRef<gtk::Expression>>(a_expr: E) -> gtk::ClosureExpression {
gtk::ClosureExpression::new::<bool>(&[a_expr], closure!(|_: Option<Object>, a: bool| { !a }))
}
/// Converts a `UInt` to `i32`.
///
/// Returns `-1` if the conversion didn't work.

Loading…
Cancel
Save