From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
sub get_type { "yesno" }
sub get_gtk_yes_widget { shift->{gtk_yes_widget} }
sub get_gtk_no_widget { shift->{gtk_no_widget} }
sub get_true_label { shift->{true_label} || "Yes" }
sub get_false_label { shift->{false_label} || "No" }
sub set_gtk_yes_widget { shift->{gtk_yes_widget} = $_[1] }
sub set_gtk_no_widget { shift->{gtk_no_widget} = $_[1] }
sub set_true_label { shift->{true_label} = $_[1] }
sub set_false_label { shift->{false_label} = $_[1] }
sub get_gtk_tip_widgets {[
$_[0]->get_gtk_yes_widget,
$_[0]->get_gtk_no_widget,
]}
sub new {
my $class = shift;
my %par = @_;
my ($true_label, $false_label) = @par{'true_label','false_label'};
my $self = $class->SUPER::new(@_);
$self->set_true_label($true_label);
$self->set_false_label($false_label);
return $self;
}
sub cleanup {
my $self = shift;
$self->SUPER::cleanup(@_);
$self->set_gtk_yes_widget(undef);
$self->set_gtk_no_widget(undef);
1;
}
sub object_to_widget {
my $self = shift;
if ( $self->get_object_value ) {
$self->get_gtk_yes_widget->set_active(1);
} else {
$self->get_gtk_no_widget->set_active(1);
}
1;
}
sub widget_to_object {
my $self = shift;
$self->set_object_value ($self->get_gtk_yes_widget->get_active ? 1 : 0);
1;
}
sub backup_widget_value {
my $self = shift;
$self->set_backup_widget_value ($self->get_gtk_yes_widget->get_active ? 1 : 0);
1;
}
sub restore_widget_value {
my $self = shift;
$self->get_gtk_yes_widget->set_active($self->get_backup_widget_value);
1;
}
sub get_widget_check_value {
$_[0]->get_gtk_yes_widget->get_active;
}
sub connect_changed_signal {
my $self = shift;
$self->get_gtk_yes_widget->signal_connect (
toggled => sub { $self->widget_value_changed },
);
1;
}
1;
__END__
=head1 NAME
Gtk2::Ex::FormFactory::YesNo - Yes/No radio buttons in a FormFactory framework
=head1 SYNOPSIS
Gtk2::Ex::FormFactory::YesNo->new (
true_label => Label of the "Yes" button,
false_label => Label of the "No" button,
...
Gtk2::Ex::FormFactory::Widget attributes
);
=head1 DESCRIPTION
This class implements two RadioButton's grouped together as a
Yes and a No button. The state of both RadioButton's is controlled
by one associated application object attribute, which should has a
boolean value.
=head1 OBJECT HIERARCHY
Gtk2::Ex::FormFactory::Intro
Gtk2::Ex::FormFactory::Widget
+--- Gtk2::Ex::FormFactory::YesNo
Gtk2::Ex::FormFactory::Layout
Gtk2::Ex::FormFactory::Rules
Gtk2::Ex::FormFactory::Context
Gtk2::Ex::FormFactory::Proxy
=head1 ATTRIBUTES
Attributes are handled through the common get_ATTR(), set_ATTR()
style accessors, but they are mostly passed once to the object
constructor and must not be altered after the associated FormFactory
was built.
=over 4
=item B<true_label> = SCALAR [optional]
This is the label of the button which is activated when the
associated application object attribute is TRUE. Defaults to "Yes".
=item B<false_label> = SCALAR [optional]
This is the label of the button which is activated when the
associated application object attribute is FALSE. Defaults to "No".
=back
For more attributes refer to L<Gtk2::Ex::FormFactory::Widget>.
=head1 AUTHORS
Jörn Reder <joern at zyn dot de>
=head1 COPYRIGHT AND LICENSE
Copyright 2004 by Jörn Reder.
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307
USA.
=cut