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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files.git)
// DO NOT EDIT

#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
use glib::object::ObjectType as ObjectType_;
#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
use glib::signal::connect_raw;
#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
use glib::signal::SignalHandlerId;
use glib::translate::*;
#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
use std::boxed::Box as Box_;
use std::fmt;
#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
use std::mem::transmute;

glib::wrapper! {
    pub struct SnippetContext(Object<ffi::GtkSourceSnippetContext, ffi::GtkSourceSnippetContextClass>);

    match fn {
        get_type => || ffi::gtk_source_snippet_context_get_type(),
    }
}

impl SnippetContext {
    /// Creates a new `SnippetContext`.
    ///
    /// Generally, this isn't needed unless you are controlling the
    /// expansion of snippets manually.
    ///
    /// Feature: `v5_0`
    ///
    ///
    /// # Returns
    ///
    /// a `SnippetContext`
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    #[doc(alias = "gtk_source_snippet_context_new")]
    pub fn new() -> SnippetContext {
        assert_initialized_main_thread!();
        unsafe { from_glib_full(ffi::gtk_source_snippet_context_new()) }
    }

    /// Removes all variables from the context.
    ///
    /// Feature: `v5_0`
    ///
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    #[doc(alias = "gtk_source_snippet_context_clear_variables")]
    pub fn clear_variables(&self) {
        unsafe {
            ffi::gtk_source_snippet_context_clear_variables(self.to_glib_none().0);
        }
    }

    #[doc(alias = "gtk_source_snippet_context_expand")]
    pub fn expand(&self, input: &str) -> Option<glib::GString> {
        unsafe {
            from_glib_full(ffi::gtk_source_snippet_context_expand(
                self.to_glib_none().0,
                input.to_glib_none().0,
            ))
        }
    }

    /// Gets the current value for a variable named `key`.
    ///
    /// Feature: `v5_0`
    ///
    /// ## `key`
    /// the name of the variable
    ///
    /// # Returns
    ///
    /// the value for the variable, or `None`
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    #[doc(alias = "gtk_source_snippet_context_get_variable")]
    pub fn get_variable(&self, key: &str) -> Option<glib::GString> {
        unsafe {
            from_glib_none(ffi::gtk_source_snippet_context_get_variable(
                self.to_glib_none().0,
                key.to_glib_none().0,
            ))
        }
    }

    /// Sets a constatnt within the context. This is similar to
    /// a variable set with `SnippetContext::set_variable`
    /// but is expected to not change during use of the snippet.
    ///
    /// Examples would be the date or users name.
    ///
    /// Feature: `v5_0`
    ///
    /// ## `key`
    /// the constant name
    /// ## `value`
    /// the value of the constant
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    #[doc(alias = "gtk_source_snippet_context_set_constant")]
    pub fn set_constant(&self, key: &str, value: &str) {
        unsafe {
            ffi::gtk_source_snippet_context_set_constant(
                self.to_glib_none().0,
                key.to_glib_none().0,
                value.to_glib_none().0,
            );
        }
    }

    #[doc(alias = "gtk_source_snippet_context_set_line_prefix")]
    pub fn set_line_prefix(&self, line_prefix: &str) {
        unsafe {
            ffi::gtk_source_snippet_context_set_line_prefix(
                self.to_glib_none().0,
                line_prefix.to_glib_none().0,
            );
        }
    }

    #[doc(alias = "gtk_source_snippet_context_set_tab_width")]
    pub fn set_tab_width(&self, tab_width: i32) {
        unsafe {
            ffi::gtk_source_snippet_context_set_tab_width(self.to_glib_none().0, tab_width);
        }
    }

    #[doc(alias = "gtk_source_snippet_context_set_use_spaces")]
    pub fn set_use_spaces(&self, use_spaces: bool) {
        unsafe {
            ffi::gtk_source_snippet_context_set_use_spaces(
                self.to_glib_none().0,
                use_spaces.to_glib(),
            );
        }
    }

    /// Sets a variable within the context.
    ///
    /// This variable may be overridden by future updates to the
    /// context.
    ///
    /// Feature: `v5_0`
    ///
    /// ## `key`
    /// the variable name
    /// ## `value`
    /// the value for the variable
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    #[doc(alias = "gtk_source_snippet_context_set_variable")]
    pub fn set_variable(&self, key: &str, value: &str) {
        unsafe {
            ffi::gtk_source_snippet_context_set_variable(
                self.to_glib_none().0,
                key.to_glib_none().0,
                value.to_glib_none().0,
            );
        }
    }

    /// The "changed" signal is emitted when a change has been
    /// discovered in one of the chunks of the snippet which has
    /// caused a variable or other dynamic data within the context
    /// to have changed.
    ///
    /// Feature: `v5_0`
    ///
    #[cfg(any(feature = "v5_0", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
    pub fn connect_changed<F: Fn(&SnippetContext) + 'static>(&self, f: F) -> SignalHandlerId {
        unsafe extern "C" fn changed_trampoline<F: Fn(&SnippetContext) + 'static>(
            this: *mut ffi::GtkSourceSnippetContext,
            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"changed\0".as_ptr() as *const _,
                Some(transmute::<_, unsafe extern "C" fn()>(
                    changed_trampoline::<F> as *const (),
                )),
                Box_::into_raw(f),
            )
        }
    }
}

#[cfg(any(feature = "v5_0", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v5_0")))]
impl Default for SnippetContext {
    fn default() -> Self {
        Self::new()
    }
}

impl fmt::Display for SnippetContext {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        f.write_str("SnippetContext")
    }
}