From 66bfc95dc2e453e9d52b02017c2241f6597e3d80 Mon Sep 17 00:00:00 2001 From: Till Kamppeter Date: Thu, 24 Jan 2002 22:42:54 +0000 Subject: Fixed bug of empty menu entry appearing after adding a new printer. Modified "Local Printer" dialog to be more newbie-friendly. --- perl-install/detect_devices.pm | 2 +- perl-install/printer.pm | 4 +- perl-install/printerdrake.pm | 126 ++++++++++++++++++++++++++++++++++------- 3 files changed, 109 insertions(+), 23 deletions(-) diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm index 1538aa062..3178aa756 100644 --- a/perl-install/detect_devices.pm +++ b/perl-install/detect_devices.pm @@ -450,7 +450,7 @@ sub whatPrinter() { } sub whatPrinterPort() { - grep { tryWrite($_)} qw(/dev/lp0 /dev/lp1 /dev/lp2 /dev/usb/lp0 /dev/usb/lp1 /dev/usb/lp2); + grep { tryWrite($_)} qw(/dev/lp0 /dev/lp1 /dev/lp2 /dev/usb/lp0 /dev/usb/lp1 /dev/usb/lp2 /dev/usb/lp3 /dev/usb/lp4 /dev/usb/lp5 /dev/usb/lp6 /dev/usb/lp7 /dev/usb/lp8 /dev/usb/lp9); } sub probeSerialDevices { diff --git a/perl-install/printer.pm b/perl-install/printer.pm index 906d8550e..57a01352b 100644 --- a/perl-install/printer.pm +++ b/perl-install/printer.pm @@ -453,7 +453,6 @@ sub make_menuentry { } else { $localremote = _("Remote Printers"); } - my $queue = $printer->{configured}{$queue}{'queuedata'}{'queue'}; my $make = $printer->{configured}{$queue}{'queuedata'}{'make'}; my $model = $printer->{configured}{$queue}{'queuedata'}{'model'}; my $connection; @@ -1136,6 +1135,9 @@ sub configure_queue($) { $printer->{configured}{$printer->{currentqueue}{'queue'}}{'args'} = read_cups_options($printer->{currentqueue}{'queue'}); } + # Construct an entry line for tree view in main window of + # printerdrake + make_menuentry($printer, $printer->{currentqueue}{'queue'}); # Clean up delete($printer->{ARGS}); $printer->{OLD_CHOICE} = ""; diff --git a/perl-install/printerdrake.pm b/perl-install/printerdrake.pm index 3d2dda521..6d9898de5 100644 --- a/perl-install/printerdrake.pm +++ b/perl-install/printerdrake.pm @@ -238,44 +238,128 @@ sub setup_local { For local printers auto-detection is not really necessary, because they are external devices where you can easily see on their labels which models you have, but if you really want to auto-detect them, connect them and turn them on now and click \"Yes\", otherwise click \"No\"."),0); my @parport; + my $menuentries; if ($do_auto_detect) { @parport = auto_detect($in); $in->set_help('setupLocal') if $::isInstall; - foreach (@parport) { - $_->{val}{DESCRIPTION} and push @str, _("A printer, model \"%s\", has been detected on ", - $_->{val}{DESCRIPTION}) . $_->{port}; + for my $p (@parport) { + if ($p->{val}{DESCRIPTION}) { + my $menustr = $p->{val}{DESCRIPTION}; + if ($p->{port} =~ m!^/dev/lp(\d+)$!) { + $menustr .= _(" on parallel port \#%s", $1); + } elsif ($p->{port} =~ m!^/dev/usb/lp(\d+)$!) { + $menustr .= _(", USB printer \#%s", $1); + } + if ($::expert) { + $menustr .= " ($p->{port})"; + } + $menuentries->{$menustr} = $p->{port}; + push @str, _("Detected %s", $menustr); + } else { + my $menustr; + if ($p->{port} =~ m!^/dev/lp(\d+)$!) { + $menustr = _("Printer on parallel port \#%s", $1); + } elsif ($p->{port} =~ m!^/dev/usb/lp(\d+)$!) { + $menustr = _("USB printer \#%s", $1); + } + if ($::expert) { + $menustr .= " ($p->{port})"; + } + $menuentries->{$menustr} = $p->{port}; + } } if ($::expert || !@str) { @port = detect_devices::whatPrinterPort(); - } else { - @port = map { $_->{port} } grep { $_->{val}{DESCRIPTION} } @parport; + for my $q (@port) { + if (@str) { + my $alreadyfound = 0; + for my $p (@parport) { + if ($p->{port} eq $q) { + $alreadyfound = 1; + last; + } + } + if ($alreadyfound) { + next; + } + } + my $menustr; + if ($q =~ m!^/dev/lp(\d+)$!) { + $menustr = _("Printer on parallel port \#%s", $1); + } elsif ($q =~ m!^/dev/usb/lp(\d+)$!) { + $menustr = _("USB printer \#%s", $1); + } + if ($::expert) { + $menustr .= " ($q)"; + } + $menuentries->{$menustr} = $q; + } } } else { - @port = qw(/dev/lp0 /dev/lp1 /dev/lp2 - /dev/usb/lp0 /dev/usb/lp1 /dev/usb/lp2); + my $m; + for ($m = 0; $m <= 2; $m++) { + my $menustr = _("Printer on parallel port \#%s", $m); + if ($::expert) { + $menustr .= " (/dev/lp$m)"; + } + $menuentries->{$menustr} = "/dev/lp$m"; + $menustr = _("USB printer \#%s", $m); + if ($::expert) { + $menustr .= " (/dev/usb/lp$m)"; + } + $menuentries->{$menustr} = "/dev/usb/lp$m"; + } } + my @menuentrieslist = sort { $menuentries->{$a} cmp $menuentries->{$b} } + keys(%{$menuentries}); + my $menuchoice = ""; if (($printer->{configured}{$queue}) && ($printer->{currentqueue}{'connect'} =~ m/^file:/)) { $device = $printer->{currentqueue}{'connect'}; $device =~ s/^file://; - } elsif ($port[0]) { - $device = $port[0]; + for my $p (keys %{$menuentries}) { + if ($device eq $menuentries->{$p}) { + $menuchoice = $p; + last; + } + } + } + if (($menuchoice eq "") && (@menuentrieslist > -1)) { + $menuchoice = $menuentrieslist[0]; } if ($in) { $::expert or $in->set_help('configurePrinterDev') if $::isInstall; - return if !$in->ask_from(_("Local Printer Device"), -_("What device is your printer connected to? -(Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., -1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...)\n") . (join "\n", @str), [ -{ label => _("Printer Device"), val => \$device, list => \@port, not_edit => !$::expert } ], -complete => sub { - unless ($device ne "") { - $in->ask_warn('', _("Device/file name missing!")); - return (1,0); + return if !$in->ask_from(_("Local Printer"), + ($do_auto_detect ? + ($::expert ? + (@str ? +_("Here is a list of all auto-detected printers. ") : ()) . +_("Please choose the desired printer/printer port or enter a device name/file name in the input line") : + (@str ? +_("Here is a list of all auto-detected printers. ") : ()) . +_("Please choose the desired printer/printer port.\n\n")) : + ($::expert ? +_("Please choose the port where your printer is connected to or enter a device name/file name in the input line") : +_("Please choose the port where your printer is connected to.\n\n"))) . + ($::expert ? +_(" (Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., 1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...).\n\n") : + ()). (join "\n", @str), [ +{ label => _("Your choice"), val => \$menuchoice, list => \@menuentrieslist, not_edit => !$::expert } ], + complete => sub { + unless ($menuchoice ne "") { + $in->ask_warn('', _("You must choose/enter a printer/device!")); + return (1,0); + } + return 0; + } + ); } - return 0; -} - ); + + #- Get the device file name according to what was chosen from the menu + if ($menuentries->{$menuchoice}) { + $device = $menuentries->{$menuchoice}; + } else { + $device = $menuchoice; } #- make the DeviceURI from $device. -- cgit v1.2.1