Data-TreeDumper-Renderer-GTK
view release on metacpan or search on metacpan
package Data::TreeDumper::Renderer::GTK ;
use 5.006;
use strict;
use warnings;
require Exporter;
use AutoLoader qw(AUTOLOAD);
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw();
our $VERSION = '0.03';
use Data::TreeDumper ;
use Gtk3 -init;
use Glib ':constants';
use base qw(Gtk3::TreeView Exporter);
sub new
{
my $class = shift;
my %args = (data => undef, @_);
my $self = bless Gtk3::TreeView->new, $class;
$self->insert_column_with_attributes(0, 'Data', Gtk3::CellRendererText->new, text => 0);
$self->set_data ($args{data}, $args{dumper_setup}) if exists $args{data} ;
$self->set_title ($args{title});
$self->signal_connect
(
button_press_event =>
sub
{
my ($widget, $event) = @_;
if ($event->button == 3) {
_do_context_menu ($widget, $event);
return TRUE;
}
return FALSE;
}
);
return $self;
}
sub _do_context_menu
{
my ($self, $event) = @_;
my $menu = Gtk3::Menu->new;
foreach my $method ('expand_all', 'collapse_all') {
my $label = join ' ', map { ucfirst $_ } split /_/, $method;
my $item = Gtk3::MenuItem->new ($label);
$menu->append ($item);
$item->show;
$item->signal_connect (activate => sub {
$self->$method;
});
}
$menu->popup (undef, undef, undef, undef, $event->button, $event->time);
}
sub set_data
{
my ($self, $data, $dumper_setup) = @_;
my $model = Gtk3::TreeStore->new ('Glib::String');
DumpTree
(
$data
, 'GTK-perl data dump'
, %$dumper_setup
, RENDERER =>
{
NODE => \&RenderNode
# data needed by the renderer
, PREVIOUS_LEVEL => 0
, MODEL => $model
, PARENT => [Gtk3::TreePath->new()]
}
) ;
$self->set_model ($model);
}
sub set_title
{
my ($self, $title) = @_;
if (defined $title and length $title) {
$self->get_column (0)->set_title ($title);
$self->set_headers_visible (TRUE);
} else {
$self->set_headers_visible (FALSE);
}
}
#-------------------------------------------------------------------------------------------
sub RenderNode
{
my
(
$element
, $level
, $is_terminal
, $previous_level_separator
, $separator
, $element_name
, $element_value
( run in 1.513 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )