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

  1.  
  2. /*
  3.  
  4.     $VER: popmisc_plugin 1.1 (25.2.98)
  5.  
  6.     Author:         Ali Graham ($01)
  7.                     <agraham@hal9000.net.au>
  8.  
  9.     PLUGIN id:      $06
  10.  
  11.     Desc.:          Pop-up a listview containing various system entities.
  12.  
  13.     Tags:           PLA_PopMisc_ButtonText                      [ISG]
  14.                     PLA_PopMisc_StringText                      [ISG]
  15.                     PLA_PopMisc_CaseSensitive                   [ISG]
  16.                     PLA_PopMisc_RemoveDuplicates                [ISG]
  17.                     PLA_PopMisc_ListType                        [I..]
  18.                     PLA_PopMisc_ListViewX                       [I..]
  19.                     PLA_PopMisc_ListViewY                       [I..]
  20.                     PLA_PopMisc_Disabled                        [ISG]
  21.  
  22.     Values:         PLV_PopMisc_TasksList
  23.                     PLV_PopMisc_PortsList
  24.                     PLV_PopMisc_LibrariesList
  25.                     PLV_PopMisc_DevicesList
  26.                     PLV_PopMisc_ResourcesList
  27.                     PLV_PopMisc_MemNodesList
  28.  
  29. */
  30.  
  31. OPT MODULE
  32. OPT PREPROCESS, NOWARN
  33.  
  34. -> RST: Added conditional EASY_OS12 support
  35. #define EASY_OS12
  36.  
  37. #ifdef EASY_OS12
  38.   MODULE 'tools/easygui_os12', 'easyplugins/dclistview_os12','hybrid/tagdata','hybrid/strcmp'
  39.   #define GetTagData getTagData
  40.   #define Stricmp stricmp
  41.   #define Strnicmp strnicmp
  42. #endif
  43. #ifndef EASY_OS12
  44.   OPT OSVERSION=37
  45.   MODULE 'tools/easygui', 'easyplugins/dclistview', 'utility'
  46. #endif
  47.  
  48. ->> popmisc_plugin: modules
  49.  
  50. MODULE 'intuition/intuition',
  51.        'graphics/text', 'intuition/gadgetclass',
  52.        'gadtools', 'libraries/gadtools',
  53.        'utility/tagitem',
  54.        'tools/textlen'
  55.  
  56. MODULE 'exec/nodes', 'exec/execbase', 'exec/lists',
  57.        'exec/ports', 'exec/tasks', 'amigalib/lists'
  58.  
  59. -><
  60.  
  61. ->> popmisc_plugin: definitions
  62.  
  63. CONST NAME_LENGTH=64
  64.  
  65. EXPORT OBJECT popmisc_plugin OF plugin PRIVATE
  66.  
  67.     but_contents:PTR TO CHAR
  68.     str_contents[NAME_LENGTH]:ARRAY OF CHAR
  69.     case_sensitive
  70.     remove_duplicates
  71.     list_type
  72.     listview_x, listview_y
  73.     disabled
  74.  
  75.     but_width
  76.  
  77.     gad_str:PTR TO gadget
  78.     gad_but:PTR TO gadget
  79.  
  80.     font:PTR TO textattr
  81.  
  82.     iaddress
  83.  
  84.     list:PTR TO mlh
  85.  
  86. ENDOBJECT
  87.  
  88. OBJECT pm_node OF ln
  89.  
  90.     pm_name[NAME_LENGTH]:ARRAY OF CHAR
  91.  
  92. ENDOBJECT
  93.  
  94. -> PROGRAMMER_ID | MODULE_ID
  95. ->      $01      |   $06
  96.  
  97.  
  98. EXPORT ENUM PLA_PopMisc_ButtonText=$81006001,   ->[ISG]
  99.             PLA_PopMisc_StringText,             ->[ISG]
  100.             PLA_PopMisc_CaseSensitive,          ->[ISG]
  101.             PLA_PopMisc_RemoveDuplicates,       ->[ISG]
  102.             PLA_PopMisc_ListType,               ->[I..]
  103.             PLA_PopMisc_ListViewX,              ->[I..]
  104.             PLA_PopMisc_ListViewY,              ->[I..]
  105.             PLA_PopMisc_Disabled                ->[ISG]
  106.  
  107. EXPORT ENUM PLV_PopMisc_TasksList=0,
  108.             PLV_PopMisc_PortsList,
  109.             PLV_PopMisc_LibrariesList,
  110.             PLV_PopMisc_DevicesList,
  111.             PLV_PopMisc_ResourcesList,
  112.             PLV_PopMisc_MemNodesList
  113.  
  114. -><
  115.  
  116. /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
  117.  
  118. ->> popmisc_plugin: popmisc() & end()
  119.  
  120. PROC popmisc(tags=NIL:PTR TO tagitem) OF popmisc_plugin
  121.  
  122.     DEF name:PTR TO CHAR, type
  123.  
  124. #ifndef EASY_OS12
  125.     IF utilitybase
  126. #endif
  127.  
  128.         self.list_type      := GetTagData(PLA_PopMisc_ListType, PLV_PopMisc_TasksList, tags)
  129.  
  130.         type:=self.list_type
  131.  
  132.         SELECT type
  133.  
  134.             CASE PLV_PopMisc_TasksList;         name:='Task...'
  135.             CASE PLV_PopMisc_PortsList;         name:='Port...'
  136.             CASE PLV_PopMisc_LibrariesList;     name:='Library...'
  137.             CASE PLV_PopMisc_DevicesList;       name:='Device...'
  138.             CASE PLV_PopMisc_ResourcesList;     name:='Resource...'
  139.             CASE PLV_PopMisc_MemNodesList;      name:='MemNode...'
  140.  
  141.             DEFAULT;                            Raise("baty")
  142.  
  143.         ENDSELECT
  144.  
  145.         self.but_contents   := GetTagData(PLA_PopMisc_ButtonText, name, tags)
  146.  
  147.         AstrCopy(self.str_contents, GetTagData(PLA_PopMisc_StringText, '', tags))
  148.  
  149.         self.case_sensitive     := GetTagData(PLA_PopMisc_CaseSensitive, FALSE, tags)
  150.         self.remove_duplicates  := GetTagData(PLA_PopMisc_RemoveDuplicates, TRUE, tags)
  151.  
  152.         self.listview_x     := GetTagData(PLA_PopMisc_ListViewX, 15, tags)
  153.         self.listview_y     := GetTagData(PLA_PopMisc_ListViewY, 6, tags)
  154.  
  155.         self.disabled       := GetTagData(PLA_PopMisc_Disabled, FALSE, tags)
  156.  
  157. #ifndef EASY_OS12
  158.     ELSE
  159.  
  160.         Raise("util")
  161.  
  162.     ENDIF
  163. #endif
  164.  
  165.     NEW self.list
  166.  
  167.     newList(self.list)
  168.  
  169. ENDPROC
  170.  
  171. PROC end() OF popmisc_plugin
  172.  
  173.     popmisc_private_clear(self)
  174.  
  175.     END self.list
  176.  
  177. ENDPROC
  178. -><
  179.  
  180. ->> popmisc_plugin: set() & get()
  181.  
  182. PROC set(attr, value) OF popmisc_plugin
  183.  
  184.     SELECT attr
  185.  
  186.         CASE PLA_PopMisc_ButtonText
  187.  
  188.             IF self.but_contents<>value
  189.  
  190.                 self.but_contents:=value
  191.  
  192.                 IF self.gad_but AND self.gh.wnd
  193.  
  194.                     Gt_SetGadgetAttrsA(self.gad_but, self.gh.wnd, NIL, [GA_TEXT, self.but_contents, TAG_DONE])
  195.  
  196.                 ENDIF
  197.  
  198.             ENDIF
  199.  
  200.         CASE PLA_PopMisc_StringText
  201.  
  202.             IF self.str_contents<>value
  203.  
  204.                 AstrCopy(self.str_contents, value)
  205.  
  206.                 IF self.gad_str AND self.gh.wnd
  207.  
  208.                     Gt_SetGadgetAttrsA(self.gad_str, self.gh.wnd, NIL, [GTST_STRING, self.str_contents, TAG_DONE])
  209.  
  210.                 ENDIF
  211.  
  212.             ENDIF
  213.  
  214.         CASE PLA_PopMisc_CaseSensitive
  215.  
  216.             IF self.case_sensitive<>value THEN self.case_sensitive:=value
  217.  
  218.         CASE PLA_PopMisc_RemoveDuplicates
  219.  
  220.             IF self.remove_duplicates<>value THEN self.remove_duplicates:=value
  221.  
  222.         CASE PLA_PopMisc_Disabled
  223.  
  224.             IF self.disabled<>value
  225.  
  226.                 self.disabled:=value
  227.  
  228.                 IF ((self.gad_str AND self.gad_but) AND self.gh.wnd)
  229.  
  230.                     Gt_SetGadgetAttrsA(self.gad_but, self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
  231.                     Gt_SetGadgetAttrsA(self.gad_str, self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
  232.  
  233.                 ENDIF
  234.  
  235.             ENDIF
  236.  
  237.     ENDSELECT
  238.  
  239. ENDPROC
  240.  
  241. PROC get(attr) OF popmisc_plugin
  242.  
  243.     SELECT attr
  244.  
  245.         CASE PLA_PopMisc_ButtonText;       RETURN self.but_contents, TRUE
  246.         CASE PLA_PopMisc_StringText;       RETURN self.str_contents, TRUE
  247.         CASE PLA_PopMisc_CaseSensitive;    RETURN self.case_sensitive, TRUE
  248.         CASE PLA_PopMisc_RemoveDuplicates; RETURN self.remove_duplicates, TRUE
  249.         CASE PLA_PopMisc_Disabled;         RETURN self.disabled, TRUE
  250.  
  251.     ENDSELECT
  252.  
  253. ENDPROC -1, FALSE
  254. -><
  255.  
  256. /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
  257.  
  258. ->> popmisc_plugin: min_size() & will_resize()
  259. PROC min_size(ta:PTR TO textattr, fh) OF popmisc_plugin
  260.  
  261.    self.but_width:=textlen(self.but_contents,ta)+8
  262.  
  263. ENDPROC (self.but_width+(fh*8)),(fh+6)
  264.  
  265. PROC will_resize() OF popmisc_plugin IS RESIZEX
  266. -><
  267.  
  268. ->> popmisc_plugin: gtrender() & clear_render()
  269. PROC gtrender(gl, vis, ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF popmisc_plugin
  270.  
  271.     self.font:=ta
  272.  
  273.     self.gad_but:=CreateGadgetA(BUTTON_KIND, gl,
  274.                                 [x, y, self.but_width, ys, self.but_contents, ta, 1, 0, vis, 0]:newgadget,
  275.                                 [GA_DISABLED, self.disabled, TAG_DONE])
  276.  
  277.     self.gad_str:=CreateGadgetA(STRING_KIND, self.gad_but,
  278.                                 [x+self.but_width+1, y, xs-self.but_width, ys, NIL, ta, 2, 0, vis, 0]:newgadget,
  279.                                 [GA_DISABLED, self.disabled,
  280.                                  GTST_MAXCHARS, NAME_LENGTH,
  281.                                  GTST_STRING, self.str_contents,
  282.                                  TAG_DONE])
  283.  
  284. ENDPROC self.gad_str
  285.  
  286. PROC clear_render(win:PTR TO window) OF popmisc_plugin
  287.  
  288.     IF self.gad_str THEN AstrCopy(self.str_contents, self.gad_str.specialinfo::stringinfo.buffer)
  289.  
  290. ENDPROC
  291.  
  292. -><
  293.  
  294. ->> popmisc_plugin: message_test() & message_action()
  295. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF popmisc_plugin
  296.  
  297.     IF imsg.class=IDCMP_GADGETUP
  298.  
  299.         self.iaddress:=imsg.iaddress
  300.  
  301.         RETURN (imsg.iaddress=self.gad_but) OR (imsg.iaddress=self.gad_str)
  302.  
  303.     ENDIF
  304.  
  305. ENDPROC FALSE
  306.  
  307. PROC message_action(class, qual, code, win:PTR TO window) OF popmisc_plugin
  308.  
  309.     DEF exec:PTR TO execbase, dclv:PTR TO dclistview, type,
  310.         fnode:PTR TO pm_node, node:PTR TO pm_node, sel, a,
  311.         found=FALSE
  312.  
  313.     IF self.iaddress=self.gad_but
  314.  
  315.         exec:=execbase; type:=self.list_type
  316.  
  317.         Disable()
  318.  
  319.         SELECT type
  320.  
  321.             CASE PLV_PopMisc_TasksList
  322.  
  323.                 popmisc_private_snapshot(self, exec.taskwait.head)
  324.                 popmisc_private_snapshot(self, exec.taskready.head)
  325.  
  326.             CASE PLV_PopMisc_PortsList
  327.  
  328.                 popmisc_private_snapshot(self, exec.portlist.head)
  329.  
  330.             CASE PLV_PopMisc_LibrariesList
  331.  
  332.                 popmisc_private_snapshot(self, exec.liblist.head)
  333.  
  334.             CASE PLV_PopMisc_DevicesList
  335.  
  336.                 popmisc_private_snapshot(self, exec.devicelist.head)
  337.  
  338.             CASE PLV_PopMisc_ResourcesList
  339.  
  340.                 popmisc_private_snapshot(self, exec.resourcelist.head)
  341.  
  342.             CASE PLV_PopMisc_MemNodesList
  343.  
  344.                 popmisc_private_snapshot(self, exec.memlist.head)
  345.  
  346.         ENDSELECT
  347.  
  348.         Enable()
  349.  
  350.         blockwin(self.gh)
  351.  
  352.         IF fnode:=FindName(self.list, self.str_contents)
  353.  
  354.             node:=self.list.head; a:=0
  355.  
  356.             WHILE (node<>NIL) AND (found=FALSE)
  357.  
  358.                 IF fnode=node;  found:=TRUE
  359.                 ELSE;           node:=node.succ; a:=a+1
  360.                 ENDIF
  361.  
  362.             ENDWHILE
  363.  
  364.         ENDIF
  365.  
  366.         NEW dclv.dclistview([DCLV_RELX,    self.listview_x,
  367.                             DCLV_RELY,     self.listview_y,
  368.                             DCLV_LIST,     self.list,
  369.                             DCLV_CURRENT,  (IF fnode THEN a ELSE -1),
  370.                             DCLV_TOP,      (IF fnode THEN a ELSE 0),
  371.                             TAG_DONE])
  372.  
  373.         easyguiA(NIL, [DCLIST, {popmisc_private_listclick}, dclv, TRUE],
  374.                       [EG_WTYPE,  WTYPE_NOBORDER,
  375.                        EG_SCRN,   win.wscreen,
  376.                        EG_FONT,   self.font,
  377.                        EG_LEFT,   (win.leftedge + self.x),
  378.                        EG_TOP,    (win.topedge + self.y + self.ys),
  379.                        TAG_DONE])
  380.  
  381.         sel:=dclv.get(DCLV_CURRENT)
  382.  
  383.         END dclv
  384.  
  385.         node:=self.list.head; a:=0
  386.  
  387.         WHILE node AND (a<sel)
  388.  
  389.             node:=node.succ; a:=a+1
  390.  
  391.         ENDWHILE
  392.  
  393.         IF node THEN self.set(PLA_PopMisc_StringText, node.pm_name)
  394.  
  395.         popmisc_private_clear(self)
  396.  
  397.         unblockwin(self.gh)
  398.  
  399.     ELSEIF self.iaddress=self.gad_str
  400.  
  401.         AstrCopy(self.str_contents, self.gad_str.specialinfo::stringinfo.buffer)
  402.  
  403.     ENDIF
  404.  
  405.     self.iaddress:=NIL
  406.  
  407. ENDPROC TRUE
  408. -><
  409.  
  410. /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
  411.  
  412. ->> PRIVATE: clear(), snapshot() & compare()
  413. PROC popmisc_private_clear(pt:PTR TO popmisc_plugin)
  414.  
  415.     DEF node:PTR TO pm_node, tnode:PTR TO pm_node
  416.  
  417.     node:=pt.list.head
  418.  
  419.     WHILE tnode:=node.succ
  420.  
  421.         END node; node:=tnode
  422.  
  423.     ENDWHILE
  424.  
  425.     newList(pt.list)
  426.  
  427. ENDPROC
  428.  
  429. PROC popmisc_private_snapshot(pt:PTR TO popmisc_plugin, src_node:PTR TO ln)
  430.  
  431.   DEF tnode:PTR TO pm_node, node:PTR TO pm_node,
  432.       inserting, result
  433.  
  434.     WHILE src_node.succ
  435.  
  436.         NEW tnode
  437.  
  438.         AstrCopy(tnode.pm_name, src_node.name, NAME_LENGTH)
  439.         tnode.name:=tnode.pm_name
  440.  
  441.         node:=pt.list.head
  442.  
  443.         IF (popmisc_private_compare(pt, node.pm_name, tnode.pm_name)>0)
  444.  
  445.             AddHead(pt.list, tnode)
  446.  
  447.         ELSE
  448.  
  449.             inserting:=TRUE
  450.  
  451.             WHILE node.succ AND inserting
  452.  
  453.                 node:=node.succ
  454.  
  455.                 result:=popmisc_private_compare(pt, node.pm_name, tnode.pm_name)
  456.  
  457.                 IF (result=0) AND pt.remove_duplicates
  458.  
  459.                     inserting:=FALSE
  460.  
  461.                 ELSEIF (result>0)
  462.  
  463.                     Insert(pt.list, tnode, node.pred)
  464.  
  465.                     inserting:=FALSE
  466.  
  467.                 ENDIF
  468.  
  469.             ENDWHILE
  470.  
  471.             IF inserting=TRUE THEN AddTail(pt.list, tnode)
  472.  
  473.         ENDIF
  474.  
  475.         src_node:=src_node.succ
  476.  
  477.     ENDWHILE
  478.  
  479. ENDPROC
  480.  
  481. PROC popmisc_private_compare(pt:PTR TO popmisc_plugin, s:PTR TO CHAR, t:PTR TO CHAR)
  482.  
  483. ENDPROC (IF pt.case_sensitive THEN Stricmp(s, t) ELSE Strnicmp(s, t, NAME_LENGTH))
  484. -><
  485.  
  486. /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
  487.  
  488. ->> PRIVATE: listclick()
  489.  
  490. PROC popmisc_private_listclick(gh:PTR TO guihandle, dclv:PTR TO dclistview)
  491.  
  492.     DEF bool=FALSE, valid=FALSE
  493.  
  494.     bool, valid:=dclv.get(DCLV_CLICK)
  495.  
  496.     IF bool AND valid THEN quitgui()
  497.  
  498. ENDPROC
  499.  
  500. -><
  501.  
  502. /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
  503.  
  504.