home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _e8671967a2a5c5dc12c39f1e210f3471 < prev    next >
Text File  |  2000-03-23  |  8KB  |  239 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>perl - very old suspect documentation on porting.</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> perl - very old suspect documentation on porting.</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  24. </UL>
  25. <!-- INDEX END -->
  26.  
  27. <HR>
  28. <P>
  29. <H1><A NAME="name">NAME</A></H1>
  30. <P>Tcl vs perl - very old suspect documentation on porting.</P>
  31. <P>
  32. <HR>
  33. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  34. <UL>
  35. <LI>Linux</LI>
  36. <LI>Solaris</LI>
  37. <LI>Windows</LI>
  38. </UL>
  39. <HR>
  40. <H1><A NAME="description">DESCRIPTION</A></H1>
  41. <P>This isn't really a .pod yet, nor is it Tcl vs perl
  42. it is a copy of John's comparison of Malcolm's original perl/Tk
  43. port with the current one. It is also out-of-date in places.</P>
  44. <PRE>
  45.   From: john@WPI.EDU (John Stoffel )</PRE>
  46. <PRE>
  47.   Here are some thoughts on the new Tk extension and how I think the
  48.   organization of the commands looks.  Mostly, I'm happy with it, it
  49.   makes some things more organized and more consistent with tcl/tk, but
  50.   since the overlying language is so different, I don't think we need to
  51.   follow exactly the tcl/tk model for how to call the language.</PRE>
  52. <PRE>
  53.   The basic structure of the Tk program is:</PRE>
  54. <PRE>
  55.       require Tk;</PRE>
  56. <PRE>
  57.       $top = MainWindow->new();</PRE>
  58. <PRE>
  59.       #
  60.       # create widgets
  61.       #</PRE>
  62. <PRE>
  63.       Tk::MainLoop;</PRE>
  64. <PRE>
  65.       sub method1 {
  66.       }</PRE>
  67. <PRE>
  68.       sub methodN {
  69.       }</PRE>
  70. <PRE>
  71.   This is pretty much the same as tkperl5a5, with some cosmetic naming
  72.   changes, and some more useful command name and usage changes.  A quick
  73.   comparison in no particular order follows:</PRE>
  74. <PRE>
  75.   tkperl5a5                             Tk
  76.   -------------------------------       -----------------------------------
  77.   $top=tkinit(name,display,sync);       $top=MainWindow->new();</PRE>
  78. <PRE>
  79.   tkpack $w, ... ;              $w->pack(...)</PRE>
  80. <PRE>
  81.   $w = Class::new($top, ...);   $w = $top->Class(...);</PRE>
  82. <PRE>
  83.   tkmainloop;                   Tk::MainLoop;</PRE>
  84. <PRE>
  85.   tkbind($w,"<key>",sub);               $w->bind("<key>",sub);</PRE>
  86. <PRE>
  87.   tkdelete($w, ...);            $w->delete(...);</PRE>
  88. <PRE>
  89.   $w->scanmark(...);            $w->scan("mark", ...);</PRE>
  90. <PRE>
  91.   $w->scandragto(...);          $w->scan("dragto", ...);</PRE>
  92. <PRE>
  93.   $w->tkselect();                       $w->Select();</PRE>
  94. <PRE>
  95.   $w->selectadjust(...);                $w->selection("adjust", ...);</PRE>
  96. <PRE>
  97.   $w->selectto(...);            $w->selection("to", ...);</PRE>
  98. <PRE>
  99.   $w->selectfrom(...);          $w->selection("from", ...);</PRE>
  100. <PRE>
  101.   $w->tkindex(...);             $w->index(...);</PRE>
  102. <PRE>
  103.   tclcmd("xxx",...);              &Tk::xxx(...)    # all Tk commands, but no Tcl at all</PRE>
  104. <PRE>
  105.   tclcmd("winfo", xxx, $w, ...);  $w->xxx(...);</PRE>
  106. <PRE>
  107.                                 $w->mark(...);</PRE>
  108. <PRE>
  109.                                 $w->tag(...);</PRE>
  110. <PRE>
  111.   $w->grabstatus();             $w->grab("status");</PRE>
  112. <PRE>
  113.   $w->grabrelease(...);         $w->grab("release", ...);</PRE>
  114. <PRE>
  115.   focus($w);                    $w->focus;</PRE>
  116. <PRE>
  117.   update();                     Tk->update();</PRE>
  118. <PRE>
  119.   idletasks();                  Tk->update("idletasks");</PRE>
  120. <PRE>
  121.   wm("cmd",$w, ...);            $w->cmd(...);</PRE>
  122. <PRE>
  123.   destroy($w);                  $w->destroy();</PRE>
  124. <PRE>
  125.                                 Tk::option(...);
  126.                                   $w->OptionGet(name,Class)</PRE>
  127. <PRE>
  128.                                 $w->place(...)</PRE>
  129. <PRE>
  130.                                 Tk::property(...);</PRE>
  131. <PRE>
  132.   $w = Entry::new($parent,...)</PRE>
  133. <PRE>
  134.   is now</PRE>
  135. <PRE>
  136.   $w = $parent->Entry(...)</PRE>
  137. <PRE>
  138.   As this allows new to be inherited from a Window class.</PRE>
  139. <PRE>
  140.     -method=>x,-slave=>y</PRE>
  141. <PRE>
  142.    is now</PRE>
  143. <PRE>
  144.     -command => [x,y]</PRE>
  145. <PRE>
  146.   1st element of list is treated as "method" if y is an object reference.
  147.   (You can have -command => [a,b,c,d,e] too; b..e get passed as args).</PRE>
  148. <PRE>
  149.   Object references are now hashes rather than scalars and there
  150.   is only ever one such per window.  The Tcl_CmdInfo and PathName
  151.   are entries in the hash.</PRE>
  152. <PRE>
  153.   (This allows derived classes to
  154.   re-bless the hash and keep their on stuff in it too.)</PRE>
  155. <PRE>
  156.   Tk's "Tcl_Interp" is in fact a ref to "." window.
  157.   You can find all the Tk windows descended from it as their object
  158.   references get added (by PathName) into this hash.
  159.   $w->MainWindow returns this hash from any window.</PRE>
  160. <PRE>
  161.   I think that it should extend to multiple tkinits / Tk->news
  162.   with different Display's - if Tk code does.</PRE>
  163. <PRE>
  164.   Finally "bind" passes window as "extra" (or only)
  165.   argument. Thus</PRE>
  166. <PRE>
  167.   Tk::Button->bind(<Any-Enter>,"Enter");</PRE>
  168. <PRE>
  169.   Binds Enter events to Tk::Button::Enter by default
  170.   but gets called as $w->Enter so derived class of Button can just
  171.   define its own Enter method. &EvWref and associated globals and race
  172.   conditions are no longer needed.</PRE>
  173. <PRE>
  174.   One thing to beware of : commands bound to events with $widget->bind
  175.   follow same pattern, but get passed extra args :</PRE>
  176. <PRE>
  177.   $widget->bind(<Any-1>,[sub {print shift}, $one, $two ]);</PRE>
  178. <PRE>
  179.   When sub gets called it has :</PRE>
  180. <PRE>
  181.      $widget $one $two</PRE>
  182. <PRE>
  183.   passed.</PRE>
  184. <PRE>
  185.   1st extra arg is reference to the per-widget hash that serves as the
  186.   perl object for the widget.</PRE>
  187. <PRE>
  188.   Every time an XEvent a reference to a special class is placed
  189.   in the widget hash. It can be retrieved by $w->XEvent method.</PRE>
  190. <PRE>
  191.   The methods of the XEvent class are the
  192.   Tcl/Tk % special characters.</PRE>
  193. <PRE>
  194.   Thus:</PRE>
  195. <PRE>
  196.   $widget->bind(<Any-KeyPress>,
  197.                 sub {
  198.                  my $w = shift;
  199.                  my $e = $w->XEvent;
  200.                  print $w->PathName," ",$e->A," pressed ,$e->xy,"\n");
  201.                 });</PRE>
  202. <PRE>
  203.   XEvent->xy is a special case which returns "@" . $e->x . "," . $e->y
  204.   which is common in Text package.</PRE>
  205. <PRE>
  206.   Because of passing a blessed widget hash to "bound" subs they can be
  207.   bound to (possibly inherited) methods of the widget's class:</PRE>
  208. <PRE>
  209.   Class->bind(<Any-Down>,Down);</PRE>
  210. <PRE>
  211.   sub Class::Down
  212.   {
  213.    my $w = shift;
  214.    # handle down arrow
  215.   }</PRE>
  216. <PRE>
  217.   Also:</PRE>
  218. <PRE>
  219.   -command and friends can take a list the 1st element can be a ref to
  220.   as sub or a method name. Remaining elements are passed as args to the
  221.   sub at "invoke" time. Thus :</PRE>
  222. <PRE>
  223.   $b= $w->Button(blah blah, '-command' => [sub{print shift} , $fred ]);</PRE>
  224. <PRE>
  225.   Should do the trick, provided $fred is defined at time of button creation.</PRE>
  226. <PRE>
  227.   Thus 1st element of list is equivalent to Malcolm's -method and second
  228.   would be his -slave.  Any further elements are a bonus and avoid
  229.   having to pass ref to an array/hash as a slave.</PRE>
  230. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  231. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  232. <STRONG><P CLASS=block> perl - very old suspect documentation on porting.</P></STRONG>
  233. </TD></TR>
  234. </TABLE>
  235.  
  236. </BODY>
  237.  
  238. </HTML>
  239.