initial import
src/repl.lisp
Sun Apr 5 17:36:46 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* initial import
--- old-qt.examples/src/repl.lisp 1970-01-01 01:00:00.000000000 +0100
+++ new-qt.examples/src/repl.lisp 2014-10-30 07:39:53.000000000 +0100
@@ -0,0 +1,45 @@
+(in-package :qt.examples)
+
+(defclass repl (qt:widget)
+ ((model :reader model
+ :initform (make-instance 'qt:string-list-model))
+ (output :reader output
+ :initform (make-instance 'qt:list-view))
+ (input :reader input
+ :initform (make-instance 'qt:line-edit)))
+ (:metaclass cxx:class))
+
+(defun append-list-model (list-model string)
+ "Appends STRING to LIST-MODEL."
+ (let ((index (cxx:row-count list-model)))
+ (unless (cxx:insert-row list-model index)
+ (error "insert-row ~A for ~A failed." index list-model))
+ (cxx:set-data list-model (cxx:index list-model index 0)
+ (qt::make-variant string))))
+
+(defmethod initialize-instance :after ((repl repl) &rest args)
+ (declare (ignore args))
+ (cxx:set-model (output repl) (model repl))
+ (qt:connect (qt:get-signal (input repl) "returnPressed()")
+ #'(lambda ()
+ (append-list-model ;; Input
+ (model repl)
+ (format nil "> ~A" (cxx:text (input repl))))
+ (append-list-model ;; return value
+ (model repl)
+ (format nil "~S"
+ (handler-case (eval (read-from-string (cxx:text (input repl))))
+ (error (condition) condition))))
+ (cxx:set-text (input repl) "")))
+ (let ((layout (make-instance 'qt:vbox-layout)))
+ (cxx:add-widget layout (output repl))
+ (cxx:add-widget layout (input repl))
+ (cxx:set-layout repl layout))
+ (cxx:set-focus (input repl)))
+
+(defun repl ()
+ "Lisp REPL"
+ (qt:with-app
+ (let ((repl (make-instance 'repl)))
+ (cxx:show repl)
+ (qt:exec repl))))