Üdvözlök mindenkit!
Egy kedves kollégám, aki Gtk2-Perl Assistant-ban fejleszt épp egy kis alkalmazást, elakadt a dologgal a vége felé, és megkért, hogy tegyem fel ezen a fórumon is a kérdést, mert állítólag itt sok okos ember fordul meg. :)
Szóval fejleszt Gtk2-Perlben. Egy Gtk2::Assistant-ot használ arra,
hogy a júzer beírja az adatokat, amivel majd dolgozni fog.
Az assistant első oldalán van egy beviteli mező, ami a feldolgozandó
mérés azonosítóját kérdezi.
Azt szeretné, hogy ha ez az azonosító mező üresen marad( vagy már
foglalt), akkor a Tovább gombra nyomáskor felugorjon egy hibaüzenet,
majd azt leokézva visszatérjen az assistant az első oldalra.
Ezt nagyjából csinálja is, egy a gond: miután a felugró hibaüzenet
leokéztatik, az assistant egy üres oldalt ad vissza! Itt nem lehet sok
mindent csinálni, csak rányomni mégegyszer a Továbbra, ekkor feljön még
egyszer a hibaüzenet, majd ezután kapja csak vissza az első oldalt.
Hogy lehetne elérni, hogy ezt az üres oldalas mókát kihagyja, és rögtön
visszaadja az első oldalt?
Hogy egyértelmű legyen, itt a kód is:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Gtk2 -init;
use Gtk2::Ex::Dialogs;
use Glib ':constants';
#my %gui_strings = (
# id_empty_error_title => "Hiba: üres azonosító",
# id_empty_error_text => "Nem adott meg azonosítót! Minden mérésnek rendelkeznie kell egy egyedi azonosítóval.",
# assistant1_title => "Azonosító megadása",
# assistant2_title => "Befejezés",
# assistant2_label => "Jól van!",
#);
my %gui_strings = (
id_empty_error_title => "Error: empty id",
id_empty_error_text => "You did not give a valid identifier.",
assistant1_title => "Id",
assistant2_title => "Confirm",
assistant2_label => "Well done!",
);
my $id;
my $assistant = Gtk2::Assistant->new;
Gtk2::Ex::Dialogs->set_parent_window( $assistant );
$assistant->signal_connect (delete_event => sub { Gtk2->main_quit; });
my $page = Gtk2::Entry->new();
$assistant->append_page ($page);
$assistant->set_page_title ($page, $gui_strings{assistant1_title});
$assistant->set_page_complete ($page, TRUE);
$assistant->set_page_type ($page, 'intro');
$page->show_all;
my $page2 = Gtk2::Label->new($gui_strings{assistant2_label});
$page2->show;
$assistant->append_page ($page2);
$assistant->set_page_title ($page2, $gui_strings{assistant2_title});
$assistant->set_page_complete ($page2, TRUE);
$assistant->set_page_type ($page2, 'confirm');
$assistant->signal_connect (cancel => \&cancel_callback);
$assistant->signal_connect (close => \&cancel_callback);
$assistant->signal_connect (apply => sub {
# do whatever we have to do with the id, here we just print it
print $id."\n";
});
$assistant->signal_connect (prepare => sub {
my $page_num = $assistant->get_current_page();
$id = $page->get_text();
if ($page_num == 1 and $id eq "") {
new_and_run Gtk2::Ex::Dialogs::ErrorMsg ( title => $gui_strings{id_empty_error_title},
text => $gui_strings{id_empty_error_text} );
$assistant->set_current_page(0);
return;
}
});
$assistant->show_all;
Gtk2->main;
sub cancel_callback {
my $widget = shift;
$widget->destroy;
Gtk2->main_quit;
}
Ha tudtok segíteni, nevében is nagyon köszönöm!
- 833 megtekintés