Some minor new features for Cocoa binding

db4
Slava Pestov 2008-10-02 07:10:22 -05:00
parent b45ee5b8be
commit b4d918caa5
6 changed files with 35 additions and 9 deletions

View File

@ -30,7 +30,7 @@ IN: cocoa.application
FUNCTION: void NSBeep ( ) ; FUNCTION: void NSBeep ( ) ;
: with-cocoa ( quot -- ) : with-cocoa ( quot -- )
[ NSApp drop call ] with-autorelease-pool ; [ NSApp drop call ] with-autorelease-pool ; inline
: next-event ( app -- event ) : next-event ( app -- event )
0 f CFRunLoopDefaultMode 1 0 f CFRunLoopDefaultMode 1

View File

@ -16,9 +16,16 @@ HELP: SUPER->
{ send super-send POSTPONE: -> POSTPONE: SUPER-> } related-words { send super-send POSTPONE: -> POSTPONE: SUPER-> } related-words
HELP: IMPORT:
{ $syntax "IMPORT: name" }
{ $description "Makes an Objective C class available for use." }
{ $examples
{ $code "IMPORT: QTMovie" "QTMovie \"My Movie.mov\" <NSString> f -> movieWithFile:error:" }
} ;
ARTICLE: "objc-calling" "Calling Objective C code" ARTICLE: "objc-calling" "Calling Objective C code"
"Before an Objective C class can be used, it must be imported; by default, a small set of common classes are imported automatically, but additional classes can be imported as needed." "Before an Objective C class can be used, it must be imported; by default, a small set of common classes are imported automatically, but additional classes can be imported as needed."
{ $subsection import-objc-class } { $subsection POSTPONE: IMPORT: }
"Every imported Objective C class has as corresponding class word in the " { $vocab-link "cocoa.classes" } " vocabulary. Class words push the class object in the stack, allowing class methods to be invoked." "Every imported Objective C class has as corresponding class word in the " { $vocab-link "cocoa.classes" } " vocabulary. Class words push the class object in the stack, allowing class methods to be invoked."
$nl $nl
"Messages can be sent to classes and instances using a pair of parsing words:" "Messages can be sent to classes and instances using a pair of parsing words:"

View File

@ -3,7 +3,7 @@
USING: compiler io kernel cocoa.runtime cocoa.subclassing USING: compiler io kernel cocoa.runtime cocoa.subclassing
cocoa.messages cocoa.types sequences words vocabs parser cocoa.messages cocoa.types sequences words vocabs parser
core-foundation namespaces assocs hashtables compiler.units core-foundation namespaces assocs hashtables compiler.units
lexer ; lexer init ;
IN: cocoa IN: cocoa
: (remember-send) ( selector variable -- ) : (remember-send) ( selector variable -- )
@ -27,6 +27,16 @@ SYMBOL: super-sent-messages
scan dup remember-super-send parsed \ super-send parsed ; scan dup remember-super-send parsed \ super-send parsed ;
parsing parsing
SYMBOL: frameworks
frameworks global [ V{ } clone or ] change-at
[ frameworks get [ load-framework ] each ] "cocoa.messages" add-init-hook
: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ; parsing
: IMPORT: scan [ ] import-objc-class ; parsing
"Compiling Objective C bridge..." print "Compiling Objective C bridge..." print
"cocoa.classes" create-vocab drop "cocoa.classes" create-vocab drop

View File

@ -32,11 +32,7 @@ HELP: alien>objc-types
HELP: import-objc-class HELP: import-objc-class
{ $values { "name" string } { "quot" "a quotation with stack effect " { $snippet "( -- )" } } } { $values { "name" string } { "quot" "a quotation with stack effect " { $snippet "( -- )" } } }
{ $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } { $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } ;
{ $notes "In most cases, the quotation should be " { $link f } "." }
{ $examples
{ $code "\"QTMovie\" f import-objc-class" "QTMovie \"My Movie.mov\" <NSString> f -> movieWithFile:error:" }
} ;
HELP: root-class HELP: root-class
{ $values { "class" alien } { "root" alien } } { $values { "class" alien } { "root" alien } }

View File

@ -4,7 +4,8 @@ USING: accessors alien alien.c-types alien.strings arrays assocs
combinators compiler kernel math namespaces make parser combinators compiler kernel math namespaces make parser
prettyprint prettyprint.sections quotations sequences strings prettyprint prettyprint.sections quotations sequences strings
words cocoa.runtime io macros memoize debugger words cocoa.runtime io macros memoize debugger
io.encodings.ascii effects compiler.generator libc libc.private ; io.encodings.ascii effects compiler.generator libc libc.private
parser lexer init core-foundation ;
IN: cocoa.messages IN: cocoa.messages
: make-sender ( method function -- quot ) : make-sender ( method function -- quot )

View File

@ -0,0 +1,12 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel cocoa.nibs cocoa.application cocoa ;
IN: cocoa.standalone
: cocoa-app ( quot -- )
[
"MiniFactor.nib" load-nib
call
finish-launching
NSApp -> run
] with-cocoa ; inline