Gtk2-Ex-FormFactory
view release on metacpan or search on metacpan
lib/Gtk2/Ex/FormFactory/Layout.pm view on Meta::CPAN
package Gtk2::Ex::FormFactory::Layout;
use strict;
use Gtk2::SimpleList;
use Gtk2::SimpleMenu;
my $DEFAULT_SPACING = 5;
sub new {
my $class = shift;
return bless {}, $class;
}
sub build_widget {
my $self = shift;
my ($widget) = @_;
return if $widget->get_type eq 'form_factory';
if ( $widget->can("build_widget") ) {
$widget->build_widget;
} else {
my $widget_type = $widget->get_type;
my $method = "build_$widget_type";
$Gtk2::Ex::FormFactory::DEBUG &&
print "build_widget: ".$widget->get_type.
"(".$widget->get_name.")\n";
$self->$method($widget);
}
if ( $widget->get_properties ) {
$widget->get_gtk_properties_widget->set (
%{$widget->get_properties}
);
}
if ( $widget->get_width or $widget->get_height ) {
my $size_method = $widget->get_gtk_widget->isa("Gtk2::Window")
? "set_default_size" : "set_size_request";
$widget->get_gtk_widget->$size_method (
($widget->get_width||-1),
($widget->get_height||-1),
);
}
my $tip = !$widget->isa_container ? $widget->get_tip : "";
if ( $tip ) {
$tip .= "." if $tip !~ /\.\s*$/;
my $gtk_tip = Gtk2::Tooltips->new;
for ( @{$widget->get_gtk_tip_widgets} ) {
$gtk_tip->set_tip ($_, $tip, undef);
}
}
my $scrollbars = $widget->get_scrollbars;
if ( $scrollbars ) {
my $sw = Gtk2::ScrolledWindow->new;
my $can_scroll = eval {
$widget->get_gtk_parent_widget->get("hadjustment")
};
if ( $can_scroll ) {
$sw->add($widget->get_gtk_parent_widget);
lib/Gtk2/Ex/FormFactory/Layout.pm view on Meta::CPAN
my ($window) = @_;
my $gtk_window = Gtk2::Window->new;
$gtk_window->set_title($window->get_title);
$gtk_window->set_position('center');
my $vbox = Gtk2::VBox->new(0, 5);
$vbox->set ( border_width => $DEFAULT_SPACING );
$gtk_window->add($vbox);
$window->set_gtk_widget($vbox);
$window->set_gtk_parent_widget($gtk_window);
$window->set_gtk_properties_widget($gtk_window);
my $closed_hook = $window->get_closed_hook;
if ( $closed_hook ) {
$gtk_window->signal_connect (
delete_event => $closed_hook
);
} else {
if ( $window->get_form_factory->get_content->[0] eq $window ) {
$gtk_window->signal_connect (
delete_event => sub {
$window->get_form_factory->close;
Gtk2->main_quit
if $window->get_quit_on_close;
1;
},
);
}
}
if ( $window->get_parent->isa("Gtk2::Ex::FormFactory") ) {
$gtk_window->signal_connect (
destroy => sub {
#-- Close FormFactory. If no FormFactory
#-- is set, cleanup() was already called.
$window->get_form_factory->close
if $window->get_form_factory;
1;
},
);
}
if ( $window->get_form_factory->get_parent_ff ) {
my $gtk_parent_window =
$window->get_form_factory
->get_parent_ff
->get_form_factory_gtk_window;
$gtk_window->set_transient_for($gtk_parent_window);
}
1;
}
sub build_menu {
my $self = shift;
my ($menu) = @_;
my $gtk_menu = Gtk2::SimpleMenu->new (
menu_tree => $menu->get_menu_tree,
default_callback => $menu->get_default_callback,
user_data => $menu->get_user_data,
);
$menu->set_gtk_widget($gtk_menu->{widget});
$menu->set_gtk_simple_menu($gtk_menu);
1;
}
sub build_block_widget {
my $self = shift;
my ($gtk_widget, $title) = @_;
my $gtk_label = $self->create_bold_label_widget($title);
my $gtk_frame = Gtk2::Frame->new;
$gtk_frame->set_label_widget($gtk_label);
$gtk_frame->add($gtk_widget);
$gtk_widget->set ( border_width => $DEFAULT_SPACING );
return $gtk_frame
}
sub build_notebook {
my $self = shift;
my ($notebook) = @_;
my $gtk_notebook = Gtk2::Notebook->new;
my $title = $notebook->get_title;
if ( $title ) {
my $block_widget =
$self->build_block_widget($gtk_notebook, $title);
$notebook->set_gtk_parent_widget($block_widget);
}
$notebook->set_gtk_widget($gtk_notebook);
1;
}
sub build_expander {
my $self = shift;
my ($expander) = @_;
my $gtk_expander = Gtk2::Expander->new ($expander->get_label);
$expander->set_gtk_widget($gtk_expander);
1;
}
sub build_form {
my $self = shift;
my ($form) = @_;
my $child_cnt = @{$form->get_content};
my $title = $form->get_title;
lib/Gtk2/Ex/FormFactory/Layout.pm view on Meta::CPAN
Glib::Source->remove($timeout);
$button_pressed = 0;
0;
});
}
1;
}
sub build_list {
my $self = shift;
my ($list) = @_;
my $columns = $list->get_columns;
my $types = $list->get_types;
my $editable = $list->get_editable;
my $visible = $list->get_visible;
my $no_header = $list->get_no_header;
my (@slist, $i);
foreach my $col ( @{$columns} ) {
push @slist, $col, ($types->[$i]||"text");
++$i;
}
my $slist = Gtk2::SimpleList->new ( @slist );
if ( $editable ) {
$i = 0;
foreach my $e ( @{$editable} ) {
$slist->set_column_editable($i, $e);
++$i;
}
}
if ( $visible ) {
$i = 0;
foreach my $v ( @{$visible} ) {
$slist->get_column($i)->set_visible($v);
++$i;
}
}
if ( $no_header ) {
$slist->set_headers_visible(0);
}
$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;
$progress_bar->set_gtk_widget($gtk_progress_bar);
1;
}
sub build_image {
my $self = shift;
my ($image) = @_;
my $gtk_image = Gtk2::Image->new;
$gtk_image->set_size_request(undef, undef);
$image->set_gtk_widget($gtk_image);
my $bgcolor = $image->get_bgcolor;
my $gtk_event_box = Gtk2::EventBox->new;
$gtk_event_box->modify_bg ("normal", Gtk2::Gdk::Color->parse ($bgcolor))
if defined $bgcolor;
$gtk_event_box->add($gtk_image);
$image->set_gtk_event_box($gtk_event_box);
if ( $image->get_with_frame ) {
my $gtk_frame = Gtk2::Frame->new;
$gtk_frame->add($gtk_event_box);
$image->set_gtk_parent_widget($gtk_frame);
} else {
$image->set_gtk_parent_widget($gtk_event_box);
}
my $update_timeout;
if ( $image->get_scale_to_fit or
$image->get_max_width or
$image->get_max_height ) {
$gtk_event_box->signal_connect (
"size-allocate" => sub {
return if $image->get_widget_width == $_[1]->width and
$image->get_widget_height == $_[1]->height;
$image->set_widget_width($_[1]->width);
$image->set_widget_height($_[1]->height);
Glib::Source->remove($update_timeout)
if $update_timeout;
$update_timeout = Glib::Timeout->add (
100, sub {
$image->update;
$update_timeout = undef;
0
}
( run in 0.820 second using v1.01-cache-2.11-cpan-524268b4103 )