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

  1. OPT MODULE
  2. OPT PREPROCESS
  3.  
  4. -> RST: Added conditional EASY_OS12 support
  5. #define EASY_OS12
  6.  
  7. #ifdef EASY_OS12
  8.   MODULE 'tools/easygui_os12','hybrid/tagdata'
  9.   #define GetTagData getTagData
  10. #endif
  11. #ifndef EASY_OS12
  12.   OPT OSVERSION=37
  13.   MODULE 'tools/easygui','utility'
  14. #endif
  15.  
  16. MODULE 'gadtools', 'libraries/gadtools', 'devices/inputevent',
  17.        'intuition/gadgetclass', 'intuition/intuition', 'utility/tagitem',
  18.        'tools/textlen', 'tools/ctype', 'exec/nodes',
  19.        'exec/lists'
  20.  
  21. ->define DCLIST to make EasyGUI's gadget list more readable!
  22. EXPORT CONST DCLIST=PLUGIN
  23.  
  24. EXPORT ENUM DCLV_LABEL=$FF000001,            -> [I..]
  25.   DCLV_RELX,                                 -> [I..]
  26.   DCLV_RELY,                                 -> [I..]
  27.   DCLV_LIST,                                 -> [ISG]
  28.   DCLV_CURRENT,                              -> [ISG]
  29.   DCLV_CLICK,                                -> [..G]
  30.   DCLV_TOP,                                  -> [ISG]
  31.   DCLV_DISABLED                              -> [ISG]
  32.  
  33. EXPORT OBJECT dclistview OF plugin PRIVATE
  34.   disabled
  35.   current
  36.   top
  37.   clicked
  38.   listview:PTR TO gadget
  39.   label
  40.   labelhi
  41.   relx, rely
  42.   execlist
  43.   maxnode
  44.   key
  45.   second1, micros1
  46.   second2, micros2
  47. ENDOBJECT
  48.  
  49. PROC dclistview(tags:PTR TO tagitem) OF dclistview
  50. DEF key,label
  51. #ifndef EASY_OS12
  52.   IF utilitybase
  53. #endif
  54.     self.label:=      GetTagData(DCLV_LABEL,     NIL, tags)
  55.     self.relx :=  Max(GetTagData(DCLV_RELX,        5, tags), 5)
  56.     self.rely :=  Max(GetTagData(DCLV_RELY,        5, tags), 2)
  57.     self.execlist:=   GetTagData(DCLV_LIST,      NIL, tags)
  58.     self.maxnode:=    max_node(self.execlist)
  59.     self.current:=Max(GetTagData(DCLV_CURRENT,   NIL, tags), -1)
  60.     self.top:=    Max(GetTagData(DCLV_TOP,       NIL, tags),0)
  61.     self.disabled:=   GetTagData(DCLV_DISABLED,FALSE, tags)
  62.     IF label:=self.label
  63.       self.key:= IF (key:=InStr(label, '_'))<>-1 THEN tolower(label[key+1]) ELSE NIL
  64.       self.key:= IF isalpha(self.key) THEN self.key ELSE NIL
  65.     ENDIF
  66.     self.second1:=NIL
  67.     self.second2:=NIL
  68.     self.micros1:=NIL
  69.     self.micros2:=NIL
  70. #ifndef EASY_OS12
  71.   ELSE
  72.     Raise("util")
  73.   ENDIF
  74. #endif
  75. ENDPROC
  76.  
  77. PROC end() OF dclistview IS EMPTY
  78.  
  79. PROC min_size(ta,fh) OF dclistview
  80.   self.labelhi:=IF self.label THEN fh+5 ELSE 0
  81. ENDPROC Max(textlen_key(self.label,ta,self.key),self.relx*fh), self.rely*fh+self.labelhi+5
  82.  
  83. PROC will_resize() OF dclistview IS (RESIZEX OR RESIZEY)
  84.  
  85. PROC gtrender(gl,vis,ta,x,y,xs,ys,w) OF dclistview HANDLE
  86.   self.listview:=CreateGadgetA(LISTVIEW_KIND,gl,
  87.                  [x,y+self.labelhi,xs,ys-self.labelhi,self.label,
  88.                      ta,0,0,vis,NIL]:newgadget,
  89.                  [GTLV_LABELS, self.execlist,
  90.                   GA_DISABLED, self.disabled,
  91.                   IF self.key THEN GT_UNDERSCORE ELSE TAG_IGNORE, "_",
  92.                   GTLV_SHOWSELECTED, NIL,
  93.                   GTLV_SELECTED, self.current,
  94.                   GTLV_TOP, self.top,
  95.                   TAG_DONE])
  96.   IF self.listview=NIL THEN Raise("dclv")
  97. EXCEPT DO
  98.   ReThrow()
  99. ENDPROC self.listview
  100.  
  101. PROC message_test(imsg:PTR TO intuimessage,win:PTR TO window) OF dclistview
  102. DEF islist=FALSE
  103. IF ((imsg.class=IDCMP_VANILLAKEY) AND Not(self.disabled)) THEN RETURN (self.key=tolower(imsg.code))
  104. IF (imsg.class=IDCMP_GADGETUP)
  105.   IF islist:= (imsg.iaddress=self.listview)
  106.     self.second2:=imsg.seconds
  107.     self.micros2:=imsg.micros
  108.   ENDIF
  109. ENDIF
  110. ENDPROC islist
  111.  
  112. PROC message_action(class,qual,code,win:PTR TO window) OF dclistview
  113. DEF newcurrent
  114. SELECT class
  115.   CASE IDCMP_VANILLAKEY
  116.     IF (qual AND (IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT))
  117.       newcurrent:=Max(self.current-1, 0)
  118.     ELSE
  119.       newcurrent:=Min(self.current+1, self.maxnode)
  120.     ENDIF
  121.     IF newcurrent=self.current THEN RETURN FALSE ELSE self.current:=newcurrent
  122.     self.set(DCLV_CURRENT, self.current)
  123.   CASE IDCMP_GADGETUP
  124.     IF code=self.current
  125.       self.clicked:=(IF self.clicked THEN FALSE ELSE DoubleClick(self.second1,self.micros1,self.second2,self.micros2))
  126.     ELSE
  127.       self.current:=code
  128.     ENDIF
  129. ENDSELECT
  130.   self.second1:=self.second2
  131.   self.micros1:=self.micros2
  132.   self.second2:=NIL
  133.   self.micros2:=NIL
  134. ENDPROC TRUE
  135.  
  136. PROC set(attr, val) OF dclistview
  137.   SELECT attr
  138.     CASE DCLV_DISABLED
  139.       IF KickVersion(39)
  140.         IF self.disabled<>val
  141.           self.disabled:=val
  142.           IF visible(self) THEN
  143.             Gt_SetGadgetAttrsA(self.listview,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  144.           self.clicked:=FALSE
  145.         ENDIF
  146.       ENDIF
  147.     CASE DCLV_LIST
  148.       self.maxnode:=max_node(val)
  149.       IF visible(self) THEN
  150.         Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL, [GTLV_LABELS, val, TAG_DONE])
  151.       self.execlist:=val
  152.       self.clicked:=FALSE
  153.     CASE DCLV_TOP
  154.       self.top:=Bounds(val,0,self.maxnode)
  155.       IF visible(self) THEN
  156.         Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL, [GTLV_TOP, self.top, TAG_DONE])
  157.     CASE DCLV_CURRENT
  158.       self.current:= Bounds(val,-1,self.maxnode)
  159.       IF visible(self) THEN
  160.         Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL, [GTLV_SELECTED, self.current,
  161.                                                              IF KickVersion(39) THEN GTLV_MAKEVISIBLE ELSE GTLV_TOP, Max(val,0),
  162.                                                              TAG_DONE])
  163.       self.clicked:=FALSE
  164.       RETURN self.current
  165.   ENDSELECT
  166. ENDPROC
  167.  
  168. PROC get(attr) OF dclistview
  169.   SELECT attr
  170.     CASE DCLV_LIST;     RETURN self.execlist, TRUE
  171.     CASE DCLV_CURRENT;  RETURN self.current, TRUE
  172.     CASE DCLV_TOP;      RETURN self.top, TRUE
  173.     CASE DCLV_CLICK;    RETURN self.clicked, TRUE
  174.     CASE DCLV_DISABLED; RETURN self.disabled, TRUE
  175.   ENDSELECT
  176. ENDPROC -1, FALSE
  177.  
  178. PROC visible(self:PTR TO dclistview) IS (self.listview AND self.gh.wnd)
  179.  
  180. PROC max_node(list:PTR TO lh)
  181. DEF node:PTR TO ln, i=NIL
  182.   IF list>0
  183.     node:=list.head
  184.     WHILE node:=node.succ DO INC i
  185.   ENDIF
  186. ENDPROC i
  187.  
  188.