objc_runtime

objective-c runtime bindings


Keywords
objective-c, wrapper
License
SSPL-1.0
Install
nimble install objc_runtime

Documentation

objc_runtime Build Status

objective-c runtime bindings provide macro objcr allow you write message sending style code

var NSApp {.importc.}: ID

proc main() =
  func createMenuItem(title: ID | NSString, action: string, key: string): ID =
    result = objc_msgSend(getClass("NSMenuItem").ID, registerName("alloc"))
    objc_msgSend(result, registerName("initWithTitle:action:keyEquivalent:"),
                title, if action != "": registerName(action) else: nil, get_nsstring(key))
    objc_msgSend(result, registerName("autorelease"))

  objcr:
    [NSApplication sharedApplication]

    if NSApp.isNil:
      echo "Failed to initialized NSApplication...  terminating..."
      return
    [NSApp setActivationPolicy: NSApplicationActivationPolicyRegular]

    var menuBar = [[NSMenu alloc]init]
    var appMenuItem = [[NSMenuItem alloc]init]
    var appMenu = [[NSMenu alloc]init]

    var quitTitle = @"Quit"
    var quitMenuItem = createMenuItem(quitTitle, "terminate:", "q")
    [appMenu addItem: quitMenuItem]
    [appMenuItem setSubmenu: appMenu]

    [menuBar addItem: appMenuItem]
    [NSApp setMainMenu: menuBar]

    var mainWindow = [NSWindow alloc]
    var rect = NSMakeRect(0, 0, 200, 200)
    [mainWindow initWithContentRect: rect, styleMask:  NSWindowStyleMaskTitled or NSWindowStyleMaskClosable or NSWindowStyleMaskMiniaturizable or NSWindowStyleMaskResizable, backing: NSBackingStoreBuffered,
        `defer`: false]

    var pos = NSMakePoint(20,20)
    [mainWindow cascadeTopLeftFromPoint: pos]
    [mainWindow setTitle: "Hello"]
    [mainWindow makeKeyAndOrderFront: NSApp]
    [NSApp activateIgnoringOtherApps: true]
    [NSApp run]


when isMainModule:
  main()