Geo-Vector

 view release on metacpan or  search on metacpan

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                  <packing>
                    <property name="expand">False</property>
                    <property name="padding">2</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkHBox" id="hbox5">
                    <property name="visible">True</property>
                    <child>
                      <widget class="GtkComboBox" id="open_vector_driver_combobox">
                        <property name="visible">True</property>
                      </widget>
                      <packing>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkButton" id="open_vector_build_connection_button">
                        <property name="label" translatable="yes">Build</property>
                        <property name="visible">True</property>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                        <property name="position">1</property>
                      </packing>
                    </child>
                  </widget>
                  <packing>
                    <property name="expand">False</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="open_vector_datasource_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="expand">False</property>
                    <property name="position">2</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkHBox" id="hbox4">
                    <property name="visible">True</property>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                    <child>
                      <widget class="GtkLabel" id="label2">
                        <property name="visible">True</property>
                        <property name="label" translatable="yes">Filesystem read:</property>
                      </widget>
                      <packing>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkComboBox" id="filesystem_driver_combobox">
                        <property name="visible">True</property>
                        <property name="tooltip" translatable="yes">Use this driver</property>
                      </widget>
                      <packing>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </widget>
                  <packing>
                    <property name="expand">False</property>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                <child>
                  <widget class="GtkLabel" id="label3">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Store into layer:</property>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBoxEntry" id="copy_name_comboboxentry">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="expand">False</property>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
              <packing>
                <property name="position">2</property>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                    </child>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkVBox" id="vbox3">
                    <property name="visible">True</property>
                    <child>
                      <widget class="GtkComboBox" id="copy_datasource_combobox">
                        <property name="visible">True</property>
                      </widget>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">False</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkHBox" id="hbox7">

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                          <packing>
                            <property name="position">1</property>
                          </packing>
                        </child>
                      </widget>
                      <packing>
                        <property name="position">1</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkComboBox" id="copy_driver_combobox">
                        <property name="visible">True</property>
                      </widget>
                      <packing>
                        <property name="position">2</property>
                      </packing>
                    </child>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                  </widget>
                  <packing>
                    <property name="top_attach">3</property>
                    <property name="bottom_attach">4</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkVBox" id="vbox2">
                    <property name="visible">True</property>
                    <child>
                      <widget class="GtkComboBox" id="new_vector_data_source_combobox">
                        <property name="visible">True</property>
                      </widget>
                      <packing>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <widget class="GtkHBox" id="hbox1">
                        <property name="visible">True</property>
                        <child>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                    </child>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">3</property>
                    <property name="bottom_attach">4</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="new_vector_driver_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">1</property>
                    <property name="bottom_attach">2</property>
                  </packing>
                </child>
                <child>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                  <widget class="GtkLabel" id="label6">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Geometry type:</property>
                  </widget>
                  <packing>
                    <property name="top_attach">6</property>
                    <property name="bottom_attach">7</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="new_vector_geometry_type_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">6</property>
                    <property name="bottom_attach">7</property>
                  </packing>
                </child>
                <child>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                    </child>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">9</property>
                    <property name="bottom_attach">10</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="new_vector_class_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkLabel" id="label10">
                    <property name="visible">True</property>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">7</property>
                    <property name="bottom_attach">8</property>
                    <property name="y_options">GTK_FILL</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="properties_render_as_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="right_attach">2</property>
                    <property name="top_attach">6</property>
                    <property name="bottom_attach">7</property>
                    <property name="y_options">GTK_FILL</property>
                  </packing>
                </child>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                <child>
                  <widget class="GtkLabel" id="label2">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Select raster to be as a model for the canvas:</property>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="rasterize_like_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                <child>
                  <widget class="GtkLabel" id="label3">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Render the data as:</property>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="rasterize_render_as_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
              <packing>
                <property name="position">2</property>
              </packing>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                <child>
                  <widget class="GtkLabel" id="label5">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Select a field for the value:</property>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBox" id="rasterize_value_field_combobox">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
              </widget>
              <packing>
                <property name="position">4</property>
              </packing>

