gtk4/auto/
numeric_sorter.rs1use crate::{Expression, SortType, Sorter, ffi};
6use glib::{
7 prelude::*,
8 signal::{SignalHandlerId, connect_raw},
9 translate::*,
10};
11use std::boxed::Box as Box_;
12
13glib::wrapper! {
14 #[doc(alias = "GtkNumericSorter")]
37 pub struct NumericSorter(Object<ffi::GtkNumericSorter, ffi::GtkNumericSorterClass>) @extends Sorter;
38
39 match fn {
40 type_ => || ffi::gtk_numeric_sorter_get_type(),
41 }
42}
43
44impl NumericSorter {
45 #[doc(alias = "gtk_numeric_sorter_new")]
56 pub fn new(expression: Option<impl AsRef<Expression>>) -> NumericSorter {
57 assert_initialized_main_thread!();
58 unsafe {
59 from_glib_full(ffi::gtk_numeric_sorter_new(
60 expression
61 .map(|p| p.as_ref().clone().upcast())
62 .into_glib_ptr(),
63 ))
64 }
65 }
66
67 pub fn builder() -> NumericSorterBuilder {
72 NumericSorterBuilder::new()
73 }
74
75 #[doc(alias = "gtk_numeric_sorter_get_expression")]
81 #[doc(alias = "get_expression")]
82 pub fn expression(&self) -> Option<Expression> {
83 unsafe {
84 from_glib_none(ffi::gtk_numeric_sorter_get_expression(
85 self.to_glib_none().0,
86 ))
87 }
88 }
89
90 #[doc(alias = "gtk_numeric_sorter_get_sort_order")]
96 #[doc(alias = "get_sort_order")]
97 #[doc(alias = "sort-order")]
98 pub fn sort_order(&self) -> SortType {
99 unsafe {
100 from_glib(ffi::gtk_numeric_sorter_get_sort_order(
101 self.to_glib_none().0,
102 ))
103 }
104 }
105
106 #[doc(alias = "gtk_numeric_sorter_set_expression")]
116 #[doc(alias = "expression")]
117 pub fn set_expression(&self, expression: Option<impl AsRef<Expression>>) {
118 unsafe {
119 ffi::gtk_numeric_sorter_set_expression(
120 self.to_glib_none().0,
121 expression.as_ref().map(|p| p.as_ref()).to_glib_none().0,
122 );
123 }
124 }
125
126 #[doc(alias = "gtk_numeric_sorter_set_sort_order")]
130 #[doc(alias = "sort-order")]
131 pub fn set_sort_order(&self, sort_order: SortType) {
132 unsafe {
133 ffi::gtk_numeric_sorter_set_sort_order(self.to_glib_none().0, sort_order.into_glib());
134 }
135 }
136
137 #[doc(alias = "expression")]
138 pub fn connect_expression_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
139 unsafe extern "C" fn notify_expression_trampoline<F: Fn(&NumericSorter) + 'static>(
140 this: *mut ffi::GtkNumericSorter,
141 _param_spec: glib::ffi::gpointer,
142 f: glib::ffi::gpointer,
143 ) {
144 unsafe {
145 let f: &F = &*(f as *const F);
146 f(&from_glib_borrow(this))
147 }
148 }
149 unsafe {
150 let f: Box_<F> = Box_::new(f);
151 connect_raw(
152 self.as_ptr() as *mut _,
153 c"notify::expression".as_ptr() as *const _,
154 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
155 notify_expression_trampoline::<F> as *const (),
156 )),
157 Box_::into_raw(f),
158 )
159 }
160 }
161
162 #[doc(alias = "sort-order")]
163 pub fn connect_sort_order_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
164 unsafe extern "C" fn notify_sort_order_trampoline<F: Fn(&NumericSorter) + 'static>(
165 this: *mut ffi::GtkNumericSorter,
166 _param_spec: glib::ffi::gpointer,
167 f: glib::ffi::gpointer,
168 ) {
169 unsafe {
170 let f: &F = &*(f as *const F);
171 f(&from_glib_borrow(this))
172 }
173 }
174 unsafe {
175 let f: Box_<F> = Box_::new(f);
176 connect_raw(
177 self.as_ptr() as *mut _,
178 c"notify::sort-order".as_ptr() as *const _,
179 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
180 notify_sort_order_trampoline::<F> as *const (),
181 )),
182 Box_::into_raw(f),
183 )
184 }
185 }
186}
187
188impl Default for NumericSorter {
189 fn default() -> Self {
190 glib::object::Object::new::<Self>()
191 }
192}
193
194#[must_use = "The builder must be built to be used"]
199pub struct NumericSorterBuilder {
200 builder: glib::object::ObjectBuilder<'static, NumericSorter>,
201}
202
203impl NumericSorterBuilder {
204 fn new() -> Self {
205 Self {
206 builder: glib::object::Object::builder(),
207 }
208 }
209
210 pub fn expression(self, expression: impl AsRef<Expression>) -> Self {
212 Self {
213 builder: self
214 .builder
215 .property("expression", expression.as_ref().clone()),
216 }
217 }
218
219 pub fn sort_order(self, sort_order: SortType) -> Self {
221 Self {
222 builder: self.builder.property("sort-order", sort_order),
223 }
224 }
225
226 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
229 pub fn build(self) -> NumericSorter {
230 assert_initialized_main_thread!();
231 self.builder.build()
232 }
233}