1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
#[cfg(feature = "v4_12")]
#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
use crate::SectionModel;
use glib::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
};
use std::{boxed::Box as Box_, fmt, mem::transmute};
#[cfg(feature = "v4_12")]
#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
glib::wrapper! {
/// [`FlattenListModel`][crate::FlattenListModel] is a list model that concatenates other list models.
///
/// [`FlattenListModel`][crate::FlattenListModel] takes a list model containing list models, and flattens
/// it into a single model. Each list model becomes a section in the single model.
///
/// ## Properties
///
///
/// #### `item-type`
/// The type of items. See [`ListModelExtManual::item_type()`][crate::gio::prelude::ListModelExtManual::item_type()].
///
/// Readable
///
///
/// #### `model`
/// The model being flattened.
///
/// Readable | Writeable
///
///
/// #### `n-items`
/// The number of items. See [`ListModelExtManual::n_items()`][crate::gio::prelude::ListModelExtManual::n_items()].
///
/// Readable
///
/// # Implements
///
/// [`trait@glib::ObjectExt`], [`trait@gio::prelude::ListModelExt`], [`SectionModelExt`][trait@crate::prelude::SectionModelExt]
#[doc(alias = "GtkFlattenListModel")]
pub struct FlattenListModel(Object<ffi::GtkFlattenListModel, ffi::GtkFlattenListModelClass>) @implements gio::ListModel, SectionModel;
match fn {
type_ => || ffi::gtk_flatten_list_model_get_type(),
}
}
#[cfg(not(any(feature = "v4_12")))]
glib::wrapper! {
#[doc(alias = "GtkFlattenListModel")]
pub struct FlattenListModel(Object<ffi::GtkFlattenListModel, ffi::GtkFlattenListModelClass>) @implements gio::ListModel;
match fn {
type_ => || ffi::gtk_flatten_list_model_get_type(),
}
}
impl FlattenListModel {
/// Creates a new [`FlattenListModel`][crate::FlattenListModel] that flattens @list.
/// ## `model`
/// the model to be flattened
///
/// # Returns
///
/// a new [`FlattenListModel`][crate::FlattenListModel]
#[doc(alias = "gtk_flatten_list_model_new")]
pub fn new(model: Option<impl IsA<gio::ListModel>>) -> FlattenListModel {
assert_initialized_main_thread!();
unsafe {
from_glib_full(ffi::gtk_flatten_list_model_new(
model.map(|p| p.upcast()).into_glib_ptr(),
))
}
}
/// Gets the model set via gtk_flatten_list_model_set_model().
///
/// # Returns
///
/// The model flattened by @self
#[doc(alias = "gtk_flatten_list_model_get_model")]
#[doc(alias = "get_model")]
pub fn model(&self) -> Option<gio::ListModel> {
unsafe { from_glib_none(ffi::gtk_flatten_list_model_get_model(self.to_glib_none().0)) }
}
/// Returns the model containing the item at the given position.
/// ## `position`
/// a position
///
/// # Returns
///
/// the model containing the item at @position
#[doc(alias = "gtk_flatten_list_model_get_model_for_item")]
#[doc(alias = "get_model_for_item")]
pub fn model_for_item(&self, position: u32) -> Option<gio::ListModel> {
unsafe {
from_glib_none(ffi::gtk_flatten_list_model_get_model_for_item(
self.to_glib_none().0,
position,
))
}
}
/// Sets a new model to be flattened.
/// ## `model`
/// the new model
#[doc(alias = "gtk_flatten_list_model_set_model")]
pub fn set_model(&self, model: Option<&impl IsA<gio::ListModel>>) {
unsafe {
ffi::gtk_flatten_list_model_set_model(
self.to_glib_none().0,
model.map(|p| p.as_ref()).to_glib_none().0,
);
}
}
#[doc(alias = "model")]
pub fn connect_model_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_model_trampoline<F: Fn(&FlattenListModel) + 'static>(
this: *mut ffi::GtkFlattenListModel,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(&from_glib_borrow(this))
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::model\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
notify_model_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl fmt::Display for FlattenListModel {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("FlattenListModel")
}
}