티스토리 툴바

BLOG main image
분류 전체보기 (463)
Random (335)
컴퓨터 (37)
Favorites (20)
사진 (9)
아포리즘 (8)
자전거 (33)
여행 (21)

Twitter Updates

    follow me on Twitter
    «   2012/02   »
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29      
    162,105 Visitors up to today!
    Today 10 hit, Yesterday 22 hit
    rss
    2008/03/06 16:56

    RubyCocoa는 ruby의 문법을 사용하면서 cocoa 어플리케이션을 만들어볼 수 있어서 매력적입니다. 보통 Xcode와 Interface Builder를 사용하여 NIB파일을 만들고 사용합니다만 다음과 같은 코드로 간단히 기본적인 윈도우를 만들어 볼 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    require 'osx/cocoa'
    include OSX
    
    if $0 == __FILE__ then
      app = NSApplication.sharedApplication()
    
      frame = [200.0, 300.0, 250.0, 100.0]
      win = NSWindow.alloc.initWithContentRect_styleMask_backing_defer(frame, 15, 2, 0)
      win.setTitle 'HelloWorld'
      win.setLevel(3)      # floating window
    
      NSNotificationCenter.defaultCenter.addObserver_selector_name_object(app, 'terminate:', NSWindowWillCloseNotification, nil)
    
      win.display()
      win.orderFrontRegardless()    ## but this one does
    
      app.run()    
    end
    

    Leopard내의 RubyCocoa Example 디렉토리의 HelloWorld.rb 프로그램의 간략버전입니다. 원 버전에서는 Notification을 사용하지 않고 버튼을 눌렀을때 app의 stop이 호출되도록 되어있습니다.

    윈도우를 만들어 띄우는것 까지는 비교적 간단한데 끝내는 버튼을 눌렀을때 프로그램이 끝나도록 하는 방법을 찾느라 고생했습니다. 인자를 잘 못 주면 segmentation fault가 나는데 요리조리 바꾸어 조합하면서 시험해보니 NSApplication 객체에 terminate 함수가 바로 호출되도록 하는 것이 제대로 동작하는듯 합니다. Notification의 사용에 대해서는 좀 더 알아봐야 되겠습니다.