The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/opt/bin/perl -w
###############################################################################
# Use the Curses::UI to create a viewer for delimited files such that the
# columns line up. Based on the editor example from the Curses::UI distribution
#
# (c) 2002 by Garth Sainio. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the same terms as perl itself.
###############################################################################

use strict;
use Curses;
use Curses::UI;

my $text = "";

# The file to display is on the command line and should be tab delimited
my $file = shift(@ARGV);
die("No file specified.\n") unless($file);

open(DATA, $file) || die("Could not open file ($file): $!\n");

my @column_width;
my @lines;

while(<DATA>) {
    $text .= $_;
}

close(DATA);

my $cui = new Curses::UI (
        -clear_on_exit => 1
);

# Create the screen for the editor.
my $screen = $cui->add(
        'screen', 'Window',
        -padtop          => 1, # leave space for the menu
        -border          => 0,
        -ipad            => 0,
);

# We add the editor widget to this screen.
my $editor = $screen->add(
        'editor', 'DelimitedTextViewer',
        -border          => 1,
        -padtop          => 0,
        -padbottom       => 3,
        -showlines       => 0,
        -sbborder        => 0,
        -vscrollbar      => 1,
        -hscrollbar      => 1,
        -showhardreturns => 0,
        -wrapping        => 0,
        -text            => $text,
        -columnScroll    => 1,
        -addBlankColumns => 1,
#        -fieldSeparator  => "*",
);

$editor->clear_binding('loose-focus');

$cui->set_binding(\&exitProg, "\cQ", "\cC");

$cui->set_binding(sub {
        my $cui = shift;
        $cui->layout;
        $cui->draw;
}, "\cL");
$editor->focus;

$cui->mainloop;


sub exitProg {
    exit(0);
}