home *** CD-ROM | disk | FTP | other *** search
- package Tk::Dirlist;
- require Tk::Derived;
- require Tk::HList;
- require DirHandle;
- use Cwd;
-
- use vars qw($VERSION);
- $VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Dirlist.pm#5 $
-
- use base qw(Tk::Derived Tk::HList);
- use strict;
- Construct Tk::Widget 'Dirlist';
-
- sub getimage
- {
- my ($w,$key) = @_;
- unless (exists $w->{$key})
- {
- $w->{$key} = $w->Pixmap(-id => $key);
- unless ($w->{$key})
- {
- $w->{$key} = $w->Bitmap($key);
- }
- }
- return $w->{$key};
- }
-
-
- sub Populate
- {
- my ($cw,$args) = @_;
- $cw->configure(-separator => '/', -itemtype => 'imagetext');
- $cw->ConfigSpecs(-directory => ['SETMETHOD','directory','Directory','.']);
- }
-
- sub fullpath
- {
- my ($path) = @_;
- my $cwd = getcwd;
- if (chdir($path))
- {
- $path = getcwd;
- chdir($cwd);
- }
- else
- {
- warn "Cannot cd to $path:$!"
- }
- # print "$path\n";
- return $path;
- }
-
- sub AddDir
- {
- my ($w,$dir) = @_;
- my $path = '';
- my $prefix = '';
- my $first = 0;
- my $name;
- foreach $name (split m#/#,$dir)
- {
- $first++;
- if ($name eq '')
- {
- next unless ($first == 1);
- $path = '/';
- $name = '/';
- }
- else
- {
- $path .= $prefix;
- $path .= $name;
- $prefix = '/';
- }
- unless ($w->info('exists' => $path))
- {
- # print "Add $path\n";
- $w->add($path,-image => $w->getimage('folder'), -text => $name);
- }
- }
- }
-
- sub choose_image
- {
- my ($w,$path) = @_;
- return 'folder' if (-d $path);
- return 'srcfile' if ($path =~ /\.[ch]$/);
- return 'textfile' if (-T $path);
- return 'file';
- }
-
-
- sub directory
- {
- my ($w,$key,$val) = @_;
- my $h = DirHandle->new($val);
- $w->AddDir($val = fullpath($val));
- my $f;
- $w->entryconfigure($val,-image => $w->getimage('act_fold'));
- foreach $f (sort $h->read)
- {
- next if ($f =~ /^\.+$/);
- my $path = "$val/$f";
- unless ($w->info('exists' => $path))
- {
- my $image = $w->getimage($w->choose_image($path));
- $w->add($path,-image => $image, -text => $f);
- }
- }
- $h->close;
- }
-
- 1;
-