]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/backend/cocoa/tools/tools.factor
cocoa.subclassing: new METHOD: syntax cleans up class definitions
[factor.git] / basis / ui / backend / cocoa / tools / tools.factor
1 ! Copyright (C) 2006, 2010 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.runtime
5 cocoa.subclassing core-foundation core-foundation.strings
6 help.topics kernel memory namespaces parser system ui
7 ui.tools.browser ui.tools.listener ui.backend.cocoa eval
8 locals listener vocabs.refresh ;
9 FROM: alien.c-types => int void ;
10 IN: ui.backend.cocoa.tools
11
12 : finder-run-files ( alien -- )
13     CF>string-array listener-run-files
14     NSApp NSApplicationDelegateReplySuccess
15     -> replyToOpenOrPrint: ;
16
17 : menu-run-files ( -- )
18     open-panel [ listener-run-files ] when* ;
19
20 : menu-save-image ( -- )
21     image save-panel [ save-image ] when* ;
22
23 ! Handle Open events from the Finder
24 CLASS: {
25     { +superclass+ "FactorApplicationDelegate" }
26     { +name+ "FactorWorkspaceApplicationDelegate" }
27 }
28
29 METHOD: void application: id app openFiles: id files [ files finder-run-files ]
30
31 METHOD: int applicationShouldHandleReopen: id app hasVisibleWindows: int flag [ flag 0 = [ show-listener ] when 1 ]
32
33 METHOD: id factorListener: id app [ show-listener f ]
34
35 METHOD: id factorBrowser: id app [ show-browser f ]
36
37 METHOD: id newFactorListener: id app [ listener-window f ]
38
39 METHOD: id newFactorBrowser: id app [ browser-window f ]
40
41 METHOD: id runFactorFile: id app [ menu-run-files f ]
42
43 METHOD: id saveFactorImage: id app [ save f ]
44
45 METHOD: id saveFactorImageAs: id app [ menu-save-image f ]
46
47 METHOD: id refreshAll: id app [ [ refresh-all ] \ refresh-all call-listener f ] ;
48
49 : install-app-delegate ( -- )
50     NSApp FactorWorkspaceApplicationDelegate install-delegate ;
51
52 ! Service support; evaluate Factor code from other apps
53 :: do-service ( pboard error quot -- )
54     pboard error ?pasteboard-string
55     dup [ quot call( string -- result/f ) ] when
56     [ pboard set-pasteboard-string ] when* ;
57
58 CLASS: {
59     { +superclass+ "NSObject" }
60     { +name+ "FactorServiceProvider" }
61 }
62
63 METHOD: void evalInListener: id pboard userData: id userData error: id error
64 [ pboard error [ eval-listener f ] do-service ]
65
66 METHOD: void evalToString: id pboard userData: id userData error: id error
67 [
68     pboard error
69     [ [ (eval>string) ] with-interactive-vocabs ] do-service
70 ] ;
71
72 : register-services ( -- )
73     NSApp
74     FactorServiceProvider -> alloc -> init
75     -> setServicesProvider: ;
76
77 FUNCTION: void NSUpdateDynamicServices ;
78
79 [
80     install-app-delegate
81     "Factor.nib" load-nib
82     register-services
83 ] cocoa-startup-hook set-global