Generic_Window_Manager/data/vb-bar.gwm

387 lines
10 KiB
Plaintext

; ======================================================================
; BAR PACKAGE
; ======================================================================
; =========
; Utilities
; =========
; Pixmap list creation
(de pixmap-list-make (file-name suffixes make)
(with (res ())
(for i suffixes
(setq res (+ res
(list ((eval make) (+ file-name i))))))
res))
(setq suffixes.9. '( ".tl" ".t" ".tr" ".l" "." ".r" ".bl" ".b" ".br"))
(setq suffixes.8. '( ".tl" ".t" ".tr" ".l" ".r" ".bl" ".b" ".br"))
(setq suffixes.3-vertical. '( ".t" "." ".b"))
(setq suffixes.3-horizontal. '( ".l" "." ".r"))
(setq suffixes.9_ '( "_tl" "_t" "_tr" "_l" "_" "_r" "_bl" "_b" "_br"))
(setq suffixes.8_ '( "_tl" "_t" "_tr" "_l" "_r" "_bl" "_b" "_br"))
(setq suffixes.3-vertical_ '( "_t" "_" "_b"))
(setq suffixes.3-horizontal_ '( "_l" "_" "_r"))
; Does a list contains an item ?
(de contains-item (gwm.list gwm.item)
(if (not gwm.list) ; empty list
()
(if (= gwm.item (# 0 gwm.list)) ; it's first item
t
(contains-item ; otherwise recursion
(sublist 1 (- (length gwm.list) 1) gwm.list)
gwm.item)
)))
; =============
; Some defaults
; =============
(setq bar.default-pixmap (label-make "X"))
; =============
; Main function bar.make
; =============
; Context:
; bar.plugs
; bar.focus-sensitive t or () change aspect if focus in ?
; bar.borderwidth borderwidth default 0
; borderpixel
; bordertile
; plug-separator
; menu
; cursor
; property (appended for intern usage)
; bar-min-width (may be increased)
; bar-max-width (may be decreased)
; bar.size-adjust-on 'plugs (default) or 'pixmap
;
(de bar.make()
(with(
bar.appearance-make (default bar.appearance-make
bar.color-appearance-make)
bar.focus-sensitive (default bar.focus-sensitive t)
fsm (if bar.focus-sensitive
bar.focus-sensitive-fsm
bar.focus-insensitive-fsm)
bar.size-adjust-on (default bar.size-adjust-on 'plugs)
; ---------------------------------------------------
; And we duplicate some variable wich may be modified
; by bar.appearance-make to avoid border effects
; ---------------------------------------------------
borderwidth (default bar.borderwidth 0)
property (default property ())
bar-min-width (max 1(default bar-min-width 1))
bar-max-width (default bar-max-width 100)
bar.plugs (default bar.plugs ())
)
(if (boundp 'bar.thickness)
(progn
(setq bar-min-width bar.thickness)
(setq bar-max-width bar.thickness)))
(bar.appearance-make)
; border effect on property, bar-min-width, and bar-max-width
(setq property (+ property (list 'initializer bar.initializer)))
(eval (+ '(bar-make) bar.plugs))))
(setq bar.focus-sensitive-behaviour
(state-make
(on (user-event 'initialize)
(eval (# 'initializer wob-property)))
(on (user-event 'focus-in)
(eval (# 'active-drawer wob-property)))
(on (user-event 'focus-out)
(eval (# 'normal-drawer wob-property)))))
(setq bar.focus-sensitive-fsm (fsm-make bar.focus-sensitive-behaviour))
(setq bar.focus-insensitive-behaviour
(state-make
(on (user-event 'initialize)
(eval (# 'initializer wob-property)))))
(setq bar.focus-insensitive-fsm (fsm-make bar.focus-insensitive-behaviour))
(setq bar.initializer
'(eval (# 'normal-drawer wob-property)))
; ====================
; Appearance functions
; ====================
;
; All these functions override some context variables
; but doesn't retrun any value
; Appareance described by color
; -----------------------------
;
; Context:
; bar.normal-color
; bar.active-color if bar.focus-sensitive is true
; Border effects on context variable:
; property
;
(de bar.color-appearance-make()
(with (
bar.normal-color (default bar.normal-color background)
bar.active-color (default bar.active-color foreground)
)
; BORDER EFFECTS
(setq property
(+ (list 'normal-drawer
(list 'wob-background bar.normal-color))
(if bar.focus-sensitive
(list 'active-drawer
(list 'wob-background bar.active-color))
())
property
))))
; Appareance described by pixmap
; ------------------------------
;
; Context
; bar.normal-pixmap
; bar.active-pixmap if bar.focus-sensitive is true
; bar.orientation 'vertical or 'horizontal (default)
; Border effects on context variables:
; property
; bar-min-width (only increase)
; bar-max-width (only decrease)
; borderwidth (set to 0)
;
(de bar.pixmap-appearance-make()
(with (
bar.normal-pixmap (default bar.normal-pixmap bar.default-pixmap)
bar.active-pixmap (default bar.active-pixmap bar.default-pixmap)
bar.orientation (default bar.orientation 'horizontal)
thickness (if (= 'horizontal bar.orientation)
(height bar.normal-pixmap)
(width bar.normal-pixmap))
)
; BORDER EFFECTS
(setq borderwidth 0)
(setq property
(+ (list 'normal-drawer
(list 'wob-tile bar.normal-pixmap))
(if bar.focus-sensitive
(list 'active-drawer
(list 'wob-tile bar.active-pixmap))
())
property
))
(if (= 'pixmap bar.size-adjust-on)
(progn
(setq bar-min-width (max bar-min-width thickness))
(setq bar-max-width (min bar-max-width thickness))))
))
; Appareance described by 3 pixmap (a stretchable center and 2 borders)
; --------------------------------
;
; Context:
; bar.normal-pixmap-list
; bar.active-pixmap-list
; bar.focus-sensitive
; Border effect on:
; property
; bar-min-width
; bar-max-width
; bar.plugs
;
(de bar.3-pixmaps-appearance-make ()
(with (
; context treatment
bar.normal-pixmap-list
(if (and (boundp 'bar.normal-pixmap-list)
(= 3 (length bar.normal-pixmap-list)))
bar.normal-pixmap-list
(progn
(? "Warning: bar.normal-pixmap-list incorrect, "
bar.normal-pixmap-list "\n")
bar.default-normal-pixmap-list))
bar.active-pixmap-list
(if bar.focus-sensitive
(if (and (boundp 'bar.active-pixmap-list)
(= 3 (length bar.active-pixmap-list)))
bar.active-pixmap-list
(progn
(? "Warning: bar.active-pixmap-list incorrect, "
bar.active-pixmap-list "\n")
bar.normal-pixmap-list)))
; intern variables
bar.normal-pixmap (# 1 bar.normal-pixmap-list)
bar.active-pixmap (# 1 bar.active-pixmap-list)
)
; BORDER EFFECTS
(setq bar.plugs
(+
; A plug for the first edge
(with (
normal-pixmap (# 0 bar.normal-pixmap-list)
active-pixmap (if bar.focus-sensitive
(# 0 bar.active-pixmap-list)
())
)
(list (bar.plug-make)))
; The plugs of user
bar.plugs
; If necessary a space to make sure that
; the last plug will be on the right (or bottom)
(if (member () bar.plugs) ; (contains-item bar.plugs ())
()
'(()))
; A plug for the last edge
(with (
normal-pixmap (# 2 bar.normal-pixmap-list)
active-pixmap (if bar.focus-sensitive
(# 2 bar.active-pixmap-list)
())
)
(list (bar.plug-make)))
))
(bar.pixmap-appearance-make)
)))
(setq bar.default-normal-pixmap-list
(list bar.default-pixmap bar.default-pixmap bar.default-pixmap))
; Context:
; bar.focus-sensitive
; normal-pixmap
; active-pixmap
(de bar.plug-make ()
(with (
fsm bar.plug-fsm
borderwidth 0
property (if bar.focus-sensitive
(list
'normal-drawer
(list 'wob-tile normal-pixmap)
'active-drawer
(list 'wob-tile active-pixmap)
)
())
)
(plug-make normal-pixmap)
))
(setq bar.plug-behaviour
(state-make
(on (user-event 'focus-out) (eval (# 'normal-drawer wob-property)))
(on (user-event 'focus-in) (eval (# 'active-drawer wob-property)))))
(setq bar.plug-fsm (fsm-make bar.plug-behaviour))
; Appareance described by the prefix name of 3 pixmap
; ---------------------------------------------------
; (a stretchable center and 2 borders)
;
; Context:
; bar.normal-pixmap-file-name
; bar.active-pixmap-file-name
; bar.orientation 'vertical or 'horizontal
; bar.suffixes for instance: '( "_l" "_" "_r")
; bar.pixmap-make default: pixmap-make
; bar.focus-sensitive
; Border effect on:
; property
; bar-min-width
; bar-max-width
; bar.plugs
;
(de bar.3-pixmap-files-appearance-make ()
(with (
bar.normal-pixmap-file-name (default bar.normal-pixmap-file-name
"default")
bar.active-pixmap-file-name (default bar.active-pixmap-file-name
"default")
bar.orientation (default bar.orientation 'horizontal)
bar.suffixes (default bar.suffixes
(if (= 'vertical bar.orientation)
suffixes.3-vertical_
suffixes.3-horizontal_ ))
bar.pixmap-make (default bar.pixmap-make pixmap-make)
; local variables
bar.normal-pixmap-list (pixmap-list-make
bar.normal-pixmap-file-name
bar.suffixes
bar.pixmap-make)
bar.active-pixmap-list (if bar.focus-sensitive
(pixmap-list-make
bar.active-pixmap-file-name
bar.suffixes
bar.pixmap-make)
())
)
(bar.3-pixmaps-appearance-make)
))
; Appareance described by the prefix name of 3 pixmap
; ---------------------------------------------------
; (a stretchable center and 2 borders)
; As bar.3-pixmap-files-appearance-make but use paxmap-make and other suffixes
; ^ ^
; | |
;
; Context:
; bar.normal-pixmap-file-name
; bar.active-pixmap-file-name
; bar.orientation 'vertical or 'horizontal
; bar.suffixes default: '( ".l" "." ".r")
; bar.focus-sensitive
; Border effect on:
; property
; bar-min-width
; bar-max-width
; bar.plugs
;
(de bar.3-paxmap-files-appearance-make ()
(with (
bar.orientation (default bar.orientation 'horizontal)
bar.suffixes (default bar.suffixes
(if (= 'vertical bar.orientation)
suffixes.3-vertical.
suffixes.3-horizontal. ))
bar.pixmap-make paxmap-make
)
(bar.3-pixmap-files-appearance-make)))
; ======================================================================
(provide 'vb-bar)