]> gitweb.factorcode.org Git - factor.git/blobdiff - 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
index b8c01f0bd925882ebea16585f1ba03b07c7eeb39..482330f849ca78bac832eca8a5a3371cfdeaed33 100644 (file)
@@ -1,11 +1,12 @@
-! Copyright (C) 2006, 2009 Slava Pestov.
+! Copyright (C) 2006, 2010 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.syntax cocoa cocoa.nibs cocoa.application
-cocoa.classes cocoa.dialogs cocoa.pasteboard cocoa.subclassing
-core-foundation core-foundation.strings help.topics kernel
-memory namespaces parser system ui ui.tools.browser
-ui.tools.listener ui.backend.cocoa eval locals
+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 ;
+FROM: alien.c-types => int void ;
 IN: ui.backend.cocoa.tools
 
 : finder-run-files ( alien -- )
@@ -17,55 +18,41 @@ IN: ui.backend.cocoa.tools
     open-panel [ listener-run-files ] when* ;
 
 : menu-save-image ( -- )
-    image save-panel [ save-image ] when* ;
+    image-path save-panel [ save-image ] when* ;
 
 ! Handle Open events from the Finder
-CLASS: {
-    { +superclass+ "FactorApplicationDelegate" }
-    { +name+ "FactorWorkspaceApplicationDelegate" }
-}
+<CLASS: FactorWorkspaceApplicationDelegate < FactorApplicationDelegate
 
-{ "application:openFiles:" "void" { "id" "SEL" "id" "id" }
-    [ [ 3drop ] dip finder-run-files ]
-}
+    METHOD: void application: id app openFiles: id files [ files finder-run-files ] ;
 
-{ "applicationShouldHandleReopen:hasVisibleWindows:" "int" { "id" "SEL" "id" "int" }
-    [ [ 3drop ] dip 0 = [ show-listener ] when 1 ]
-}
+    METHOD: int applicationShouldHandleReopen: id app hasVisibleWindows: int flag [ flag 0 = [ show-listener ] when 1 ] ;
 
-{ "factorListener:" "id" { "id" "SEL" "id" }
-    [ 3drop show-listener f ]
-}
+    METHOD: id showFactorListener: id app [ show-listener f ] ;
 
-{ "factorBrowser:" "id" { "id" "SEL" "id" }
-    [ 3drop show-browser f ]
-}
+    METHOD: id showFactorBrowser: id app [ show-browser f ] ;
 
-{ "newFactorListener:" "id" { "id" "SEL" "id" }
-    [ 3drop listener-window f ]
-}
+    METHOD: id newFactorListener: id app [ listener-window f ] ;
 
-{ "newFactorBrowser:" "id" { "id" "SEL" "id" }
-    [ 3drop browser-window f ]
-}
+    METHOD: id newFactorBrowser: id app [ browser-window f ] ;
 
-{ "runFactorFile:" "id" { "id" "SEL" "id" }
-    [ 3drop menu-run-files f ]
-}
+    METHOD: id runFactorFile: id app [ menu-run-files f ] ;
 
-{ "saveFactorImage:" "id" { "id" "SEL" "id" }
-    [ 3drop save f ]
-}
+    METHOD: id saveFactorImage: id app [ save f ] ;
 
-{ "saveFactorImageAs:" "id" { "id" "SEL" "id" }
-    [ 3drop menu-save-image f ]
-}
+    METHOD: id saveFactorImageAs: id app [ menu-save-image f ] ;
 
-{ "refreshAll:" "id" { "id" "SEL" "id" }
-    [ 3drop [ refresh-all ] \ refresh-all call-listener f ]
-} ;
+    METHOD: id switchLightTheme: id app [ light-mode f ] ;
 
-: install-app-delegate ( -- )
+    METHOD: id switchDarkTheme: id app [ dark-mode f ] ;
+
+    METHOD: id switchWombatTheme: id app [ wombat-mode f ] ;
+
+    METHOD: id switchBase16Theme: id app [ base16-mode f ] ;
+
+    METHOD: id refreshAll: id app [ [ refresh-all ] \ refresh-all call-listener f ] ;
+;CLASS>
+
+: install-workspace-delegate ( -- )
     NSApp FactorWorkspaceApplicationDelegate install-delegate ;
 
 ! Service support; evaluate Factor code from other apps
@@ -74,30 +61,27 @@ CLASS: {
     dup [ quot call( string -- result/f ) ] when
     [ pboard set-pasteboard-string ] when* ;
 
-CLASS: {
-    { +superclass+ "NSObject" }
-    { +name+ "FactorServiceProvider" }
-} {
-    "evalInListener:userData:error:"
-    "void"
-    { "id" "SEL" "id" "id" "id" }
-    [ nip [ eval-listener f ] do-service 2drop ]
-} {
-    "evalToString:userData:error:"
-    "void"
-    { "id" "SEL" "id" "id" "id" }
-    [ nip [ eval>string ] do-service 2drop ]
-} ;
+<CLASS: FactorServiceProvider < NSObject
+
+    METHOD: void evalInListener: id pboard userData: id userData error: id error
+    [ pboard error [ eval-listener f ] do-service ] ;
+
+    METHOD: void evalToString: id pboard userData: id userData error: id error
+    [
+        pboard error
+        [ [ (eval>string) ] with-interactive-vocabs ] do-service
+    ] ;
+;CLASS>
 
 : register-services ( -- )
     NSApp
     FactorServiceProvider -> alloc -> init
     -> setServicesProvider: ;
 
-FUNCTION: void NSUpdateDynamicServices ;
+FUNCTION: void NSUpdateDynamicServices ( )
 
 [
-    install-app-delegate
+    install-workspace-delegate
     "Factor.nib" load-nib
     register-services
-] cocoa-init-hook set-global
+] cocoa-startup-hook set-global