1 ;;; Copyright 2009 Tobias Rautenkranz
2 ;;; License: X11 license
4 (in-package :qt.examples)
6 (defclass repl (qt:widget)
8 :initform (make-instance 'qt:string-list-model))
10 :initform (make-instance 'qt:list-view))
12 :initform (make-instance 'qt:line-edit)))
13 (:metaclass cxx:class))
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))
20 (unless (cxx:set-data list-model (cxx:index list-model index) string)
21 (error "set-data failed."))))
23 (defmethod initialize-instance :after ((repl repl) &rest args)
24 (declare (ignore args))
25 (setf (cxx:model (output repl)) (model repl))
26 (qt:connect (qt:get-signal (input repl) "returnPressed()")
28 (append-list-model ;; Input
30 (format nil "> ~A" (cxx:text (input repl))))
31 (append-list-model ;; return value
34 (handler-case (eval (read-from-string
35 (cxx:text (input repl))))
36 (error (condition) condition))))
37 (cxx:clear (input repl))))
38 (let ((layout (make-instance 'qt:vbox-layout)))
39 (cxx:add-widget layout (output repl))
40 (cxx:add-widget layout (input repl))
41 (setf (cxx:layout repl) layout))
42 (cxx:set-focus (input repl)))
47 (let ((repl (make-instance 'repl)))