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 )