spider/gtkconsole/Screen.pm

135 lines
3.5 KiB
Perl
Raw Permalink Normal View History

2006-07-21 18:02:26 +00:00
#
# This produces the Gtk for all the little sub-screens
#
#
2006-07-21 18:02:26 +00:00
#
# Copyright (c) 2006 Dirk Koopman G1TLH
#
use strict;
package Screen;
use Gtk2;
use Gtk2::SimpleList;
use Text::Wrap;
INIT {
Gtk2::SimpleList->add_column_type( 'qrg',
type => 'Glib::Scalar',
renderer => 'Gtk2::CellRendererText',
attr => sub {
my ($treecol, $cell, $model, $iter, $col_num) = @_;
my $info = $model->get ($iter, $col_num);
$cell->set(text => sprintf("%.1f", $info), xalign => 1.0);
}
);
2006-07-21 18:02:26 +00:00
Gtk2::SimpleList->add_column_type( 'tt',
type => 'Glib::Scalar',
renderer => 'Gtk2::CellRendererText',
attr => sub {
my ($treecol, $cell, $model, $iter, $col_num) = @_;
my $info = $model->get ($iter, $col_num);
$cell->set(text => $info);
}
);
Gtk2::SimpleList->add_column_type( 'ttlong',
type => 'Glib::Scalar',
renderer => 'Gtk2::CellRendererText',
attr => sub {
my ($treecol, $cell, $model, $iter, $col_num) = @_;
my $info = $model->get ($iter, $col_num);
$Text::Wrap::columns = 80;
$cell->set(text => join("\n",wrap("","",$info)));
}
);
Gtk2::SimpleList->add_column_type( 'ttlesslong',
type => 'Glib::Scalar',
renderer => 'Gtk2::CellRendererText',
attr => sub {
my ($treecol, $cell, $model, $iter, $col_num) = @_;
my $info = $model->get ($iter, $col_num);
$Text::Wrap::columns = 65;
$cell->set(text => join("\n",wrap("","",$info)));
}
);
Gtk2::SimpleList->add_column_type( 'ttshort',
type => 'Glib::Scalar',
renderer => 'Gtk2::CellRendererText',
attr => sub {
my ($treecol, $cell, $model, $iter, $col_num) = @_;
my $info = $model->get ($iter, $col_num);
$Text::Wrap::columns = 30;
$cell->set(text => join("\n",wrap("","",$info)));
}
);
}
sub new
{
my $pkg = shift;
my $class = ref $pkg || $pkg;
return bless {@_}, $class;
}
sub widget
{
return $_[0]->{widget};
}
1;
package Screen::List;
our @ISA = qw(Screen);
sub _row_inserted
{
my ($liststore, $path, $iter, $self) = @_;
$self->{list}->scroll_to_cell($path);
}
sub new
{
my $pkg = shift;
my %args = @_;
2006-07-21 18:02:26 +00:00
my $list = Gtk2::SimpleList->new(@{$args{fields}});
$list->set_rules_hint(1) if $args{hint};
$list->set_name($args{pkgname} || __PACKAGE__);
2006-07-21 18:02:26 +00:00
my $scroll = Gtk2::ScrolledWindow->new (undef, undef);
$scroll->set_shadow_type ($args{shadow_type} || 'etched-out');
$scroll->set_policy (exists $args{policy} ? @{$args{policy}} : qw(automatic automatic));
$scroll->set_size_request (@{$args{size}}) if exists $args{size};
$scroll->add($list);
$scroll->set_border_width(exists $args{border_width} ? $args{border_width} : 2);
2006-07-21 18:02:26 +00:00
my $self = $pkg->SUPER::new(scroller => $scroll, list => $list, widget => $scroll, maxsize => ($args{maxsize} || 100));
$list->get_model->signal_connect('row-inserted', \&_row_inserted, $self);
if ($args{frame}) {
my $frame = Gtk2::Frame->new($args{frame});
$frame->add($scroll);
$self->{widget} = $self->{frame} = $frame;
}
return $self;
}
sub add_data
{
my $self = shift;
my $list = $self->{list};
2006-07-21 18:02:26 +00:00
push @{$list->{data}}, ref $_[0] ? $_[0] : [ @_ ];
shift @{$list->{data}} if @{$list->{data}} > $self->{maxsize};
}
1;