home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / perl5 / Debconf / Element / Gnome / Multiselect.pm < prev    next >
Encoding:
Perl POD Document  |  2006-07-24  |  2.4 KB  |  95 lines

  1. #!/usr/bin/perl -w
  2. # This file was preprocessed, do not edit!
  3.  
  4.  
  5. package Debconf::Element::Gnome::Multiselect;
  6. use strict;
  7. use Gtk2;
  8. use utf8;
  9. use Debconf::Encoding qw(to_Unicode);
  10. use base qw(Debconf::Element::Gnome Debconf::Element::Multiselect);
  11.  
  12. use constant SELECTED_COLUMN => 0;
  13. use constant CHOICES_COLUMN  => 1;
  14.  
  15. sub init {
  16.     my $this=shift;
  17.     my @choices = map { to_Unicode($_) } $this->question->choices_split;
  18.         my %default=map { to_Unicode($_) => 1 } $this->translate_default;
  19.  
  20.     $this->SUPER::init(@_);
  21.     $this->multiline(1);
  22.  
  23.     $this->adddescription;
  24.  
  25.         $this->widget(Gtk2::ScrolledWindow->new);
  26.         $this->widget->show;
  27.         $this->widget->set_policy('automatic', 'automatic');
  28.     
  29.     my $list_store = Gtk2::ListStore->new('Glib::Boolean', 'Glib::String');
  30.     $this->list_view(Gtk2::TreeView->new($list_store));
  31.     $this->list_view->set_headers_visible(0);
  32.  
  33.     my $renderer_toggle = Gtk2::CellRendererToggle->new;
  34.     $renderer_toggle->signal_connect(toggled => sub {
  35.         my $path_string = $_[1];
  36.         my $model = $_[2];
  37.         my $iter = $model->get_iter_from_string($path_string);
  38.         $model->set($iter, SELECTED_COLUMN,
  39.                     not $model->get($iter, SELECTED_COLUMN));
  40.     }, $list_store);
  41.  
  42.     $this->list_view->append_column(
  43.         Gtk2::TreeViewColumn->new_with_attributes('Selected',
  44.             $renderer_toggle, 'active', SELECTED_COLUMN));
  45.     $this->list_view->append_column(
  46.         Gtk2::TreeViewColumn->new_with_attributes('Choices',
  47.             Gtk2::CellRendererText->new, 'text', CHOICES_COLUMN)); 
  48.     $this->list_view->show;
  49.  
  50.     $this->widget->add($this->list_view);
  51.  
  52.     for (my $i=0; $i <= $#choices; $i++) {
  53.         my $iter = $list_store->append();
  54.         $list_store->set($iter, CHOICES_COLUMN, $choices[$i]);
  55.         if ($default{$choices[$i]}) {
  56.             $list_store->set($iter, SELECTED_COLUMN, 1);
  57.         }
  58.     }
  59.     $this->addwidget($this->widget);
  60.     $this->tip($this->list_view);
  61.     $this->addhelp;
  62.  
  63.     $this->fill(1);
  64.     $this->expand(1);
  65.  
  66. }
  67.  
  68.  
  69. sub value {
  70.     my $this=shift;
  71.     my $list_view = $this->list_view;
  72.     my $list_store = $list_view->get_model ();
  73.     my ($ret, $val);
  74.     
  75.     my @vals;
  76.     $this->question->template->i18n('');
  77.     my @choices=$this->question->choices_split;
  78.     $this->question->template->i18n(1);
  79.     
  80.     my $iter = $list_store->get_iter_first();
  81.     for (my $i=0; $i <= $#choices; $i++) {
  82.         if ($list_store->get($iter, SELECTED_COLUMN)) {
  83.             push @vals, $choices[$i];
  84.         }
  85.         $iter = $list_store->iter_next($iter);
  86.     }
  87.  
  88.     return join(', ', $this->order_values(@vals));
  89. }
  90.  
  91. *visible = \&Debconf::Element::Multiselect::visible;
  92.  
  93.  
  94. 1
  95.