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

  1. /*
  2. **
  3. ** simplegauge PLUGIN
  4. **
  5. ** Copyright: Ralph Wermke of Digital Innovations
  6. ** EMail    : wermke@gryps1.rz.uni-greifswald.de
  7. ** WWW      : http://www.user.fh-stralsund.de/~rwermke/di.html
  8. **
  9. ** Version  : 1.1.2
  10. ** Date     : 05-Nov-1997
  11. **
  12. ** ProgramID: 0002
  13. **
  14. ** History:
  15. **    03-Sep-1997:          V1.0 beta
  16. **       first beta release
  17. **    01-Nov-1997:          V1.1
  18. **       some minor changes
  19. **       new tags added
  20. **          PLA_SimpleGauge_BackgroundPen [ISG]
  21. **          PLA_SimpleGauge_BarPen        [ISG]
  22. **    05-Nov-1997:          V1.1.1
  23. **       enforcer hits removed
  24. **    15-Nov-1997:          V1.1.2
  25. **       object name changed to simplegauge_plugin
  26. **
  27. **
  28. */
  29.  
  30. OPT MODULE
  31. OPT PREPROCESS
  32.  
  33. ->#define lite_version
  34.  
  35. -> RST: Added conditional EASY_OS12 support
  36. #define EASY_OS12
  37.  
  38. #ifdef EASY_OS12
  39.   MODULE 'tools/easygui_os12','hybrid/tagdata','hybrid/version',
  40.          'hybrid/utility','hybrid/drawinfo'
  41.   #define GetTagData getTagData
  42.   #define GetScreenDrawInfo getScreenDrawInfo
  43.   #define FreeScreenDrawInfo freeScreenDrawInfo
  44. #endif
  45. #ifndef EASY_OS12
  46.   OPT OSVERSION=37
  47.   MODULE 'utility'
  48. #ifdef lite_version
  49.   MODULE 'tools/EasyGUI_lite'
  50. #endif
  51. #ifndef lite_version
  52.   MODULE 'tools/EasyGUI'
  53. #endif
  54. #endif
  55.  
  56. MODULE 'tools/textlen','tools/ghost',
  57.        'graphics/text','graphics/rastport',
  58.        'intuition/intuition','intuition/screens',
  59.        'utility/tagitem'
  60.  
  61.  
  62. EXPORT OBJECT simplegauge_plugin OF plugin
  63. PRIVATE
  64.    current
  65.    percent
  66.    oldvalue
  67.    max
  68.    horizontal
  69.    showtext
  70.    disabled
  71.  
  72.    shinepen
  73.    shadowpen
  74.    fillpen
  75.    backpen
  76.  
  77.    ta          : PTR TO textattr
  78. ENDOBJECT
  79.  
  80. -> TAG_USER  | PROG_ID<<16 | TAG_VALUE
  81. -> $80000000 |   $0002<<16 | 0...
  82.  
  83. EXPORT ENUM  PLA_SimpleGauge_Max=$80020001,
  84.              PLA_SimpleGauge_Current,
  85.              PLA_SimpleGauge_Horizontal,
  86.              PLA_SimpleGauge_Percent,
  87.              PLA_SimpleGauge_ShowText,
  88.              PLA_SimpleGauge_Disabled,
  89.              PLA_SimpleGauge_BackgroundPen,
  90.              PLA_SimpleGauge_BarPen
  91.  
  92.  
  93. ->-- Constructor/ Destructor ---------------------------------
  94.  
  95. ->>> simplegauge::simplegauge (Constructor)
  96. PROC simplegauge(tags:PTR TO tagitem) OF simplegauge_plugin
  97.  
  98.    self.gh:=0     -> because it's not initialized
  99.                   -> I need it to avoid drawing before gui is open
  100.  
  101. #ifdef EASY_OS12
  102.     openUtility()
  103. #endif
  104. #ifndef EASY_OS12
  105.    IF utilitybase:=OpenLibrary('utility.library', 37)
  106. #endif
  107.  
  108.       self.max       :=Max(1,GetTagData(PLA_SimpleGauge_Max, 100, tags))
  109.       self.current   :=self.set(PLA_SimpleGauge_Current, GetTagData(PLA_SimpleGauge_Current, 0, tags))
  110.       self.horizontal:=GetTagData(PLA_SimpleGauge_Horizontal, TRUE, tags)
  111.       self.showtext  :=GetTagData(PLA_SimpleGauge_ShowText, FALSE, tags)
  112.       self.disabled  :=GetTagData(PLA_SimpleGauge_Disabled, FALSE, tags)
  113.  
  114.       self.fillpen   :=GetTagData(PLA_SimpleGauge_BarPen, -1, tags)
  115.       self.backpen   :=GetTagData(PLA_SimpleGauge_BackgroundPen, -1, tags)
  116.  
  117.       -> initial settings
  118.       self.oldvalue  :=0
  119.       self.shinepen  :=2
  120.       self.shadowpen :=1
  121.  
  122. #ifdef EASY_OS12
  123.     closeUtility()
  124. #endif
  125. #ifndef EASY_OS12
  126.       CloseLibrary(utilitybase)
  127.    ELSE
  128.       Raise("UTIL")
  129.    ENDIF
  130. #endif
  131.  
  132. ENDPROC
  133. -><<
  134.  
  135. ->-- overridden methods --------------------------------------
  136.  
  137. ->>> simplegauge::will_resize
  138. PROC will_resize() OF simplegauge_plugin IS IF self.horizontal THEN RESIZEX ELSE RESIZEY
  139. -><<
  140.  
  141. ->>> simplegauge::min_size
  142. PROC min_size(ta:PTR TO textattr, fh) OF simplegauge_plugin
  143. DEF x
  144.    x:=IF self.showtext THEN textlen('100%', ta)+4 ELSE fh+6
  145. ENDPROC x,fh+6
  146. -><<
  147.  
  148. ->>> simplegauge::render
  149. PROC render(ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF simplegauge_plugin
  150. DEF oldwin, dri:PTR TO drawinfo
  151.  
  152.    self.ta :=ta
  153.  
  154.    IF dri:=GetScreenDrawInfo(win.wscreen)
  155.       self.shinepen :=dri.pens[SHINEPEN]
  156.       self.shadowpen:=dri.pens[SHADOWPEN]
  157.       IF self.fillpen=-1 THEN self.fillpen:=dri.pens[FILLPEN]
  158.       IF self.backpen=-1 THEN self.backpen:=dri.pens[BACKGROUNDPEN]
  159.       FreeScreenDrawInfo(win.wscreen, dri)
  160.    ENDIF
  161.  
  162.    oldwin:=self.gh.wnd  /* at this time wnd is 0 but it may change in a later version of easygui */
  163.    self.gh.wnd:=win
  164.    self.draw(TRUE)      /* full redraw */
  165.    self.gh.wnd:=oldwin
  166.  
  167. ENDPROC
  168. -><<
  169.  
  170. ->>> simplegauge::draw
  171. /* draws the full register */
  172. PROC draw(redraw=FALSE) OF simplegauge_plugin
  173. DEF rp:REG, left, top, right, bottom, width, height, lenght:REG, pixels,
  174.     str[6]:STRING, itext:PTR TO intuitext, textx, texty
  175.  
  176.    IF self.gh=0 THEN RETURN      /* ignore draw before gui is open */
  177.    IF self.gh.wnd=0 THEN RETURN  /* ignore draw when window is closed */
  178.  
  179.    rp    :=self.gh.wnd.rport
  180.    left  :=self.x
  181.    top   :=self.y
  182.    width :=self.xs
  183.    height:=self.ys
  184.    right :=left+width-1
  185.    bottom:=top+height-1
  186.  
  187.    IF redraw
  188.       SetAPen(rp, self.shadowpen)
  189.       RectFill(rp, left, top, left, bottom)
  190.       RectFill(rp, left, top, right, top)
  191.  
  192.       SetAPen(rp, self.shinepen)
  193.       RectFill(rp, right, top+1, right, bottom)
  194.       RectFill(rp, left+1, bottom, right, bottom)
  195.    ENDIF
  196.  
  197.    pixels:=IF self.horizontal THEN width-2 ELSE height-2
  198.    self.percent:=Div(Mul(self.current, 100), self.max)
  199.    lenght :=Div(Mul(self.current, pixels), self.max)
  200.  
  201.    IF ((self.oldvalue<>lenght) OR (lenght=0) OR (redraw))
  202.       top++; left++
  203.       right--; bottom--
  204.  
  205.       SetAPen(rp, self.backpen)
  206.  
  207.       -> RST: added IF ... stuff to avoid negative sized rects (older intuition did not clip!)
  208.       IF self.horizontal
  209.          IF lenght<>pixels THEN RectFill(rp, left+lenght, top, right, bottom)
  210.          SetAPen(rp, self.fillpen)
  211.          IF lenght THEN RectFill(rp, left, top, left+lenght-1, bottom)
  212.       ELSE
  213.          IF lenght<>pixels THEN RectFill(rp, left, top, right, bottom-lenght)
  214.          SetAPen(rp, self.fillpen)
  215.          IF lenght THEN RectFill(rp, left, bottom-lenght+1, right, bottom)
  216.       ENDIF
  217.  
  218.       IF self.showtext
  219.          StringF(str, '\d%', self.percent)
  220.          itext:=[self.shinepen, 0, RP_JAM1, 0, 0, self.ta, str, NIL]:intuitext
  221.          texty:=top+((height-self.ta.ysize)/2)-1
  222.          textx:=left+((width-IntuiTextLength(itext))/2)-1
  223.  
  224.          itext.leftedge:=textx
  225.          itext.topedge :=texty
  226.  
  227.          PrintIText(rp, itext, 0, 0)
  228.       ENDIF
  229.  
  230.    ENDIF
  231.  
  232.    self.oldvalue:=lenght
  233.  
  234.    IF self.disabled THEN ghost(self.gh.wnd, left, top, width-1, height-1)
  235.  
  236. ENDPROC
  237. -><<
  238.  
  239. ->-- new methods ---------------------------------------------
  240.  
  241. ->>> simplegauge::set
  242. PROC set(attr, value) OF simplegauge_plugin
  243.  
  244.    SELECT attr
  245.       CASE PLA_SimpleGauge_Current
  246.          self.current:=Bounds(value, 0, self.max)
  247.          self.draw()
  248.       CASE PLA_SimpleGauge_Max
  249.          IF value>0 THEN self.max:=value
  250.          IF self.current>value THEN self.current:=value
  251.          self.draw()
  252.       CASE PLA_SimpleGauge_Disabled
  253.          self.disabled:=value
  254.          IF value=TRUE
  255.             IF self.gh<>0           /* ignore draw before gui is open */
  256.                IF self.gh.wnd<>0    /* ignore draw when window is closed */
  257.                   -> RST: removed -1 from self.xs-1, self.ys-1
  258.                   ghost(self.gh.wnd, self.x, self.y, self.xs, self.ys)
  259.                ENDIF
  260.             ENDIF
  261.          ELSE
  262.             self.draw(TRUE)
  263.          ENDIF
  264.       CASE PLA_SimpleGauge_BackgroundPen
  265.          IF (value>=0) AND (value<>self.backpen)
  266.             self.backpen:=value
  267.             self.draw(TRUE)
  268.          ENDIF
  269.       CASE PLA_SimpleGauge_BarPen
  270.          IF (value>=0) AND (value<>self.fillpen)
  271.             self.fillpen:=value
  272.             self.draw(TRUE)
  273.          ENDIF
  274.    ENDSELECT
  275.  
  276. ENDPROC
  277. -><<
  278.  
  279. ->>> simplegauge::get
  280. PROC get(attr) OF simplegauge_plugin
  281.  
  282.    SELECT attr
  283.       CASE PLA_SimpleGauge_Max
  284.          RETURN self.max, TRUE
  285.       CASE PLA_SimpleGauge_Current
  286.          RETURN self.current, TRUE
  287.       CASE PLA_SimpleGauge_Percent
  288.          RETURN self.percent, TRUE
  289.       CASE PLA_SimpleGauge_Horizontal
  290.          RETURN self.horizontal, TRUE
  291.       CASE PLA_SimpleGauge_Disabled
  292.          RETURN self.disabled, TRUE
  293.       CASE PLA_SimpleGauge_BackgroundPen
  294.          RETURN self.backpen, TRUE
  295.       CASE PLA_SimpleGauge_BarPen
  296.          RETURN self.fillpen, TRUE
  297.    ENDSELECT
  298.  
  299. ENDPROC -1, FALSE
  300. -><<
  301.  
  302.