[graphic-forms-cvs] r167 - in trunk/src: tests/uitoolkit uitoolkit/system uitoolkit/widgets
junrue at common-lisp.net
junrue at common-lisp.net
Wed Jun 28 21:44:08 UTC 2006
Author: junrue
Date: Wed Jun 28 17:44:07 2006
New Revision: 167
Modified:
trunk/src/tests/uitoolkit/windlg.lisp
trunk/src/uitoolkit/system/system-constants.lisp
trunk/src/uitoolkit/widgets/event.lisp
Log:
introduced infrastructure for dispatching control notifications, and used this to implement event-focus-gain/event-focus-loss and event-modify for edit controls
Modified: trunk/src/tests/uitoolkit/windlg.lisp
==============================================================================
--- trunk/src/tests/uitoolkit/windlg.lisp (original)
+++ trunk/src/tests/uitoolkit/windlg.lisp Wed Jun 28 17:44:07 2006
@@ -126,6 +126,23 @@
(call-next-method)
(gfs:dispose dlg))
+(defclass edit-control-events (gfw:event-dispatcher) ())
+
+(defun truncate-text (str)
+ (subseq str 0 (min (length str) 5)))
+
+(defmethod gfw:event-focus-gain ((disp edit-control-events) (ctrl gfw:edit) time)
+ (declare (ignore time))
+ (format t "gained focus: ~a...~%" (truncate-text (gfw:text ctrl))))
+
+(defmethod gfw:event-focus-loss ((disp edit-control-events) (ctrl gfw:edit) time)
+ (declare (ignore time))
+ (format t "lost focus: ~a...~%" (truncate-text (gfw:text ctrl))))
+
+(defmethod gfw:event-modify ((disp edit-control-events) (ctrl gfw:edit) time)
+ (declare (ignore time))
+ (format t "modified: ~a...~%" (truncate-text (gfw:text ctrl))))
+
(defun open-dlg (title style)
(let* ((dlg (make-instance 'gfw:dialog :owner *main-win*
:dispatcher (make-instance 'dialog-events)
@@ -135,6 +152,7 @@
:style '(:horizontal))
:style style
:text title))
+ (edit-disp (make-instance 'edit-control-events))
(left-panel (make-instance 'gfw:panel
:layout (make-instance 'gfw:flow-layout
:spacing 4
@@ -145,6 +163,7 @@
:parent left-panel))
(name-edit (make-instance 'gfw:edit
:text "WWWWWWWWWWWWWWWWWWWWWWWW"
+ :dispatcher edit-disp
:parent left-panel))
(serial-label (make-instance 'gfw:label
:text "Serial Number:"
@@ -152,6 +171,7 @@
(serial-edit (make-instance 'gfw:edit
:style '(:read-only)
:text "323K DSKL3 DSKE23"
+ :dispatcher edit-disp
:parent left-panel))
(pw-label (make-instance 'gfw:label
:text "Password:"
@@ -159,6 +179,7 @@
(pw-edit (make-instance 'gfw:edit
:style '(:mask-characters)
:text "WWWWWWWWWWWWWWWWWWWWWWWW"
+ :dispatcher edit-disp
:parent left-panel))
(desc-label (make-instance 'gfw:label
:text "Description:"
@@ -166,6 +187,7 @@
(desc-edit (make-instance 'gfw:edit
:style '(:multi-line :auto-hscroll :auto-vscroll :vertical-scrollbar :want-return)
:text (format nil "WWWWWWWWWWWWWWWWWWWWWWWW~%W~%W~%W~%W~%W")
+ :dispatcher edit-disp
:parent left-panel))
(btn-panel (make-instance 'gfw:panel
:layout (make-instance 'gfw:flow-layout
Modified: trunk/src/uitoolkit/system/system-constants.lisp
==============================================================================
--- trunk/src/uitoolkit/system/system-constants.lisp (original)
+++ trunk/src/uitoolkit/system/system-constants.lisp Wed Jun 28 17:44:07 2006
@@ -271,6 +271,17 @@
(defconstant +em-setimestatus+ #x00D8)
(defconstant +em-getimestatus+ #x00D9)
+(defconstant +en-setfocus+ #x0100)
+(defconstant +en-killfocus+ #x0200)
+(defconstant +en-change+ #x0300)
+(defconstant +en-update+ #x0400)
+(defconstant +en-errspace+ #x0500)
+(defconstant +en-maxtext+ #x0501)
+(defconstant +en-hscroll+ #x0601)
+(defconstant +en-vscroll+ #x0602)
+(defconstant +en-align-ltr-ec+ #x0700)
+(defconstant +en-align-rtl-ec+ #x0701)
+
(defconstant +es-left+ #x0000)
(defconstant +es-center+ #x0001)
(defconstant +es-right+ #x0002)
Modified: trunk/src/uitoolkit/widgets/event.lisp
==============================================================================
--- trunk/src/uitoolkit/widgets/event.lisp (original)
+++ trunk/src/uitoolkit/widgets/event.lisp Wed Jun 28 17:44:07 2006
@@ -118,6 +118,15 @@
(cffi:get-callback 'subclassing_wndproc))))
(error 'gfs:win32-error :detail "set-window-long failed")))
+(defun dispatch-notification (widget wparam-hi)
+ (let ((disp (dispatcher widget))
+ (time (event-time (thread-context))))
+ (case wparam-hi
+ (0 (event-select disp widget time (gfs:make-rectangle))) ; FIXME: debug
+ (#.gfs::+en-killfocus+ (event-focus-loss disp widget time))
+ (#.gfs::+en-setfocus+ (event-focus-gain disp widget time))
+ (#.gfs::+en-update+ (event-modify disp widget time)))))
+
;;;
;;; process-message methods
;;;
@@ -156,14 +165,10 @@
((eq wparam-hi 1)
(format t "accelerator wparam: ~x lparam: ~x~%" wparam lparam)) ; FIXME: debug
(t
- (let ((w (get-widget tc (cffi:make-pointer lparam))))
- (if (null w)
- (warn 'gfs:toolkit-warning :detail "no object for hwnd")
- (unless (null (dispatcher w))
- (event-select (dispatcher w)
- w
- (event-time tc)
- (gfs:make-rectangle))))))) ; FIXME
+ (let ((widget (get-widget tc (cffi:make-pointer lparam))))
+ (when (and widget (dispatcher widget))
+ ; (format t "wparam-hi: ~x wparam-lo: ~x lparam: ~x~%" wparam-hi wparam-lo lparam)
+ (dispatch-notification widget wparam-hi)))))
(warn 'gfs:toolkit-warning :detail "no object for hwnd")))
0)
More information about the Graphic-forms-cvs
mailing list