gtk4/auto/
column_view_sorter.rs1use crate::{ffi, ColumnViewColumn, 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 = "GtkColumnViewSorter")]
15 pub struct ColumnViewSorter(Object<ffi::GtkColumnViewSorter, ffi::GtkColumnViewSorterClass>) @extends Sorter;
16
17 match fn {
18 type_ => || ffi::gtk_column_view_sorter_get_type(),
19 }
20}
21
22impl ColumnViewSorter {
23 #[doc(alias = "gtk_column_view_sorter_get_n_sort_columns")]
24 #[doc(alias = "get_n_sort_columns")]
25 pub fn n_sort_columns(&self) -> u32 {
26 unsafe { ffi::gtk_column_view_sorter_get_n_sort_columns(self.to_glib_none().0) }
27 }
28
29 #[doc(alias = "gtk_column_view_sorter_get_nth_sort_column")]
30 #[doc(alias = "get_nth_sort_column")]
31 pub fn nth_sort_column(&self, position: u32) -> (Option<ColumnViewColumn>, SortType) {
32 unsafe {
33 let mut sort_order = std::mem::MaybeUninit::uninit();
34 let ret = from_glib_none(ffi::gtk_column_view_sorter_get_nth_sort_column(
35 self.to_glib_none().0,
36 position,
37 sort_order.as_mut_ptr(),
38 ));
39 (ret, from_glib(sort_order.assume_init()))
40 }
41 }
42
43 #[doc(alias = "gtk_column_view_sorter_get_primary_sort_column")]
44 #[doc(alias = "get_primary_sort_column")]
45 #[doc(alias = "primary-sort-column")]
46 pub fn primary_sort_column(&self) -> Option<ColumnViewColumn> {
47 unsafe {
48 from_glib_none(ffi::gtk_column_view_sorter_get_primary_sort_column(
49 self.to_glib_none().0,
50 ))
51 }
52 }
53
54 #[doc(alias = "gtk_column_view_sorter_get_primary_sort_order")]
55 #[doc(alias = "get_primary_sort_order")]
56 #[doc(alias = "primary-sort-order")]
57 pub fn primary_sort_order(&self) -> SortType {
58 unsafe {
59 from_glib(ffi::gtk_column_view_sorter_get_primary_sort_order(
60 self.to_glib_none().0,
61 ))
62 }
63 }
64
65 #[cfg(feature = "v4_10")]
66 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
67 #[doc(alias = "primary-sort-column")]
68 pub fn connect_primary_sort_column_notify<F: Fn(&Self) + 'static>(
69 &self,
70 f: F,
71 ) -> SignalHandlerId {
72 unsafe extern "C" fn notify_primary_sort_column_trampoline<
73 F: Fn(&ColumnViewSorter) + 'static,
74 >(
75 this: *mut ffi::GtkColumnViewSorter,
76 _param_spec: glib::ffi::gpointer,
77 f: glib::ffi::gpointer,
78 ) {
79 let f: &F = &*(f as *const F);
80 f(&from_glib_borrow(this))
81 }
82 unsafe {
83 let f: Box_<F> = Box_::new(f);
84 connect_raw(
85 self.as_ptr() as *mut _,
86 c"notify::primary-sort-column".as_ptr() as *const _,
87 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
88 notify_primary_sort_column_trampoline::<F> as *const (),
89 )),
90 Box_::into_raw(f),
91 )
92 }
93 }
94
95 #[cfg(feature = "v4_10")]
96 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
97 #[doc(alias = "primary-sort-order")]
98 pub fn connect_primary_sort_order_notify<F: Fn(&Self) + 'static>(
99 &self,
100 f: F,
101 ) -> SignalHandlerId {
102 unsafe extern "C" fn notify_primary_sort_order_trampoline<
103 F: Fn(&ColumnViewSorter) + 'static,
104 >(
105 this: *mut ffi::GtkColumnViewSorter,
106 _param_spec: glib::ffi::gpointer,
107 f: glib::ffi::gpointer,
108 ) {
109 let f: &F = &*(f as *const F);
110 f(&from_glib_borrow(this))
111 }
112 unsafe {
113 let f: Box_<F> = Box_::new(f);
114 connect_raw(
115 self.as_ptr() as *mut _,
116 c"notify::primary-sort-order".as_ptr() as *const _,
117 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
118 notify_primary_sort_order_trampoline::<F> as *const (),
119 )),
120 Box_::into_raw(f),
121 )
122 }
123 }
124}