gtk4/auto/
numeric_sorter.rs1use crate::{ffi, Expression, SortType, Sorter};
6use glib::{
7 prelude::*,
8 signal::{connect_raw, SignalHandlerId},
9 translate::*,
10};
11use std::boxed::Box as Box_;
12
13glib::wrapper! {
14 #[doc(alias = "GtkNumericSorter")]
15 pub struct NumericSorter(Object<ffi::GtkNumericSorter, ffi::GtkNumericSorterClass>) @extends Sorter;
16
17 match fn {
18 type_ => || ffi::gtk_numeric_sorter_get_type(),
19 }
20}
21
22impl NumericSorter {
23 #[doc(alias = "gtk_numeric_sorter_new")]
24 pub fn new(expression: Option<impl AsRef<Expression>>) -> NumericSorter {
25 assert_initialized_main_thread!();
26 unsafe {
27 from_glib_full(ffi::gtk_numeric_sorter_new(
28 expression
29 .map(|p| p.as_ref().clone().upcast())
30 .into_glib_ptr(),
31 ))
32 }
33 }
34
35 pub fn builder() -> NumericSorterBuilder {
40 NumericSorterBuilder::new()
41 }
42
43 #[doc(alias = "gtk_numeric_sorter_get_expression")]
44 #[doc(alias = "get_expression")]
45 pub fn expression(&self) -> Option<Expression> {
46 unsafe {
47 from_glib_none(ffi::gtk_numeric_sorter_get_expression(
48 self.to_glib_none().0,
49 ))
50 }
51 }
52
53 #[doc(alias = "gtk_numeric_sorter_get_sort_order")]
54 #[doc(alias = "get_sort_order")]
55 #[doc(alias = "sort-order")]
56 pub fn sort_order(&self) -> SortType {
57 unsafe {
58 from_glib(ffi::gtk_numeric_sorter_get_sort_order(
59 self.to_glib_none().0,
60 ))
61 }
62 }
63
64 #[doc(alias = "gtk_numeric_sorter_set_expression")]
65 #[doc(alias = "expression")]
66 pub fn set_expression(&self, expression: Option<impl AsRef<Expression>>) {
67 unsafe {
68 ffi::gtk_numeric_sorter_set_expression(
69 self.to_glib_none().0,
70 expression.as_ref().map(|p| p.as_ref()).to_glib_none().0,
71 );
72 }
73 }
74
75 #[doc(alias = "gtk_numeric_sorter_set_sort_order")]
76 #[doc(alias = "sort-order")]
77 pub fn set_sort_order(&self, sort_order: SortType) {
78 unsafe {
79 ffi::gtk_numeric_sorter_set_sort_order(self.to_glib_none().0, sort_order.into_glib());
80 }
81 }
82
83 #[doc(alias = "expression")]
84 pub fn connect_expression_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
85 unsafe extern "C" fn notify_expression_trampoline<F: Fn(&NumericSorter) + 'static>(
86 this: *mut ffi::GtkNumericSorter,
87 _param_spec: glib::ffi::gpointer,
88 f: glib::ffi::gpointer,
89 ) {
90 let f: &F = &*(f as *const F);
91 f(&from_glib_borrow(this))
92 }
93 unsafe {
94 let f: Box_<F> = Box_::new(f);
95 connect_raw(
96 self.as_ptr() as *mut _,
97 c"notify::expression".as_ptr() as *const _,
98 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
99 notify_expression_trampoline::<F> as *const (),
100 )),
101 Box_::into_raw(f),
102 )
103 }
104 }
105
106 #[doc(alias = "sort-order")]
107 pub fn connect_sort_order_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
108 unsafe extern "C" fn notify_sort_order_trampoline<F: Fn(&NumericSorter) + 'static>(
109 this: *mut ffi::GtkNumericSorter,
110 _param_spec: glib::ffi::gpointer,
111 f: glib::ffi::gpointer,
112 ) {
113 let f: &F = &*(f as *const F);
114 f(&from_glib_borrow(this))
115 }
116 unsafe {
117 let f: Box_<F> = Box_::new(f);
118 connect_raw(
119 self.as_ptr() as *mut _,
120 c"notify::sort-order".as_ptr() as *const _,
121 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
122 notify_sort_order_trampoline::<F> as *const (),
123 )),
124 Box_::into_raw(f),
125 )
126 }
127 }
128}
129
130impl Default for NumericSorter {
131 fn default() -> Self {
132 glib::object::Object::new::<Self>()
133 }
134}
135
136#[must_use = "The builder must be built to be used"]
141pub struct NumericSorterBuilder {
142 builder: glib::object::ObjectBuilder<'static, NumericSorter>,
143}
144
145impl NumericSorterBuilder {
146 fn new() -> Self {
147 Self {
148 builder: glib::object::Object::builder(),
149 }
150 }
151
152 pub fn expression(self, expression: impl AsRef<Expression>) -> Self {
153 Self {
154 builder: self
155 .builder
156 .property("expression", expression.as_ref().clone()),
157 }
158 }
159
160 pub fn sort_order(self, sort_order: SortType) -> Self {
161 Self {
162 builder: self.builder.property("sort-order", sort_order),
163 }
164 }
165
166 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
169 pub fn build(self) -> NumericSorter {
170 assert_initialized_main_thread!();
171 self.builder.build()
172 }
173}