1use glib::object::Cast;
6use glib::object::IsA;
7use glib::translate::*;
8use glib::GString;
9use glib::StaticType;
10use glib::ToValue;
11use gtk_sys;
12use std::fmt;
13use TextBuffer;
14
15glib_wrapper! {
16 pub struct TextMark(Object<gtk_sys::GtkTextMark, gtk_sys::GtkTextMarkClass, TextMarkClass>);
17
18 match fn {
19 get_type => || gtk_sys::gtk_text_mark_get_type(),
20 }
21}
22
23impl TextMark {
24 pub fn new(name: Option<&str>, left_gravity: bool) -> TextMark {
25 assert_initialized_main_thread!();
26 unsafe {
27 from_glib_full(gtk_sys::gtk_text_mark_new(
28 name.to_glib_none().0,
29 left_gravity.to_glib(),
30 ))
31 }
32 }
33}
34
35pub struct TextMarkBuilder {
36 left_gravity: Option<bool>,
37 name: Option<String>,
38}
39
40impl TextMarkBuilder {
41 pub fn new() -> Self {
42 Self {
43 left_gravity: None,
44 name: None,
45 }
46 }
47
48 pub fn build(self) -> TextMark {
49 let mut properties: Vec<(&str, &dyn ToValue)> = vec![];
50 if let Some(ref left_gravity) = self.left_gravity {
51 properties.push(("left-gravity", left_gravity));
52 }
53 if let Some(ref name) = self.name {
54 properties.push(("name", name));
55 }
56 glib::Object::new(TextMark::static_type(), &properties)
57 .expect("object new")
58 .downcast()
59 .expect("downcast")
60 }
61
62 pub fn left_gravity(mut self, left_gravity: bool) -> Self {
63 self.left_gravity = Some(left_gravity);
64 self
65 }
66
67 pub fn name(mut self, name: &str) -> Self {
68 self.name = Some(name.to_string());
69 self
70 }
71}
72
73pub const NONE_TEXT_MARK: Option<&TextMark> = None;
74
75pub trait TextMarkExt: 'static {
76 fn get_buffer(&self) -> Option<TextBuffer>;
77
78 fn get_deleted(&self) -> bool;
79
80 fn get_left_gravity(&self) -> bool;
81
82 fn get_name(&self) -> Option<GString>;
83
84 fn get_visible(&self) -> bool;
85
86 fn set_visible(&self, setting: bool);
87}
88
89impl<O: IsA<TextMark>> TextMarkExt for O {
90 fn get_buffer(&self) -> Option<TextBuffer> {
91 unsafe {
92 from_glib_none(gtk_sys::gtk_text_mark_get_buffer(
93 self.as_ref().to_glib_none().0,
94 ))
95 }
96 }
97
98 fn get_deleted(&self) -> bool {
99 unsafe {
100 from_glib(gtk_sys::gtk_text_mark_get_deleted(
101 self.as_ref().to_glib_none().0,
102 ))
103 }
104 }
105
106 fn get_left_gravity(&self) -> bool {
107 unsafe {
108 from_glib(gtk_sys::gtk_text_mark_get_left_gravity(
109 self.as_ref().to_glib_none().0,
110 ))
111 }
112 }
113
114 fn get_name(&self) -> Option<GString> {
115 unsafe {
116 from_glib_none(gtk_sys::gtk_text_mark_get_name(
117 self.as_ref().to_glib_none().0,
118 ))
119 }
120 }
121
122 fn get_visible(&self) -> bool {
123 unsafe {
124 from_glib(gtk_sys::gtk_text_mark_get_visible(
125 self.as_ref().to_glib_none().0,
126 ))
127 }
128 }
129
130 fn set_visible(&self, setting: bool) {
131 unsafe {
132 gtk_sys::gtk_text_mark_set_visible(self.as_ref().to_glib_none().0, setting.to_glib());
133 }
134 }
135}
136
137impl fmt::Display for TextMark {
138 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
139 write!(f, "TextMark")
140 }
141}