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

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