Gtk2-Ex-Geo
view release on metacpan or search on metacpan
lib/Gtk2/Ex/Geo/Glue.pm.in view on Meta::CPAN
return unless $object;
my $layer;
for $upgrade (@{$self->{upgrades}}) {
$layer = $upgrade->($object);
last if $layer;
}
if ($layer) {
$layer = $object if $layer == 1; # backwards compatibility
} else {
$layer = $object;
}
return unless $layer->isa('Gtk2::Ex::Geo::Layer');
my $i = $self->{overlay}->index_of_layer($name) if defined $name;
croak "layer with name $name already exists" if defined $i;
$layer->name($name);
$layer->{_tree_index} = $self->{model}->insert (undef, 0);
$self->set_layer($layer);
$self->{overlay}->add_layer($layer, $do_not_zoom_to);
return $layer;
}
## @method Gtk2::Ex::Geo::Layer layer($name)
# @param name
# @return
sub layer {
my($self, $name) = @_;
return $self->{overlay}->get_layer_by_name($name);
}
## @method layers
# @return a list of all layers (not the internal list but a copy)
sub layers {
my($self) = @_;
my @a = @{$self->{overlay}->{layers}};
return @a;
}
## @method get_focal($name)
# @brief Returns a selected (or visible) part of a raster layer by its name.
# @deprecated Selected and clip are implemented elsewhere.
sub get_focal {
my($self, $name) = @_;
my $gd = $self->{overlay}->get_layer_by_name($name);
if ($gd and $gd->isa('Geo::Raster')) {
my @clip = $self->{overlay}->get_focus;
@clip = $gd->wa2ga(@clip);
# do not expand the view
$clip[2]--;
$clip[3]--;
return $gd->clip(@clip);
}
}
## @method update
# @brief Updates the whole layer list.
sub update {
my($self) = @_;
for my $layer (@{$self->{overlay}->{layers}}) {
$self->set_layer($layer);
}
}
## @ignore
sub swap {
my($array,$i1,$i2) = @_;
my $e1 = $array->[$i1];
my $e2 = $array->[$i2];
$array->[$i1] = $e2;
$array->[$i2] = $e1;
return ($e1,$e2);
}
## @method move_down
# @brief Moves the selected layer down in the list.
sub move_down {
my($self) = @_;
my ($path, $focus_column) = $self->{tree_view}->get_cursor;
return unless $path;
my $index = $path->to_string;
my $n = $#{$self->{overlay}->{layers}};
if ($index < $n) {
my($layer1,$layer2) = swap($self->{overlay}->{layers},$n-$index,$n-$index-1);
$self->{model}->move_after($layer1->{_tree_index},$layer2->{_tree_index});
$self->{overlay}->render;
}
}
## @method move_up
# @brief Moves the selected layer up in the list.
sub move_up {
my($self) = @_;
my ($path, $focus_column) = $self->{tree_view}->get_cursor;
return unless $path;
my $index = $path->to_string;
my $n = $#{$self->{overlay}->{layers}};
if ($index > 0) {
my($layer1,$layer2) = swap($self->{overlay}->{layers},$n-$index,$n-$index+1);
$self->{model}->move_before($layer1->{_tree_index},$layer2->{_tree_index});
$self->{overlay}->render;
}
}
## @method remove_layer
# @brief Removes the selected layer.
# @return Success or failure
sub remove_layer {
my($self, $name, $do_not_render) = @_;
my $layer = $self->{overlay}->get_layer_by_name($name);
return unless $layer;
$self->{model}->remove($layer->{_tree_index});
$self->{overlay}->remove_layer_by_name($name);
delete($self->{focused}) if $self->{focused} and $self->{focused}->name eq $layer->name;
( run in 2.208 seconds using v1.01-cache-2.11-cpan-d8267643d1d )