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