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 )