Macro cocoa::delegate

source ·
macro_rules! delegate {
    (
        $name:expr, {
            $( ($($sel:ident :)+) => $func:expr),*
        }
    ) => { ... };
    (
        $name:expr, {
            $($var:ident : $var_type:ty = $value:expr),* ,
            $( ($($sel:ident :)+) => $func:expr),*
        }
    ) => { ... };
}
Expand description

Creates a Cocoa delegate to use e.g. with NSWindow.setDelegate_. Adds instance variables and methods to the definition.

§Example with NSWindowDelegate

use cocoa::appkit::NSWindow;
use cocoa::base::{id, nil};
use cocoa::delegate;

use objc::runtime::{Object, Sel};
use objc::{msg_send, sel, sel_impl};

unsafe {
    let my_window: id = NSWindow::alloc(nil);

    extern fn on_enter_fullscreen(this: &Object, _cmd: Sel, _notification: id) {
        unsafe {
            let window: id = *this.get_ivar("window");
            window.setToolbar_(nil);
        }
    }

    my_window.setDelegate_(delegate!("MyWindowDelegate", {
        window: id = my_window, // Declare instance variable(s)
        (onWindowWillEnterFullscreen:) => on_enter_fullscreen as extern fn(&Object, Sel, id) // Declare function(s)
    }));
}