83 lines
2.1 KiB
Perl
83 lines
2.1 KiB
Perl
#!/usr/bin/perl
|
|
# This file was preprocessed, do not edit!
|
|
|
|
|
|
package Debconf::Element::Dialog::Multiselect;
|
|
use warnings;
|
|
use strict;
|
|
use base qw(Debconf::Element::Multiselect);
|
|
use Debconf::Encoding qw(width);
|
|
use Debconf::Log qw(debug);
|
|
|
|
|
|
sub show {
|
|
my $this=shift;
|
|
|
|
my ($text, $lines, $columns)=
|
|
$this->frontend->makeprompt($this->question, -2);
|
|
|
|
my $screen_lines=$this->frontend->screenheight - $this->frontend->spacer;
|
|
my @params=();
|
|
my @choices=$this->question->choices_split;
|
|
my %value = map { $_ => 1 } $this->translate_default;
|
|
|
|
my $menu_height=$#choices + 1;
|
|
if ($lines + $#choices + 2 >= $screen_lines) {
|
|
$menu_height = $screen_lines - $lines - 4;
|
|
if ($menu_height < 3 && $#choices + 1 > 2) {
|
|
$this->frontend->showtext($this->question, $this->question->extended_description);
|
|
($text, $lines, $columns)=$this->frontend->sizetext($this->question->description);
|
|
$menu_height=$#choices + 1;
|
|
if ($lines + $#choices + 2 >= $screen_lines) {
|
|
$menu_height = $screen_lines - $lines - 4;
|
|
}
|
|
}
|
|
}
|
|
|
|
$lines=$lines + $menu_height + $this->frontend->spacer;
|
|
my $selectspacer = $this->frontend->selectspacer;
|
|
my $c=1;
|
|
my %unellipsized;
|
|
foreach (@choices) {
|
|
my $choice = $this->frontend->ellipsize($_);
|
|
|
|
if (exists $unellipsized{$choice}) {
|
|
debug 'developer' => sprintf
|
|
'Ambiguous ellipsized choice "%s": "%s" or "%s". Overflow.',
|
|
$choice, $unellipsized{$choice}, $_;
|
|
$choice = $_;
|
|
}
|
|
$unellipsized{$choice} = $_;
|
|
|
|
push @params, ($choice, "");
|
|
push @params, ($value{$_} ? 'on' : 'off');
|
|
|
|
if ($columns < width($choice) + $selectspacer) {
|
|
$columns = width($choice) + $selectspacer;
|
|
}
|
|
}
|
|
|
|
if ($this->frontend->dashsep) {
|
|
unshift @params, $this->frontend->dashsep;
|
|
}
|
|
|
|
@params=('--separate-output', '--checklist',
|
|
$text, $lines, $columns, $menu_height, @params);
|
|
|
|
my $value=$this->frontend->showdialog($this->question, @params);
|
|
|
|
if (defined $value) {
|
|
$this->value(join(", ", $this->order_values(
|
|
map { $this->translate_to_C($unellipsized{$_}) }
|
|
split(/\n/, $value))));
|
|
}
|
|
else {
|
|
my $default='';
|
|
$default=$this->question->value
|
|
if defined $this->question->value;
|
|
$this->value($default);
|
|
}
|
|
}
|
|
|
|
1
|