CursesApplication

 view release on metacpan or  search on metacpan

example/file.pl  view on Meta::CPAN


  my $w = shift;
  my ($pos, $items, $cwd, $caption) = 
    $w->getField(qw(CURSORPOS LISTITEMS CWD CAPTION));

  return if $$items[$pos][0] eq '.';

  if (-d $$items[$pos][0] || -d "$cwd/$$items[$pos][0]") {
    if ($$items[$pos][0] eq '..') {
      $cwd =~ s#/[^/]+/?$##;
      $cwd = '/' if $cwd eq '';
    } else {
      $cwd .= "/$$items[$pos][0]";
    }

    $caption =~ s/^(\w+: ).+$/$1$cwd/;
    $w->setField(
      LISTITEMS   => [loaddir($cwd)],
      CWD         => $cwd,
      CAPTION     => $caption,
      );
  } else {
    return 0;
  }
}

sub srcexit {
  # Keeps the focus on the listbox.
  #
  # Usage:  srcexit($form, $key);

  my $f = shift;
  my $key = shift;
  my $w = $f->getWidget('lstSource');

  if ($key eq "\n") {
    chgdir($w);
    $f->setField(DONTSWITCH => 1);
  }
}

sub destexit {
  # Keeps the focus on the listbox.
  #
  # Usage:  srcexit($form, $key);

  my $f = shift;
  my $key = shift;
  my $w = $f->getWidget('lstDest');

  if ($key eq "\n") {
    chgdir($w);
    $f->setField(DONTSWITCH => 1);
  }
}

__DATA__

%forms = (
  MainFrm     => {
    TABORDER        => [qw(Menu lstSource lstDest)],
    FOCUSED         => 'lstSource',
    WIDGETS         => {
      Menu            => {
        TYPE            => 'Menu',
        MENUS           => {
          MENUORDER       => [qw(File)],
          File            => {
            ITEMORDER       => [qw(Exit)],
            Exit            => \&main::quit,
            },
          },
        },
      lstSource       => {
        TYPE            => 'ListBox::MultiColumn',
        COLUMNS         => 20,
        LINES           => 10,
        Y               => 1,
        X               => 0,
        CAPTION         => 'Source',
        MULTISEL        => 1,
        SELECTEDCOL     => 'red',
        HEADERS         => [qw(filename size perm)],
        COLWIDTHS       => [20, 4, 10],
        HEADERFGCOL     => 'white',
        HEADERBGCOL     => 'cyan',
        BIGHEADER       => 1,
        FOCUSSWITCH     => "\n\t",
        CWD             => '',
        OnExit          => \&main::srcexit,
        },
      lstDest         => {
        TYPE            => 'ListBox::MultiColumn',
        COLUMNS         => 20,
        LINES           => 10,
        Y               => 1,
        X               => 20,
        CAPTION         => 'Destination',
        MULTISEL        => 0,
        SELECTEDCOL     => 'red',
        HEADERS         => [qw(filename size perm)],
        COLWIDTHS       => [20, 4, 10],
        HEADERFGCOL     => 'white',
        HEADERBGCOL     => 'cyan',
        BIGHEADER       => 1,
        FOCUSSWITCH     => "\n\t",
        CWD             => '',
        OnExit          => \&main::destexit,
        },
      },
    },
  );



( run in 1.808 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )