repos
/
qt.examples
/ annotate_shade
summary
|
shortlog
|
log
|
tree
|
commit
|
commitdiff
|
headdiff
|
annotate
|
headblob
|
headfilediff
|
filehistory
normal
|
plain
|
shade
|
zebra
initial import
Annotate for file src/repl.lisp
2009-04-05 tobias
1
(in-package :qt.examples)
15:36:46 '
2
'
3
(defclass repl (qt:widget)
'
4
((model :reader model
'
5
:initform (make-instance 'qt:string-list-model))
'
6
(output :reader output
'
7
:initform (make-instance 'qt:list-view))
'
8
(input :reader input
'
9
:initform (make-instance 'qt:line-edit)))
'
10
(:metaclass cxx:class))
'
11
'
12
(defun append-list-model (list-model string)
'
13
"Appends STRING to LIST-MODEL."
'
14
(let ((index (cxx:row-count list-model)))
'
15
(unless (cxx:insert-row list-model index)
'
16
(error "insert-row ~A for ~A failed." index list-model))
'
17
(cxx:set-data list-model (cxx:index list-model index 0)
'
18
(qt::make-variant string))))
'
19
'
20
(defmethod initialize-instance :after ((repl repl) &rest args)
'
21
(declare (ignore args))
'
22
(cxx:set-model (output repl) (model repl))
'
23
(qt:connect (qt:get-signal (input repl) "returnPressed()")
'
24
#'(lambda ()
'
25
(append-list-model ;; Input
'
26
(model repl)
'
27
(format nil "> ~A" (cxx:text (input repl))))
'
28
(append-list-model ;; return value
'
29
(model repl)
'
30
(format nil "~S"
'
31
(handler-case (eval (read-from-string (cxx:text (input repl))))
'
32
(error (condition) condition))))
'
33
(cxx:set-text (input repl) "")))
'
34
(let ((layout (make-instance 'qt:vbox-layout)))
'
35
(cxx:add-widget layout (output repl))
'
36
(cxx:add-widget layout (input repl))
'
37
(cxx:set-layout repl layout))
'
38
(cxx:set-focus (input repl)))
'
39
'
40
(defun repl ()
'
41
"Lisp REPL"
'
42
(qt:with-app
'
43
(let ((repl (make-instance 'repl)))
'
44
(cxx:show repl)
'
45
(qt:exec repl))))