Testrun examples on commit
Annotate for file src/repl.lisp
2009-04-14 tobias 1 ;;; Copyright 2009 Tobias Rautenkranz
14:29:22 ' 2 ;;; License: X11 license
' 3
2009-04-05 tobias 4 (in-package :qt.examples)
15:36:46 ' 5
' 6 (defclass repl (qt:widget)
' 7 ((model :reader model
2009-05-11 tobias 8 :initform (make-instance 'qt:string-list-model))
2009-04-05 tobias 9 (output :reader output
15:36:46 ' 10 :initform (make-instance 'qt:list-view))
2009-07-01 tobias 11 (input :reader input
2009-04-05 tobias 12 :initform (make-instance 'qt:line-edit)))
15:36:46 ' 13 (:metaclass cxx:class))
' 14
2009-05-24 tobias 15
2009-04-05 tobias 16 (defun append-list-model (list-model string)
15:36:46 ' 17 "Appends STRING to LIST-MODEL."
' 18 (let ((index (cxx:row-count list-model)))
' 19 (unless (cxx:insert-row list-model index)
' 20 (error "insert-row ~A for ~A failed." index list-model))
2009-05-24 tobias 21 (unless (cxx:set-data list-model (cxx:index list-model index) string)
15:00:42 ' 22 (error "set-data failed."))))
2009-04-05 tobias 23
15:36:46 ' 24 (defmethod initialize-instance :after ((repl repl) &rest args)
' 25 (declare (ignore args))
2009-05-11 tobias 26 (setf (cxx:model (output repl)) (model repl))
2009-04-05 tobias 27 (qt:connect (qt:get-signal (input repl) "returnPressed()")
15:36:46 ' 28 #'(lambda ()
' 29 (append-list-model ;; Input
' 30 (model repl)
' 31 (format nil "> ~A" (cxx:text (input repl))))
' 32 (append-list-model ;; return value
' 33 (model repl)
2009-05-24 tobias 34 (write-to-string
15:00:42 ' 35 (handler-case (eval (read-from-string
' 36 (cxx:text (input repl))))
' 37 (error (condition) condition))))
' 38 (cxx:clear (input repl))))
2009-04-05 tobias 39 (let ((layout (make-instance 'qt:vbox-layout)))
15:36:46 ' 40 (cxx:add-widget layout (output repl))
' 41 (cxx:add-widget layout (input repl))
2009-05-11 tobias 42 (setf (cxx:layout repl) layout))
2009-04-05 tobias 43 (cxx:set-focus (input repl)))
15:36:46 ' 44
' 45 (defun repl ()
' 46 "Lisp REPL"
2009-07-01 tobias 47 (qt:with-app
2009-04-05 tobias 48 (let ((repl (make-instance 'repl)))
15:36:46 ' 49 (cxx:show repl)
2009-07-01 tobias 50 (qt:exec repl))))