]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/backend/cocoa/tools/tools.factor
Merge branch 'autouse-existing-usings' of git@github.com:seckar/factor into cleaner...
[factor.git] / basis / ui / backend / cocoa / tools / tools.factor
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
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+ "FactorApplicationDelegate" }
24     { +name+ "FactorWorkspaceApplicationDelegate" }
25 }
26
27 { "application:openFiles:" "void" { "id" "SEL" "id" "id" }
28     [ [ 3drop ] dip finder-run-files ]
29 }
30
31 { "applicationShouldHandleReopen:hasVisibleWindows:" "int" { "id" "SEL" "id" "int" }
32     [ [ 3drop ] dip 0 = [ show-listener ] when 0 ]
33 }
34
35 { "factorListener:" "id" { "id" "SEL" "id" }
36     [ 3drop show-listener f ]
37 }
38
39 { "factorBrowser:" "id" { "id" "SEL" "id" }
40     [ 3drop show-browser f ]
41 }
42
43 { "newFactorListener:" "id" { "id" "SEL" "id" }
44     [ 3drop listener-window f ]
45 }
46
47 { "newFactorBrowser:" "id" { "id" "SEL" "id" }
48     [ 3drop browser-window f ]
49 }
50
51 { "runFactorFile:" "id" { "id" "SEL" "id" }
52     [ 3drop menu-run-files f ]
53 }
54
55 { "saveFactorImage:" "id" { "id" "SEL" "id" }
56     [ 3drop save f ]
57 }
58
59 { "saveFactorImageAs:" "id" { "id" "SEL" "id" }
60     [ 3drop menu-save-image f ]
61 }
62
63 { "refreshAll:" "id" { "id" "SEL" "id" }
64     [ 3drop [ refresh-all ] \ refresh-all call-listener f ]
65 } ;
66
67 : install-app-delegate ( -- )
68     NSApp FactorWorkspaceApplicationDelegate install-delegate ;
69
70 ! Service support; evaluate Factor code from other apps
71 :: do-service ( pboard error quot -- )
72     pboard error ?pasteboard-string
73     dup [ quot call( string -- result/f ) ] when
74     [ pboard set-pasteboard-string ] when* ;
75
76 CLASS: {
77     { +superclass+ "NSObject" }
78     { +name+ "FactorServiceProvider" }
79 } {
80     "evalInListener:userData:error:"
81     "void"
82     { "id" "SEL" "id" "id" "id" }
83     [ nip [ eval-listener f ] do-service 2drop ]
84 } {
85     "evalToString:userData:error:"
86     "void"
87     { "id" "SEL" "id" "id" "id" }
88     [ nip [ eval>string ] do-service 2drop ]
89 } ;
90
91 : register-services ( -- )
92     NSApp
93     FactorServiceProvider -> alloc -> init
94     -> setServicesProvider: ;
95
96 FUNCTION: void NSUpdateDynamicServices ;
97
98 [
99     install-app-delegate
100     "Factor.nib" load-nib
101     register-services
102 ] cocoa-init-hook set-global