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