Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
lib/Gtk2/Ex/FormFactory/Context.pm view on Meta::CPAN
return $proxy->get_object;
}
sub set_object {
my $self = shift;
my ($name, $object) = @_;
$name = $self->norm_object($name);
my $proxy = $self->get_proxies_by_name->{$name};
croak "Object $name not added to this context"
unless $proxy;
$proxy->set_object($object);
return $object;
}
sub set_object_attr {
my $self = shift;
my ($object_name, $attr_name, $value);
if ( @_ == 2 ) {
($object_name, $attr_name) = split(/\./, $_[0]);
$value = $_[1];
} elsif ( @_ == 3 ) {
($object_name, $attr_name, $value) = @_;
} else {
croak qq[Usage: set_object_attr("object.attr","value")].
qq[ set_object_attr("object","attr","value")];
}
my $proxy = $self->get_proxies_by_name->{$object_name}
or die "Object '$object_name' not registered";
$proxy->set_attr($attr_name, $value);
return $value;
}
sub get_object_attr {
my $self = shift;
my ($object_name, $attr_name);
if ( @_ == 1 ) {
($object_name, $attr_name) = split(/\./, $_[0]);
} elsif ( @_ == 2 ) {
($object_name, $attr_name) = @_;
} else {
croak qq[Usage: get_object_attr("object.attr")].
qq[ get_object_attr("object","attr")];
}
my $proxy = $self->get_proxies_by_name->{$object_name}
or die "Object '$object_name' not registered";
return $proxy->get_attr($attr_name);
}
sub update_object_attr_widgets {
my $self = shift;
my ($object, $attr) = @_;
my $object_attr = $self->norm_object_attr($object, $attr);
$Gtk2::Ex::FormFactory::DEBUG &&
print "update_object_attr_widgets($object, $attr)\n";
my $widgets_by_attr = $self->get_widgets_by_attr;
my $depend_trigger_href = $self->get_depend_trigger_href;
my $widget_activity_href = $self->get_widget_activity_href;
foreach my $w ( values %{$widgets_by_attr->{$object_attr}} ) {
$w->update;
}
foreach my $w ( values %{$widget_activity_href->{$object_attr}} ) {
$w->update;
}
foreach my $update_object_attr ( keys %{$depend_trigger_href->{$object_attr}} ) {
foreach my $w ( values %{$widgets_by_attr->{$update_object_attr}} ) {
$w->update;
}
foreach my $name ( keys %{$self->get_aggregated_by_href->{$update_object_attr}} ) {
$self->get_proxy($name)->update_by_aggregation;
}
}
1;
}
sub update_object_widgets {
my $self = shift;
my ($name) = @_;
$Gtk2::Ex::FormFactory::DEBUG &&
print "update_object_widgets($name)\n";
$name = $self->norm_object_attr($name);
my $object = $self->get_object($name);
my $change_state = defined $object ? '' : 'empty,inactive';
my $widgets_by_object = $self->get_widgets_by_object;
foreach my $w ( values %{$widgets_by_object->{$name}} ) {
$w->update($change_state);
}
my $widget_activity_href = $self->get_widget_activity_href;
foreach my $w ( values %{$widget_activity_href->{$name}} ) {
$w->update($change_state);
}
my $update_hook = $self->get_update_hooks_by_object->{$name};
&$update_hook($object) if $update_hook;
1;
}
sub update_object_widgets_activity {
my $self = shift;
my ($name, $activity) = @_;
warn "activity !(empty|inactive|active)"
unless $activity =~ /^empty|inactive|active$/;
$Gtk2::Ex::FormFactory::DEBUG &&
print "update_object_activity($name)\n";
my $widgets_by_object = $self->get_widgets_by_object;
foreach my $w ( values %{$widgets_by_object->{$name}} ) {
$w->update;
}
1;
}
1;
__END__
=head1 NAME
Gtk2::Ex::FormFactory::Context - Context in a FormFactory framework
=head1 SYNOPSIS
my $context = Gtk2::Ex::FormFactory::Context->new (
default_get_prefix => Default prefix for read accessors,
default_set_prefix => Default prefix for write accessors,
);
$context->add_object (
name => Name of the application object in
this Context,
aggregated_by => Object.Attribute of the parent object
aggregating this object
object => The application object itself or a
callback which returns the object,
or undef if aggregated or set later
get_prefix => Prefix for read accessors,
set_prefix => Prefix for write accessors,
accessor => CODEREF which handles access to all object
attributes
attr_activity_href => Hash of CODEREFS for attributes which return
activity of the corresponding attributes,
attr_depends_href => Hash defining attribute dependencies,
attr_accessors_href => Hash of CODEREFS which override correspondent
accessors in this Context,
buffered => Indicates whether changes should be buffered,
changes_attr_filter => Regex for attributes which should not trigger
the object's 'changed' status
);
=head1 DESCRIPTION
This module implements a very importent concept of the
Gtk2::Ex::FormFactory framework.
( run in 0.582 second using v1.01-cache-2.11-cpan-39bf76dae61 )