gtk4/auto/
numeric_sorter.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use 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    // rustdoc-stripper-ignore-next
36    /// Creates a new builder-pattern struct instance to construct [`NumericSorter`] objects.
37    ///
38    /// This method returns an instance of [`NumericSorterBuilder`](crate::builders::NumericSorterBuilder) which can be used to create [`NumericSorter`] objects.
39    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// rustdoc-stripper-ignore-next
137/// A [builder-pattern] type to construct [`NumericSorter`] objects.
138///
139/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
140#[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    // rustdoc-stripper-ignore-next
167    /// Build the [`NumericSorter`].
168    #[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}