;;;; Input focus testbed

(in-package :clim-user)

(defclass focus-gadget (basic-gadget)
  ((ink :accessor ink-of :initarg :ink)
   (contents :accessor contents-of :initarg :contents :initform "Speak: ")))

(defmethod handle-repaint ((pane focus-gadget) region)
  (draw-design pane region :ink (ink-of pane))
  (draw-text* pane (contents-of pane) 0 30 :ink +white+))

(defmethod handle-event ((pane focus-gadget) (event key-press-event))
  ;(describe event *trace-output*)
  (let ((char (keyboard-event-character event)))
    (with-slots (contents) pane
      (when char
	(setf contents
	      (if (char= #\Backspace char)
		  (subseq contents 0 (max 0 (1- (length contents))))
		  (concatenate 'string contents (string char))))
	(repaint-sheet pane (sheet-region pane))))))

(defmethod handle-event ((pane focus-gadget) (event pointer-button-press-event))
  (setf (port-keyboard-input-focus (port *application-frame*)) pane))
   
(define-application-frame focus-test ()
  ()
  (:panes
   (gadget-a (make-pane 'focus-gadget :ink +red+))
   (gadget-b (make-pane 'focus-gadget :ink +brown+)))
  (:layouts
   (default
       (labelling (:label "Hello")
	 (vertically ()
	   gadget-a
	   gadget-b)))))

