; SIMPLE ICON  DECORATION
; =======================

;;Author: colas@mirsa.inria.fr (Colas NAHABOO) -- Bull Research FRANCE
;;Revision: 1.6 -- Mar. 1, 1990

; A simple icon "a la Mac", following fully the ICCCs

;; define here the screen-dependent resources
(if (not (boundp 'simple-icon.data))	;define only once
    (declare-screen-dependent
     simple-icon.screen-data
     simple-icon.foreground
     simple-icon.background
     simple-icon.borderpixel))

;; user-settable defaults

(defun simple-icon.screen-dependent-defaults ()
  (defaults-to
    simple-icon.foreground black
    simple-icon.background white
    simple-icon.borderpixel black))

(defaults-to
    simple-icon.legend ()
    simple-icon.borderwidth 1
    simple-icon.font small-font)

(setq simple-icon.context
      '(font simple-icon.font	     
	     foreground simple-icon.foreground
	     background simple-icon.background
	     borderwidth simple-icon.borderwidth
	     borderpixel simple-icon.borderpixel))

(: simple-icon.title-fsm
   (fsm-make
    (state-make
     icon-behavior
     (on (user-event 'get-title) 
	 (progn (with simple-icon.context
		      (place-window-in-screen)
		      (wob-tile (label-make update-icon.title)))
		(update-placements)))
     (on (user-event 'get-icon) 
	 (progn (with simple-icon.context
		      (wob-tile (label-make window-icon-name)))
		(update-placements)))
     ;; if icon pixmap set after creation, redecorate.
     (on (user-event 'icon-pixmap-change)
	 (if (# 'no-center-plug window)
	     (re-decorate-window)))
     )))

(de simple-icon.center-plug? ()
    (or (window-icon-window)
	(progn
	  (: tmp (resource-get 
		  (+ -screen-name ".GwmIconPixmap." 
		     (window-client-class) "." screen-type)
		  "S.GwmIconPixmap.any.any"))
	  (if (not (= (type tmp) 'pixmap))
	      (progn
		(: tmp (eval tmp))
		(if (and tmp (# (type tmp) string-types))
		    (: tmp (pixmap-make tmp)))))
	  tmp
	  )
	 simple-icon-decoration.wip
	 ))

(: simple-icon.data
   '(with simple-icon.context
	  (with (fsm icon-fsm
		     menu 'icon-pop
		     simple-icon-decoration.wip (window-icon-pixmap)
		     grabs icon-grabs
		     center-plug? (simple-icon.center-plug?)
		     property (if center-plug? property
				(+ '(no-center-plug t) property)))
	    (window-make
	     ()				;top bar
	     ()				;left bar
	     ()				;right bar
	     ;; base bar
	     (if (and center-plug? simple-icon.legend)
		 (bar-make () 
			   (with (borderwidth 0 fsm simple-icon.title-fsm)
			     (plug-make
			      (label-make window-icon-name)))
			   ())
	       ())
	     ;; center plug 
	     (if (window-icon-window) 
		 (window-icon-window)
	       (and center-plug?
		    (not (eq center-plug? simple-icon-decoration.wip)))
	         (plug-make center-plug?)
	       simple-icon-decoration.wip 
	           (with (fsm icon-center-plug-with-pixmap-hint-fsm)
		     (plug-make simple-icon-decoration.wip))
	       (with (borderwidth 0 fsm simple-icon.title-fsm)
		 (plug-make 
		  (label-make window-icon-name)))
	       )))))

(: icon-center-plug-with-pixmap-hint-fsm (fsm-make
    (state-make
	(on (buttonrelease 2 any) (progn (iconify-window)(raise-window)))
	(on (user-event 'icon-pixmap-change)
	    (progn
	      (wob-tile (window-icon-pixmap))
	      (update-placements)))
	icon-behavior
    )))

(de simple-icon ()
    (if (boundp 'simple-icon.screen-data)
	simple-icon.screen-data		; already loaded
	(progn
	  (simple-icon.screen-dependent-defaults)
	  (setq simple-icon.screen-data	simple-icon.data))))

