home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gwm18a.zip / data / vb-bar.gwm < prev    next >
Lisp/Scheme  |  1995-07-03  |  10KB  |  387 lines

  1. ; ======================================================================
  2. ;             BAR PACKAGE
  3. ; ======================================================================
  4.  
  5.  
  6. ; =========
  7. ; Utilities
  8. ; =========
  9.  
  10. ; Pixmap list creation 
  11.  
  12. (de pixmap-list-make (file-name suffixes make)
  13.     (with (res ())
  14.       (for i suffixes
  15.            (setq res (+ res
  16.                 (list ((eval make)  (+ file-name i))))))
  17.       res))
  18.  
  19. (setq suffixes.9. '( ".tl" ".t" ".tr"  ".l"  "."   ".r" ".bl" ".b" ".br"))
  20. (setq suffixes.8. '( ".tl" ".t" ".tr"  ".l"        ".r" ".bl" ".b" ".br"))
  21. (setq suffixes.3-vertical.   '( ".t" "." ".b"))
  22. (setq suffixes.3-horizontal. '( ".l" "." ".r"))
  23.  
  24. (setq suffixes.9_ '( "_tl" "_t" "_tr"  "_l"  "_"   "_r" "_bl" "_b" "_br"))
  25. (setq suffixes.8_ '( "_tl" "_t" "_tr"  "_l"        "_r" "_bl" "_b" "_br"))
  26. (setq suffixes.3-vertical_   '( "_t" "_" "_b"))
  27. (setq suffixes.3-horizontal_ '( "_l" "_" "_r"))
  28.  
  29.  
  30.  
  31. ; Does a list contains an item ?
  32.         
  33. (de contains-item (gwm.list gwm.item)
  34.     (if (not gwm.list)             ; empty list
  35.     ()
  36.     (if (= gwm.item (# 0 gwm.list))    ; it's first item
  37.         t
  38.         (contains-item         ; otherwise recursion
  39.         (sublist 1 (- (length gwm.list) 1) gwm.list)
  40.         gwm.item)
  41.     )))
  42.  
  43.  
  44. ; =============
  45. ; Some defaults
  46. ; =============
  47.  
  48. (setq bar.default-pixmap (label-make "X"))
  49.  
  50.  
  51.  
  52. ; =============
  53. ; Main function     bar.make
  54. ; =============
  55.  
  56. ; Context:
  57. ;     bar.plugs
  58. ;     bar.focus-sensitive        t or ()  change aspect if focus in ?
  59. ;     bar.borderwidth        borderwidth default 0
  60. ;     borderpixel
  61. ;     bordertile
  62. ;     plug-separator
  63. ;     menu
  64. ;     cursor
  65. ;     property            (appended for intern usage)
  66. ;     bar-min-width            (may be increased)
  67. ;     bar-max-width            (may be decreased)
  68. ;     bar.size-adjust-on        'plugs (default) or 'pixmap 
  69. (de bar.make()
  70.     (with(
  71.       bar.appearance-make (default bar.appearance-make 
  72.                   bar.color-appearance-make)
  73.       bar.focus-sensitive (default bar.focus-sensitive t)
  74.       fsm (if bar.focus-sensitive 
  75.           bar.focus-sensitive-fsm
  76.           bar.focus-insensitive-fsm)
  77.       bar.size-adjust-on (default bar.size-adjust-on 'plugs)
  78.       
  79.       
  80.       ; ---------------------------------------------------
  81.       ; And we duplicate some variable wich may be modified 
  82.       ; by bar.appearance-make to avoid border effects
  83.       ; ---------------------------------------------------
  84.       borderwidth (default bar.borderwidth 0)    
  85.       property     (default property ())        
  86.       bar-min-width (max 1(default bar-min-width 1))
  87.       bar-max-width (default bar-max-width 100)    
  88.       bar.plugs     (default bar.plugs ())        
  89.      )
  90.      (if (boundp 'bar.thickness) 
  91.          (progn 
  92.             (setq bar-min-width bar.thickness)
  93.             (setq bar-max-width bar.thickness)))
  94.      (bar.appearance-make)        
  95.      
  96.      ; border effect on property, bar-min-width, and bar-max-width
  97.      (setq property (+ property (list 'initializer bar.initializer)))
  98.      
  99.      (eval (+ '(bar-make) bar.plugs))))
  100.  
  101.  
  102.  
  103. (setq bar.focus-sensitive-behaviour
  104.     (state-make
  105.     (on (user-event 'initialize)
  106.         (eval (# 'initializer wob-property)))
  107.     (on (user-event 'focus-in)
  108.         (eval (# 'active-drawer wob-property)))
  109.     (on (user-event 'focus-out)
  110.         (eval (# 'normal-drawer wob-property)))))
  111. (setq bar.focus-sensitive-fsm (fsm-make bar.focus-sensitive-behaviour))
  112.  
  113. (setq bar.focus-insensitive-behaviour
  114.     (state-make
  115.     (on (user-event 'initialize)
  116.         (eval (# 'initializer wob-property)))))
  117. (setq bar.focus-insensitive-fsm (fsm-make bar.focus-insensitive-behaviour))
  118.  
  119. (setq bar.initializer 
  120.     '(eval (# 'normal-drawer wob-property)))
  121.  
  122.  
  123.  
  124.  
  125. ; ====================
  126. ; Appearance functions
  127. ; ====================
  128. ; All these functions override some context variables
  129. ; but doesn't retrun any value
  130.  
  131.  
  132. ; Appareance described by color
  133. ; -----------------------------
  134. ; Context:
  135. ;     bar.normal-color
  136. ;     bar.active-color    if bar.focus-sensitive is true
  137. ; Border effects on context variable: 
  138. ;    property
  139. (de bar.color-appearance-make()
  140.     (with (
  141.        bar.normal-color (default bar.normal-color background)
  142.        bar.active-color (default bar.active-color foreground)
  143.       )
  144.       ; BORDER EFFECTS
  145.       (setq property
  146.         (+ (list 'normal-drawer
  147.              (list 'wob-background bar.normal-color))
  148.            (if bar.focus-sensitive
  149.                (list 'active-drawer
  150.                  (list 'wob-background bar.active-color))
  151.                ())
  152.            property
  153.         ))))
  154.  
  155.  
  156. ; Appareance described by pixmap
  157. ; ------------------------------
  158. ; Context
  159. ;     bar.normal-pixmap
  160. ;     bar.active-pixmap    if bar.focus-sensitive is true
  161. ;    bar.orientation        'vertical  or  'horizontal (default) 
  162. ; Border effects on context variables:
  163. ;    property
  164. ;     bar-min-width    (only increase)
  165. ;     bar-max-width    (only decrease)
  166. ;     borderwidth      (set to 0)
  167. (de bar.pixmap-appearance-make()
  168.     (with (
  169.        bar.normal-pixmap (default bar.normal-pixmap bar.default-pixmap)
  170.        bar.active-pixmap (default bar.active-pixmap bar.default-pixmap)
  171.        bar.orientation   (default bar.orientation 'horizontal)
  172.        thickness (if (= 'horizontal bar.orientation)
  173.              (height bar.normal-pixmap)
  174.              (width bar.normal-pixmap))
  175.       )
  176.       ; BORDER EFFECTS
  177.       (setq borderwidth 0)
  178.       (setq property
  179.         (+ (list 'normal-drawer
  180.              (list 'wob-tile bar.normal-pixmap))
  181.            (if bar.focus-sensitive
  182.                (list 'active-drawer
  183.                  (list 'wob-tile bar.active-pixmap))
  184.                ())
  185.            property           
  186.         ))
  187.       (if (= 'pixmap bar.size-adjust-on)
  188.           (progn
  189.             (setq bar-min-width (max bar-min-width thickness))
  190.             (setq bar-max-width (min bar-max-width thickness))))
  191.     ))
  192.  
  193.  
  194. ; Appareance described by 3 pixmap (a stretchable center and 2 borders)
  195. ; --------------------------------
  196. ; Context:
  197. ;     bar.normal-pixmap-list
  198. ;     bar.active-pixmap-list
  199. ;     bar.focus-sensitive
  200. ; Border effect on:
  201. ;     property
  202. ;     bar-min-width
  203. ;     bar-max-width
  204. ;     bar.plugs
  205. (de bar.3-pixmaps-appearance-make ()
  206.     (with (
  207.        ; context treatment
  208.        bar.normal-pixmap-list
  209.        (if (and (boundp 'bar.normal-pixmap-list)
  210.             (= 3 (length bar.normal-pixmap-list)))
  211.            bar.normal-pixmap-list
  212.            (progn
  213.              (? "Warning: bar.normal-pixmap-list incorrect, "
  214.             bar.normal-pixmap-list "\n")
  215.              bar.default-normal-pixmap-list))
  216.        
  217.        bar.active-pixmap-list
  218.        (if bar.focus-sensitive
  219.            (if (and (boundp 'bar.active-pixmap-list)
  220.             (= 3 (length bar.active-pixmap-list)))
  221.            bar.active-pixmap-list
  222.            (progn
  223.              (? "Warning: bar.active-pixmap-list incorrect, "
  224.                 bar.active-pixmap-list "\n")
  225.              bar.normal-pixmap-list)))
  226.        
  227.        ; intern variables
  228.        bar.normal-pixmap (# 1 bar.normal-pixmap-list)
  229.        bar.active-pixmap (# 1 bar.active-pixmap-list)
  230.       ) 
  231.       ; BORDER EFFECTS
  232.       (setq bar.plugs
  233.         (+ 
  234.            ; A plug for the first edge
  235.            (with (
  236.               normal-pixmap (# 0 bar.normal-pixmap-list)
  237.               active-pixmap (if bar.focus-sensitive
  238.                         (# 0 bar.active-pixmap-list)
  239.                         ())
  240.              )
  241.              (list (bar.plug-make)))
  242.            
  243.            ; The plugs of user
  244.            bar.plugs
  245.            
  246.            ; If necessary a space to make sure that 
  247.            ; the last plug will be on the right (or bottom)
  248.  
  249.            (if (member () bar.plugs)  ; (contains-item bar.plugs ())
  250.                ()
  251.                '(()))
  252.            
  253.            ; A plug for the last edge
  254.            (with (
  255.               normal-pixmap (# 2 bar.normal-pixmap-list)
  256.               active-pixmap (if bar.focus-sensitive
  257.                         (# 2 bar.active-pixmap-list)
  258.                         ())
  259.              )
  260.              (list (bar.plug-make)))
  261.         ))
  262.       (bar.pixmap-appearance-make)
  263.     )))
  264.  
  265.  
  266.  
  267. (setq bar.default-normal-pixmap-list 
  268.     (list bar.default-pixmap bar.default-pixmap bar.default-pixmap))
  269.  
  270. ; Context:
  271. ;     bar.focus-sensitive
  272. ;     normal-pixmap
  273. ;     active-pixmap
  274. (de bar.plug-make ()
  275.     (with (
  276.        fsm bar.plug-fsm
  277.        borderwidth 0
  278.        property (if bar.focus-sensitive
  279.             (list
  280.                  'normal-drawer
  281.                  (list 'wob-tile normal-pixmap)
  282.                  'active-drawer
  283.                  (list 'wob-tile active-pixmap)
  284.             )
  285.             ())
  286.       )
  287.       (plug-make normal-pixmap)
  288.     ))
  289.   
  290. (setq bar.plug-behaviour
  291.     (state-make             
  292.     (on (user-event 'focus-out) (eval (# 'normal-drawer wob-property)))
  293.     (on (user-event 'focus-in) (eval (# 'active-drawer wob-property)))))
  294.  
  295. (setq bar.plug-fsm (fsm-make bar.plug-behaviour))
  296.  
  297.  
  298.  
  299.  
  300. ; Appareance described by the prefix name of 3 pixmap 
  301. ; ---------------------------------------------------
  302. ; (a stretchable center and 2 borders)
  303. ; Context:
  304. ;     bar.normal-pixmap-file-name
  305. ;     bar.active-pixmap-file-name
  306. ;     bar.orientation        'vertical or 'horizontal
  307. ;     bar.suffixes        for instance: '( "_l"  "_"  "_r")
  308. ;     bar.pixmap-make        default: pixmap-make
  309. ;     bar.focus-sensitive
  310. ; Border effect on:
  311. ;     property
  312. ;     bar-min-width
  313. ;     bar-max-width
  314. ;     bar.plugs
  315. (de bar.3-pixmap-files-appearance-make ()
  316.     (with (
  317.        bar.normal-pixmap-file-name (default bar.normal-pixmap-file-name 
  318.                        "default")
  319.        bar.active-pixmap-file-name (default bar.active-pixmap-file-name 
  320.                        "default")
  321.        bar.orientation (default bar.orientation 'horizontal)
  322.        bar.suffixes (default bar.suffixes
  323.                 (if (= 'vertical bar.orientation)
  324.                 suffixes.3-vertical_
  325.                 suffixes.3-horizontal_ ))
  326.        bar.pixmap-make (default bar.pixmap-make pixmap-make)
  327.        
  328.        ; local variables
  329.        bar.normal-pixmap-list (pixmap-list-make
  330.                       bar.normal-pixmap-file-name
  331.                       bar.suffixes
  332.                       bar.pixmap-make)
  333.        bar.active-pixmap-list (if bar.focus-sensitive
  334.                       (pixmap-list-make
  335.                       bar.active-pixmap-file-name
  336.                       bar.suffixes
  337.                       bar.pixmap-make)
  338.                       ())
  339.       )
  340.       (bar.3-pixmaps-appearance-make)
  341.     ))
  342.  
  343.  
  344. ; Appareance described by the prefix name of 3 pixmap 
  345. ; ---------------------------------------------------
  346. ; (a stretchable center and 2 borders)
  347. ; As bar.3-pixmap-files-appearance-make    but use paxmap-make and other suffixes
  348. ;           ^                                    ^
  349. ;           |                                    |
  350. ; Context:
  351. ;     bar.normal-pixmap-file-name
  352. ;     bar.active-pixmap-file-name
  353. ;     bar.orientation        'vertical or 'horizontal
  354. ;     bar.suffixes        default: '( ".l"  "."  ".r")
  355. ;     bar.focus-sensitive
  356. ; Border effect on:
  357. ;     property
  358. ;     bar-min-width
  359. ;     bar-max-width
  360. ;     bar.plugs
  361. (de bar.3-paxmap-files-appearance-make ()
  362.     (with (
  363.        bar.orientation (default bar.orientation 'horizontal)
  364.        bar.suffixes (default bar.suffixes
  365.                 (if (= 'vertical bar.orientation)
  366.                 suffixes.3-vertical.
  367.                 suffixes.3-horizontal. ))
  368.        bar.pixmap-make paxmap-make
  369.       )
  370.       (bar.3-pixmap-files-appearance-make)))
  371.     
  372. ; ======================================================================
  373.  
  374. (provide 'vb-bar)
  375.