Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
lib/Gtk2/Ex/FormFactory/Popup.pm view on Meta::CPAN
package Gtk2::Ex::FormFactory::Popup;
use strict;
use base qw( Gtk2::Ex::FormFactory::Widget );
sub get_type { "popup" }
sub get_items { shift->{items} }
sub set_items { shift->{items} = $_[1] }
sub new {
my $class = shift;
my %par = @_;
my ($items) = $par{'items'};
my $self = $class->SUPER::new(@_);
$self->set_items($items);
return $self;
}
sub object_to_widget {
my $self = shift;
my $content = $self->get_items ||
$self->get_proxy->get_attr_list($self->get_attr, $self->get_name);
my $value = $self->get_object_value;
my $gtk_popup = $self->get_gtk_widget;
my $gtk_popup_menu = Gtk2::Menu->new;
$gtk_popup->remove_menu;
$gtk_popup->set_menu($gtk_popup_menu);
my ($history, $i);
if ( ref $content eq 'ARRAY' ) {
my ($item);
$history = $i = 0;
foreach my $text ( @{$content} ) {
if ( ref $text eq 'ARRAY' ) {
$item = Gtk2::MenuItem->new ($text->[1]);
$item->show;
$item->{value} = $text->[0];
$gtk_popup_menu->append($item);
$history = $i if $text->[0] eq $value;
} else {
$item = Gtk2::MenuItem->new ($text);
$item->show;
$item->{value} = $i;
$gtk_popup_menu->append($item);
$history = $i if $i == $value;
}
++$i;
}
} else {
my (@content, $k, $v);
push @content, [ $k, $v ] while ($k,$v) = each %{$content};
my ($item);
$history = $i = 0;
foreach my $c ( sort { $a->[1] cmp $b->[1] } @content ) {
$item = Gtk2::MenuItem->new ($c->[1]);
$item->show;
$item->{value} = $c->[0];
$gtk_popup_menu->append($item);
$history = $i if $value eq $c->[0];
++$i;
}
}
$gtk_popup->set_history ($history);
1;
}
sub widget_to_object {
my $self = shift;
$self->set_object_value (
$self->get_gtk_widget->get_menu->get_active->{value}
);
1;
}
sub get_widget_value {
my $self = shift;
return $self->get_gtk_widget->get_menu->get_active->{value};
}
sub empty_widget {
my $self = shift;
my $gtk_popup = $self->get_gtk_widget;
my $gtk_popup_menu = Gtk2::Menu->new;
$gtk_popup->remove_menu;
$gtk_popup->set_menu($gtk_popup_menu);
my $item = Gtk2::MenuItem->new (" ");
$item->show;
$gtk_popup_menu->append($item);
$gtk_popup->set_history ( 0 );
1;
}
sub backup_widget_value {
my $self = shift;
$self->set_backup_widget_value (
$self->get_gtk_widget->get_history
);
1;
}
sub restore_widget_value {
my $self = shift;
$self->get_gtk_widget->set_history($self->get_backup_widget_value);
1;
}
sub get_widget_check_value {
$_[0]->get_gtk_widget->get_menu->get_active->{value};
}
sub connect_changed_signal {
my $self = shift;
$self->get_gtk_widget->signal_connect (
changed => sub { $self->widget_value_changed },
);
1;
}
1;
__END__
=head1 NAME
Gtk2::Ex::FormFactory::Popup - A Popup in a FormFactory framework
=head1 SYNOPSIS
Gtk2::Ex::FormFactory::Popup->new (
...
Gtk2::Ex::FormFactory::Widget attributes
);
=head1 DESCRIPTION
This class implements a Popup in a Gtk2::Ex::FormFactory framework.
The selected entry of the Popup is controlled by the value of the
associated application object attribute, which is either an index in
an array of possible Popup entries or a key of a hash of possible
( run in 1.277 second using v1.01-cache-2.11-cpan-524268b4103 )