home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _b82174e2ae0979043c7fe6a40199bb8b < prev    next >
Encoding:
Text File  |  2004-06-01  |  4.6 KB  |  229 lines

  1. package Tk::Tree;
  2. # Tree -- TixTree widget
  3. #
  4. # Derived from Tree.tcl in Tix 4.1
  5. #
  6. # Chris Dean <ctdean@cogit.com>
  7.  
  8. use vars qw($VERSION);
  9. $VERSION = '4.005'; # $Id: //depot/Tkutf8/Tixish/Tree.pm#5 $
  10.  
  11. use Tk ();
  12. use Tk::Derived;
  13. use Tk::HList;
  14. use base  qw(Tk::Derived Tk::HList);
  15. use strict;
  16.  
  17. Construct Tk::Widget 'Tree';
  18.  
  19. sub Tk::Widget::ScrlTree { shift->Scrolled('Tree' => @_) }
  20.  
  21. sub Populate
  22. {
  23.  my( $w, $args ) = @_;
  24.  
  25.  $w->SUPER::Populate( $args );
  26.  
  27.  $w->ConfigSpecs(
  28.         -ignoreinvoke => ['PASSIVE',  'ignoreInvoke', 'IgnoreInvoke', 0],
  29.         -opencmd      => ['CALLBACK', 'openCmd',      'OpenCmd', 'OpenCmd' ],
  30.         -indicatorcmd => ['CALLBACK', 'indicatorCmd', 'IndicatorCmd', 'IndicatorCmd'],
  31.         -closecmd     => ['CALLBACK', 'closeCmd',     'CloseCmd', 'CloseCmd'],
  32.         -indicator    => ['SELF', 'indicator', 'Indicator', 1],
  33.         -indent       => ['SELF', 'indent', 'Indent', 20],
  34.         -width        => ['SELF', 'width', 'Width', 20],
  35.         -itemtype     => ['SELF', 'itemtype', 'Itemtype', 'imagetext'],
  36.     -foreground   => ['SELF'],
  37.        );
  38. }
  39.  
  40. sub autosetmode
  41. {
  42.  my( $w ) = @_;
  43.  $w->setmode();
  44. }
  45.  
  46. sub IndicatorCmd
  47. {
  48.  my( $w, $ent, $event ) = @_;
  49.  
  50.  my $mode = $w->getmode( $ent );
  51.  
  52.  if ( $event eq '<Arm>' )
  53.   {
  54.    if ($mode eq 'open' )
  55.     {
  56.      $w->_indicator_image( $ent, 'plusarm' );
  57.     }
  58.    else
  59.     {
  60.      $w->_indicator_image( $ent, 'minusarm' );
  61.     }
  62.   }
  63.  elsif ( $event eq '<Disarm>' )
  64.   {
  65.    if ($mode eq 'open' )
  66.     {
  67.      $w->_indicator_image( $ent, 'plus' );
  68.     }
  69.    else
  70.     {
  71.      $w->_indicator_image( $ent, 'minus' );
  72.     }
  73.   }
  74.  elsif( $event eq '<Activate>' )
  75.   {
  76.    $w->Activate( $ent, $mode );
  77.    $w->Callback( -browsecmd => $ent );
  78.   }
  79. }
  80.  
  81. sub close
  82. {
  83.  my( $w, $ent ) = @_;
  84.  my $mode = $w->getmode( $ent );
  85.  $w->Activate( $ent, $mode ) if( $mode eq 'close' );
  86. }
  87.  
  88. sub open
  89. {
  90.  my( $w, $ent ) = @_;
  91.  my $mode = $w->getmode( $ent );
  92.  $w->Activate( $ent, $mode ) if( $mode eq 'open' );
  93. }
  94.  
  95. sub getmode
  96. {
  97.  my( $w, $ent ) = @_;
  98.  
  99.  return( 'none' ) unless $w->indicatorExists( $ent );
  100.  
  101.  my $img = $w->_indicator_image( $ent );
  102.  return( 'open' ) if( $img eq 'plus' || $img eq 'plusarm' );
  103.  return( 'close' );
  104. }
  105.  
  106. sub setmode
  107. {
  108.  my ($w,$ent,$mode) = @_;
  109.  unless (defined $mode)
  110.   {
  111.    $mode = 'none';
  112.    my @args;
  113.    push(@args,$ent) if defined $ent;
  114.    my @children = $w->infoChildren( @args );
  115.    if ( @children )
  116.     {
  117.      $mode = 'close';
  118.      foreach my $c (@children)
  119.       {
  120.        $mode = 'open' if $w->infoHidden( $c );
  121.        $w->setmode( $c );
  122.       }
  123.     }
  124.   }
  125.  
  126.  if (defined $ent)
  127.   {
  128.    if ( $mode eq 'open' )
  129.     {
  130.      $w->_indicator_image( $ent, 'plus' );
  131.     }
  132.    elsif ( $mode eq 'close' )
  133.     {
  134.      $w->_indicator_image( $ent, 'minus' );
  135.     }
  136.    elsif( $mode eq 'none' )
  137.     {
  138.      $w->_indicator_image( $ent, undef );
  139.     }
  140.   }
  141. }
  142.  
  143. sub Activate
  144. {
  145.  my( $w, $ent, $mode ) = @_;
  146.  if ( $mode eq 'open' )
  147.   {
  148.    $w->Callback( -opencmd => $ent );
  149.    $w->_indicator_image( $ent, 'minus' );
  150.   }
  151.  elsif ( $mode eq 'close' )
  152.   {
  153.    $w->Callback( -closecmd => $ent );
  154.    $w->_indicator_image( $ent, 'plus' );
  155.   }
  156.  else
  157.   {
  158.  
  159.   }
  160. }
  161.  
  162. sub OpenCmd
  163. {
  164.  my( $w, $ent ) = @_;
  165.  # The default action
  166.  foreach my $kid ($w->infoChildren( $ent ))
  167.   {
  168.    $w->show( -entry => $kid );
  169.   }
  170. }
  171.  
  172. sub CloseCmd
  173. {
  174.  my( $w, $ent ) = @_;
  175.  
  176.  # The default action
  177.  foreach my $kid ($w->infoChildren( $ent ))
  178.   {
  179.    $w->hide( -entry => $kid );
  180.   }
  181. }
  182.  
  183. sub Command
  184. {
  185.  my( $w, $ent ) = @_;
  186.  
  187.  return if $w->{Configure}{-ignoreInvoke};
  188.  
  189.  $w->Activate( $ent, $w->getmode( $ent ) ) if $w->indicatorExists( $ent );
  190. }
  191.  
  192. sub _indicator_image
  193. {
  194.  my( $w, $ent, $image ) = @_;
  195.  my $data = $w->privateData();
  196.  if (@_ > 2)
  197.   {
  198.    if (defined $image)
  199.     {
  200.      $w->indicatorCreate( $ent, -itemtype => 'image' )
  201.          unless $w->indicatorExists($ent);
  202.      $data->{$ent} = $image;
  203.      $w->indicatorConfigure( $ent, -image => $w->Getimage( $image ) );
  204.     }
  205.    else
  206.     {
  207.      $w->indicatorDelete( $ent ) if $w->indicatorExists( $ent );
  208.      delete $data->{$ent};
  209.     }
  210.   }
  211.  return $data->{$ent};
  212. }
  213.  
  214. 1;
  215.  
  216. __END__
  217.  
  218. #  Copyright (c) 1996, Expert Interface Technologies
  219. #  See the file "license.terms" for information on usage and redistribution
  220. #  of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  221. #
  222. #  The file man.macros and some of the macros used by this file are
  223. #  copyrighted: (c) 1990 The Regents of the University of California.
  224. #               (c) 1994-1995 Sun Microsystems, Inc.
  225. #  The license terms of the Tcl/Tk distrobution are in the file
  226. #  license.tcl.
  227.  
  228. =cut
  229.