repos
/
qt.examples
/ annotate_shade
summary
|
shortlog
|
log
|
tree
|
commit
|
commitdiff
|
headdiff
|
annotate
|
headblob
|
headfilediff
|
filehistory
normal
|
plain
|
shade
|
zebra
use (setf instead of setter methods.
Annotate for file src/class-browser.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 classes-model (qt:abstract-list-model)
'
7
((items :reader items :initarg :items
'
8
:initform (make-array 0 :adjustable t
'
9
:fill-pointer t)))
'
10
(:metaclass cxx:class))
'
11
2009-04-14 tobias
12
(defmethod cxx:row-count ((list classes-model) parent)
2009-04-05 tobias
13
(length (items list)))
15:36:46 '
14
2009-04-14 tobias
15
(defmethod cxx:data ((list classes-model) index role)
2009-04-05 tobias
16
(if (and (cxx:is-valid index)
15:36:46 '
17
(< (cxx:row index) (length (items list)))
'
18
(= role (value qt:+display-role+)))
2009-05-28 tobias
19
(qt:make-variant (string-downcase
14:23:33 '
20
(class-name (aref (items list) (cxx:row index)))))
'
21
(make-instance 'qt:variant)))
2009-04-05 tobias
22
15:36:46 '
23
(defun class-at (model-index)
'
24
(aref (items (cxx:model model-index)) (cxx:row model-index)))
'
25
'
26
(defclass class-browser (qt:splitter)
'
27
((classes :accessor classes
'
28
:initform (make-instance 'classes-model))
'
29
(classes-list :reader classes-list
'
30
:initform (make-instance 'qt:list-view))
'
31
(info :reader class-info
'
32
:initform (make-instance 'qt:label))
'
33
(web-view :reader web-view
2009-06-21 tobias
34
:initform (make-instance 'qt.webkit:web-view)))
2009-05-11 tobias
35
(:metaclass cxx:class))
2009-04-05 tobias
36
15:36:46 '
37
(defun setup-class-list (classes)
'
38
(do-external-symbols (symbol :qt)
'
39
(let ((class (find-class symbol nil)))
'
40
(when (and (not (null class))
'
41
(typep class (find-class 'smoke::smoke-standard-class)))
'
42
(vector-push-extend class
'
43
(items classes)))))
'
44
(sort (items classes) #'(lambda (class1 class2)
'
45
(string< (class-name class1)
'
46
(class-name class2)))))
'
47
'
48
(defmethod initialize-instance :after ((browser class-browser) &rest args)
'
49
(declare (ignore args))
'
50
(let* ((w (make-instance 'qt:widget))
'
51
(layout (make-instance 'qt:vbox-layout)))
'
52
(cxx:add-widget layout (classes-list browser))
'
53
(let ((search (make-instance 'qt:line-edit)))
'
54
(cxx:add-widget layout search)
'
55
(qt:connect (qt:get-signal search "textChanged(QString)")
'
56
#'(lambda (text)
'
57
;; FIXME since the class list is sorted we could do better
'
58
(cxx:keyboard-search (classes-list browser)
'
59
text))))
'
60
(let ((scroll (make-instance 'qt:scroll-area)))
2009-05-11 tobias
61
(setf (cxx:widget scroll) (class-info browser)
18:30:39 '
62
(cxx:widget-resizable scroll) t)
2009-04-05 tobias
63
(cxx:add-widget layout scroll))
2009-05-11 tobias
64
(setf (cxx:layout w) layout)
2009-04-05 tobias
65
(cxx:add-widget browser w))
15:36:46 '
66
(cxx:add-widget browser (web-view browser))
2009-04-07 tobias
67
(qt:do-delayed-initialize
20:08:36 '
68
(setup-class-list (classes browser))
2009-05-11 tobias
69
(setf (cxx:uniform-item-sizes (classes-list browser)) t
18:30:39 '
70
(cxx:selection-mode (classes-list browser)) qt:abstract-item-view.+single-selection+
'
71
(cxx:model (classes-list browser)) (classes browser)
'
72
(cxx:word-wrap (class-info browser)) t
'
73
(cxx:window-title browser) "CL Qt Classes")
2009-04-07 tobias
74
(qt:connect (qt:get-signal (cxx:selection-model (classes-list browser))
20:08:36 '
75
"currentChanged(QModelIndex, QModelIndex)")
'
76
#'(lambda (current previous)
'
77
(declare (ignore previous))
'
78
(set-info (class-info browser)
'
79
(web-view browser) current)))))
2009-04-05 tobias
80
15:36:46 '
81
(defun set-info (info web-view model-index)
'
82
(let* ((class (class-at model-index)))
2010-01-10 tobias
83
(cxx:load web-view (format nil "http://doc.trolltech.com/~A/~A.html"
2009-07-01 tobias
84
(subseq (qt:q-version) 0 3)
2009-05-11 tobias
85
(remove #\: (smoke:name class) :count 1)))
2009-04-05 tobias
86
(cxx:set-text info
15:36:46 '
87
(format nil "<h1>qt:~A</h1>
'
88
<p>~A</p>
'
89
<h2>Direct Superclasses</h2>
'
90
<ul>
'
91
~{ <li>~A</li> ~}
'
92
</ul>
'
93
<h2>Direct Subclasses</h2>
'
94
<ul>
'
95
~{ <li>~A</li>~}
'
96
</ul>
'
97
"
'
98
(string-downcase (class-name class))
2009-05-11 tobias
99
(smoke:name class)
2009-04-05 tobias
100
(mapcar #'(lambda (c) (string-downcase (class-name c)))
15:36:46 '
101
(closer-mop:class-direct-superclasses class))
'
102
(mapcar #'(lambda (c) (string-downcase (class-name c)))
'
103
(closer-mop:class-direct-subclasses class))))))
'
104
'
105
(defun class-browser ()
'
106
"Qt Class Browser"
2009-07-01 tobias
107
(qt:with-app
11:01:24 '
108
(let ((browser (make-instance 'class-browser)))
'
109
(cxx:show browser)
'
110
(qt:exec))))