#!/usr/bin/env ikarus --r6rs-script

(import (ikarus) (objc) (Cocoa) (Cocoa helpers))

(define-class NSTableView)
(define-class NSTableColumn)
(define-class NSColor)
(define-class NSButton)
(define-class NSImageView)

(define pool [$ [$ NSAutoreleasePool alloc] init])

(make-app)
[$ NSApplication sharedApplication]

(define (setup-menu app-name)
  (define (make-menu title)
    [$ [$ NSMenu alloc] initWithTitle: (nsstring title)])
  [$ NSApp setMainMenu: (make-menu "")]
  (let ([apple-menu (make-menu "")])
    (define (add-item name key action mod)
      (let ([x [$ apple-menu 
                  addItemWithTitle: (nsstring name)
                  action: (get-selector action)
                  keyEquivalent: (nsstring key)]])
        (when mod
          [$ x setKeyEquivalentModifierMask: mod])))
    (define (add-separator)
      [$ apple-menu addItem: [$ NSMenuItem separatorItem]])
    (add-item (string-append "About " app-name) ""
              "orderFrontStandardAboutPanel:" #f)
    (add-separator)
    (add-item (string-append "Hide " app-name) "h" "hide:" #f)
    (add-item "Hide Others" "h" "hideOtherApplications:"
              (bitwise-ior NSAlternateKeyMask NSCommandKeyMask))
    (add-item "Show All" "" "unhideAllApplications:" #f)
    (add-separator)
    (add-item (string-append "Quit " app-name) "q" "terminate:" #f)
    (let ([menu-item 
           [$ [$ NSMenuItem alloc]
              initWithTitle: (nsstring "")
              action: #f
              keyEquivalent: (nsstring "")]])
      [$ menu-item setSubmenu: apple-menu]
      [$ [$ NSApp mainMenu] addItem: menu-item]
      [$ NSApp setAppleMenu: apple-menu]
      [$ menu-item release])
    [$ apple-menu release]))

(setup-menu "Hello Ikarus")

(define style
  (bitwise-ior 
    NSTitledWindowMask
    NSClosableWindowMask 
    NSResizableWindowMask
    NSMiniaturizableWindowMask))

(define backing NSBackingStoreBuffered)

(define win 
  [$ [$ NSWindow alloc]
     initWithContentRect: '#(#(400 500) #(400 500))
     styleMask: style
     backing: backing
     defer: #f])

[$ win setTitle: (nsstring "Hello Ikarus")]
;[$ win setAlphaValue: 3/4] ; cute

#; ; button test
(let ([btn [$ [$ NSButton alloc] init]])
  [$ btn setTitle: (nsstring "Quit")]
  [$ btn setTarget: NSApp]
  [$ btn setAction: (get-selector "terminate:")]
  [$ win setContentView: btn])

#;
(let ([table [$ [$ NSTableView alloc] init]])
  [$ table setBackgroundColor: [$ NSColor blueColor]]
  (printf "~s\n" [$ table headerView])

  (let ([col [$ [$ NSTableColumn alloc] init]])
    [$ table addTableColumn: col]
    [$ [$ col headerCell] setStringValue: (nsstring "header")])
  [$ win setContentView: table]
  [$ win setDelegate: table])

[$ win makeKeyAndOrderFront: win]

[$ NSApp run]
[$ pool release]

(printf "back!\n")