PropertyA triggers Event1(a), Event3(b)
PropertyB # triggers no events
PropertyC triggers Event3(c)
...
####
Property Event
1 2 3 4 ...
======== ===========
A a b
B
C c
...
####
my $property_type_events = {
Property::A => [ handler { Event::E1->new(@_) } 'a'
, handler { Event::E3->new(@_) } 'b' ]
Property::B => [ ],
Property::C => [ handler { Event::E3->new(@_) } 'c' ],
...
};
####
sub handler(&@) {
my ($event_ctor, @args) = @_;
return sub {
my $event = $event_ctor->(@args);
return $event->trigger(@_);
};
}
####
sub handle_widget_insertion_events($) {
my ($widget) = @_;
for my $property ($widget->get_properties) {
my $handlers = $property_type_events{ ref($property) };
next unless $handlers;
for my $handler (@$handlers) {
my $rc = $handler->( "pass trigger args here" );
# do something with result code $rc
}
}
}