Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
lib/Gtk2/Ex/FormFactory/CheckButtonGroup.pm view on Meta::CPAN
if ( $self->get_attr_row_labels ) {
$row_labels = $self->get_proxy->get_attr($self->get_attr_row_labels);
}
if ( $self->get_attr_column_labels ) {
$column_labels = $self->get_proxy->get_attr($self->get_attr_column_labels);
}
if ( $max_rows ) {
$rows = $max_rows;
$rows = $cnt if $rows > $cnt;
$columns = ceil($cnt / $rows);
} else {
$columns = $max_columns;
$columns = $cnt if $columns > $cnt;
$rows = ceil($cnt / $columns);
}
my %gtk_check_buttons;
my $gtk_table = Gtk2::Table->new ($rows, $columns);
$gtk_table->set ( homogeneous => $self->get_homogeneous );
++$columns if $row_labels;
++$rows if $column_labels;
my $i = 0;
for ( my $c=0; $c < $columns && $i < $cnt; ++$c ) {
for ( my $r=0; $r < $rows && $i < $cnt; ++$r ) {
next if $column_labels && $c == 0 && $r == 0;
if ( $row_labels && $c==0 && $r > 0 ) {
my $gtk_label = Gtk2::Label->new($row_labels->[$r-1]);
$gtk_table->attach_defaults($gtk_label, $c, $c+1, $r, $r+1);
next;
}
if ( $column_labels && $r==0 && $c > 0 ) {
my $gtk_label = Gtk2::Label->new($column_labels->[$c-1]);
$gtk_table->attach_defaults($gtk_label, $c, $c+1, $r, $r+1);
next;
}
my $checkbox = $checkboxes->[$i];
my $gtk_check_button = Gtk2::CheckButton->new($checkbox->[1]);
$gtk_check_buttons{$checkbox->[0]} = $gtk_check_button;
$gtk_check_button->set_active(1) if $selected_href->{$checkbox->[0]};
$gtk_table->attach_defaults($gtk_check_button, $c, $c+1, $r, $r+1);
++$i;
}
}
$hbox->pack_start($gtk_table, 0, 1, 0);
$hbox->show_all;
$self->set_gtk_check_buttons(\%gtk_check_buttons);
$self->set_gtk_table($gtk_table);
$self->connect_changed_signal_for_all_buttons;
1;
}
sub update_selection {
my $self = shift;
$self->set_in_selection_update(1);
my $selected_href = $self->get_object_value;
my $gtk_check_buttons = $self->get_gtk_check_buttons;
while ( my ($value, $gtk_check_button) = each %{$gtk_check_buttons} ) {
$gtk_check_button->set_active( $selected_href->{$value} );
}
$self->set_in_selection_update(0);
1;
}
sub widget_to_object {
my $self = shift;
return if $self->get_in_selection_update;
my $gtk_check_buttons = $self->get_gtk_check_buttons;
my %selected;
while ( my ($value, $gtk_check_button) = each %{$gtk_check_buttons} ) {
$selected{$value} = 1 if $gtk_check_button->get_active;
}
$self->set_object_value(\%selected);
1;
}
sub connect_changed_signal_for_all_buttons {
my $self = shift;
my $gtk_check_buttons = $self->get_gtk_check_buttons;
while ( my ($value, $gtk_check_button) = each %{$gtk_check_buttons} ) {
$gtk_check_button->signal_connect ( toggled => sub {
return 1 if $self->get_in_selection_update;
$self->set_last_toggled_value($value);
$self->widget_value_changed;
1;
} );
}
1;
}
1;
__END__
=head1 NAME
Gtk2::Ex::FormFactory::CheckButtonGroup - A group of checkbuttons
=head1 SYNOPSIS
( run in 1.191 second using v1.01-cache-2.11-cpan-39bf76dae61 )