lib/Geo/Vector/Layer/Dialogs.glade  view on Meta::CPAN

                <child>
                  <widget class="GtkLabel" id="label1">
                    <property name="visible">True</property>
                    <property name="label" translatable="yes">Class for the new feature:</property>
                  </widget>
                  <packing>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <widget class="GtkComboBoxEntry" id="feature_class_comboboxentry">
                    <property name="visible">True</property>
                  </widget>
                  <packing>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <placeholder/>
                </child>
              </widget>

lib/Geo/Vector/Layer/Dialogs.pm.in  view on Meta::CPAN

    my @buffer = <DATA>;
    pop @buffer unless $buffer[$#buffer] =~ /^\</; # remove the extra content

    my $self = Gtk2::Ex::Geo::DialogMaster::new($class, %params, buffer => \@buffer);

    bless $self => (ref($class) or $class);
     
    return $self;
}

sub fill_render_as_combobox {
    my($combobox) = @_;
    my $renderer = Gtk2::CellRendererText->new;
    $combobox->pack_start($renderer, TRUE);
    $combobox->add_attribute($renderer, text => 0);
    my $model = Gtk2::ListStore->new('Glib::String');
    for (sort {$Geo::Vector::RENDER_AS{$a} <=> $Geo::Vector::RENDER_AS{$b}} 
	 keys %Geo::Vector::RENDER_AS) {
	$model->set($model->append, 0, $_);
    }
    $combobox->set_model($model);
}

1;
__DATA__

lib/Geo/Vector/Layer/Dialogs/Copy.pm  view on Meta::CPAN

    my($dialog, $boot) = $self->bootstrap_dialog
	($gui, 'copy_dialog', "Copy from ".$self->name,
	 {
	     copy_dialog => [delete_event => \&cancel_copy, [$self, $gui]],
	     copy_cancel_button => [clicked => \&cancel_copy, [$self, $gui]],
	     copy_ok_button => [clicked => \&do_copy, [$self, $gui, 1]],
	     from_EPSG_entry => [changed => \&Geo::Raster::Layer::epsg_help],
	     to_EPSG_entry => [changed => \&Geo::Raster::Layer::epsg_help],
	     copy_add_button => [clicked => \&add_to_mappings, $self],
	     copy_delete_button => [clicked => \&delete_from_mappings, $self],
	     copy_driver_combobox => [changed => \&copy_driver_changed, $self],
	     copy_name_comboboxentry => [changed => \&copy_into_changed, [$self, $gui]],
	 },
	 [
	  'copy_driver_combobox',
	  'copy_datasource_combobox',
	  'copy_name_comboboxentry'
	 ]
	);
    
    if ($boot) {
	my $from = $dialog->get_widget('from_EPSG_entry');
	my $auto = Gtk2::EntryCompletion->new;
	$auto->set_match_func(sub {1});
	my $list = Gtk2::ListStore->new('Glib::String');
	$auto->set_model($list);
	$auto->set_text_column(0);

lib/Geo/Vector/Layer/Dialogs/Copy.pm  view on Meta::CPAN

	$to->set_completion($auto);

	$dialog->get_widget('copy_datasource_button')
	    ->signal_connect( clicked=> sub {
		my(undef, $self) = @_;
		my $entry = $self->{copy_dialog}->get_widget('copy_datasource_entry');
		file_chooser('Select folder', 'select_folder', $entry);
			      }, $self); 
    }

    my $combo = $dialog->get_widget('copy_driver_combobox');
    my $model = $combo->get_model();
    $model->clear;
    my $i = 1;
    my $active = 0;
    $model->set($model->append, 0, ''); # create into existing data source 
    for my $driver (Geo::OGR::Drivers) {
	next unless $driver->TestCapability('CreateDataSource');
	my $name = $driver->GetName;
	$active = $i if $name eq 'Memory';
	$model->set($model->append, 0, $name);
	$i++;
    }
    $combo->set_active($active);
    copy_driver_changed($combo, $self);

    $combo = $dialog->get_widget('copy_datasource_combobox');
    $model = $combo->get_model();
    $model->clear;
    $model->set($model->append, 0, '');
    for my $data_source (sort keys %{$self->{gui}{resources}{datasources}}) {
	$model->set ($model->append, 0, $data_source);
    }
    $combo->set_active(0);

    $combo = $dialog->get_widget('copy_name_comboboxentry');
    $model = $combo->get_model();
    $model->clear;
    for my $layer (@{$gui->{overlay}->{layers}}) {
	my $n = $layer->name();
	next unless $layer->isa('Geo::Vector');
	next unless $layer->{update};
	next if $n eq $self->name();
	$model->set($model->append, 0, $n);
    }
    $combo->child->set_text('copy');

