Glib-Ex-ConnectProperties
view release on metacpan or search on metacpan
lib/Glib/Ex/ConnectProperties/Element/model_rows.pm view on Meta::CPAN
$self->{'ids2'} = Glib::Ex::SignalIds->new
($model,
$model->signal_connect ('row-inserted', \&_do_inserted, $self));
}
}
sub disconnect {
my ($self) = @_;
delete $self->{'ids'};
delete $self->{'ids2'};
}
# row-deleted signal handler
sub _do_deleted {
my $self = $_[-1];
### model_rows _do_deleted()
my $model = $self->{'object'};
if (! $self->{'object'}->get_iter_first) {
### has become empty
$self->{'ids2'} = Glib::Ex::SignalIds->new
($model,
$model->signal_connect ('row-inserted', \&_do_inserted, $self));
Glib::Ex::ConnectProperties::_do_read_handler($self);
}
}
# row-inserted signal handler, connected only while model is empty
sub _do_inserted {
my $self = $_[-1];
### model_rows _do_inserted()
### has become not-empty
delete $self->{'ids2'};
Glib::Ex::ConnectProperties::_do_read_handler($self);
}
sub get_value {
my ($self) = @_;
### model_rows get_value()
### is: (defined($self->{'object'}->get_iter_first) ^ ($self->{'pname'} eq 'not-empty'))
return (defined($self->{'object'}->get_iter_first)
^ ($self->{'pname'} eq 'empty'));
}
1;
__END__
# model-rows#top-count integer, read-only
# sub connect {
# my ($self) = @_;
# my $h = $self->{'href'} = ($model->{__PACKAGE__} ||= do {
# my $empty = ! $self->{'object'}->get_iter_first;
# my $href = { empty => $empty,
# elems => [ $self ]};
# $href->{'signal_ids'} = Glib::Ex::SignalIds->new
# ($model,
# $object->signal_connect ($empty ? 'row-inserted' : 'row-deleted',
# \&_do_signal,
# $href))
# });
# Scalar::Util::weaken ($h->{'elems'}->[@$h] = $self);
# }
# sub _do_signal {
# my $href = $_[-1];
# my $signame;
# if ($href->{'empty'}) {
# $href->{'empty'} = 0;
# $signame = 'row-deleted';
# } else {
# if ($self->{'object'}->get_iter_first) {
# return; # still not empty
# }
# $self->{'empty'} = 1;
# $signame = 'row-inserted';
# }
#
# my $ids = $self->{'signal_ids'};
# $ids->disconnect;
# $ids->add ($model->signal_connect ($signame, \&_do_signal, $href));
#
# my $elems = $href->{'elems'};
# for (my $i = 0; $i < @$elems; ) {
# if (my $elem = $elems->[$i]) {
# $elem->signal_handler;
# $i++
# } else {
# splice @$elems, $i,1;
# }
# }
# }
# sub DESTROY {
# my ($self) = @_;
# if (! @{$self->{'href'}->{'elems'}}) {
# delete $self->{'href'}->{'signal_ids'};
# }
# }
# model-rows#empty
# model-rows#not-empty
# model-rows#count
# model-rows#top-count
# my $conn = Glib::Ex::ConnectProperties->new
# ([$model, 'model-rows#empty' ],
# [$button, 'sensitive']);
# sub read_signal {
# return ($self->{'empty'} ? 'row-inserted' : 'row-deleted');
# }
#
# sub signal_handler {
# my ($self) = @_;
# my $model = $self->{'object'};
# my $signame;
# if ($self->{'empty'}) {
# # row-inserted signal, now not empty
# $self->{'empty'} = 0;
# $signame = 'row-deleted';
# } else {
# # not-empty, row-deleted signal
( run in 0.521 second using v1.01-cache-2.11-cpan-39bf76dae61 )