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

  1.  
  2. /*
  3.  
  4.     $VER: multitext_plugin 1.4 (25.3.98)
  5.  
  6.     Author:         Ali Graham ($01)
  7.                     <agraham@hal9000.net.au>
  8.  
  9.     PLUGIN id:      $02
  10.  
  11.     Desc.:          TEXT replacement with a number of features.
  12.  
  13.     Tags:           PLA_MultiText_Text                   [I..]
  14.                     PLA_MultiText_Highlight              [IS.]
  15.                     PLA_MultiText_ThreeD                 [IS.]
  16.                     PLA_MultiText_Justification          [IS.]
  17.                     PLA_MultiText_DrawBar                [IS.]
  18.                     PLA_MultiText_Font                   [I..]
  19.                     PLA_MultiText_Disabled               [IS.]
  20.                     PLA_MultiText_ShowWhenDisabled       [IS.]
  21.                     PLA_MultiText_GapHorizontal          [i..]
  22.                     PLA_MultiText_GapVertical            [i..]
  23.                     PLA_MultiText_Resize                 [I..]
  24.  
  25.     Values:         PLV_MultiText_JustifyCenter
  26.                     PLV_MultiText_JustifyLeft
  27.                     PLV_MultiText_JustifyRight
  28.  
  29. */
  30.  
  31. OPT MODULE, PREPROCESS, OSVERSION=37
  32.  
  33. ->> multitext_plugin: Modules
  34.  
  35. MODULE 'tools/easygui', 'graphics/text', 'tools/ghost',
  36.        'intuition/intuition', 'intuition/screens',
  37.        'graphics/rastport'
  38.  
  39. MODULE 'utility', 'utility/tagitem'
  40.  
  41. -><
  42.  
  43. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  44.  
  45. ->> multitext_plugin: Definitions
  46. EXPORT OBJECT multitext_plugin OF plugin PRIVATE
  47.  
  48.     contents:PTR TO LONG
  49.     highlight
  50.     three_d
  51.     justification
  52.     draw_bar
  53.     font:PTR TO textattr
  54.     disabled
  55.     disabled_show
  56.     resize
  57.     gap_h
  58.     gap_v
  59.  
  60.     num_lines
  61.  
  62.     texts_width
  63.     texts_height
  64.  
  65. ENDOBJECT
  66.  
  67. -> PROGRAMMER_ID | MODULE_ID
  68. ->      $01      |   $02
  69.  
  70. EXPORT ENUM PLA_MultiText_Text=$81020001,        ->[I..]
  71.             PLA_MultiText_Highlight,             ->[IS.]
  72.             PLA_MultiText_ThreeD,                ->[IS.]
  73.             PLA_MultiText_Justification,         ->[IS.]
  74.             PLA_MultiText_DrawBar,               ->[IS.]
  75.             PLA_MultiText_Font,                  ->[I..]
  76.             PLA_MultiText_Disabled,              ->[IS.]
  77.             PLA_MultiText_ShowWhenDisabled,      ->[IS.]
  78.             PLA_MultiText_GapHorizontal,         ->[i..]
  79.             PLA_MultiText_GapVertical,           ->[i..]
  80.             PLA_MultiText_Resize                 ->[I..]
  81.  
  82. EXPORT ENUM PLV_MultiText_JustifyCenter=0,
  83.             PLV_MultiText_JustifyLeft,
  84.             PLV_MultiText_JustifyRight
  85.  
  86. -><
  87.  
  88. /* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */
  89.  
  90. ->> multitext_plugin: multitext()
  91. PROC multitext(tags=NIL:PTR TO tagitem) OF multitext_plugin
  92.  
  93.     IF utilitybase
  94.  
  95.         self.contents       := GetTagData(PLA_MultiText_Text, [' '], tags)
  96.         self.highlight      := GetTagData(PLA_MultiText_Highlight, FALSE, tags)
  97.         self.three_d        := GetTagData(PLA_MultiText_ThreeD, FALSE, tags)
  98.         self.font           := GetTagData(PLA_MultiText_Font, NIL, tags)
  99.         self.justification  := GetTagData(PLA_MultiText_Justification, PLV_MultiText_JustifyCenter, tags)
  100.         self.draw_bar       := GetTagData(PLA_MultiText_DrawBar, FALSE, tags)
  101.         self.disabled       := GetTagData(PLA_MultiText_Disabled, FALSE, tags)
  102.         self.disabled_show  := GetTagData(PLA_MultiText_ShowWhenDisabled, TRUE, tags)
  103.         self.resize         := GetTagData(PLA_MultiText_Resize, TRUE, tags)
  104.         self.gap_h          := GetTagData(PLA_MultiText_GapHorizontal, 2, tags)
  105.         self.gap_v          := GetTagData(PLA_MultiText_GapVertical, 1, tags)
  106.  
  107.     ELSE
  108.  
  109.         Raise("util")
  110.  
  111.     ENDIF
  112.  
  113.     IF self.contents THEN self.num_lines:=ListLen(self.contents)
  114.  
  115. ENDPROC
  116. -><
  117.  
  118. ->> multitext_plugin: set() & get()
  119.  
  120. PROC set(attr, value) OF multitext_plugin
  121.  
  122.     SELECT attr
  123.  
  124.         CASE PLA_MultiText_Highlight
  125.  
  126.             IF self.highlight<>value
  127.  
  128.                 self.highlight:=value
  129.  
  130.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  131.  
  132.             ENDIF
  133.  
  134.         CASE PLA_MultiText_ThreeD
  135.  
  136.             IF self.three_d<>value
  137.  
  138.                 self.three_d:=value
  139.  
  140.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  141.  
  142.             ENDIF
  143.  
  144.         CASE PLA_MultiText_Justification
  145.  
  146.             IF self.justification<>value
  147.  
  148.                 IF (value >= PLV_MultiText_JustifyCenter) AND (value <= PLV_MultiText_JustifyRight)
  149.  
  150.                     self.justification:=value
  151.  
  152.                     IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  153.  
  154.                 ENDIF
  155.  
  156.             ENDIF
  157.  
  158.         CASE PLA_MultiText_DrawBar
  159.  
  160.             IF self.draw_bar<>value
  161.  
  162.                 self.draw_bar:=value
  163.  
  164.                 IF (self.disabled=FALSE) OR self.disabled_show THEN  self.draw(self.gh.wnd)
  165.  
  166.             ENDIF
  167.  
  168.         CASE PLA_MultiText_Disabled
  169.  
  170.             IF self.disabled<>value
  171.  
  172.                 self.disabled:=value
  173.  
  174.                 self.draw(self.gh.wnd)
  175.  
  176.             ENDIF
  177.  
  178.         CASE PLA_MultiText_ShowWhenDisabled
  179.  
  180.             IF self.disabled_show<>value
  181.  
  182.                 self.disabled_show:=value
  183.  
  184.                 IF self.disabled THEN self.draw(self.gh.wnd)
  185.  
  186.             ENDIF
  187.  
  188.     ENDSELECT
  189.  
  190. ENDPROC
  191.  
  192. PROC get(attr) OF multitext_plugin IS -1, FALSE
  193.  
  194. -><
  195.  
  196. ->> multitext_plugin: draw()
  197. PROC draw(win:PTR TO window, font=NIL:PTR TO textattr) OF multitext_plugin
  198.  
  199.     DEF justification, a, cursor_height,
  200.         left_side, right_side, text_start,
  201.         text_width, line_height
  202.  
  203.     IF win
  204.  
  205.         SetStdRast(win.rport)
  206.  
  207.         clear(win, self.x, self.y, self.xs, self.ys)
  208.  
  209.         IF (self.disabled=FALSE) OR self.disabled_show
  210.  
  211.             IF self.font;       font:=self.font
  212.             ELSEIF font=NIL;    font:=win.wscreen.font
  213.             ENDIF
  214.  
  215.             justification:=self.justification
  216.  
  217.             cursor_height:=self.y + self.gap_h
  218.             line_height:=cursor_height + (font.ysize / 2)
  219.  
  220.             FOR a:=0 TO (self.num_lines-1)
  221.  
  222.                 left_side:=self.x + self.gap_h
  223.                 right_side:=self.x + self.xs - (self.gap_v + 1)
  224.  
  225.                 text_width:=IntuiTextLength([1, 0, RP_JAM1, 0, 0, font, self.contents[a], NIL]:intuitext)
  226.  
  227.                 SELECT justification
  228.  
  229.                     CASE PLV_MultiText_JustifyLeft
  230.  
  231.                         print_text(self, self.contents[a], font, left_side, cursor_height)
  232.                         IF self.draw_bar THEN draw_line((left_side + text_width + 4), right_side, line_height)
  233.  
  234.                     CASE PLV_MultiText_JustifyRight
  235.  
  236.                         IF self.draw_bar THEN draw_line(left_side, (right_side - (text_width + 4)), line_height)
  237.                         print_text(self, self.contents[a], font, (right_side - text_width), cursor_height)
  238.  
  239.                     DEFAULT
  240.  
  241.                         text_start:=left_side + (((right_side - left_side) - text_width) / 2) + 1
  242.  
  243.                         IF self.draw_bar THEN draw_line(left_side, (text_start - 4), line_height)
  244.                         print_text(self, self.contents[a], font, text_start, cursor_height)
  245.                         IF self.draw_bar THEN draw_line((text_start + text_width + 4), right_side, line_height)
  246.  
  247.                 ENDSELECT
  248.  
  249.                 cursor_height:=cursor_height + font.ysize + 2
  250.                 line_height:=cursor_height + (font.ysize / 2)
  251.  
  252.             ENDFOR
  253.  
  254.         ENDIF
  255.  
  256.         IF self.disabled THEN ghost(win, self.x, self.y, self.xs, self.ys)
  257.  
  258.     ENDIF
  259.     
  260. ENDPROC
  261. -><
  262.  
  263. ->> multitext_plugin: min_size() & will_resize()
  264. PROC min_size(font:PTR TO textattr, font_height) OF multitext_plugin
  265.  
  266.     DEF a
  267.  
  268.     self.texts_width:=0
  269.     self.texts_height:=0
  270.  
  271.     IF self.font
  272.  
  273.         font:=self.font
  274.         font_height:=self.font.ysize
  275.  
  276.     ENDIF
  277.  
  278.     FOR a:=0 TO (self.num_lines-1)
  279.  
  280.         self.texts_width:=Max(self.texts_width, IntuiTextLength([1, 0, RP_JAM1, 0, 0, font, self.contents[a], NIL]:intuitext))
  281.  
  282.         self.texts_height:=self.texts_height + font_height + 2
  283.  
  284.     ENDFOR
  285.  
  286. ENDPROC (self.texts_width + (self.gap_h * 2)), (self.texts_height + (self.gap_v * 2))
  287.  
  288. PROC will_resize() OF multitext_plugin IS (IF self.resize THEN COND_RESIZEX ELSE FALSE)
  289.  
  290. -><
  291.  
  292. ->> multitext_plugin: render()
  293.  
  294. PROC render(font:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF multitext_plugin
  295.  
  296.     self.draw(win, font)
  297.  
  298. ENDPROC
  299.  
  300. -><
  301.  
  302. ->> private to multitext_plugin.draw(): draw_line() & print_text()
  303. PROC draw_line(x1, x2, y)
  304.  
  305.     Line(x1, y, x2, y, 1)
  306.     Line(x1, y+1, x2, y+1, 2)
  307.  
  308. ENDPROC
  309.  
  310. PROC print_text(m:PTR TO multitext_plugin, text:PTR TO CHAR, font:PTR TO textattr, x, y)
  311.  
  312.     DEF bt_col, ft_col
  313.  
  314.     IF m.highlight
  315.  
  316.         bt_col:=1; ft_col:=2
  317.  
  318.     ELSE
  319.  
  320.         bt_col:=2; ft_col:=1
  321.  
  322.     ENDIF
  323.  
  324.     IF m.three_d THEN PrintIText(stdrast, [bt_col, 0, RP_JAM1, 1, 1, font, text, NIL]:intuitext, x, y)
  325.  
  326.     PrintIText(stdrast, [ft_col, 0, RP_JAM1, 0, 0, font, text, NIL]:intuitext, x, y)
  327.  
  328. ENDPROC
  329. -><
  330.  
  331.  
  332.  
  333.