1 ! Copyright (C) 2006, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.syntax cocoa cocoa.nibs cocoa.application
4 cocoa.classes cocoa.dialogs cocoa.pasteboard cocoa.subclassing
5 core-foundation core-foundation.strings help.topics kernel
6 memory namespaces parser system ui ui.tools.browser
7 ui.tools.listener ui.backend.cocoa eval locals tools.vocabs ;
8 IN: ui.backend.cocoa.tools
10 : finder-run-files ( alien -- )
11 CF>string-array listener-run-files
12 NSApp NSApplicationDelegateReplySuccess
13 -> replyToOpenOrPrint: ;
15 : menu-run-files ( -- )
16 open-panel [ listener-run-files ] when* ;
18 : menu-save-image ( -- )
19 image save-panel [ save-image ] when* ;
21 ! Handle Open events from the Finder
23 { +superclass+ "FactorApplicationDelegate" }
24 { +name+ "FactorWorkspaceApplicationDelegate" }
27 { "application:openFiles:" "void" { "id" "SEL" "id" "id" }
28 [ [ 3drop ] dip finder-run-files ]
31 { "factorListener:" "id" { "id" "SEL" "id" }
32 [ 3drop show-listener f ]
35 { "factorBrowser:" "id" { "id" "SEL" "id" }
36 [ 3drop show-browser f ]
39 { "newFactorListener:" "id" { "id" "SEL" "id" }
40 [ 3drop listener-window f ]
43 { "newFactorBrowser:" "id" { "id" "SEL" "id" }
44 [ 3drop browser-window f ]
47 { "runFactorFile:" "id" { "id" "SEL" "id" }
48 [ 3drop menu-run-files f ]
51 { "saveFactorImage:" "id" { "id" "SEL" "id" }
55 { "saveFactorImageAs:" "id" { "id" "SEL" "id" }
56 [ 3drop menu-save-image f ]
59 { "refreshAll:" "id" { "id" "SEL" "id" }
60 [ 3drop [ refresh-all ] \ refresh-all call-listener f ]
63 : install-app-delegate ( -- )
64 NSApp FactorWorkspaceApplicationDelegate install-delegate ;
66 ! Service support; evaluate Factor code from other apps
67 :: do-service ( pboard error quot -- )
68 pboard error ?pasteboard-string
69 dup [ quot call ] when
70 [ pboard set-pasteboard-string ] when* ;
73 { +superclass+ "NSObject" }
74 { +name+ "FactorServiceProvider" }
76 "evalInListener:userData:error:"
78 { "id" "SEL" "id" "id" "id" }
79 [ nip [ eval-listener f ] do-service 2drop ]
81 "evalToString:userData:error:"
83 { "id" "SEL" "id" "id" "id" }
84 [ nip [ eval>string ] do-service 2drop ]
87 : register-services ( -- )
89 FactorServiceProvider -> alloc -> init
90 -> setServicesProvider: ;
92 FUNCTION: void NSUpdateDynamicServices ;
98 ] cocoa-init-hook set-global