Gtk2-Ex-Geo
view release on metacpan or search on metacpan
lib/Gtk2/Ex/Geo/Glue.pm.in view on Meta::CPAN
## @method register_commands($commands)
# @brief Extend the capabilities by adding new commands
sub register_commands {
my($self, $commands) = @_;
unless (ref $commands->[0]) {
my @commands;
while (ref $commands->[$#$commands]) {
push @commands, pop @$commands;
}
my $menu = Gtk2::Menu->new;
for my $command (reverse @commands) {
my $name = $command->{label};
my $item;
#$item = Gtk2::SeparatorMenuItem->new();
$item = Gtk2::MenuItem->new_with_label($name);
$item->signal_connect(activate => $command->{sub}, $self);
$menu->append($item);
}
my %args = @$commands;
if (!$args{icon_widget} and $Config::Config{'osname'} ne 'MSWin32') {
$args{icon_widget} = Gtk2::Label->new($args{label});
}
my $button;
if ($args{stock_id}) {
$button = Gtk2::ToolButton->new_from_stock($args{stock_id});
lib/Gtk2/Ex/Geo/Glue.pm.in view on Meta::CPAN
$self->delete_selected();
}
);
# add items from the layer classes
unless (@layers) {
push @items, ( 1 => 0 );
push @items, $layer->menu_items();
}
my $menu = Gtk2::Menu->new;
my $params = @layers ? [\@layers, $self] : [$layer, $self];
$i = 0;
for (my $i =0; $i < @items; $i+=2) {
my $item;
unless ($items[$i+1]) {
$item = Gtk2::SeparatorMenuItem->new();
} else {
$item = Gtk2::MenuItem->new($items[$i]);
$item->signal_connect(activate => $items[$i+1], $params);
}
$item->show;
$menu->append($item);
}
$menu->popup(undef, undef, undef, undef, $event->button, $event->time);
return 1;
} elsif ($column =~ /^v/) {
lib/Gtk2/Ex/Geo/Overlay.pm view on Meta::CPAN
my(undef, $event, $self) = @_;
return 0 unless $self->{layers} and @{$self->{layers}};
$self->grab_focus;
my $handled = 0;
if ($event->button == 3 and $self->{menu}) {
$self->delete_rubberband if $self->{path};
my $menu = Gtk2::Menu->new;
for (my $i =0; $i < @{$self->{menu}}; $i+=2) {
my $name = $self->{menu_item_setup}->($self->{menu}->[$i], $self);
my $item;
unless ($self->{menu}->[$i+1]) {
$item = Gtk2::SeparatorMenuItem->new();
} else {
$item = Gtk2::MenuItem->new($name);
$item->signal_connect(activate => $self->{menu}->[$i+1], $self);
}
$item->show;
$menu->append ($item);
}
$menu->popup(undef, undef, undef, undef, $event->button, $event->time);
$handled = 1;
} elsif ($event->button == 1) {
lib/Gtk2/Ex/Geo/TreeDumper.pm view on Meta::CPAN
_do_context_menu ($widget, $event);
return TRUE;
}
return FALSE;
});
return $self;
}
sub _do_context_menu {
my ($self, $event) = @_;
my $menu = Gtk2::Menu->new;
foreach my $method ('expand_all', 'collapse_all') {
my $label = join ' ', map { ucfirst $_ } split /_/, $method;
my $item = Gtk2::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 _fill_scalar {
$gis->add_layer($layer);
$gis->{overlay}->signal_connect(update_layers =>
sub {
#print STDERR "in callback: @_\n";
});
$gis->register_commands(
[
tag => 'test popup',
label => 'Menu',
tip => 'Press to get a menu',
{
label => 'menu item 1',
sub => sub {
my(undef, $gui) = @_;
print STDERR "exec menu item 1\n";
}
},
{
label => 'menu item 2',
( run in 1.447 second using v1.01-cache-2.11-cpan-49f99fa48dc )