[clim-desktop-cvs] CVS clim-desktop
thenriksen
thenriksen at common-lisp.net
Tue Jun 6 13:46:58 UTC 2006
Update of /project/clim-desktop/cvsroot/clim-desktop
In directory clnet:/tmp/cvs-serv12631
Modified Files:
clim-launcher.lisp
Log Message:
Added support for launching applications to the Listener.
--- /project/clim-desktop/cvsroot/clim-desktop/clim-launcher.lisp 2006/03/30 10:33:55 1.2
+++ /project/clim-desktop/cvsroot/clim-desktop/clim-launcher.lisp 2006/06/06 13:46:58 1.3
@@ -4,8 +4,6 @@
;;(asdf:oos 'asdf:load-op :clim-listener)
;;(asdf:oos 'asdf:load-op :climacs)
-
-
(in-package :clim-launcher)
(define-application-frame launcher ()
@@ -39,9 +37,9 @@
(define-launcher-command
com-launch-app
((appl 'clim-app))
- ;; SBCL doesn't keep dynamic bindings from the parent thread when
- ;; invoking a new thread, so we'll have to create the threads and
- ;; the bindings ourselves.
+ ;; KLUDGE: SBCL doesn't keep dynamic bindings from the parent thread
+ ;; when invoking a new thread, so we'll have to create the threads
+ ;; and the bindings ourselves.
(flet ((run ()
(let #+sbcl ((sb-ext:*invoke-debugger-hook* #'clim-debugger:debugger)
(*debugger-hook* #'clim-debugger:debugger))
@@ -80,4 +78,71 @@
(defun start ()
"Start the CLIM Launcher program."
#+:cmucl (multiprocessing::startup-idle-and-top-level-loops)
- (run-frame-top-level (make-application-frame 'clim-launcher::launcher)))
\ No newline at end of file
+ (run-frame-top-level (make-application-frame 'clim-launcher::launcher)))
+
+;; Get some support for launching apps into the CLIM Listener:
+
+(defmethod display-commands ((frame clim-listener::listener) stream)
+ (loop for app being the hash-values of *apps*
+ do (present app 'clim-app :stream stream)))
+
+(define-command (com-list-applications
+ :name t
+ :command-table clim-listener::show-commands
+ :menu t)
+ ()
+ (display-commands *application-frame* (frame-standard-output *application-frame*)))
+
+(define-command (com-launch-application
+ :name t
+ :command-table clim-listener::lisp-commands
+ :menu t)
+ ((appl 'clim-app))
+ ;; KLUDGE: SBCL doesn't inherit local dynamic bindings from the
+ ;; parent thread, so we'll have to create the threads and the
+ ;; bindings ourselves.
+ (flet ((run ()
+ (let #+sbcl ((sb-ext:*invoke-debugger-hook* #'clim-debugger:debugger)
+ (*debugger-hook* #'clim-debugger:debugger))
+ #-sbcl nil
+ (funcall (entry appl)))))
+ (clim-sys:make-process #'run :name (name appl))))
+
+(define-presentation-to-command-translator launch-application-translator
+ (clim-app com-launch-application clim-listener::lisp-commands
+ :gesture :select
+ :documentation "Launch Application")
+ (object)
+ (list object))
+
+(define-presentation-to-command-translator edit-application-translator
+ (clim-app climacs-gui::com-edit-function-definition clim-listener::lisp-commands
+ :gesture :edit
+ :tester ((object presentation)
+ (declare (ignore presentation))
+ (symbolp (entry object)))
+ :documentation "Edit Application")
+ (object)
+ (list (entry object)))
+
+(define-presentation-method accept
+ ((type clim-app) stream view &key (default nil defaultp)
+ (default-type type))
+ (multiple-value-bind (object success string)
+ (complete-input stream
+ (lambda (so-far action)
+ (complete-from-possibilities
+ so-far
+ (loop for val being the hash-values of *apps*
+ collecting val)
+ '()
+ :action action
+ :name-key #'name
+ :value-key #'identity))
+ :partial-completers '(#\Space)
+ :allow-any-input t)
+ (cond (success
+ (values object type))
+ ((and (zerop (length string)) defaultp)
+ (values default default-type))
+ (t (values string 'string)))))
\ No newline at end of file
More information about the Clim-desktop-cvs
mailing list