repos
/
qt.examples
/ annotate_shade
summary
|
shortlog
|
log
|
tree
|
commit
|
commitdiff
|
headdiff
|
annotate
|
headblob
|
headfilediff
|
filehistory
normal
|
plain
|
shade
|
zebra
Use overloaded cxx 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 smoke::smoke-wrapper-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
(cxx:set-widget scroll (class-info browser))
18:30:39 '
62
(cxx:set-widget-resizable scroll t)
2009-04-05 tobias
63
(cxx:add-widget layout scroll))
2009-05-11 tobias
64
(cxx:set-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
(cxx:set-uniform-item-sizes (classes-list browser) t)
18:30:39 '
70
(cxx:set-selection-mode (classes-list browser) qt:abstract-item-view.+single-selection+)
'
71
(cxx:set-model (classes-list browser) (classes browser))
'
72
(cxx:set-word-wrap (class-info browser) t)
'
73
(cxx:set-window-title browser "CL Qt Classes")
'
74
2009-04-07 tobias
75
(qt:connect (qt:get-signal (cxx:selection-model (classes-list browser))
20:08:36 '
76
"currentChanged(QModelIndex, QModelIndex)")
'
77
#'(lambda (current previous)
'
78
(declare (ignore previous))
'
79
(set-info (class-info browser)
'
80
(web-view browser) current)))))
2009-04-05 tobias
81
15:36:46 '
82
(defun set-info (info web-view model-index)
'
83
(let* ((class (class-at model-index)))
2009-04-17 tobias
84
(cxx:load web-view
15:29:23 '
85
(make-instance 'qt:url
'
86
:args (list (format nil "http://doc.trolltech.com/~A/~A.html"
2009-07-01 tobias
87
(subseq (qt:q-version) 0 3)
2009-04-17 tobias
88
(remove #\: (smoke::name class) :count 1)))))
2009-04-05 tobias
89
(cxx:set-text info
15:36:46 '
90
(format nil "<h1>qt:~A</h1>
'
91
<p>~A</p>
'
92
<h2>Direct Superclasses</h2>
'
93
<ul>
'
94
~{ <li>~A</li> ~}
'
95
</ul>
'
96
<h2>Direct Subclasses</h2>
'
97
<ul>
'
98
~{ <li>~A</li>~}
'
99
</ul>
'
100
"
'
101
(string-downcase (class-name class))
2009-05-11 tobias
102
(smoke::name class)
2009-04-05 tobias
103
(mapcar #'(lambda (c) (string-downcase (class-name c)))
15:36:46 '
104
(closer-mop:class-direct-superclasses class))
'
105
(mapcar #'(lambda (c) (string-downcase (class-name c)))
'
106
(closer-mop:class-direct-subclasses class))))))
'
107
'
108
(defun class-browser ()
'
109
"Qt Class Browser"
2009-07-01 tobias
110
(qt:with-app
11:01:24 '
111
(let ((browser (make-instance 'class-browser)))
'
112
(cxx:show browser)
'
113
(qt:exec))))