lib/Geo/Vector/Layer/Dialogs/Copy.pm  view on Meta::CPAN


## @ignore
sub copy_driver_changed {
    my($combo, $self) = @_;
    my $dialog = $self->{copy_dialog};
    my $active = $combo->get_active();
    return if $active < 0;
    my $model = $combo->get_model;
    my $iter = $model->get_iter_from_string($active);
    my $name = $model->get($iter, 0);
    for my $w ('copy_datasource_combobox','copy_datasource_button',
	       'copy_file_source_label','copy_non_file_source_label',
	       'copy_datasource_entry') {
	$dialog->get_widget($w)->set_sensitive($name ne 'Memory');
    }
}

##@ignore
sub do_copy {
    my($self, $gui) = @{$_[1]};
    my $dialog = $self->{copy_dialog};

    my %params = ( selected_features => $self->selected_features ) 
	unless $dialog->get_widget('copy_all_checkbutton')->get_active;

    my $into = $dialog->get_widget('copy_name_comboboxentry')->get_active_text;
    croak "Store into?" unless $into;
    my $into_layer = $gui->layer($into);
    if ($into_layer) {
	croak $into_layer->name." is not a vector layer" unless $into_layer->isa('Geo::Vector');
    } else {
	my $combo = $dialog->get_widget('copy_datasource_combobox');
	my $active = $combo->get_active();
	if ($active > 0) {
	    my $model = $combo->get_model;
	    my $iter = $model->get_iter_from_string($active);
	    my $store = $model->get($iter, 0);
	    $params{data_source} = $self->{gui}{resources}{datasources}{$store};
	} else {
	    $params{data_source} = $dialog->get_widget('copy_datasource_entry')->get_text;
	    $params{driver} = $dialog->get_widget('copy_driver_combobox')->get_active_text;
	}
	$params{create} = $into;    
	my $layers;	
	if ($params{driver} ne 'Memory') {
	    eval {
		$layers = Geo::Vector::layers($params{driver}, $params{data_source});
	    };
	}    
	croak "Data source '$params{data_source}' already contains a layer with name '$params{create}'."
	    if ($layers and $layers->{$params{create}});

lib/Geo/Vector/Layer/Dialogs/Copy.pm  view on Meta::CPAN

    };
    if ($@) {
	$gui->message("error opening data_source: '$text': $@");
	return;
    }
    return unless $ds; # can't be opened as a data_source
    my $driver = $ds->GetDriver; # default driver
    if ($driver) {
	my $name = $driver->GetName;
	# get from combo
	my $combo = $self->{copy_dialog}->get_widget('copy_driver_combobox');
	my $model = $combo->get_model;
	my $i = 0;
	my $iter = $model->get_iter_first;
      LOOP: {
	  do {
	      my $d = $model->get_value($iter);
	      if ($d eq $name) {
		  $combo->set_active($i);
		  last;
	      }

lib/Geo/Vector/Layer/Dialogs/Copy.pm  view on Meta::CPAN

	  } while ($iter = $model->iter_next($iter));
      }
    }
}

