vtk_rs/
vtk_object.rs

1#[cxx::bridge]
2pub(crate) mod ffi {
3    unsafe extern "C++" {
4        include!("vtk_object.h");
5
6        pub(crate) type vtkObject;
7
8        fn vtk_object_debug_on(vtk_object: Pin<&mut vtkObject>);
9        fn vtk_object_debug_off(vtk_object: Pin<&mut vtkObject>);
10        fn vtk_object_set_debug(object: Pin<&mut vtkObject>, status: bool);
11        fn vtk_object_get_debug(object: &vtkObject) -> bool;
12        fn vtk_object_modified(object: &vtkObject);
13        fn vtk_object_remove_observer(object: Pin<&mut vtkObject>, tag: u64);
14        fn vtk_object_remove_observers(object: Pin<&mut vtkObject>, event: u64);
15        fn vtk_object_remove_all_observers(object: Pin<&mut vtkObject>);
16        fn vtk_object_has_observer(object: &vtkObject, event: u64) -> u64;
17        // pub(crate) fn add_observer(object: Pin<&mut vtkObject>, event: u64, command: &vtkCommand, priority: f32);
18
19        // pub(crate) unsafe fn print_self(ptr: &vtkObject, indent: usize) -> String;
20    }
21}
22
23pub(crate) mod private {
24    pub trait Sealed {}
25}
26
27/// [`vtkObject`](https://vtk.org/doc/nightly/html/classvtkObject.html)
28#[allow(non_camel_case_types)]
29pub trait vtkObject: private::Sealed {
30    #[doc(hidden)]
31    fn as_vtk_object(&self) -> core::pin::Pin<&ffi::vtkObject>;
32    #[doc(hidden)]
33    fn as_vtk_object_mut(&mut self) -> core::pin::Pin<&mut ffi::vtkObject>;
34
35    #[doc(alias = "SetDebug")]
36    fn set_debug(&mut self, status: bool) {
37        ffi::vtk_object_set_debug(self.as_vtk_object_mut(), status);
38    }
39
40    #[doc(alias = "GetDebug")]
41    fn get_debug(&self) -> bool {
42        ffi::vtk_object_get_debug(&self.as_vtk_object())
43    }
44
45    #[doc(alias = "DebugOn")]
46    fn debug_on(&mut self) {
47        ffi::vtk_object_debug_on(self.as_vtk_object_mut())
48    }
49
50    #[doc(alias = "DebugOff")]
51    fn debug_off(&mut self) {
52        ffi::vtk_object_debug_off(self.as_vtk_object_mut())
53    }
54
55    #[doc(alias = "Modified")]
56    fn modified(&mut self) {
57        ffi::vtk_object_modified(&self.as_vtk_object())
58    }
59
60    #[doc(alias = "RemoveObserver")]
61    fn remove_observer(&mut self, tag: u64) {
62        ffi::vtk_object_remove_observer(self.as_vtk_object_mut(), tag)
63    }
64
65    #[doc(alias = "RemoveObservers")]
66    fn remove_observers(&mut self, event: u64) {
67        ffi::vtk_object_remove_observers(self.as_vtk_object_mut(), event)
68    }
69
70    #[doc(alias = "RemoveAllObservers")]
71    fn remove_all_observers(&mut self) {
72        ffi::vtk_object_remove_all_observers(self.as_vtk_object_mut())
73    }
74
75    #[doc(alias = "HasObserver")]
76    fn has_observer(&self, event: u64) -> u64 {
77        ffi::vtk_object_has_observer(&self.as_vtk_object(), event)
78    }
79
80    // TODO
81    // [`AddObserver`](https://vtk.org/doc/nightly/html/classvtkObject.html)
82    // fn add_observer(&self, vtk_command: impl ..., priority: f64);
83    // fn invoke_event(&self, event: c_ulong);
84    // fn print_self(&self, indent: usize) -> String;
85}