;;; -*- Mode:LISP; Package:USER; Base:10 -*-

;;; ;;; Simple window definitions for panes
;;;
;;;

(defflavor simple-menu-pane
	 (mode-item-alist
	  mode-item)
	   (tv:abstract-dynamic-item-list-mixin
	    tv:menu-highlighting-mixin
	    tv:command-menu
	    tv:top-box-label-mixin)
  (:default-init-plist
    :blinker-deselected-visibility :on
    :blinker-flavor 'tv:rectangular-blinker
    :blinker-p t
    :deexposed-typein-action  :normal
    :deexposed-typeout-action :normal
    :borders 5
    :border-margin-width 3
    :item-list nil
    :mode-item-alist nil
    :mode-item nil)
  :inittable-instance-variables
  (:settable-instance-variables mode-item-alist mode-item))

(defmethod (simple-menu-pane :update-mode-item-alist) (alist)
  (send self :set-mode-item-alist alist))

(defmethod (simple-menu-pane :set-mode) (&optional mode)
  (if (null mode)
      (setq mode mode-item))
  (let((item-list (assoc mode mode-item-alist)))
    (if item-list
	(send self :set-item-list (cdr item-list)))))

(defmethod (simple-menu-pane :update-item-list) ()
  (send self :set-mode))

(defmethod (simple-menu-pane :after :init) (&rest ignore)
  (send self :update-item-list))

(defmethod (simple-menu-pane :redraw) ()
  (send self :refresh))

(compile-flavor-methods simple-menu-pane)

(defflavor simple-banner-pane
	 ((banner-message nil))
	   (tv:top-box-label-mixin
	    tv:not-externally-selectable-mixin
	    tv:window)
  (:default-init-plist
    :blinker-deselected-visibility :off
    :blinker-flavor 'tv:rectangular-blinker
    :blinker-p nil
    :deexposed-typein-action  :normal
    :deexposed-typeout-action :permit
    :borders 4
    :border-margin-width 2
    :label nil
    :save-bits t
    :font-map '(medfnb))
  :gettable-instance-variables
  :settable-instance-variables
  :inittable-instance-variables)

(defmethod (simple-banner-pane :draw-banner) (&optional msg)
  (if msg
    (setq banner-message (string msg)))
  (when banner-message
    (send self :clear-screen)
    (send self :string-out-centered-explicit banner-message)))

(defmethod (simple-banner-pane :redraw) ()
  (send self :draw-banner))

(defflavor simple-text-area()
	   (tv:window)
  (:default-init-plist
    :blinker-deselected-visibility :on
    :blinker-flavor 'tv:rectangular-blinker
    :blinker-p t
    :borders 5
    :border-margin-width 3
    :deexposed-typein-action  :normal
    :deexposed-typeout-action :normal
    :label nil
    :save-bits t))

(defmethod (simple-text-area :redraw) ()
  (send self :clear-screen))

(defflavor simple-scroll-area()
	   (tv:scroll-mouse-mixin tv:scroll-window)
  (:default-init-plist
    :blinker-deselected-visibility :on
    :blinker-flavor 'tv:rectangular-blinker
    :blinker-p t
    :borders 5
    :border-margin-width 3
    :deexposed-typein-action  :normal
    :deexposed-typeout-action :normal
    :label nil
    :save-bits t))

(defmethod (simple-scroll-area :redraw) ()
  (send self :redisplay))
