; 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 (declare-screen-dependent simple-icon.screen-data simple-icon.foreground simple-icon.background simple-icon.borderpixel simple-icon.context) (defaults-to simple-icon.legend () simple-icon.borderwidth 1 simple-icon.plug-name () simple-icon.no-center-plug () simple-icon.label () simple-icon.stretch () simple-icon.font small-font ) ;; define here the screen-dependent resources (if (not (boundp 'simple-icon)) ;define only once (with (wob wob) ;; user-settable defaults (for screen (list-of-screens) (defaults-to simple-icon.foreground black simple-icon.background white simple-icon.borderpixel black) (setq simple-icon.context '(font simple-icon.font legend simple-icon.legend foreground simple-icon.foreground background simple-icon.background borderwidth simple-icon.borderwidth borderpixel simple-icon.borderpixel label simple-icon.label stretch simple-icon.stretch ))) )) (: simple-icon.title-fsm (fsm-make (state-make icon-behavior (on (user-event 'get-title) (update-plug-in-icon update-icon.title)) (on (user-event 'get-icon) (update-plug-in-icon window-icon-name)) ;; if icon pixmap set after creation, redecorate. (on (user-event 'icon-pixmap-change) (if (# 'no-center-plug window) (re-decorate-window))) standard-behavior ))) (de simple-icon.center-plug () (if (not simple-icon.no-center-plug) (or (window-icon-window) (with (tmp (std-resource-get 'GwmIconPixmap)) (if (not (= (type tmp) 'pixmap)) (progn (: tmp (eval tmp)) (if (and tmp (# (type tmp) string-types)) (: tmp (pixmap-make tmp))))) (if (and tmp (= (type tmp) 'pixmap)) (plug-make tmp))) (with (tmp (window-icon-pixmap) fsm icon-center-plug-with-pixmap-hint-fsm) (if tmp (plug-make tmp)))) (window-icon-window))) (: 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) (with-eval (# 'context wob) (wob-tile (window-icon-pixmap)) (update-placements))) icon-behavior standard-behavior ))) (de update-plug-in-icon (string) (with-eval (# 'context wob) (wob-tile (label-make (simple-icon.process-label string))) (update-placements) )) (de simple-icon.process-label (text) (with (new-label (if label (if (= (type label) 'string) label (eval (list label text)) ) text )) (if (and (= (type new-label) 'string) (not (= "" new-label))) new-label text ) )) (de simple-icon.label-plug () (with (borderwidth 0 fsm simple-icon.title-fsm) (plug-make (label-make (if simple-icon.plug-name simple-icon.plug-name (simple-icon.process-label window-icon-name)))))) (de simple-icon args (with-eval (+ simple-icon.context (get-context (std-resource-get 'SimpleIcon 'simple-icon)) args ) (with (fsm icon-fsm context (context-save simple-icon.context) menu 'icon-pop grabs icon-grabs center-plug (simple-icon.center-plug) property (+ (list 'context context 'no-center-plug (not center-plug)) property) label-plug (if (or legend (not center-plug)) (simple-icon.label-plug)) inner-borderwidth 0 ) (if (not center-plug) (window-make () () () () label-plug) (not legend) (window-make () () () () center-plug) (not stretch) (with (bar (with (borderwidth 0) (bar-make () label-plug ()))) (if (= legend "top") (window-make bar () () () center-plug) (= legend "left") (window-make () bar () () center-plug) (= legend "right") (window-make () () bar () center-plug) (window-make () () () bar center-plug))) (or (= legend "left") (= legend "right")) (with (inner-borderwidth borderwidth borderwidth 0 plug-separator 0 tile t ;transparent background for stretch lab (if (= stretch "down") (bar-make label-plug ()) (= stretch "up") (bar-make () label-plug) (bar-make () label-plug ())) cent (if (= stretch "down") (bar-make center-plug ()) (= stretch "up") (bar-make () center-plug) (bar-make () center-plug ())) bar (if (= legend "left") (bar-make lab cent) (bar-make cent lab))) (if (not (= (type center-plug) 'plug)) (window-make () (if (= legend "left") lab) (if (= legend "right") lab) () center-plug) (window-make bar () () () ()))) t (with (inner-borderwidth borderwidth borderwidth 0 tile t ;transparent background for stretch bar (if (= stretch "left") (bar-make () label-plug) (= stretch "right") (bar-make label-plug ()) (bar-make () label-plug ()))) (window-make (if (= legend "top") bar ()) (if (not (= stretch "right")) (bar-make ()) ()) (if (not (= stretch "left")) (bar-make ()) ()) (if (not (= legend "top")) bar ()) center-plug))))))