/ src /
/src/get-widget.lisp
1 (in-package :cl-smoke.repl)
2
3 (defclass get-widget (qt:dialog)
4 ((widget :initform nil
5 :accessor widget)
6 (label :initform (make-instance 'qt:label)
7 :reader label))
8 (:metaclass cxx:class))
9
10 (defmethod initialize-instance :after ((get-widget get-widget) &key)
11 (let ((layout (make-instance 'qt:vbox-layout))
12 (get-button (make-instance 'qt:push-button :args '("Get"))))
13 (cxx:add-widget layout (label get-widget))
14 (cxx:add-widget layout get-button)
15 (cxx:set-checkable get-button t)
16 (qt:connect (qt:get-signal get-button "clicked()")
17 #'(lambda ()
18 (cxx:grab-mouse get-widget)
19 (setf (cxx:text get-button)
20 "Click on a widget.")))
21 (cxx:set-layout get-widget layout))
22 (cxx:set-window-title get-widget "Get Widget")
23 (cxx:set-mouse-tracking get-widget t))
24
25 (defmethod cxx:mouse-press-event ((get-widget get-widget) event)
26 (cxx:release-mouse get-widget)
27 (setf (widget get-widget) (qt:application.widget-at (cxx:global-pos event)))
28 (cxx:done get-widget 0))
29
30
31 (defmethod cxx:mouse-move-event ((get-widget get-widget) event)
32 (setf (cxx:text (label get-widget))
33 (format nil "~A~%" (qt:application.widget-at (cxx:global-pos event)))))
34
35
36 (defun get-widget ()
37 "Returns the widget selected with the mouse."
38 (let ((get-widget (make-instance 'get-widget)))
39 (unwind-protect (cxx:exec get-widget) ;; run the dialog
40 (cxx:release-mouse get-widget))
41 (widget get-widget)))