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 )