All Qt modules are now in the :qt package.
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-09-02 tobias 19 (qt:make-variant
12:06:44 ' 20 (string-downcase (class-name (aref (items list) (cxx:row index)))))
2009-05-28 tobias 21 (qt:make-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: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)
11:01:24 ' 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))))