]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/cocoa/tools/tools.factor
Fix permission bits
[factor.git] / basis / ui / cocoa / tools / tools.factor
1 ! Copyright (C) 2006, 2007 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 help.topics kernel memory namespaces parser
6 system ui ui.tools.browser ui.tools.listener ui.tools.workspace
7 ui.cocoa eval locals ;
8 IN: ui.cocoa.tools
9
10 : finder-run-files ( alien -- )
11     CF>string-array listener-run-files
12     NSApp NSApplicationDelegateReplySuccess
13     -> replyToOpenOrPrint: ;
14
15 : menu-run-files ( -- )
16     open-panel [ listener-run-files ] when* ;
17
18 : menu-save-image ( -- )
19     image save-panel [ save-image ] when* ;
20
21 ! Handle Open events from the Finder
22 CLASS: {
23     { +superclass+ "NSObject" }
24     { +name+ "FactorApplicationDelegate" }
25 }
26
27 { "application:openFiles:" "void" { "id" "SEL" "id" "id" }
28     [ >r 3drop r> finder-run-files ]
29 }
30
31 { "newFactorWorkspace:" "id" { "id" "SEL" "id" }
32     [ 3drop workspace-window f ]
33 }
34
35 { "runFactorFile:" "id" { "id" "SEL" "id" }
36     [ 3drop menu-run-files f ]
37 }
38
39 { "saveFactorImage:" "id" { "id" "SEL" "id" }
40     [ 3drop save f ]
41 }
42
43 { "saveFactorImageAs:" "id" { "id" "SEL" "id" }
44     [ 3drop menu-save-image f ]
45 }
46
47 { "showFactorHelp:" "id" { "id" "SEL" "id" }
48     [ 3drop "handbook" com-follow f ]
49 } ;
50
51 : install-app-delegate ( -- )
52     NSApp FactorApplicationDelegate install-delegate ;
53
54 ! Service support; evaluate Factor code from other apps
55 :: do-service ( pboard error quot -- )
56     pboard error ?pasteboard-string
57     dup [ quot call ] when
58     [ pboard set-pasteboard-string ] when* ;
59
60 CLASS: {
61     { +superclass+ "NSObject" }
62     { +name+ "FactorServiceProvider" }
63 } {
64     "evalInListener:userData:error:"
65     "void"
66     { "id" "SEL" "id" "id" "void*" }
67     [ nip [ eval-listener f ] do-service 2drop ]
68 } {
69     "evalToString:userData:error:"
70     "void"
71     { "id" "SEL" "id" "id" "void*" }
72     [ nip [ eval>string ] do-service 2drop ]
73 } ;
74
75 : register-services ( -- )
76     NSApp
77     FactorServiceProvider -> alloc -> init
78     -> setServicesProvider: ;
79
80 FUNCTION: void NSUpdateDynamicServices ;
81
82 [
83     install-app-delegate
84     "Factor.nib" load-nib
85     register-services
86 ] cocoa-init-hook set-global