## @ignore
sub copy_into_changed {
    my($combo) = @_;
    my($self, $gui) = @{$_[1]};
    my $dialog = $self->{copy_dialog};
    my $into = get_value_from_combo($dialog, 'copy_name_comboboxentry') if $combo;
    my $into_layer;
    if ($into) {
	for my $layer (@{$gui->{overlay}->{layers}}) {
	    my $n = $layer->name();
	    next unless $layer->isa('Geo::Vector');
	    if ($into eq $layer->name()) {
		$into_layer = $layer;
		last;
	    }
	}

lib/Geo/Vector/Layer/Dialogs/Feature.pm  view on Meta::CPAN


    # bootstrap:
    my($dialog, $boot) = $self->bootstrap_dialog
	($gui, 'feature_dialog', "Create a new feature to layer ".$self->name,
	 {
	     feature_dialog => [delete_event => \&close_feature_dialog, [$self, $gui]],
	     feature_cancel_button => [clicked => \&close_feature_dialog, [$self, $gui]],
	     feature_ok_button => [clicked => \&new_feature, [$self, $gui]],
	 },
	 [
	  'feature_class_comboboxentry'
	 ]
	);
    
    if ($boot) {
    }

    my $combo = $dialog->get_widget('feature_class_comboboxentry');
    my $model = $combo->get_model();
    $model->clear;
    #for my $class ('Feature') {
	#$model->set($model->append, 0, $class);
    #}
    $combo->child->set_text('Feature');
    
    return $dialog->get_widget('feature_dialog');
}

lib/Geo/Vector/Layer/Dialogs/Feature.pm  view on Meta::CPAN

    1;
}

##@ignore
sub new_feature {
    my($self, $gui);
    for (@_) {
	next unless ref eq 'ARRAY';
	($self, $gui) = @{$_};
    }
    my $class = get_value_from_combo($self->{feature_dialog}, 'feature_class_comboboxentry');
    my $feature = Geo::Vector::Feature->new(class => $class);
    $self->feature($feature);
    $self->select(with_id => [$feature->FID]);
    $self->open_features_dialog($gui);
    $self->hide_dialog('feature_dialog');
    1;
}

1;

