Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
- added get_object_attr() helper method to retrieve
a specific application object attribute
- added 'accessor' option to the ->add_object() method
- Gtk2::Ex::FormFactory::Widget:
- added 'label_for' attribute, so auto-generated labels
can be bound to specific widgets as well.
- added 'avtive_cond' and 'active_depends' attributes
for direct activity control of the widget.
- added 'changed_hook_after'
- Gtk2::Ex::FormFactory::Popup:
- added 'items' attribute for static popup content
- Gtk2::Ex::FormFactory::Popup:
- default 'scale' to 1 of no other scaling options
are given, images would be invisible without this.
- Gtk2::Ex::FormFactory:
- added 'with_cancel' option to the ->open_confirm_window()
helper method
- Gtk2::Ex::FormFactory::CheckButtonGroup:
- dimensions can be configured through application
object attributes. Row and/or column labels may
be added.
lib/Gtk2/Ex/FormFactory/Layout.pm view on Meta::CPAN
}
$slist->get_selection->set_mode ($list->get_selection_mode)
if $list->get_selection_mode;
$list->set_gtk_widget($slist);
1;
}
sub build_popup {
my $self = shift;
my ($popup) = @_;
my $gtk_popup_menu = Gtk2::Menu->new;
my $gtk_popup = Gtk2::OptionMenu->new;
$gtk_popup->set_menu($gtk_popup_menu);
$popup->set_gtk_widget ( $gtk_popup );
1;
}
sub build_progress_bar {
my $self = shift;
my ($progress_bar) = @_;
my $gtk_progress_bar = Gtk2::ProgressBar->new;
lib/Gtk2/Ex/FormFactory/Layout.pm view on Meta::CPAN
Examples:
add_form_to_window ( ... )
add_table_to_form ( ... )
This way you can adjust layout at a very detailed level, but
you need not. E.g. the implementation of these methods is
most likely the same:
add_entry_to_form ( ... )
add_popup_to_form ( ... )
because the implemenation mainly depends on the B<form>
(the container widget) and not on the widget which is added to
the form.
That's why Gtk2::Ex::FormFactory::Layout knows a default mechanism:
if no add-to method is found for a specific widget/container
pair, a generic default implementation is used instead. These
are named as follows:
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(@_);
lib/Gtk2/Ex/FormFactory/Popup.pm view on Meta::CPAN
}
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}
);
lib/Gtk2/Ex/FormFactory/Popup.pm view on Meta::CPAN
}
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
);
lib/Gtk2/Ex/FormFactory/Popup.pm view on Meta::CPAN
Attributes are handled through the common get_ATTR(), set_ATTR()
style accessors, but they are mostly passed once to the object
constructor and must not be altered after the associated FormFactory
was built.
=over 4
=item B<items> = ARRAYREF|HASHREF [optional]
This attribute takes a static list of popup items, if the
popup shouldn't be controlled dynamically by an associated
application object. Refer to the next chapter for details
of the data structure applied here.
=back
=head1 REQUIREMENTS FOR ASSOCIATED APPLICATION OBJECTS
Application objects represented by a Gtk2::Ex::FormFactory::Popup
must define additional methods, unless their content is static
by setting B<items>.
lib/Gtk2/Ex/FormFactory/Popup.pm view on Meta::CPAN
=over 4
=item B<get_ATTR_list>
This returns the entries of the Popup. Three data models are supported here:
=over 7
=item Simple B<ARRAY>
If the method returns a reference to a simple array, the popup will be filled
with the array values in the original array order.
The index of the actually selected popup entry is stored in the
attribute of the associated application object.
=item Two dimensional B<ARRAY>
The method may return a reference to a two dimensional array. Each row needs to
have the attribute value in the first column and the label for the corresponding
item in the second.
=item B<HASH>
If the method returns a reference to a hash, the popup will be filled
with the alphanumerically sorted hash B<values>.
In turn the hash B<key> of the actually selected popup entry is stored in the
attribute of the associated application object.
=back
=back
=head1 AUTHORS
Jörn Reder <joern at zyn dot de>
( run in 1.306 second using v1.01-cache-2.11-cpan-364913b4093 )