rute 0.0.1

UI library implemented on top of Qt

// This file is auto-generated by rute_gen. DO NOT EDIT.
use std::cell::Cell;
use std::marker::PhantomData;
use std::rc::Rc;

#[allow(unused_imports)]
use std::ffi::{CString, CStr};

use rute_ffi_base::*;

#[allow(unused_imports)]
use auto::*;



// This file is auto-generated by rute_gen. DO NOT EDIT.
use std::os::raw::c_void;
use std::mem::transmute;

unsafe extern "C" fn rute_object_delete_callback(data: *const c_void) {
    let d = Rc::from_raw(data as *const Cell<Option<RUBase>>);
    d.set(None);
}

pub struct Rute<'a> {
    rute_ffi: *const RuteFFI,
    _priv_data: *const c_void,
    _marker: PhantomData<::std::cell::Cell<&'a ()>>,
}

impl<'a> Rute<'a> {
    pub fn new() -> Rute<'a> {
        Rute {
            rute_ffi: unsafe { rute_get() },
            _priv_data: ::std::ptr::null(),
            _marker: PhantomData,
        }
    }

    pub fn create_application(&self) -> Application<'a> {
        let ffi_data = unsafe { ((*self.rute_ffi).create_application)(::std::ptr::null()) };
        Application {
            data: Rc::new(Cell::new(Some(ffi_data.qt_data))),
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }

    pub fn application(&self) -> ApplicationStatic<'a> {
        let ffi_data = unsafe { ((*self.rute_ffi).get_application)(::std::ptr::null()) };
        ApplicationStatic {
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }

    pub fn create_font(&self) -> Font<'a> {
        let ffi_data = unsafe { ((*self.rute_ffi).create_font)(::std::ptr::null()) };
        Font {
            data: Rc::new(Cell::new(Some(ffi_data.qt_data))),
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }

    pub fn create_list_widget(&self) -> ListWidget<'a> {
        let data = Rc::new(Cell::new(None));

        let ffi_data = unsafe {
            ((*self.rute_ffi).create_list_widget)(
                ::std::ptr::null(),
                transmute(rute_object_delete_callback as usize),
                Rc::into_raw(data.clone()) as *const c_void)
        };

        data.set(Some(ffi_data.qt_data));

        ListWidget {
            data,
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }

    pub fn create_list_widget_item(&self) -> ListWidgetItem<'a> {
        let data = Rc::new(Cell::new(None));

        let ffi_data = unsafe {
            ((*self.rute_ffi).create_list_widget_item)(
                ::std::ptr::null(),
                transmute(rute_object_delete_callback as usize),
                Rc::into_raw(data.clone()) as *const c_void)
        };

        data.set(Some(ffi_data.qt_data));

        ListWidgetItem {
            data,
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }

    pub fn create_widget(&self) -> Widget<'a> {
        let data = Rc::new(Cell::new(None));

        let ffi_data = unsafe {
            ((*self.rute_ffi).create_widget)(
                ::std::ptr::null(),
                transmute(rute_object_delete_callback as usize),
                Rc::into_raw(data.clone()) as *const c_void)
        };

        data.set(Some(ffi_data.qt_data));

        Widget {
            data,
            all_funcs: ffi_data.all_funcs,
            _marker: PhantomData,
        }
    }
}