use crate::ffi;
use glib::{
object::ObjectType as _,
prelude::*,
signal::{SignalHandlerId, connect_raw},
translate::*,
};
use std::boxed::Box as Box_;
glib::wrapper! {
#[doc(alias = "GtkSourceSnippetContext")]
pub struct SnippetContext(Object<ffi::GtkSourceSnippetContext, ffi::GtkSourceSnippetContextClass>);
match fn {
type_ => || ffi::gtk_source_snippet_context_get_type(),
}
}
impl SnippetContext {
#[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()) }
}
#[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) -> glib::GString {
unsafe {
from_glib_full(ffi::gtk_source_snippet_context_expand(
self.to_glib_none().0,
input.to_glib_none().0,
))
}
}
#[doc(alias = "gtk_source_snippet_context_get_variable")]
#[doc(alias = "get_variable")]
pub fn 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,
))
}
}
#[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.into_glib(),
);
}
}
#[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,
);
}
}
#[doc(alias = "changed")]
pub fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn changed_trampoline<F: Fn(&SnippetContext) + 'static>(
this: *mut ffi::GtkSourceSnippetContext,
f: glib::ffi::gpointer,
) {
unsafe {
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 _,
c"changed".as_ptr(),
Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
changed_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl Default for SnippetContext {
fn default() -> Self {
Self::new()
}
}