Geo-Vector
view release on metacpan or search on metacpan
lib/Geo/Vector/Layer/Dialogs/Open.pm view on Meta::CPAN
##@ignore
sub open_vector {
my($button, $self) = @_;
my $dialog = $self->{open_dialog};
$self->{gui}->{folder} = $self->{path};
my($driver, $data_source) = get_data_source($self);
my $sql = $dialog->get_widget('open_vector_SQL_entry')->get_text;
$sql =~ s/^\s+//;
$sql =~ s/\s+$//;
$self->{gui}{history}->editing($sql);
unless ($driver) {
my $d = get_value_from_combo($dialog, 'filesystem_driver_combobox');
$driver = $d unless $d eq 'auto';
}
my $layers = get_selected_from_selection($dialog->get_widget('open_vector_layer_treeview')->get_selection);
if ($sql) {
$self->{gui}{history}->enter();
$dialog->get_widget('open_vector_SQL_entry')->set_text('');
}
my $wish = $dialog->get_widget('open_vector_layer_name_entry')->get_text;
my $update = $dialog->get_widget('open_vector_update_checkbutton')->get_active;
my $hidden = $dialog->get_widget('open_vector_open_hidden_button')->get_active;
for my $name (keys %$layers) {
my $layer;
my $encoding = 'utf8' if $data_source =~ /^Pg:/; # not really the case always but...
eval {
my %params = ( data_source => $data_source,
open => $name,
sql => $sql,
update => $update,
encoding => $encoding );
$params{driver} = $driver unless $driver eq 'auto';
$layer = Geo::Vector::Layer->new(%params);
};
if ($@) {
my $err = $@;
if ($err) {
$err =~ s/\n/ /g;
$err =~ s/\s+$//;
$err =~ s/\s+/ /g;
$err =~ s/^\s+$//;
} else {
$err = "data_source=$data_source, layer=$name, sql=$sql, update=$update";
}
$self->{gui}->message("Could not open layer: $err");
return;
}
$name = $wish if (keys %$layers) == 1;
$layer->visible(0) if $hidden;
$self->{gui}->add_layer($layer, $name, 1);
}
$self->{gui}{tree_view}->set_cursor(Gtk2::TreePath->new(0));
$self->{gui}{overlay}->render;
delete $self->{directory_toolbar};
$dialog->get_widget('open_dialog')->destroy;
}
##@ignore
sub cancel_open_vector {
my $self = pop;
delete $self->{directory_toolbar};
$self->{open_dialog}->get_widget('open_dialog')->destroy;
}
##@ignore
sub remove_layer {
my($button, $self) = @_;
my($driver, $data_source) = get_data_source($self);
my $layers = get_selected_from_selection(
$self->{open_dialog}->get_widget('open_vector_layer_treeview')->get_selection);
eval {
my $ds = Geo::OGR::Open($data_source, 1);
for my $i (0..$ds->GetLayerCount-1) {
my $l = $ds->GetLayerByIndex($i);
$ds->DeleteLayer($i) if $layers->{$l->GetName()};
}
};
$self->{gui}->message("$@") if $@;
}
##@ignore
sub fill_directory_treeview {
my $self = shift;
my $treeview = $self->{open_dialog}->get_widget('open_vector_directory_treeview');
my $model = $treeview->get_model;
$model->clear;
my $toolbar = $self->{open_dialog}->get_widget('open_vector_directory_toolbar');
for (@{$self->{directory_toolbar}}) {
$toolbar->remove($_);
}
$self->{directory_toolbar} = [];
if ($self->{path} eq '') {
@{$self->{dir_list}} = ();
my @d = Win32::DriveInfo::DrivesInUse();
#my $fso = Win32::OLE->new('Scripting.FileSystemObject');
#for ( in $fso->Drives ) {
# push @d, $_->{DriveLetter}.':';
#}
for (@d) {
$_ .= ':';
}
for (@d) {
s/\\$//;
push @{$self->{dir_list}},$_;
}
@{$self->{dir_list}} = reverse @{$self->{dir_list}} if $self->{dir_list};
for my $i (0..$#{$self->{dir_list}}) {
my $iter = $model->insert (undef, 0);
$model->set ($iter, 0, $self->{dir_list}->[$i] );
( run in 1.222 second using v1.01-cache-2.11-cpan-39bf76dae61 )