;;; -*- Package: clim-internals -*-

(in-package :clim-internals)


(macrolet ((frob (name)
		 (let ((sym (intern (string name) :clim-internals))
		       (par (intern (concatenate 'string "+" (string name) "+")
				    :clim-internals)))
		   `(progn
		      (defclass ,sym (clim:gadget-view)())
		      (import '(,sym ,par) :clim)
		      (export '(,sym ,par) :clim)
		      (defparameter ,par (make-instance ',sym))))))
  (frob toggle-button-view)
  (frob push-button-view)
  (frob radio-box-view)
  (frob check-box-view)
  (frob slider-view)
  ;(frob text-field-view)
  (frob text-editor-view)
  (frob list-pane-view)
  (frob option-pane-view)
  )

(import '(name-key value-key test documentation-key) :clim)
(export '(name-key value-key test documentation-key) :clim)

(defun accept-present-default
       (type stream view default default-supplied-p present-p query-identifier)
  (funcall-presentation-generic-function accept-present-default
    type stream view default default-supplied-p present-p query-identifier))

(defmethod pane-frame ((pane standard-encapsulating-stream))
  (pane-frame (encapsulating-stream-stream pane)))

(defmethod invoke-with-sheet-medium-bound
  (continuation 
   (medium null)
   (sheet standard-encapsulating-stream))
  (invoke-with-sheet-medium-bound
   continuation medium
   (encapsulating-stream-stream sheet)))


(defmethod (setf gadget-value) :after (new-value (gadget text-field-pane)
				       &key invoke-callback)
  (declare (ignore invoke-callback))
  (when (area gadget)
    (let* ((area (area gadget))
	   (buffer (goatee::buffer area))
	   (start (goatee::buffer-start buffer))
	   (end (goatee::buffer-end buffer)))
      (goatee::delete-region buffer start end)
      (goatee::insert buffer new-value :position start)
      (goatee::redisplay-area area))))

(defmethod radio-box-selections ((g radio-box))
  (sheet-children g))

(defmethod check-box-selections ((g check-box))
  (sheet-children g))
