Undo support for tick tack toe
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
' 15 (defun append-list-model (list-model string)
' 16 "Appends STRING to LIST-MODEL."
' 17 (let ((index (cxx:row-count list-model)))
' 18 (unless (cxx:insert-row list-model index)
' 19 (error "insert-row ~A for ~A failed." index list-model))
2009-05-24 tobias 20 (unless (cxx:set-data list-model (cxx:index list-model index) string)
15:00:42 ' 21 (error "set-data failed."))))
2009-04-05 tobias 22
15:36:46 ' 23 (defmethod initialize-instance :after ((repl repl) &rest args)
' 24 (declare (ignore args))
2009-05-11 tobias 25 (setf (cxx:model (output repl)) (model repl))
2009-04-05 tobias 26 (qt:connect (qt:get-signal (input repl) "returnPressed()")
15:36:46 ' 27 #'(lambda ()
' 28 (append-list-model ;; Input
' 29 (model repl)
' 30 (format nil "> ~A" (cxx:text (input repl))))
' 31 (append-list-model ;; return value
' 32 (model repl)
2009-05-24 tobias 33 (write-to-string
15:00:42 ' 34 (handler-case (eval (read-from-string
' 35 (cxx:text (input repl))))
' 36 (error (condition) condition))))
' 37 (cxx:clear (input repl))))
2009-04-05 tobias 38 (let ((layout (make-instance 'qt:vbox-layout)))
15:36:46 ' 39 (cxx:add-widget layout (output repl))
' 40 (cxx:add-widget layout (input repl))
2009-05-11 tobias 41 (setf (cxx:layout repl) layout))
2009-04-05 tobias 42 (cxx:set-focus (input repl)))
15:36:46 ' 43
' 44 (defun repl ()
' 45 "Lisp REPL"
2009-07-01 tobias 46 (qt:with-app
2009-04-05 tobias 47 (let ((repl (make-instance 'repl)))
15:36:46 ' 48 (cxx:show repl)
2009-07-01 tobias 49 (qt:exec repl))))