diff options
Diffstat (limited to 'perl-install')
-rw-r--r-- | perl-install/install_steps_interactive.pm | 21 | ||||
-rw-r--r-- | perl-install/interactive.pm | 4 | ||||
-rw-r--r-- | perl-install/interactive_gtk.pm | 49 |
3 files changed, 53 insertions, 21 deletions
diff --git a/perl-install/install_steps_interactive.pm b/perl-install/install_steps_interactive.pm index af70a6fa1..5254dd10f 100644 --- a/perl-install/install_steps_interactive.pm +++ b/perl-install/install_steps_interactive.pm @@ -89,7 +89,6 @@ sub rebootNeeded($) { install_steps::rebootNeeded($o); } #------------------------------------------------------------------------------ - sub choosePartitionsToFormat($$) { my ($o, $fstab) = @_; @@ -164,6 +163,7 @@ sub timeConfig { install_steps::timeConfig($o,$f); } +#------------------------------------------------------------------------------ sub printerConfig($) { my ($o) = @_; $o->{printer}{want} = @@ -171,7 +171,7 @@ sub printerConfig($) { _("Would you like to configure a printer?"), $o->{printer}{want}); return if !$o->{printer}{want}; - + $o->{printer}{complete} = 0; if ($::expert) { #std info @@ -189,7 +189,7 @@ sub printerConfig($) { }, ); } - + $o->{printer}{str_type} = $o->ask_from_list_(_("Select Printer Connection"), _("How is the printer connected?"), @@ -197,7 +197,7 @@ sub printerConfig($) { ${$o->{printer}}{str_type}, ); $o->{printer}{TYPE} = $printer::printer_type{$o->{printer}{str_type}}; - + if ($o->{printer}{TYPE} eq "LOCAL") { eval { modules::load("lp"); }; my @port = (); @@ -206,17 +206,14 @@ sub printerConfig($) { push @port, "/dev/$_" if open LP, ">/dev/$_" } eval { modules::unload("lp") }; - - my $string = _("What device is your printer connected to -(note that /dev/lp0 is equivalent to LPT1:)?\n"); - $string .= _("I detect :"); - $string .= join(", ", @port); + @port =("lp0", "lp1", "lp2"); $o->{printer}{DEVICE} = $port[0] if $port[0]; - + + return if !$o->ask_from_entries_ref(_("Local Printer Device"), - $string, + _("What device is your printer connected to \n(note that /dev/lp0 is equivalent to LPT1:)?\n"), [_("Printer Device:")], - [\$o->{printer}{DEVICE}], + [{val => \$o->{printer}{DEVICE}, list => \@port, is_edit => 1}], ); #TAKE A GOODDEFAULT TODO diff --git a/perl-install/interactive.pm b/perl-install/interactive.pm index c466dabbf..de9998145 100644 --- a/perl-install/interactive.pm +++ b/perl-install/interactive.pm @@ -1,4 +1,5 @@ + package interactive; use diagnostics; @@ -104,8 +105,9 @@ sub ask_from_entries_ref($$$$;$%) { my ($o, $title, $message, $l, $val, %callback) = @_; $message = ref $message ? $message : [ $message ]; + my $val_hash = [ map { (ref $_) eq "SCALAR" ? { val => $_ } : {(%{$_}, type => "list")}} @{$val} ]; - $o->ask_from_entries_refW($title, $message, $l, $val, %callback) + $o->ask_from_entries_refW($title, $message, $l, $val_hash, %callback) } sub wait_message($$$) { diff --git a/perl-install/interactive_gtk.pm b/perl-install/interactive_gtk.pm index 0926d5327..719313549 100644 --- a/perl-install/interactive_gtk.pm +++ b/perl-install/interactive_gtk.pm @@ -79,17 +79,35 @@ sub ask_from_entries_refW { my $ignore = 0; my $w = my_gtk->new($title, %$o); - my @entries = map { new Gtk::Entry } @{$l}; + my @entries = map { + if ($_->{type} eq "list") { + if (@{$_->{list}}) { + my $depth_combo = new Gtk::Combo; + $depth_combo->set_use_arrows_always(1); + $depth_combo->entry->set_editable($_->{is_edit}); + $depth_combo->set_popdown_strings(@{$_->{list}}); + $depth_combo; + } else { + new Gtk::Entry; + } + } else { + new Gtk::Entry; + } + } @{$val}; my $ok = $w->create_okcancel; + sub comb_entry { + my ($entry, $ref) = @_; + ($ref->{type} eq "list" && @{$ref->{list}}) ? $entry->entry : $entry + } my @updates = mapn { my ($entry, $ref) = @_; - return sub { ${$ref} = $entry->get_text }; + return sub { ${$ref->{val}} = comb_entry($entry, $ref)->get_text }; } \@entries, $val; my @updates_inv = mapn { my ($entry, $ref) = @_; - sub { $entry->set_text(${$ref}) + sub { comb_entry($entry, $ref)->set_text(${$ref->{val}}) }; } \@entries, $val; @@ -108,23 +126,38 @@ sub ask_from_entries_refW { } }; my $entry = $entries[$i]; - $entry->signal_connect(changed => $callback); - $entry->signal_connect(activate => sub { + comb_entry($entry,$val->[$i])->signal_connect(changed => $callback); + comb_entry($entry,$val->[$i])->signal_connect(activate => sub { ($ind == ($num_champs -1)) ? $w->{ok}->grab_focus() : $entries[$ind+1]->grab_focus(); }); - $entry->set_text(${$val->[$i]}) if ${$val->[$i]}; - $entry->set_visibility(0) if $_[0] =~ /password/i; + comb_entry($entry,$val->[$i])->set_text(${$val->[$i]{val}}) if ${$val->[$i]{val}}; + comb_entry($entry,$val->[$i])->set_visibility(0) if $_[0] =~ /password/i; # &{$updates[$i]}; } + my @entry_list = mapn { [($_[0], $_[1])]} $l, \@entries; + gtkadd($w->{window}, gtkpack( create_box_with_title($w, @$messages), create_packtable({}, @entry_list), $ok )); - + + if ($hcallback{complete}) { + my $callback = sub { + my ($error, $focus) = &{$hcallback{changed}}; + #update all the value + $ignore = 1; + foreach (@updates_inv) { &{$_};} + $ignore = 0; + if ($error) { + $entries[$focus]->grab_focus(); + } + }; + $w->{ok}->signal_connect(activate => $callback) + } $entries[0]->grab_focus(); $w->main(); } |