gtk/auto/
text_tag_table.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 glib::object::Cast;
6use glib::object::IsA;
7use glib::signal::connect_raw;
8use glib::signal::SignalHandlerId;
9use glib::translate::*;
10use glib_sys;
11use gtk_sys;
12use std::boxed::Box as Box_;
13use std::fmt;
14use std::mem::transmute;
15use Buildable;
16use TextTag;
17
18glib_wrapper! {
19    pub struct TextTagTable(Object<gtk_sys::GtkTextTagTable, gtk_sys::GtkTextTagTableClass, TextTagTableClass>) @implements Buildable;
20
21    match fn {
22        get_type => || gtk_sys::gtk_text_tag_table_get_type(),
23    }
24}
25
26impl TextTagTable {
27    pub fn new() -> TextTagTable {
28        assert_initialized_main_thread!();
29        unsafe { from_glib_full(gtk_sys::gtk_text_tag_table_new()) }
30    }
31}
32
33impl Default for TextTagTable {
34    fn default() -> Self {
35        Self::new()
36    }
37}
38
39pub const NONE_TEXT_TAG_TABLE: Option<&TextTagTable> = None;
40
41pub trait TextTagTableExt: 'static {
42    fn add<P: IsA<TextTag>>(&self, tag: &P) -> bool;
43
44    fn foreach<P: FnMut(&TextTag)>(&self, func: P);
45
46    fn get_size(&self) -> i32;
47
48    fn lookup(&self, name: &str) -> Option<TextTag>;
49
50    fn remove<P: IsA<TextTag>>(&self, tag: &P);
51
52    fn connect_tag_added<F: Fn(&Self, &TextTag) + 'static>(&self, f: F) -> SignalHandlerId;
53
54    fn connect_tag_changed<F: Fn(&Self, &TextTag, bool) + 'static>(&self, f: F) -> SignalHandlerId;
55
56    fn connect_tag_removed<F: Fn(&Self, &TextTag) + 'static>(&self, f: F) -> SignalHandlerId;
57}
58
59impl<O: IsA<TextTagTable>> TextTagTableExt for O {
60    fn add<P: IsA<TextTag>>(&self, tag: &P) -> bool {
61        unsafe {
62            from_glib(gtk_sys::gtk_text_tag_table_add(
63                self.as_ref().to_glib_none().0,
64                tag.as_ref().to_glib_none().0,
65            ))
66        }
67    }
68
69    fn foreach<P: FnMut(&TextTag)>(&self, func: P) {
70        let func_data: P = func;
71        unsafe extern "C" fn func_func<P: FnMut(&TextTag)>(
72            tag: *mut gtk_sys::GtkTextTag,
73            data: glib_sys::gpointer,
74        ) {
75            let tag = from_glib_borrow(tag);
76            let callback: *mut P = data as *const _ as usize as *mut P;
77            (*callback)(&tag);
78        }
79        let func = Some(func_func::<P> as _);
80        let super_callback0: &P = &func_data;
81        unsafe {
82            gtk_sys::gtk_text_tag_table_foreach(
83                self.as_ref().to_glib_none().0,
84                func,
85                super_callback0 as *const _ as usize as *mut _,
86            );
87        }
88    }
89
90    fn get_size(&self) -> i32 {
91        unsafe { gtk_sys::gtk_text_tag_table_get_size(self.as_ref().to_glib_none().0) }
92    }
93
94    fn lookup(&self, name: &str) -> Option<TextTag> {
95        unsafe {
96            from_glib_none(gtk_sys::gtk_text_tag_table_lookup(
97                self.as_ref().to_glib_none().0,
98                name.to_glib_none().0,
99            ))
100        }
101    }
102
103    fn remove<P: IsA<TextTag>>(&self, tag: &P) {
104        unsafe {
105            gtk_sys::gtk_text_tag_table_remove(
106                self.as_ref().to_glib_none().0,
107                tag.as_ref().to_glib_none().0,
108            );
109        }
110    }
111
112    fn connect_tag_added<F: Fn(&Self, &TextTag) + 'static>(&self, f: F) -> SignalHandlerId {
113        unsafe extern "C" fn tag_added_trampoline<P, F: Fn(&P, &TextTag) + 'static>(
114            this: *mut gtk_sys::GtkTextTagTable,
115            tag: *mut gtk_sys::GtkTextTag,
116            f: glib_sys::gpointer,
117        ) where
118            P: IsA<TextTagTable>,
119        {
120            let f: &F = &*(f as *const F);
121            f(
122                &TextTagTable::from_glib_borrow(this).unsafe_cast(),
123                &from_glib_borrow(tag),
124            )
125        }
126        unsafe {
127            let f: Box_<F> = Box_::new(f);
128            connect_raw(
129                self.as_ptr() as *mut _,
130                b"tag-added\0".as_ptr() as *const _,
131                Some(transmute(tag_added_trampoline::<Self, F> as usize)),
132                Box_::into_raw(f),
133            )
134        }
135    }
136
137    fn connect_tag_changed<F: Fn(&Self, &TextTag, bool) + 'static>(&self, f: F) -> SignalHandlerId {
138        unsafe extern "C" fn tag_changed_trampoline<P, F: Fn(&P, &TextTag, bool) + 'static>(
139            this: *mut gtk_sys::GtkTextTagTable,
140            tag: *mut gtk_sys::GtkTextTag,
141            size_changed: glib_sys::gboolean,
142            f: glib_sys::gpointer,
143        ) where
144            P: IsA<TextTagTable>,
145        {
146            let f: &F = &*(f as *const F);
147            f(
148                &TextTagTable::from_glib_borrow(this).unsafe_cast(),
149                &from_glib_borrow(tag),
150                from_glib(size_changed),
151            )
152        }
153        unsafe {
154            let f: Box_<F> = Box_::new(f);
155            connect_raw(
156                self.as_ptr() as *mut _,
157                b"tag-changed\0".as_ptr() as *const _,
158                Some(transmute(tag_changed_trampoline::<Self, F> as usize)),
159                Box_::into_raw(f),
160            )
161        }
162    }
163
164    fn connect_tag_removed<F: Fn(&Self, &TextTag) + 'static>(&self, f: F) -> SignalHandlerId {
165        unsafe extern "C" fn tag_removed_trampoline<P, F: Fn(&P, &TextTag) + 'static>(
166            this: *mut gtk_sys::GtkTextTagTable,
167            tag: *mut gtk_sys::GtkTextTag,
168            f: glib_sys::gpointer,
169        ) where
170            P: IsA<TextTagTable>,
171        {
172            let f: &F = &*(f as *const F);
173            f(
174                &TextTagTable::from_glib_borrow(this).unsafe_cast(),
175                &from_glib_borrow(tag),
176            )
177        }
178        unsafe {
179            let f: Box_<F> = Box_::new(f);
180            connect_raw(
181                self.as_ptr() as *mut _,
182                b"tag-removed\0".as_ptr() as *const _,
183                Some(transmute(tag_removed_trampoline::<Self, F> as usize)),
184                Box_::into_raw(f),
185            )
186        }
187    }
188}
189
190impl fmt::Display for TextTagTable {
191    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
192        write!(f, "TextTagTable")
193    }
194}