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