Gtk2-Net-LDAP-Widgets
view release on metacpan or search on metacpan
Widgets/LdapEntryView.pm view on Meta::CPAN
package Gtk2::Net::LDAP::Widgets::LdapEntryView;
#---[ pod head ]---{{{
=head1 NAME
Gtk2::Net::LDAP::Widgets::LdapEntryView - LDAP entry viewport
=head1 SYNOPSIS
This component is mostly used by other components and isn't meant to be
used directly. Read the source in case of any needs to do that.
=cut
#---}}}
use utf8;
use strict;
use vars qw(@ISA $VERSION);
use Carp qw(cluck);
use Net::LDAP;
use Net::LDAP::Util;
use Gtk2 -init;
use Data::Dumper;
use Gtk2::Net::LDAP::Widgets::Util;
@ISA = qw(Gtk2::TreeView);
our $VERSION = "2.0.1";
our $dn_column = 0;
our $bool_column = 1;
use overload
q{""} => 'to_string';
# by OLO
# czw mar 17 17:51:34 CET 2005
# Constructor:
sub new {
my $class = shift;
my $self = $class->SUPER::new;
$self->{ldap_source} = shift;
$self->{base_dn} = shift;
$self->{static_filter} = shift;
$self->{interactive_filter} = shift;
$self->{single_selection} = shift;
$self->{selectedDN} = undef;
###
# 1st column
my $renderer = Gtk2::CellRendererText->new;
my $col_offset = $self->insert_column_with_attributes
(-1, "DN", $renderer,
text => 0);
my $column = $self->get_column ($col_offset - 1);
$column->set_clickable (1);
###
# 2nd column
$renderer = Gtk2::CellRendererToggle->new;
$renderer->set (xalign => 0.0);
$renderer->set_data (column => 1);
if ($self->{single_selection}) {
$renderer->set_radio (1);
}
$renderer->signal_connect (toggled => \&LdapEntryView_item_toggled, $self);
$col_offset = $self->insert_column_with_attributes
(-1, "Y/N", $renderer,
active => 1
);
$column = $self->get_column ($col_offset - 1);
$column->set_clickable (1);
bless $self, $class;
$self->refresh_model;
bless $self, $class;
}
# by OLO
# czw mar 17 17:51:20 CET 2005
# Conversion of self to string:
sub to_string {
my $self = shift;
return $self->{class}.' "'.\$self.'"';
}
# by OLO
# wto kwi 19 12:15:31 CEST 2005
# Returns the list of selected entries' Distinguished Names.
sub get_dn {
my $self = shift;
my @dn_list;
if ($self->{single_selection}) {
push @dn_list, $self->{selectedDN};
} else {
#TODO: multiple
my $model = $self->get_model;
$model->foreach( sub {
my $model = shift;
my $path = shift;
my $iter = shift;
if ($model->get ($iter, $bool_column) > 0) {
# Wpis jest zaznaczony:
push(@dn_list, $model->get ($iter, $dn_column));
}
return 0;
});
}
#print "Selected:\n";
#print Dumper(\@dn_list);
#print "\n";
return @dn_list;
}
sub LdapEntryView_item_toggled {
my ($cell, $path_str, $self) = @_;
my $model = $self->get_model;
my $path = Gtk2::TreePath->new_from_string ($path_str);
my $column = $cell->get_data ("column");
# get toggled iter
my $iter = $model->get_iter ($path);
#print Dumper($iter);
my ($toggle_item) = $model->get ($iter, $column);
# do something with the value
my $selectedDN = $model->get($iter, $dn_column);
#print "val: ".$model->get($iter, $column)."\n";
#print "toggle_item before: $toggle_item\n";
#$toggle_item ^= 1;
#print "toggle_item after: $toggle_item\n";
#$model->set ($iter, $column, $toggle_item);
# set new value
if ($self->{single_selection}) {
$model->foreach( sub { my $model = shift; my $path = shift; my $iter = shift; $model->set ($iter, $column, 0); return 0; } );
$model->set ($iter, $column, 1);
$self->{selectedDN} = $selectedDN;
} else {
$toggle_item ^= 1;
( run in 0.889 second using v1.01-cache-2.11-cpan-39bf76dae61 )