lib/Geo/Vector/Layer/Dialogs/New.pm  view on Meta::CPAN

    my($dialog, $boot) = Gtk2::Ex::Geo::Layer::bootstrap_dialog
	($self, $gui, 'new_dialog', "Create new vector",
	 {
	     new_dialog => [delete_event => \&cancel_new_copy, $self],
	     new_vector_add_button => [clicked=>\&add_field_to_schema, $self],
	     new_vector_delete_button => [clicked=>\&delete_field_from_schema, $self],
	     new_vector_cancel_button => [clicked => \&cancel_new_vector, $self],
	     new_vector_ok_button => [clicked => \&ok_new_vector, $self],
	 },
	 [
	  'new_vector_class_combobox',
	  'new_vector_driver_combobox',
	  'new_vector_data_source_combobox',
	  'new_vector_geometry_type_combobox'
	 ]
	);

    if ($boot) {
	my $combo = $dialog->get_widget('new_vector_class_combobox');
	my $model = $combo->get_model();
	for my $n ('OGR Layer', 'Feature collection') {
	    $model->set ($model->append, 0, $n);
	}
	$combo->set_active(0);

	$combo = $dialog->get_widget('new_vector_driver_combobox');
	$model = $combo->get_model();
	$model->set ($model->append, 0, '');
	for my $driver (Geo::OGR::Drivers()) {
	    my $n = $driver->FormatName;
	    $n = $driver->GetName unless $n;
	    $self->{drivers}{$n} = $driver->GetName;
	    $model->set ($model->append, 0, $n);
	}
	$combo->set_active(0);

	$combo = $dialog->get_widget('new_vector_data_source_combobox');
	$model = $combo->get_model();
	$model->set ($model->append, 0, '');
	for my $data_source (sort keys %{$gui->{resources}{datasources}}) {
	    $model->set ($model->append, 0, $data_source);
	}
	$combo->set_active(0);

	# replace with @Geo::OGR::Geometry::GEOMETRY_TYPES
	# when new GDAL comes out

	my @GEOMETRY_TYPES = qw/Unknown 
			Point LineString Polygon
			MultiPoint MultiLineString MultiPolygon GeometryCollection
			None LinearRing
			Point25D LineString25D Polygon25D
			MultiPoint25D MultiLineString25D MultiPolygon25D GeometryCollection25D/;

	$combo = $dialog->get_widget('new_vector_geometry_type_combobox');
	$model = $combo->get_model();
	for my $type (@GEOMETRY_TYPES) {
	    $model->set ($model->append, 0, $type);
	}
	$combo->set_active(0);
    }
    
    $dialog->get_widget('new_vector_open_button')
	->signal_connect( clicked => sub {
	    my(undef, $self) = @_;

lib/Geo/Vector/Layer/Dialogs/New.pm  view on Meta::CPAN

sub cancel_new_vector {
    my $self = pop;
    $self->{new_dialog}->get_widget('new_dialog')->destroy;
}

## @ignore
sub ok_new_vector {
    my $self = pop;
    my $d = $self->{new_dialog};
    my $layer;
    my $class = get_value_from_combo($d, 'new_vector_class_combobox');
    my $name = $d->get_widget('new_vector_layer_entry')->get_text;
    $name = 'x' unless $name;
    if ($class eq 'Feature collection') {
	$self->{gui}->add_layer(Geo::Vector->new(features=>[]), $name, 1);
	$self->{new_dialog}->get_widget('new_dialog')->destroy;
	return;
    }
    my $driver = get_value_from_combo($d, 'new_vector_driver_combobox');
    $driver = $self->{drivers}{$driver};
    my $create_options = $d->get_widget('new_vector_create_options_entry')->get_text;
    $create_options = {split(/[(=>),]/,$create_options)};
    my $data_source = get_value_from_combo($d, 'new_vector_data_source_combobox');
    $data_source = $d->get_widget('new_vector_folder_entry')->get_text unless $data_source;
    my $layer_options = $d->get_widget('new_vector_layer_options_entry')->get_text;
    my $geometry_type = get_value_from_combo($d, 'new_vector_geometry_type_combobox');
    my $encoding = $d->get_widget('new_vector_encoding_entry')->get_text;
    my $srs = $d->get_widget('new_vector_srs_entry')->get_text;
    my %schema = ( Fields => [] );
    $self->{schema}->foreach(sub {
	my($model, $path, $iter) = @_;
	my @row = $model->get($iter);
	push @{$schema{Fields}},
	{ Name => $row[0],
	  Type => $row[1],
	  Justify => $row[2],

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

	     open_dialog => [delete_event => \&cancel_open_vector, $self],
	     open_vector_delete_datasource_button => [clicked => \&delete_data_source, $self],
	     open_vector_connect_datasource_button => [clicked => \&connect_data_source, $self],
	     open_vector_remove_button => [clicked => \&remove_layer, $self],
	     open_vector_schema_button => [clicked => \&show_schema, $self],
	     open_vector_cancel_button => [clicked => \&cancel_open_vector, $self],
	     open_vector_ok_button => [clicked => \&open_vector, $self],
	     open_vector_auto_update_schema_checkbutton => [toggled => \&show_schema, $self],
	 },
	 [
	  'open_vector_driver_combobox',
	  'filesystem_driver_combobox',
	  'open_vector_datasource_combobox'
	 ]
	);
    
    if ($boot) {
	my $combo = $dialog->get_widget('open_vector_driver_combobox');
	my $model = $combo->get_model();
	for my $driver (Geo::OGR::Drivers()) {
	    my @t = $driver->DataSourceTemplate;
	    next if $t[0] eq '<filename>';
	    my $n = $driver->FormatName;
	    $model->set ($model->append, 0, $n);
	}
	$combo->set_active(0);
	
	$combo = $dialog->get_widget('filesystem_driver_combobox');
	$model = $combo->get_model();
	$model->set ($model->append, 0, 'auto');
	for my $driver (Geo::OGR::Drivers()) {
	    my $n = $driver->GetName;
	    $model->set ($model->append, 0, $n);
	}
	$combo->set_active(0);
	
	$dialog->get_widget('open_vector_datasource_combobox')
	    ->signal_connect(changed => sub { empty_layer_data($_[1]) }, $self);
	
	$dialog->get_widget('open_vector_build_connection_button')
	    ->signal_connect(clicked => \&build_data_source, $self);
	
	fill_named_data_sources_combobox($self);
    
	my $treeview = $dialog->get_widget('open_vector_directory_treeview');
	$treeview->set_model(Gtk2::TreeStore->new('Glib::String'));
	my $cell = Gtk2::CellRendererText->new;
	my $col = Gtk2::TreeViewColumn->new_with_attributes('', $cell, markup => 0);
	$treeview->append_column($col);
	$treeview->signal_connect(
	    button_press_event => sub 
	    {
		my($treeview, $event, $self) = @_;

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

    $self->{path} = File::Spec->rel2abs('.') unless $self->{path};

    fill_directory_treeview($self);
    fill_layer_treeview($self);

    $dialog->get_widget('open_vector_update_checkbutton')->set_active(0);

}

## @ignore
sub fill_named_data_sources_combobox {
    my($self, $default) = @_;
    $default = '' unless $default;
    my $model = Gtk2::ListStore->new('Glib::String');
    $model->set($model->append, 0, '');
    my $i = 1;
    my $active = 0;
    for my $data_source (sort keys %{$self->{gui}{resources}{datasources}}) {
	$model->set ($model->append, 0, $data_source);
	$active = $i if $data_source eq $default;
	$i++;
    }
    my $combo = $self->{open_dialog}->get_widget('open_vector_datasource_combobox');
    $combo->set_model($model);
    $combo->set_active($active);
}

## @ignore
sub get_data_source {
    my $self = shift;
    my $combo = $self->{open_dialog}->get_widget('open_vector_datasource_combobox');
    my $active = $combo->get_active();
    my $data_source = $self->{path};
    return ('', $data_source) if $active < 0;
    my $model = $combo->get_model;
    my $iter = $model->get_iter_from_string($active);
    my $driver = $model->get($iter, 0);
    if ($driver eq '') {
	my $d = get_value_from_combo($self->{open_dialog}, 'filesystem_driver_combobox');
	$driver = $d unless $d eq 'auto';
	#if ($driver eq 'GeoJSON') { # hack
	#    $data_source = "file:/$data_source";
	#}
	return ($driver, $data_source);
    }
    return @{$self->{gui}{resources}{datasources}{$driver}};
}

##@ignore

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

    $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;

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

	eval {
	    $filename = Glib->filename_to_unicode($_);
	};
	next if $@;
	#my $label = Gtk2::Label->new($filename) if Gtk2->CHECK_VERSION(2, 18, 0);
	my $label = Gtk2::Label->new($filename) unless $Config::Config{'osname'} eq 'MSWin32';
	my $b = Gtk2::ToolButton->new($label, $filename);
	$b->signal_connect(
	    clicked => sub {
		my($button, $self) = @_;
		$self->{open_dialog}->get_widget('open_vector_datasource_combobox')->set_active(0);
		my $n = $button->get_label;
		if ($n eq $self->{volume}) {
		    $self->{path} = '';
		} else {
		    my @directories;
		    for (reverse @{$self->{directory_toolbar}}) {
			push @directories, $_->get_label;
			last if $_ == $_[0];
		    }
		    if ($^O eq 'MSWin32') {

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

	$self->{open_dialog}->get_widget('open_vector_schema_treeview')->get_model->clear;
	$self->{open_dialog}->get_widget('open_vector_schema_label')->set_label('');
    }
    $self->{gui}{history}->editing('');
    $self->{open_dialog}->get_widget('open_vector_SQL_entry')->set_text('');
}

## @ignore
sub build_data_source {
    my($button, $self) = @_;
    my $combo = $self->{open_dialog}->get_widget('open_vector_driver_combobox');
    my $index = $combo->get_active;
    my $code = '';
    my $format;
    my $template = '';
    my $help = '';
    my $i = -1;
    for my $driver (Geo::OGR::Drivers()) {
	($template, $help) = $driver->DataSourceTemplate;
	next if $template eq '<filename>';
	$i++;

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

		$connection_string .= $c;
	    }
	} else {
	    $connection_string .= $c;
	}
	$i++;
    }

    #print STDERR "connection string: $connection_string\n";
    $self->{gui}{resources}{datasources}{$input{data_source_name}} = [$driver, $connection_string];
    fill_named_data_sources_combobox($self, $input{data_source_name});

    # Ensure that the dialog box is destroyed when the user responds.
    $dialog->destroy;
}

## @ignore
sub delete_data_source {
    my($button, $self) = @_;
    my $combo = $self->{open_dialog}->get_widget('open_vector_datasource_combobox');
    my $active = $combo->get_active();
    return if $active < 0;

    my $model = $combo->get_model;
    my $iter = $model->get_iter_from_string($active);
    my $name = $model->get($iter, 0);
    return if $name eq '';

    $model->remove($iter);
    delete $self->{gui}{resources}{datasources}{$name};

lib/Geo/Vector/Layer/Dialogs/Open.pm  view on Meta::CPAN

    unless (fill_layer_treeview($self)) {
	# No layers found in data source
	fill_directory_treeview($self);
    }
}

## @ignore
sub select_directory {
    my($self, $treeview) = @_;

    my $combo = $self->{open_dialog}->get_widget('open_vector_driver_combobox');
    $combo->set_active(0) if $combo->get_active;
    $self->{open_dialog}->get_widget('open_vector_layer_treeview')->get_model->clear;

    my($path, $focus_column) = $treeview->get_cursor;
    my $index = $path->to_string if $path;
    if (defined $index) {
	my $dir = $self->{dir_list}->[$index];
	$dir =~ s/^<b>\[//;
	$dir =~ s/\]<\/b>$//;
	my $directory;

lib/Geo/Vector/Layer/Dialogs/Properties.pm  view on Meta::CPAN

	($gui, 'properties_dialog', "Properties of ".$self->name,
	 {
	     properties_dialog => [delete_event => \&cancel_properties, [$self, $gui]],
	     properties_dialog => [delete_event => \&cancel_properties, [$self, $gui]],
	     properties_apply_button => [clicked => \&apply_properties, [$self, $gui, 0]],
	     properties_cancel_button => [clicked => \&cancel_properties, [$self, $gui]],
	     properties_ok_button => [clicked => \&apply_properties, [$self, $gui, 1]],
	 });
    
    if ($boot) {
	Geo::Vector::Layer::Dialogs::fill_render_as_combobox(
	    $dialog->get_widget('properties_render_as_combobox') );
    }
    $dialog->get_widget('properties_dialog')->set_title("Properties of ".$self->name);

    $self->{backup}->{name} = $self->name;
    $self->{backup}->{render_as} = $self->render_as;
    $self->{backup}->{alpha} = $self->alpha;
    
    $dialog->get_widget('properties_geometry_type_label')
	->set_text($self->geometry_type or 'unknown type');
    
    my $a = $self->render_as;
    $a = defined $a ? $Geo::Vector::RENDER_AS{$a} : 0;
    $dialog->get_widget('properties_render_as_combobox')->set_active($a);
    
    my $count = $self->feature_count;
    $dialog->get_widget('properties_feature_count_label')->set_text($count);
    
    my $ds = $self->data_source;
    my $driver = $self->driver;
    $dialog->get_widget('properties_driver_label')->set_text($driver ? $driver : 'unknown');
    $dialog->get_widget('properties_data_source_label')->set_text(Glib->filename_to_unicode($ds));
    $dialog->get_widget('properties_SQL_label')->set_text($self->{SQL});
    

lib/Geo/Vector/Layer/Dialogs/Properties.pm  view on Meta::CPAN

}

##@ignore
sub apply_properties {
    my($self, $gui, $close) = @{$_[1]};
    my $dialog = $self->{properties_dialog};
    my $alpha = $dialog->get_widget('properties_transparency_spinbutton')->get_value_as_int;
    $self->alpha($alpha);
    my $name = $dialog->get_widget('properties_name_entry')->get_text;
    $self->name($name);
    my $combo = $dialog->get_widget('properties_render_as_combobox');
    my $model = $combo->get_model;
    my $iter = $model->get_iter_from_string($combo->get_active());
    $self->render_as($model->get_value($iter));
    $self->hide_dialog('properties_dialog') if $close;
    $gui->set_layer($self);
    $gui->{overlay}->render;
}

##@ignore
sub cancel_properties {

lib/Geo/Vector/Layer/Dialogs/Rasterize.pm  view on Meta::CPAN

    # bootstrap:
    my($dialog, $boot) = $self->bootstrap_dialog
	($gui, 'rasterize_dialog', "Rasterize ".$self->name,
	 {
	     rasterize_dialog => [delete_event => \&cancel_rasterize, [$self, $gui]],
	     rasterize_dialog => [delete_event => \&cancel_rasterize, [$self, $gui]],
	     rasterize_cancel_button => [clicked => \&cancel_rasterize, [$self, $gui]],
	     rasterize_ok_button => [clicked => \&apply_rasterize, [$self, $gui, 1]],
	 },
	[
	 'rasterize_value_field_combobox',
	 'rasterize_like_combobox',
	]);
    
    if ($boot) {
	Geo::Vector::Layer::Dialogs::fill_render_as_combobox(
	    $dialog->get_widget('rasterize_render_as_combobox') );

	my $combobox = $dialog->get_widget('rasterize_value_field_combobox');
	my $model = $combobox->get_model();
	$model->set ($model->append, 0, 'Draw with value 1');
	if ($self->{OGR}->{Layer}) {
	    my $schema = $self->{OGR}->{Layer}->GetLayerDefn();
	    for my $i (0..$schema->GetFieldCount-1) {
		my $column = $schema->GetFieldDefn($i);
		my $type = $column->GetFieldTypeName($column->GetType);
		if ($type eq 'Integer' or $type eq 'Real') {
		    $model->set($model->append, 0, $column->GetName);
		}
	    }
	}
	$combobox->set_active(0);

	$combobox = $dialog->get_widget('rasterize_like_combobox');
	$model = $combobox->get_model();
	$model->set($model->append, 0, "Use current view");
	for my $layer (@{$gui->{overlay}->{layers}}) {
	    next unless $layer->isa('Geo::Raster');
	    $model->set($model->append, 0, $layer->name);
	}
	$combobox->set_active(0);
    }
	
    $dialog->get_widget('rasterize_name_entry')->set_text('r');
    $dialog->get_widget('rasterize_like_combobox')->set_active(0);

    my $a = $self->render_as;
    $a = defined $a ? $Geo::Vector::RENDER_AS{$a} : 0;
    $dialog->get_widget('rasterize_render_as_combobox')->set_active($a);
    $dialog->get_widget('rasterize_value_field_combobox')->set_active(0);
    $dialog->get_widget('rasterize_nodata_value_entry')->set_text(-9999);

}

##@ignore
sub apply_rasterize {
    my($self, $gui, $close) = @{$_[1]};
    my $dialog = $self->{rasterize_dialog};
    
    my %ret = (name => $dialog->get_widget('rasterize_name_entry')->get_text());
    my $model = get_value_from_combo($dialog, 'rasterize_like_combobox');
    
    if ($model eq "Use current view") {
	# need M (height), N (width), world
	($ret{M}, $ret{N}) = $gui->{overlay}->size;
	$ret{world} = [$gui->{overlay}->get_viewport];
    } else {
	$ret{like} = $gui->{overlay}->get_layer_by_name($model);
    }

    $ret{render_as} = get_value_from_combo($dialog, 'rasterize_render_as_combobox');

    $ret{feature} = $dialog->get_widget('rasterize_fid_entry')->get_text;
    $ret{feature} = -1 unless $ret{feature} =~ /^\d+$/;

    my $field = get_value_from_combo($dialog, 'rasterize_value_field_combobox');
    
    if ($field ne 'Draw with value 1') {
	$ret{value_field} = $field;
    }

    $ret{nodata_value} = $dialog->get_widget('rasterize_nodata_value_entry')->get_text();

    my $g = $self->rasterize(%ret);
    if ($g) {
	$gui->add_layer($g, $ret{name}, 1);



( run in 0.847 second using v1.01-cache-2.11-cpan-8dfa8b56332 )