## @class Gtk2::Ex::Geo::Dialogs # @brief Generic dialogs for geospatial layers # @author Copyright (c) Ari Jolma # @author This library is free software; you can redistribute it and/or modify # it under the same terms as Perl itself, either Perl version 5.8.5 or, # at your option, any later version of Perl 5 you may have available. package Gtk2::Ex::Geo::Dialogs; =pod =head1 NAME Gtk2::Ex::Geo::Dialogs - Generic dialogs for geospatial layers The documentation of Gtk2::Ex::Geo is written in doxygen format. =cut use strict; use warnings; use UNIVERSAL qw/isa/; #use URI::Escape; require Exporter; use vars qw/$folder/; our @ISA = qw(Exporter Gtk2::Ex::Geo::DialogMaster); our %EXPORT_TAGS = ( 'all' => [ qw(&progress &get_value_from_combo &set_combo_to &get_selected_from_selection &file_chooser &get_number_from_entry) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( ); sub new { my($class, %params) = @_; my @buffer = ; pop @buffer unless $buffer[$#buffer] =~ /^\ \@buffer); } sub progress { my($progress, $msg, $bar) = @_; $progress = 1 if $progress > 1; $bar->set_fraction($progress); Gtk2->main_iteration while Gtk2->events_pending; return 1; } ## @ignore sub get_value_from_combo { my($dialog, $name_of_combo) = @_; my $combo = $dialog->get_widget($name_of_combo); my $model = $combo->get_model; return unless $model; my $a = $combo->get_active(); if ($a == -1) { # comboboxentry if ($combo->isa('Gtk2::ComboBoxEntry')) { return $combo->child->get_text; } else { return ''; } } my $iter = $model->get_iter_from_string($a); return unless $iter; return $model->get_value($iter); } ## @ignore sub set_combo_to { my($combo, $value) = @{pop()}; my($model, $path, $iter) = @_; my($x) = $model->get($iter); if ($x eq $value) { $combo->set_active_iter($iter); return 1; } } ##@ignore sub get_selected_from_selection { my $selection = shift; my @sel = $selection->get_selected_rows; my %sel; for (@sel) { $sel{$_->to_string} = 1; } my $model = $selection->get_tree_view->get_model; my $iter = $model->get_iter_first(); my $i = 0; my %s; while ($iter) { my($id) = $model->get($iter, 0); $s{$id} = 1 if $sel{$i++}; $iter = $model->iter_next($iter); } return \%s; } ## @ignore sub file_chooser { my($title, $action, $entry) = @_; my $file_chooser = Gtk2::FileChooserDialog->new ($title, undef, $action, 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'); $file_chooser->set_current_folder($folder) if $folder; my $filename; if ($file_chooser->run eq 'ok') { $folder = $file_chooser->get_current_folder(); $filename = $file_chooser->get_filename; #$filename =~ s/^file:\/\///; #$filename =~ s/^\/// if $filename =~ /^\/\w:/; # hack for windows $entry->set_text($filename) if $entry; } $file_chooser->destroy; #$filename = filename_unescape($filename); #print STDERR "$filename\n"; return $filename; } ##@ignore sub get_number_from_entry { my($entry) = @_; #print STDERR "get_number_from_entry $entry\n"; my $text = $entry->get_text; #print STDERR "got $text\n"; $text =~ s/\s//g; $text =~ s/,/./; ($text) =~ /(\d+)/; #print STDERR "return $text\n"; $text; } 1; __DATA__