#!/usr/bin/env pythonw

# HelloWorld.py
#
# The original PyObjC interface example by Steve Majewski.
#

# A quick guide to runtime name mangling:
#
#      ObjC             becomes           Python
#    [ obj method ]                     obj.method()
#    [ obj method: arg ]                obj.method_(arg)
#    [ obj method: arg1 withOtherArgs: arg2 ]
#                               obj.method_withOtherArgs_( arg1, arg2 )

###
### NOTE:  This is no longer the recommended way to build applications
### using the pyobjc bridge under with OS X.  In particular, applications
### work much better if they are constructed in a proper app wrapper.
###
### This app does demonstrate that it is possible to build full
### featured Cocoa apps without InterfaceBuilder.
###

import objc
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper

class AppDelegate (NSObject):
    def applicationDidFinishLaunching_(self, aNotification):
        print "Hello, World!"

    def sayHello_(self, sender):
        print "Hello again, World!"

def main():
    app = NSApplication.sharedApplication()

    # we must keep a reference to the delegate object ourselves,
    # NSApp.setDelegate_() doesn't retain it. A local variable is
    # enough here.
    delegate = AppDelegate.alloc().init()
    NSApp().setDelegate_(delegate)

    win = NSWindow.alloc()
    frame = ((200.0, 300.0), (250.0, 100.0))
    win.initWithContentRect_styleMask_backing_defer_ (frame, 15, 2, 0)
    win.setTitle_ ('HelloWorld')
    win.setLevel_ (3)                   # floating window

    hel = NSButton.alloc().initWithFrame_ (((10.0, 10.0), (80.0, 80.0)))
    win.contentView().addSubview_ (hel)
    hel.setBezelStyle_( 4 )
    hel.setTitle_( 'Hello!' )
    hel.setTarget_( app.delegate() )
    hel.setAction_( "sayHello:" )

    beep = NSSound.alloc()
    beep.initWithContentsOfFile_byReference_( '/System/Library/Sounds/Tink.Aiff', 1 )
    hel.setSound_( beep )

    bye = NSButton.alloc().initWithFrame_ (((100.0, 10.0), (80.0, 80.0)))
    win.contentView().addSubview_ (bye)
    bye.setBezelStyle_( 4 )
    bye.setTarget_ (app)
    bye.setAction_ ('stop:')
    bye.setEnabled_ ( 1 )
    bye.setTitle_( 'Goodbye!' )

    adios = NSSound.alloc()
    adios.initWithContentsOfFile_byReference_(  '/System/Library/Sounds/Basso.aiff', 1 )
    bye.setSound_( adios )

    win.display()
    win.orderFrontRegardless()          ## but this one does

    AppHelper.runEventLoop()


if __name__ == '__main__' : main()
