[Openmcl-devel] Questions about Cocoa app development]

Didier Verna didier at lrde.epita.fr
Fri Jan 25 23:50:24 PST 2008

       Hi Mikel,

thank you for the detailed answer.

mikel evins <mevins at mac.com> wrote:

> As for interacting with your application, well, you can build a
> Listener into it. Feel free to send suggestions for how you'd like it
> to work. 

  At a first glance, having a window -> listenener menu option
implemented directly by build-application (optionally with an option to
turn it off) would be nice.

Also, I have done a few tests and noticed that if you create a simple
nib file without a window (just a MainMenu), you do get the listener in
your app. Only when you add a window does the listener go away. How's
that implemented ?

>> 2/ How do you execute specific Lisp code when the application starts,
>> both before and after the GUI is setup ?
> One Cocoa-flavored way to do it is to create an application delegate  
> and implement the methods applicationWillFinishLaunching: and  
> applicationDidFinishLaunching:. You can implement these in Lisp and  
> have them evaluate arbitrary Lisp forms. Apple documentation of these  
> and other delegate methods is here:

  OK, I've done a test with a menu-only nib file, but I can't get this
to work. Here's my code (trivial, really):

(defvar *test* nil)

(defclass app-delegate (ns:ns-object)
  (:metaclass ns:+ns-object))

(objc:defmethod (#/test: :void)
    ((self app-delegate) sender)
  (declare (ignore sender))
  (setf *test* 0)
  (format t "Test~%"))

(objc:defmethod (#/applicationWillFinishLaunching: :void)
    ((self app-delegate) notification)
  (declare (ignore notification))
  (setf *test* 1)
  (format t "Will finish launching~%"))

(objc:defmethod (#/applicationDidFinishLaunching: :void)
    ((self app-delegate) notification)
  (declare (ignore notification))
  (setf *test* 2)
  (format t "Did finish launching~%"))

I've made connections to the app-delegate in the nib file (the delegate
field of the Application itself, and the test action from the Help menu
option). However, only the help button seems to work. Am I doing
something wrong ?

Thanks again for your help !

Resistance is futile. You will be jazzimilated.

Didier Verna, didier at lrde.epita.fr, http://www.lrde.epita.fr/~didier

EPITA / LRDE, 14-16 rue Voltaire   Tel.+33 (0)1 44 08 01 85
94276 Le Kremlin-Bicêtre, France   Fax.+33 (0)1 53 14 59 22  didier at xemacs.org

More information about the Openmcl-devel mailing list