diff --git a/src/utils.rs b/src/utils.rs index 7b5e8d3b..fb0d93f0 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -61,3 +61,44 @@ pub fn prop_expr>(object: &T, prop: &str) -> gtk::Expression { let obj_expr = gtk::ConstantExpression::new(object).upcast(); gtk::PropertyExpression::new(T::static_type(), Some(&obj_expr), prop).upcast() } + +// Returns an expression that is the and’ed result of the given boolean expressions. +#[allow(dead_code)] +pub fn and_expr(a_expr: gtk::Expression, b_expr: gtk::Expression) -> gtk::Expression { + gtk::ClosureExpression::new( + move |args| { + let a: bool = args[1].get().unwrap(); + let b: bool = args[2].get().unwrap(); + a && b + }, + &[a_expr, b_expr], + ) + .upcast() +} + +// Returns an expression that is the or’ed result of the given boolean expressions. +#[allow(dead_code)] +pub fn or_expr(a_expr: gtk::Expression, b_expr: gtk::Expression) -> gtk::Expression { + gtk::ClosureExpression::new( + move |args| { + let a: bool = args[1].get().unwrap(); + let b: bool = args[2].get().unwrap(); + a || b + }, + &[a_expr, b_expr], + ) + .upcast() +} + +// Returns an expression that is the inverted result of the given boolean expressions. +#[allow(dead_code)] +pub fn not_expr(a_expr: gtk::Expression) -> gtk::Expression { + gtk::ClosureExpression::new( + move |args| { + let a: bool = args[1].get().unwrap(); + !a + }, + &[a_expr], + ) + .upcast() +}