From 1d27dbf5e28c61be9eeb078c44f2481fb25e7195 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Tue, 20 Feb 2001 01:09:07 +0000 Subject: major move. now ask_from_list returns false when canceled (it doesn't die 'ask_from_list canceled' anymore) --- perl-install/Xconfigurator.pm | 44 ++++++++++++++++++------------- perl-install/any.pm | 18 ++++++++----- perl-install/install2.pm | 2 +- perl-install/install_steps_interactive.pm | 26 +++++++++--------- perl-install/interactive.pm | 10 ++++--- perl-install/interactive_gtk.pm | 4 +++ perl-install/my_gtk.pm | 14 +++++----- perl-install/printerdrake.pm | 24 +++++++++-------- perl-install/standalone/keyboarddrake | 12 ++++++--- perl-install/standalone/mousedrake | 2 +- 10 files changed, 91 insertions(+), 65 deletions(-) (limited to 'perl-install') diff --git a/perl-install/Xconfigurator.pm b/perl-install/Xconfigurator.pm index 739d542ec..ffa57f784 100644 --- a/perl-install/Xconfigurator.pm +++ b/perl-install/Xconfigurator.pm @@ -181,7 +181,7 @@ sub cardConfiguration(;$$$) { add2hash($card, cardConfigurationAuto()) unless $card->{server} || $noauto; $card->{server} = 'FBDev' unless !$allowFB || $card->{server} || $card->{type} || $noauto; $card->{type} = cardName2RealName($in->ask_from_treelist(_("Graphic card"), _("Select a graphic card"), '|', ['Other|Unlisted', readCardsNames()])) unless $card->{type} || $card->{server}; - undef $card->{type}, $card->{server} = $in->ask_from_list(_("X server"), _("Choose a X server"), $allowFB ? \@allservers : \@allbutfbservers ) if $card->{type} eq 'Other|Unlisted'; + undef $card->{type}, $card->{server} = $in->ask_from_list(_("X server"), _("Choose a X server"), $allowFB ? \@allservers : \@allbutfbservers ) or return if $card->{type} eq 'Other|Unlisted'; updateCardAccordingName($card, $card->{type}) if $card->{type}; add2hash($card, { vendor => "Unknown", board => "Unknown" }); @@ -283,7 +283,7 @@ NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER.", $xf3_ver)) . " #- examine choice of user, beware the list MUST NOT BE REORDERED AS the first item should be the #- proposed one by DrakX. - my $tc = $in->ask_from_listf(_("XFree configuration"), formatAlaTeX($msg), sub { translate($_[0]{text}) }, \@choices); + my $tc = $in->ask_from_listf(_("XFree configuration"), formatAlaTeX($msg), sub { translate($_[0]{text}) }, \@choices) or return; #- in case of class discarding, this can help ... $tc or $tc = $choices[0]; $tc->{code} and $tc->{code}(); @@ -318,7 +318,7 @@ NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER.", $xf3_ver)) . " $videomemory{$in->ask_from_list_('', _("Select the memory size of your graphic card"), [ sort { $videomemory{$a} <=> $videomemory{$b} } - keys %videomemory])}; + keys %videomemory]) || return}; #- hack for ATI Mach64 cards where two options should be used if using Utah-GLX. @@ -1085,23 +1085,31 @@ sub main { my $quit; until ($ok || $quit) { + ref($in) =~ /discard/ and die "automatic X configuration failed, ensure you give hsyncrange and vsyncrange with non-DDC aware videocards/monitors"; - my %c = my @c = ( - __("Change Monitor") => sub { $o->{monitor} = monitorConfiguration() }, - __("Change Graphic card") => sub { $o->{card} = cardConfiguration('', 'noauto', $allowFB) }, - if_($::expert, - __("Change Server options") => sub { optionsConfiguration($o) }), - __("Change Resolution") => sub { resolutionsConfiguration($o) }, - __("Show information") => sub { show_info($o) }, - __("Test again") => sub { $ok = testFinalConfig($o, 1) }, - __("Quit") => sub { $quit = 1 }, - ); $in->set_help('configureXmain') unless $::isStandalone; - my $f = $in->ask_from_list_(['XFdrake'], - _("What do you want to do?"), - [ grep { !ref } @c ]) or die "automatic X configuration failed, ensure you give hsyncrange and vsyncrange with non-DDC aware videocards/monitors"; - eval { &{$c{$f}} }; - !$@ || $@ =~ /ask_from_list cancel/ or die; + + my $f; + $in->ask_from_entries_refH_powered( + { + title => 'XFdrake', + messages => _("What do you want to do?"), + ok => '', + }, [ + { format => sub { $_[0][0] }, val => \$f, + list => [ + [ __("Change Monitor") => sub { $o->{monitor} = monitorConfiguration() } ], + [ __("Change Graphic card") => sub { $o->{card} = cardConfiguration('', 'noauto', $allowFB) } ], + if_($::expert, + [ __("Change Server options") => sub { optionsConfiguration($o) } ]), + [ __("Change Resolution") => sub { resolutionsConfiguration($o) } ], + [ __("Show information") => sub { show_info($o) } ], + [ __("Test again") => sub { $ok = testFinalConfig($o, 1) } ], + [ __("Quit") => sub { $quit = 1 } ], + ], + } + ]); + $f->[1]->(); $in->kill; } if (!$ok) { diff --git a/perl-install/any.pm b/perl-install/any.pm index 2b65ca7c4..6ea56b645 100644 --- a/perl-install/any.pm +++ b/perl-install/any.pm @@ -101,7 +101,7 @@ sub setupBootloader { if (arch() =~ /sparc/) { $b->{use_partition} = $in->ask_from_list_(_("SILO Installation"), _("Where do you want to install the bootloader?"), - \@l, $l[$b->{use_partition}]); + \@l, $l[$b->{use_partition}]) or return; } else { my $boot = $hds->[0]{device}; my $onmbr = "/dev/$boot" eq $b->{boot}; @@ -169,17 +169,21 @@ sub setupBootloader { while ($::expert || $more > 1) { $in->set_help(arch() =~ /sparc/ ? 'setupSILOAddEntry' : 'setupBootloaderAddEntry') unless $::isStandalone; - my $c = $in->ask_from_listf([''], + my $c; + $in->ask_from_entries_refH_powered( + { + messages => _("Here are the different entries. You can add some more or change the existing ones."), - sub { + ok => '', +}, + [ { val => \$c, format => sub { my ($e) = @_; ref $e ? "$e->{label} ($e->{kernel_or_dev})" . ($b->{default} eq $e->{label} && " *") : translate($e); - }, - [ @{$b->{entries}}, __("Add"), __("Done") ]); - + }, list => [ @{$b->{entries}}, __("Add"), __("Done") ] } ] + ); $c eq "Done" and last; my ($e); @@ -553,7 +557,7 @@ sub setup_thiskind { my $opt = [ __("Yes"), __("No") ]; push @$opt, __("See hardware info") if $::expert; my $r = "Yes"; - $r = $in->ask_from_list_('', $msg, $opt, "No") unless $at_least_one && @l == 0; + $r = $in->ask_from_list_('', $msg, $opt, "No") || die 'already displayed' unless $at_least_one && @l == 0; if ($r eq "No") { return @l } if ($r eq "Yes") { push @l, load_module($in, $type) || next; diff --git a/perl-install/install2.pm b/perl-install/install2.pm index f1464ce1e..2f5c3f47a 100644 --- a/perl-install/install2.pm +++ b/perl-install/install2.pm @@ -584,7 +584,7 @@ sub main { redo MAIN; } /^theme_changed$/ and redo MAIN; - unless (/^already displayed/ || /^ask_from_list cancel/) { + unless (/^already displayed/) { eval { $o->errorInStep($_) }; $@ and next; } diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm index 260ee774a..6b634cbf4 100644 --- a/perl-install/install_steps_interactive.pm +++ b/perl-install/install_steps_interactive.pm @@ -198,7 +198,7 @@ sub selectKeyboard { #------------------------------------------------------------------------------ sub selectInstallClass1 { my ($o, $verif, $l, $def, $l2, $def2) = @_; - $verif->($o->ask_from_list(_("Install Class"), _("Which installation class do you want?"), $l, $def)); + $verif->($o->ask_from_list(_("Install Class"), _("Which installation class do you want?"), $l, $def) || die 'already displayed'); $::live ? 'Update' : $o->ask_from_list_(_("Install/Update"), _("Is this an install or an update?"), $l2, $def2); } @@ -244,7 +244,7 @@ sub selectMouse { $o->ask_from_listf(_("Mouse Port"), _("Please choose on which serial port your mouse is connected to."), \&mouse::serial_port2text, - [ mouse::serial_ports ]); + [ mouse::serial_ports ]) or return; } any::setup_thiskind($o, 'usb', !$::expert, 0, $o->{pcmcia}) if $o->{mouse}{device} eq "usbmouse"; @@ -755,11 +755,12 @@ sub configurePrinter { $::expert or $printer->{mode} ||= 'CUPS'; if ($::expert || !$printer->{mode}) { $o->set_help('configurePrinterSystem'); - $printer->{mode} = $o->ask_from_list_([''], _("Which printing system do you want to use?"), - [ 'CUPS', 'lpr', __("None") ], - ); - $printer->{want} = $printer->{mode} ne 'None'; - $printer->{want} or $printer->{mode} = undef, return; + $o->ask_from_entries_refH_powered( + { + messages => _("Which printing system do you want to use?"), + }, [ { val => \$printer->{mode}, list => [ 'CUPS', 'lpr' ] } ] + ) or $printer->{mode} = undef, $printer->{want} = undef, return; + $printer->{want} = 1; $o->set_help('configurePrinter'); } @@ -874,12 +875,11 @@ failures. Would you like to create a bootdisk for your system?")), } else { @l or die _("Sorry, no floppy drive available"); - $o->{mkbootdisk} = $o->ask_from_listf('', - _("Choose the floppy drive you want to use to make the bootdisk"), - sub { $l{$_[0]} || $_[0] }, - [ @l, "Skip" ], - $o->{mkbootdisk}); - return $o->{mkbootdisk} = '' if $o->{mkbootdisk} eq 'Skip'; + $o->ask_from_entries_refH_powered( + { + messages => _("Choose the floppy drive you want to use to make the bootdisk"), + }, [ { val => \$o->{mkbootdisk}, list => \@l, format => sub { $l{$_[0]} || $_[0] } } ] + ) or return; } $o->ask_warn('', _("Insert a floppy in drive %s", $l{$o->{mkbootdisk}} || $o->{mkbootdisk})); } diff --git a/perl-install/interactive.pm b/perl-install/interactive.pm index 928c00c91..1d4dd0c68 100644 --- a/perl-install/interactive.pm +++ b/perl-install/interactive.pm @@ -98,7 +98,12 @@ sub ask_yesorno { sub ask_okcancel { my ($o, $title, $message, $def, $help) = @_; - ask_from_list_($o, $title, $message, [ __("Ok"), __("Cancel") ], $def ? "Ok" : "Cancel", $help) eq "Ok"; + + if ($::isWizard) { + $o->ask_from_entries_refH({ title => $title, messages => $message, focus_cancel => !$def }); + } else { + ask_from_list_($o, $title, $message, [ __("Ok"), __("Cancel") ], $def ? "Ok" : "Cancel", $help) eq "Ok"; + } } sub ask_from_list { @@ -131,8 +136,7 @@ sub ask_from_listf_no_check { if_($l->[1], cancel => may_apply($f, $l->[1]), focus_cancel => $def eq $l->[1]) }, [] ) ? $l->[0] : $l->[1]; } else { - ask_from_entries_refH($o, $title, $message, [ { val => \$def, type => 'list', list => $l, help => $help, format => $f } ]) or die 'ask_from_list cancel'; - $def; + ask_from_entries_refH($o, $title, $message, [ { val => \$def, type => 'list', list => $l, help => $help, format => $f } ]) && $def; } } diff --git a/perl-install/interactive_gtk.pm b/perl-install/interactive_gtk.pm index 69140aad9..8cc04ac79 100644 --- a/perl-install/interactive_gtk.pm +++ b/perl-install/interactive_gtk.pm @@ -28,6 +28,10 @@ sub exit { c::_exit($_[0]) #- workaround } +sub ask_warn { + local $my_gtk::pop_it = 1; + &interactive::ask_warn; +} sub create_clist { my ($e, $may_go_to_next, $changed) = @_; my (@widgets, $curr); diff --git a/perl-install/my_gtk.pm b/perl-install/my_gtk.pm index 24549d7d7..3df0bc18a 100644 --- a/perl-install/my_gtk.pm +++ b/perl-install/my_gtk.pm @@ -43,7 +43,7 @@ sub new { $o->{rwindow}->set_position('center_always') if $::isStandalone; $o->{rwindow}->set_modal(1) if $my_gtk::grab || $o->{grab}; - if ($::isWizard) { + if ($::isWizard && !$my_gtk::pop_it) { my $rc = "/etc/gtk/wizard.rc"; -r $rc or $rc = dirname(__FILE__) . "/wizard.rc"; Gtk::Rc->parse($rc); @@ -288,12 +288,12 @@ sub create_okcancel { my ($w, $ok, $cancel, $spread, @other) = @_; my $one = ($ok xor $cancel); $spread ||= $::isWizard ? "end" : "spread"; - $ok ||= _("Ok"); - $::isWizard and $ok = _("Next ->"); + $ok ||= $::isWizard ? _("Next ->") : _("Ok"); + $cancel ||= $::isWizard ? _("Previous") : _("Cancel"); my $b1 = gtksignal_connect($w->{ok} = new Gtk::Button($ok), clicked => $w->{ok_clicked} || sub { $w->{retval} = 1; Gtk->main_quit }); - my $b2 = !$one && gtksignal_connect($w->{cancel} = new Gtk::Button($cancel || _("Cancel")), clicked => $w->{cancel_clicked} || sub { log::l("default cancel_clicked"); undef $w->{retval}; Gtk->main_quit }); - $::isWizard and my $b3 = gtksignal_connect($w->{previous} = new Gtk::Button(_("<- Previous")), clicked => $w->{previous_clicked} || sub { log::l("default previous_clicked"); $w->{retval} = -1; Gtk->main_quit }); - my @l = grep { $_ } $::isWizard ? ($b2, $b3, $b1): ($b1, $b2); + my $b2 = !$one && gtksignal_connect($w->{cancel} = new Gtk::Button($cancel), clicked => $w->{cancel_clicked} || sub { log::l("default cancel_clicked"); undef $w->{retval}; Gtk->main_quit }); + $::isWizard and gtksignal_connect($w->{wizcancel} = new Gtk::Button(_("Cancel")), clicked => sub { die 'wizcancel' }); + my @l = grep { $_ } $::isWizard ? ($b2, $w->{wizcancel}, $b1): ($b1, $b2); push @l, map { gtksignal_connect(new Gtk::Button($_->[0]), clicked => $_->[1]) } @other; $_->can_default($::isWizard) foreach @l; @@ -375,7 +375,7 @@ sub create_packtable($@) { ref $_ or $_ = new Gtk::Label($_); $j != $#$l ? $w->attach($_, $j, $j + 1, $i, $i + 1, 'fill', 'fill', 5, 0) : - $w->attach($_, $j, $j + 1, $i, $i + 1, 1|4, ref($_) eq 'Gtk::ScrolledWindow' ? 1|4 : 0, 0, 0); + $w->attach($_, $j, $j + 1, $i, $i + 1, { 'fill', 'expand' }, ref($_) eq 'Gtk::ScrolledWindow' ? { 'fill', 'expand' } : 0, 0, 0); $_->show; } } @$l; diff --git a/perl-install/printerdrake.pm b/perl-install/printerdrake.pm index 37560ecde..f9f42127b 100644 --- a/perl-install/printerdrake.pm +++ b/perl-install/printerdrake.pm @@ -235,15 +235,13 @@ sub setup_gsdriver_lpr($$$;$) { do { $printer->{DBENTRY} ||= $printer::thedb_gsdriver{$printer->{GSDRIVER}}{ENTRY}; - eval { $printer->{DBENTRY} = $printer::descr_to_db{ + $printer->{DBENTRY} = $printer::descr_to_db{ $in->ask_from_list_(_("Configure Printer"), _("What type of printer do you have?"), [ @printer::entry_db_description ], $printer::db_to_descr{$printer->{DBENTRY}}, - { %printer::descr_to_help }) - }; - }; $@ =~ /^ask_from_list cancel/ and return; - + { %printer::descr_to_help }) || return + }; my %db_entry = %{$printer::thedb{$printer->{DBENTRY}}}; #- specific printer drivers to install. @@ -300,7 +298,7 @@ sub setup_gsdriver_lpr($$$;$) { printer::configure_queue($printer); $printer->{complete} = 0; - $action = $in->ask_from_listf('', _("Do you want to test printing?"), sub { $action{$_[0]} }, \@action, 'done'); + $action = $in->ask_from_listf('', _("Do you want to test printing?"), sub { $action{$_[0]} }, \@action, 'done') or return; my @testpages; push @testpages, "/usr/lib/rhs/rhs-printfilters/testpage.asc" @@ -342,10 +340,14 @@ sub main($$$;$) { $queue = $printer->{want} || $in->ask_yesorno(_("Printer"), _("Would you like to configure a printer?"), 0) ? 'lp' : 'Done'; } else { - $queue = $in->ask_from_list_([''], + $in->ask_from_entries_refH_powered(, + { + messages => _("Here are the following print queues. You can add some more or change the existing ones."), - [ (sort keys %{$printer->{configured} || {}}), __("Add"), __("Done") ], + ok => '', + }, [ { val => \$queue, format => \&translate, list => [ (sort keys %{$printer->{configured} || {}}), __("Add"), __("Done") ] } ] + ); ); if ($queue eq 'Add') { my %queues; @queues{map { split '\|', $_ } keys %{$printer->{configured}}} = (); @@ -376,7 +378,7 @@ You can add some more or change the existing ones."), _("How is the printer connected?"), [ printer::printer_type($printer) ], $printer->{str_type}, - ); + ) or return; $printer->{TYPE} = $printer::printer_type{$printer->{str_type}}; if ($printer->{TYPE} eq 'REMOTE') { $printer->{str_type} = $printer::printer_type_inv{CUPS}; @@ -386,7 +388,7 @@ any printer here; printers will be automatically detected. In case of doubt, select \"Remote CUPS server\"."), [ @printer::printer_type_inv{qw(CUPS LPD SOCKET)} ], $printer->{str_type}, - ); + ) or return; $printer->{TYPE} = $printer::printer_type{$printer->{str_type}}; } if ($printer->{TYPE} eq 'CUPS') { @@ -455,7 +457,7 @@ how is the printer connected?") }, [ _("How is the printer connected?"), [ printer::printer_type($printer) ], $printer->{str_type}, - ); + ) or return; } else { $in->set_help('configurePrinterLPR') if $::isInstall; $in->ask_from_entries_refH_powered( diff --git a/perl-install/standalone/keyboarddrake b/perl-install/standalone/keyboarddrake index 6a0b86d86..6e89d353e 100755 --- a/perl-install/standalone/keyboarddrake +++ b/perl-install/standalone/keyboarddrake @@ -28,7 +28,7 @@ $keyboard ||= $in->ask_from_listf_(_("Keyboard"), _("Please, choose your keyboard layout."), \&keyboard::keyboard2text, [ keyboard::keyboards() ], - keyboard::read()); + keyboard::read()) or $in->exit(0); keyboard::keyboard2text($keyboard) or die "bad keyboard $keyboard\n"; @@ -61,6 +61,10 @@ substInFile { keyboard::write('', $keyboard, $isNotDelete); -$::isEmbedded ? kill(USR1, $::CCPID) : $in->exit(0); -$keyboard=''; -goto begin; +if ($::isEmbedded) { + kill(USR1, $::CCPID); + $keyboard = ''; + goto begin; +} else { + $in->exit(0); +} diff --git a/perl-install/standalone/mousedrake b/perl-install/standalone/mousedrake index aff16a1b6..ebb332f89 100755 --- a/perl-install/standalone/mousedrake +++ b/perl-install/standalone/mousedrake @@ -42,7 +42,7 @@ $o->{mouse}{device} = $o->ask_from_listf(_("Mouse Port"), _("Please choose on which serial port your mouse is connected to."), \&mouse::serial_port2text, - [ mouse::serial_ports ]) if $mouse->{type} eq 'serial'; + [ mouse::serial_ports ]) || goto begin if $mouse->{type} eq 'serial'; dumpValue(\$mouse); mouse::write_conf($mouse); -- cgit v1.2.1