use objc::runtime::*;
use objc::*;
use super::{PLYCallback, PLYView};
use crate::foundation::NSNumber;
use crate::Raw;
pub struct PLYViewController {
object: *mut Object,
view: PLYView,
}
impl PLYViewController {
pub fn new() -> PLYViewController {
unsafe {
let mut object: *mut Object = msg_send![class!(PLYViewController), alloc];
object = msg_send![object, init];
PLYViewController::from_raw(object)
}
}
pub fn view_mut(&mut self) -> &mut PLYView {
&mut self.view
}
pub fn present_view_controller(
&mut self,
view_controller: &PLYViewController,
animated: bool,
_completion: Option<()>,
) {
unsafe {
let _: () = msg_send![self.object, presentViewController: view_controller.as_raw()
animated: animated
completion: std::ptr::null_mut::<Object>()];
}
}
pub fn dismiss_view_controller(&mut self, animated: bool, _completion: Option<()>) {
unsafe {
let _: () = msg_send![self.object, dismissViewControllerAnimated: animated
completion: std::ptr::null_mut::<Object>()];
}
}
pub fn set_on_did_disappear(&mut self, callback: &PLYCallback<NSNumber>) {
unsafe {
let _: () = msg_send![self.object, setOnDidDisappear: callback.as_raw()];
}
}
}
impl Raw for PLYViewController {
unsafe fn from_raw(object: *mut Object) -> Self {
PLYViewController {
object,
view: PLYView::from_raw_retain(msg_send![object, view]),
}
}
unsafe fn as_raw(&self) -> *mut Object {
self.object
}
}
impl Clone for PLYViewController {
fn clone(&self) -> Self {
unsafe { PLYViewController::from_raw_retain(self.as_raw()) }
}
}
impl Drop for PLYViewController {
fn drop(&mut self) {
unsafe { objc_release(self.object) }
}
}