]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/backend/cocoa/tools/tools.factor
Add Wombat theme, put it and Base16 theme in OS X menu
[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.application cocoa.classes
4 cocoa.dialogs cocoa.nibs cocoa.pasteboard cocoa.runtime
5 cocoa.subclassing core-foundation.strings eval kernel listener
6 locals memory namespaces system ui.backend.cocoa
7 ui.theme.switching ui.tools.browser ui.tools.listener
8 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-path save-panel [ save-image ] when* ;
22
23 ! Handle Open events from the Finder
24 <CLASS: FactorWorkspaceApplicationDelegate < FactorApplicationDelegate
25
26     METHOD: void application: id app openFiles: id files [ files finder-run-files ] ;
27
28     METHOD: int applicationShouldHandleReopen: id app hasVisibleWindows: int flag [ flag 0 = [ show-listener ] when 1 ] ;
29
30     METHOD: id showFactorListener: id app [ show-listener f ] ;
31
32     METHOD: id showFactorBrowser: id app [ show-browser f ] ;
33
34     METHOD: id newFactorListener: id app [ listener-window f ] ;
35
36     METHOD: id newFactorBrowser: id app [ browser-window f ] ;
37
38     METHOD: id runFactorFile: id app [ menu-run-files f ] ;
39
40     METHOD: id saveFactorImage: id app [ save f ] ;
41
42     METHOD: id saveFactorImageAs: id app [ menu-save-image f ] ;
43
44     METHOD: id switchLightTheme: id app [ light-mode f ] ;
45
46     METHOD: id switchDarkTheme: id app [ dark-mode f ] ;
47
48     METHOD: id switchWombatTheme: id app [ wombat-mode f ] ;
49
50     METHOD: id switchBase16Theme: id app [ base16-mode f ] ;
51
52     METHOD: id refreshAll: id app [ [ refresh-all ] \ refresh-all call-listener f ] ;
53 ;CLASS>
54
55 : install-workspace-delegate ( -- )
56     NSApp FactorWorkspaceApplicationDelegate install-delegate ;
57
58 ! Service support; evaluate Factor code from other apps
59 :: do-service ( pboard error quot -- )
60     pboard error ?pasteboard-string
61     dup [ quot call( string -- result/f ) ] when
62     [ pboard set-pasteboard-string ] when* ;
63
64 <CLASS: FactorServiceProvider < NSObject
65
66     METHOD: void evalInListener: id pboard userData: id userData error: id error
67     [ pboard error [ eval-listener f ] do-service ] ;
68
69     METHOD: void evalToString: id pboard userData: id userData error: id error
70     [
71         pboard error
72         [ [ (eval>string) ] with-interactive-vocabs ] do-service
73     ] ;
74 ;CLASS>
75
76 : register-services ( -- )
77     NSApp
78     FactorServiceProvider -> alloc -> init
79     -> setServicesProvider: ;
80
81 FUNCTION: void NSUpdateDynamicServices ( )
82
83 [
84     install-workspace-delegate
85     "Factor.nib" load-nib
86     register-services
87 ] cocoa-startup-hook set-global