home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / programmieren / e / easyplugins / source / toolbar.e < prev    next >
Encoding:
Text File  |  1998-03-13  |  8.4 KB  |  353 lines

  1.  
  2. /*
  3.  
  4.     $VER: toolbar_plugin 1.1 (25.3.98)
  5.  
  6.     Author:         Ali Graham ($01)
  7.                     <agraham@hal9000.net.au>
  8.  
  9.     PLUGIN id:      $03
  10.  
  11.     Desc.:          Toolbar that displays multiple gadgets.
  12.  
  13.     Tags:           PLA_ToolBar_Contents             [I..]
  14.                     PLA_ToolBar_Disabled             [ISG]
  15.                     PLA_ToolBar_DisplayAll           [I..]
  16.                     PLA_ToolBar_Font                 [I.G]
  17.                     PLA_ToolBar_Function             [IS.]
  18.                     PLA_ToolBar_Vertical             [I..]
  19.  
  20. */
  21.  
  22. OPT MODULE, PREPROCESS, OSVERSION=37, NOWARN
  23.  
  24. ->> toolbar_plugin: Modules
  25.  
  26. MODULE 'tools/easygui', 'graphics/text', 'tools/ghost',
  27.        'gadtools', 'libraries/gadtools',
  28.        'intuition/gadgetclass',
  29.        'intuition/intuition', 'graphics/rastport'
  30.  
  31. MODULE 'utility', 'utility/tagitem'
  32.  
  33. -><
  34.  
  35. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  36.  
  37. ->> toolbar_plugin: Definitions
  38.  
  39. EXPORT OBJECT toolbar_plugin OF plugin PRIVATE
  40.  
  41.     contents:PTR TO LONG
  42.     disabled
  43.     display_all
  44.     font:PTR TO textattr
  45.     function:PTR TO LONG
  46.     vertical
  47.  
  48.     total_gadgets
  49.     valid_gadgets
  50.     gadget_ptrs:PTR TO LONG
  51.  
  52. ENDOBJECT
  53.  
  54. #define GadgetWidth(text, font) (IntuiTextLength([1, 0, RP_JAM1,\
  55.                                  0, 0, font, text, NIL]:intuitext) + 12)
  56.  
  57. #define GadgetHeight(font)      (font.ysize + 4)
  58.  
  59. -> PROGRAMMER_ID | MODULE_ID
  60. ->      $01      |   $03
  61.  
  62.  
  63. EXPORT ENUM PLA_ToolBar_Contents=$81030001,     -> [I..]
  64.             PLA_ToolBar_Disabled,               -> [ISG]
  65.             PLA_ToolBar_DisplayAll,             -> [I..]
  66.             PLA_ToolBar_Font,                   -> [I.G]
  67.             PLA_ToolBar_Function,               -> [IS.]
  68.             PLA_ToolBar_Vertical                -> [I..]
  69.  
  70. CONST X_GAP=3, Y_GAP=2
  71.  
  72. -><
  73.  
  74. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  75.  
  76. ->> toolbar_plugin: toolbar() & end()
  77.  
  78. PROC toolbar(tags=NIL:PTR TO tagitem) OF toolbar_plugin
  79.  
  80.     IF utilitybase
  81.  
  82.         self.contents    := GetTagData(PLA_ToolBar_Contents, ['Default'], tags)
  83.         self.disabled    := GetTagData(PLA_ToolBar_Disabled, FALSE, tags)
  84.         self.display_all := GetTagData(PLA_ToolBar_DisplayAll, FALSE, tags)
  85.         self.function    := GetTagData(PLA_ToolBar_Function, NIL, tags)
  86.         self.font        := GetTagData(PLA_ToolBar_Font, NIL, tags)
  87.         self.vertical    := GetTagData(PLA_ToolBar_Vertical, FALSE, tags)
  88.  
  89.     ELSE
  90.  
  91.         Raise("util")
  92.  
  93.     ENDIF
  94.  
  95.     IF self.contents
  96.  
  97.         IF ListLen(self.contents)>0
  98.  
  99.             self.total_gadgets:=ListLen(self.contents)
  100.  
  101.             self.gadget_ptrs:=List(self.total_gadgets)
  102.  
  103.         ENDIF
  104.  
  105.     ENDIF
  106.  
  107. ENDPROC
  108.  
  109. PROC end() OF toolbar_plugin
  110.  
  111.     IF self.gadget_ptrs THEN Dispose(self.gadget_ptrs)
  112.  
  113. ENDPROC
  114.  
  115. -><
  116.  
  117. ->> toolbar_plugin: set() & get()
  118.  
  119. PROC set(attr, value) OF toolbar_plugin
  120.  
  121.     DEF a
  122.  
  123.     SELECT attr
  124.  
  125.         CASE PLA_ToolBar_Disabled
  126.  
  127.             IF self.disabled<>value
  128.  
  129.                 self.disabled:=value
  130.  
  131.                 FOR a:=0 TO (self.valid_gadgets-1)
  132.  
  133.                     IF (self.gadget_ptrs[a])
  134.  
  135.                         Gt_SetGadgetAttrsA(self.gadget_ptrs[a], self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
  136.  
  137.                     ENDIF
  138.  
  139.                 ENDFOR
  140.  
  141.             ENDIF
  142.  
  143.         CASE PLA_ToolBar_Function
  144.  
  145.             self.function:=value
  146.  
  147.     ENDSELECT
  148.  
  149. ENDPROC
  150.  
  151. PROC get(attr) OF toolbar_plugin
  152.  
  153.     SELECT attr
  154.  
  155.         CASE PLA_ToolBar_Disabled;  RETURN self.disabled, TRUE
  156.         CASE PLA_ToolBar_Font;      RETURN self.font, TRUE
  157.  
  158.     ENDSELECT
  159.  
  160. ENDPROC -1, FALSE
  161.  
  162. -><
  163.  
  164. ->> toolbar_plugin: min_size() & will_resize()
  165. PROC min_size(font:PTR TO textattr, font_height) OF toolbar_plugin
  166.  
  167.     DEF width=0, height=0, a
  168.  
  169.     IF self.total_gadgets
  170.  
  171.         IF self.display_all
  172.  
  173.             FOR a:=0 TO (self.total_gadgets-1)
  174.  
  175.                 IF self.vertical
  176.  
  177.                     width:=Max(width, GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font)))
  178.                     height:=height + GadgetHeight(IF self.font THEN self.font ELSE font)
  179.  
  180.                     IF (a < (self.total_gadgets-1)) THEN height:=height + Y_GAP
  181.  
  182.                 ELSE
  183.  
  184.                     width:=width + GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font))
  185.  
  186.                     IF (a < (self.total_gadgets-1)) THEN width:=width + X_GAP
  187.  
  188.                 ENDIF
  189.  
  190.             ENDFOR
  191.  
  192.         ELSE
  193.  
  194.             IF self.vertical
  195.  
  196.                 FOR a:=0 TO (self.total_gadgets-1)
  197.  
  198.                     width:=Max(width, GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font)))
  199.  
  200.                 ENDFOR
  201.  
  202.             ELSE
  203.  
  204.                 width:=GadgetWidth(self.contents[0], (IF self.font THEN self.font ELSE font))
  205.  
  206.             ENDIF
  207.  
  208.         ENDIF
  209.  
  210.         IF (self.display_all=FALSE) OR (self.vertical=FALSE)
  211.  
  212.             height:=GadgetHeight(IF self.font THEN self.font ELSE font)
  213.  
  214.         ENDIF
  215.  
  216.     ENDIF
  217.  
  218. ENDPROC width, height
  219.  
  220. PROC will_resize() OF toolbar_plugin IS (IF self.vertical THEN RESIZEY ELSE RESIZEX)
  221. -><
  222.  
  223. ->> toolbar_plugin: gtrender()
  224. PROC gtrender(gl, vis, font:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF toolbar_plugin
  225.  
  226.     DEF a, x_loc, y_loc, g_width, g_height
  227.  
  228.     self.valid_gadgets:=NIL
  229.  
  230.     IF self.vertical
  231.  
  232.         y_loc:=y
  233.  
  234.         g_height:=GadgetHeight(IF self.font THEN self.font ELSE font)
  235.  
  236.         FOR a:=0 TO (self.total_gadgets-1)
  237.  
  238.             EXIT ((y_loc + g_height) > (y + ys))
  239.  
  240.             self.gadget_ptrs[a]:=CreateGadgetA(BUTTON_KIND, (IF (a=0) THEN gl ELSE self.gadget_ptrs[a-1]),
  241.                                                [x, y_loc, xs, g_height, self.contents[a],
  242.                                                (IF self.font THEN self.font ELSE font),
  243.                                                 (a + 1), NIL, vis, FALSE]:newgadget,
  244.                                                [GA_DISABLED, self.disabled,
  245.                                                 TAG_DONE])
  246.  
  247.             self.valid_gadgets:=self.valid_gadgets + 1
  248.  
  249.             y_loc:=y_loc + g_height + Y_GAP
  250.  
  251.         ENDFOR
  252.  
  253.         IF (y_loc < (y + ys)) AND (self.valid_gadgets=self.total_gadgets)
  254.  
  255.             ghost(win, x, y_loc, xs, ((y + ys) - y_loc))
  256.  
  257.                 ->WriteF('toolbar $\h\n x = \d\n xs = \d\n  y = \d\n ys = \d\n y_loc = \d\n y + ys - y_loc = \d\n',
  258.                 ->       self, x, xs, y, ys, y_loc, y + ys - y_loc)
  259.  
  260.             ->ENDIF
  261.  
  262.         ENDIF
  263.  
  264.     ELSE
  265.  
  266.         x_loc:=x
  267.  
  268.         FOR a:=0 TO (self.total_gadgets-1)
  269.  
  270.             g_width:=GadgetWidth(self.contents[a], (IF self.font THEN self.font ELSE font))
  271.  
  272.             EXIT ((x_loc + g_width) > (x + xs))
  273.  
  274.             self.gadget_ptrs[a]:=CreateGadgetA(BUTTON_KIND, (IF (a=0) THEN gl ELSE self.gadget_ptrs[a-1]),
  275.                                                [x_loc, y, g_width, ys, self.contents[a],
  276.                                                (IF self.font THEN self.font ELSE font),
  277.                                                 (a + 1), NIL, vis, FALSE]:newgadget,
  278.                                                [GA_DISABLED, self.disabled,
  279.                                                 TAG_DONE])
  280.  
  281.             self.valid_gadgets:=self.valid_gadgets + 1
  282.  
  283.             x_loc:=x_loc + g_width + X_GAP
  284.  
  285.         ENDFOR
  286.  
  287.         IF (x_loc < (x + xs)) AND (self.valid_gadgets=self.total_gadgets)
  288.  
  289.             ghost(win, x_loc, y, ((x + xs) - x_loc), ys)
  290.  
  291.         ENDIF
  292.  
  293.     ENDIF
  294.  
  295. ENDPROC (IF self.valid_gadgets>0 THEN self.gadget_ptrs[self.valid_gadgets-1] ELSE gl)
  296. -><
  297.  
  298. ->> toolbar_plugin: message_test() & message_action()
  299.  
  300. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF toolbar_plugin
  301.  
  302.     DEF a, ret=FALSE, gadget:PTR TO newgadget
  303.  
  304.     IF imsg.class=IDCMP_GADGETUP
  305.  
  306.         FOR a:=0 TO (self.valid_gadgets-1)
  307.  
  308.             IF (imsg.iaddress=self.gadget_ptrs[a])
  309.  
  310.                 gadget:=self.gadget_ptrs[a]
  311.  
  312.                 gadget.userdata:=TRUE
  313.                 ret:=TRUE
  314.  
  315.             ENDIF
  316.  
  317.             EXIT ret
  318.  
  319.         ENDFOR
  320.  
  321.     ENDIF
  322.  
  323. ENDPROC ret
  324.  
  325. PROC message_action(class, qual, code, win:PTR TO window) OF toolbar_plugin
  326.  
  327.     DEF a, gadget:PTR TO newgadget, function:PTR TO LONG
  328.  
  329.     IF class=IDCMP_GADGETUP
  330.  
  331.         FOR a:=0 TO (self.valid_gadgets-1)
  332.  
  333.             IF (gadget:=self.gadget_ptrs[a])
  334.  
  335.                 IF gadget.userdata
  336.  
  337.                     function:=self.function
  338.  
  339.                     function(self, (a+1))
  340.                     gadget.userdata:=FALSE
  341.  
  342.                 ENDIF
  343.  
  344.             ENDIF
  345.  
  346.         ENDFOR
  347.  
  348.     ENDIF
  349.  
  350. ENDPROC FALSE
  351.  
  352. -><
  353.