home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / easygui_os12 / source / easyplugins / corners_os12.e < prev    next >
Encoding:
Text File  |  2000-06-11  |  8.6 KB  |  392 lines

  1.  
  2. /*
  3.  
  4.     $VER: corners_plugin 1.1 (25.2.98)
  5.  
  6.     Author:         Ali Graham ($01)
  7.                     <agraham@hal9000.net.au>
  8.  
  9.     PLUGIN id:      $07
  10.  
  11.     Desc.:          Choose between the corners of a rectangle.
  12.  
  13.     Tags:           PLA_Corners_Width                [I..]
  14.                     PLA_Corners_Height               [I..]
  15.                     PLA_Corners_BoxWidth             [ISG]
  16.                     PLA_Corners_BoxHeight            [ISG]
  17.                     PLA_Corners_ActiveCorner         [ISG]
  18.                     PLA_Corners_FGColor              [ISG]
  19.                     PLA_Corners_BGColor              [ISG]
  20.                     PLA_Corners_Disabled             [ISG]
  21.  
  22.     Values:         PLV_Corners_CornerNone
  23.                     PLV_Corners_CornerTopLeft
  24.                     PLV_Corners_CornerTopRight
  25.                     PLV_Corners_CornerLowerLeft
  26.                     PLV_Corners_CornerLowerRight
  27.  
  28.  
  29. */
  30.  
  31. OPT MODULE
  32. OPT PREPROCESS
  33.  
  34. -> RST: Added conditional EASY_OS12 support
  35. #define EASY_OS12
  36.  
  37. #ifdef EASY_OS12
  38.   MODULE 'tools/easygui_os12','hybrid/tagdata'
  39.   #define GetTagData getTagData
  40. #endif
  41. #ifndef EASY_OS12
  42.   OPT OSVERSION=37
  43.   MODULE 'tools/easygui','utility'
  44. #endif
  45.  
  46. ->> corners_plugin: Modules
  47.  
  48. MODULE 'graphics/text',
  49.        'intuition/intuition', 'graphics/rastport',
  50.        'utility/tagitem', 'tools/ghost'
  51.  
  52. -><
  53.  
  54. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  55.  
  56. ->> corners_plugin: Definitions
  57.  
  58. EXPORT ENUM PLV_Corners_CornerNone=0,
  59.             PLV_Corners_CornerTopLeft,
  60.             PLV_Corners_CornerTopRight,
  61.             PLV_Corners_CornerLowerLeft,
  62.             PLV_Corners_CornerLowerRight
  63.  
  64. CONST NUM_CORNERS= PLV_Corners_CornerLowerRight
  65.  
  66. EXPORT OBJECT corners_plugin OF plugin PRIVATE
  67.  
  68.     width
  69.     height
  70.     box_width
  71.     box_height
  72.     corner
  73.     colour_fg
  74.     colour_bg
  75.     disabled
  76.  
  77.     mouse_x
  78.     mouse_y
  79.  
  80.     corners[NUM_CORNERS]:ARRAY OF LONG
  81.  
  82. ENDOBJECT
  83.  
  84. OBJECT corner
  85.  
  86.     x, y, w, h
  87.  
  88.     rel_x, rel_y
  89.  
  90. ENDOBJECT
  91.  
  92. EXPORT ENUM PLA_Corners_Width=$81070001,    -> [I..]
  93.             PLA_Corners_Height,             -> [I..]
  94.             PLA_Corners_BoxWidth,           -> [ISG]
  95.             PLA_Corners_BoxHeight,          -> [ISG]
  96.             PLA_Corners_ActiveCorner,       -> [ISG]
  97.             PLA_Corners_FGColor,            -> [ISG]
  98.             PLA_Corners_BGColor,            -> [ISG]
  99.             PLA_Corners_Disabled            -> [ISG]
  100.  
  101. -><
  102.  
  103. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  104.  
  105. ->> corners_plugin: corners()
  106.  
  107. PROC corners(tags:PTR TO tagitem) OF corners_plugin
  108.  
  109.     DEF a, corner:PTR TO corner
  110.  
  111. #ifndef EASY_OS12
  112.     IF utilitybase
  113. #endif
  114.  
  115.         self.width      :=  GetTagData(PLA_Corners_Width, 32, tags)
  116.         self.height     :=  GetTagData(PLA_Corners_Height, 24, tags)
  117.         self.box_width  :=  GetTagData(PLA_Corners_BoxWidth, 8, tags)
  118.         self.box_height :=  GetTagData(PLA_Corners_BoxHeight, 6, tags)
  119.         self.corner     :=  GetTagData(PLA_Corners_ActiveCorner, PLV_Corners_CornerNone, tags)
  120.         self.colour_fg  :=  GetTagData(PLA_Corners_FGColor, 1, tags)
  121.         self.colour_bg  :=  GetTagData(PLA_Corners_BGColor, 0, tags)
  122.         self.disabled   :=  GetTagData(PLA_Corners_Disabled, FALSE, tags)
  123.  
  124. #ifndef EASY_OS12
  125.     ELSE
  126.  
  127.         Raise("util")
  128.  
  129.     ENDIF
  130. #endif
  131.  
  132.     FOR a:=1 TO NUM_CORNERS
  133.  
  134.         NEW corner
  135.  
  136.         SELECT a
  137.  
  138.             CASE PLV_Corners_CornerTopLeft
  139.  
  140.                 corner.rel_x:=0
  141.                 corner.rel_y:=0
  142.  
  143.             CASE PLV_Corners_CornerTopRight
  144.  
  145.                 corner.rel_x:=self.width - self.box_width
  146.                 corner.rel_y:=0
  147.  
  148.             CASE PLV_Corners_CornerLowerLeft
  149.  
  150.                 corner.rel_x:=0
  151.                 corner.rel_y:=self.height - self.box_height
  152.  
  153.             CASE PLV_Corners_CornerLowerRight
  154.  
  155.                 corner.rel_x:=self.width - self.box_width
  156.                 corner.rel_y:=self.height - self.box_height
  157.  
  158.         ENDSELECT
  159.  
  160.         corner.w:=self.box_width
  161.         corner.h:=self.box_height
  162.  
  163.         self.corners[a-1]:=corner
  164.  
  165.     ENDFOR
  166.  
  167. ENDPROC
  168.  
  169. PROC end() OF corners_plugin
  170.  
  171.     DEF a, corner:PTR TO corner
  172.  
  173.     FOR a:=0 TO (NUM_CORNERS-1)
  174.  
  175.         corner:=self.corners[a]
  176.  
  177.         END corner
  178.  
  179.     ENDFOR
  180.  
  181. ENDPROC
  182.  
  183. -><
  184.  
  185. ->> corners_plugin: set() & get()
  186.  
  187. PROC set(attr, value) OF corners_plugin
  188.  
  189.     SELECT attr
  190.  
  191.         CASE PLA_Corners_BoxWidth
  192.  
  193.             IF (value <> self.box_width) AND (value < self.width)
  194.  
  195.                 self.box_width:=value
  196.  
  197.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  198.  
  199.             ENDIF
  200.  
  201.         CASE PLA_Corners_BoxHeight
  202.  
  203.             IF (value <> self.box_height) AND (value < self.height)
  204.  
  205.                 self.box_height:=value
  206.  
  207.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  208.  
  209.             ENDIF
  210.  
  211.         CASE PLA_Corners_ActiveCorner
  212.  
  213.             IF self.corner<>value
  214.  
  215.                 self.corner:=value
  216.  
  217.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  218.  
  219.             ENDIF
  220.  
  221.         CASE PLA_Corners_FGColor
  222.  
  223.             IF self.colour_fg<>value
  224.  
  225.                 self.colour_fg:=value
  226.  
  227.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  228.  
  229.             ENDIF
  230.  
  231.         CASE PLA_Corners_BGColor
  232.  
  233.             IF self.colour_bg<>value
  234.  
  235.                 self.colour_bg:=value
  236.  
  237.                 IF self.disabled=FALSE THEN self.draw(self.gh.wnd)
  238.  
  239.             ENDIF
  240.  
  241.         CASE PLA_Corners_Disabled
  242.  
  243.             IF self.disabled<>value
  244.  
  245.                 self.disabled:=value
  246.  
  247.                 self.draw(self.gh.wnd)
  248.  
  249.             ENDIF
  250.  
  251.     ENDSELECT
  252.  
  253. ENDPROC
  254.  
  255. PROC get(attr) OF corners_plugin
  256.  
  257.     SELECT attr
  258.  
  259.         CASE PLA_Corners_BoxWidth;          RETURN self.box_width,  TRUE
  260.         CASE PLA_Corners_BoxHeight;         RETURN self.box_height, TRUE
  261.         CASE PLA_Corners_ActiveCorner;      RETURN self.corner,     TRUE
  262.         CASE PLA_Corners_FGColor;           RETURN self.colour_fg,  TRUE
  263.         CASE PLA_Corners_BGColor;           RETURN self.colour_bg,  TRUE
  264.         CASE PLA_Corners_Disabled;          RETURN self.disabled,   TRUE
  265.  
  266.     ENDSELECT
  267.  
  268. ENDPROC -1, FALSE
  269.  
  270. -><
  271.  
  272. ->> corners_plugin: draw()
  273. PROC draw(win:PTR TO window) OF corners_plugin
  274.  
  275.     DEF corner:PTR TO corner, a
  276.  
  277.     IF win
  278.  
  279.         SetStdRast(win.rport)
  280.  
  281.         Box(self.x, self.y, (self.x+(self.xs-1)), (self.y+(self.ys-1)), self.colour_bg)
  282.  
  283.         IF self.disabled=FALSE
  284.  
  285.             FOR a:=1 TO NUM_CORNERS
  286.  
  287.                 corner:=self.corners[a-1]
  288.  
  289.                 corner.x:=self.x; corner.y:=self.y
  290.  
  291.             ENDFOR
  292.  
  293.             IF self.corner<>PLV_Corners_CornerNone
  294.  
  295.                 corner:=self.corners[self.corner-1]
  296.  
  297.                 corner.draw(self.colour_fg)
  298.  
  299.             ENDIF
  300.  
  301.         ELSE
  302.  
  303.             ghost(win, self.x, self.y, self.xs, self.ys)
  304.  
  305.         ENDIF
  306.  
  307.     ENDIF
  308.  
  309. ENDPROC
  310. -><
  311.  
  312. ->> corners_plugin: min_size() & will_resize()
  313.  
  314. PROC min_size(font:PTR TO textattr, font_height) OF corners_plugin IS self.width, self.height
  315.  
  316. PROC will_resize() OF corners_plugin IS FALSE
  317.  
  318. -><
  319.  
  320. ->> corners_plugin: render()
  321.  
  322. PROC render(ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF corners_plugin
  323.  
  324.     self.draw(win)
  325.  
  326. ENDPROC
  327.  
  328. -><
  329.  
  330. ->> corners_plugin: message_test() & message_action()
  331.  
  332. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF corners_plugin
  333.  
  334.     IF (imsg.class=IDCMP_MOUSEBUTTONS) AND (imsg.code=SELECTDOWN)
  335.  
  336.         IF self.inside_box(imsg.mousex, imsg.mousey)
  337.  
  338.             self.mouse_x:=imsg.mousex
  339.             self.mouse_y:=imsg.mousey
  340.  
  341.             RETURN TRUE
  342.  
  343.         ENDIF
  344.  
  345.     ENDIF
  346.  
  347. ENDPROC FALSE
  348.  
  349. PROC message_action(class, qual, code, win:PTR TO window) OF corners_plugin
  350.  
  351.     DEF corner:PTR TO corner, a
  352.  
  353.     IF (class=IDCMP_MOUSEBUTTONS) AND (code=SELECTDOWN)
  354.  
  355.         FOR a:=1 TO NUM_CORNERS
  356.  
  357.             corner:=self.corners[a-1]
  358.  
  359.             IF corner.inside(self.mouse_x, self.mouse_y) THEN self.set(PLA_Corners_ActiveCorner, a)
  360.  
  361.         ENDFOR
  362.  
  363.     ENDIF
  364.  
  365. ENDPROC TRUE
  366.  
  367. -><
  368.  
  369. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  370.  
  371. ->> corners_plugin: private procedures
  372.  
  373. PROC inside_box(x_click, y_click) OF corners_plugin
  374.  
  375. ENDPROC ((x_click >= self.x) AND (x_click <= (self.x + (self.xs -1))) AND
  376.         ((y_click >= self.y) AND (y_click <= (self.y + (self.ys -1)))))
  377.  
  378. PROC inside(x_click, y_click) OF corner
  379.  
  380.     x_click:=x_click - self.x
  381.     y_click:=y_click - self.y
  382.  
  383. ENDPROC ((x_click >= self.rel_x) AND (x_click <= (self.rel_x + self.w)) AND
  384.          (y_click >= self.rel_y) AND (y_click <= (self.rel_y + self.h)))
  385.  
  386. PROC draw(colour) OF corner IS Box(self.x + self.rel_x, self.y + self.rel_y,
  387.                                    (self.x + self.rel_x + self.w) -1 ,
  388.                                    (self.y + self.rel_y + self.h) - 1,
  389.                                    colour)
  390.  
  391. -><
  392.