2010-02-09 17:47:06 -05:00
|
|
|
! Copyright (C) 2006, 2010 Slava Pestov.
|
2007-09-20 18:09:08 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2016-05-10 00:34:31 -04:00
|
|
|
USING: alien.syntax cocoa cocoa.application cocoa.classes
|
|
|
|
cocoa.dialogs cocoa.nibs cocoa.pasteboard cocoa.runtime
|
|
|
|
cocoa.subclassing core-foundation.strings eval kernel listener
|
|
|
|
locals memory namespaces system ui.backend.cocoa
|
|
|
|
ui.theme.switching ui.tools.browser ui.tools.listener
|
|
|
|
vocabs.refresh ;
|
2009-10-21 19:17:29 -04:00
|
|
|
FROM: alien.c-types => int void ;
|
2009-01-26 01:36:37 -05:00
|
|
|
IN: ui.backend.cocoa.tools
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: finder-run-files ( alien -- )
|
|
|
|
CF>string-array listener-run-files
|
|
|
|
NSApp NSApplicationDelegateReplySuccess
|
|
|
|
-> replyToOpenOrPrint: ;
|
|
|
|
|
|
|
|
: menu-run-files ( -- )
|
|
|
|
open-panel [ listener-run-files ] when* ;
|
|
|
|
|
|
|
|
: menu-save-image ( -- )
|
2015-07-20 03:17:09 -04:00
|
|
|
image-path save-panel [ save-image ] when* ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Handle Open events from the Finder
|
2010-07-06 19:02:52 -04:00
|
|
|
CLASS: FactorWorkspaceApplicationDelegate < FactorApplicationDelegate
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: void application: id app openFiles: id files [ files finder-run-files ] ;
|
|
|
|
|
|
|
|
METHOD: int applicationShouldHandleReopen: id app hasVisibleWindows: int flag [ flag 0 = [ show-listener ] when 1 ] ;
|
2009-03-05 17:32:43 -05:00
|
|
|
|
2016-05-10 00:34:31 -04:00
|
|
|
METHOD: id showFactorListener: id app [ show-listener f ] ;
|
2009-01-08 20:30:35 -05:00
|
|
|
|
2016-05-10 00:34:31 -04:00
|
|
|
METHOD: id showFactorBrowser: id app [ show-browser f ] ;
|
2009-01-08 20:30:35 -05:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id newFactorListener: id app [ listener-window f ] ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id newFactorBrowser: id app [ browser-window f ] ;
|
2009-01-08 20:30:35 -05:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id runFactorFile: id app [ menu-run-files f ] ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id saveFactorImage: id app [ save f ] ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id saveFactorImageAs: id app [ menu-save-image f ] ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2016-05-10 00:34:31 -04:00
|
|
|
METHOD: id switchLightTheme: id app [ light-mode f ] ;
|
|
|
|
|
|
|
|
METHOD: id switchDarkTheme: id app [ dark-mode f ] ;
|
|
|
|
|
2015-08-12 20:44:07 -04:00
|
|
|
METHOD: id refreshAll: id app [ [ refresh-all ] \ refresh-all call-listener f ] ;
|
|
|
|
;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: install-app-delegate ( -- )
|
2008-12-05 02:49:46 -05:00
|
|
|
NSApp FactorWorkspaceApplicationDelegate install-delegate ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Service support; evaluate Factor code from other apps
|
2008-08-23 00:00:35 -04:00
|
|
|
:: do-service ( pboard error quot -- )
|
|
|
|
pboard error ?pasteboard-string
|
2009-04-12 17:08:54 -04:00
|
|
|
dup [ quot call( string -- result/f ) ] when
|
2008-08-23 00:00:35 -04:00
|
|
|
[ pboard set-pasteboard-string ] when* ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2010-07-06 19:02:52 -04:00
|
|
|
CLASS: FactorServiceProvider < NSObject
|
2015-08-12 20:44:07 -04:00
|
|
|
|
2010-07-06 19:02:52 -04:00
|
|
|
METHOD: void evalInListener: id pboard userData: id userData error: id error
|
2015-08-12 20:44:07 -04:00
|
|
|
[ pboard error [ eval-listener f ] do-service ] ;
|
2010-07-06 19:02:52 -04:00
|
|
|
|
|
|
|
METHOD: void evalToString: id pboard userData: id userData error: id error
|
|
|
|
[
|
|
|
|
pboard error
|
|
|
|
[ [ (eval>string) ] with-interactive-vocabs ] do-service
|
2015-08-12 20:44:07 -04:00
|
|
|
] ;
|
|
|
|
;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: register-services ( -- )
|
|
|
|
NSApp
|
|
|
|
FactorServiceProvider -> alloc -> init
|
|
|
|
-> setServicesProvider: ;
|
|
|
|
|
2015-07-19 19:25:30 -04:00
|
|
|
FUNCTION: void NSUpdateDynamicServices ( )
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[
|
|
|
|
install-app-delegate
|
|
|
|
"Factor.nib" load-nib
|
|
|
|
register-services
|
2009-10-19 22:17:02 -04:00
|
|
|
] cocoa-startup-hook set-global
|