Gapp
view release on metacpan or search on metacpan
lib/Gapp/Layout/Default.pm view on Meta::CPAN
$gtk_w->add_action_widget( is_Object($b) ? $b->gobject : $b, $r );
}
}
if ( $w->buttons ) {
while ( @{$w->buttons} ) {
my $b = shift @{$w->buttons};
my $r = shift @{$w->buttons};
$gtk_w->add_button( is_Object($b) ? $b->gobject : $b, $r );
}
}
map { $w->gobject->add_filter( $_->gobject ) } $w->filters;
};
# FileFilter
build 'Gapp::FileFilter', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
$gtkw->set_name( $w->name );
map { $gtkw->add_pattern( $_ ) } $w->patterns;
map { $gtkw->add_mime_type( $_ ) } $w->mime_types;
};
# Label
build 'Gapp::Label', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
$gtkw->set_text( $w->text ) if defined $w->text;
$gtkw->set_markup( $w->markup ) if defined $w->markup;
};
# List
build 'Gapp::Model::List', sub {
my ( $l, $w ) = @_;
map { $w->gobject->append_record( @$_ ) } @{ $w->content };
};
# Image
build 'Gapp::Image', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
if ( $w->file ) {
$gtkw->set_from_file( $w->file );
}
elsif ( $w->stock ) {
$gtkw->set_from_stock( $w->stock->[0], $w->stock->[1] );
}
};
# ImageMenuItem
#style 'Gapp::ImageMenuItem', sub {
# my ( $l, $w ) = @_;
#
# my ( $action, @args ) = parse_action ( $w->action );
#
#
#
# if ( is_GappAction ( $action ) && $action->mnemonic ) {
#
# if ( ! $w->label && ! $w->mnemonic ) {
#
# $w->set_mnemonic( $action->mnemonic );
# $w->set_constructor( 'new_with_mnemonic' );
# $w->set_args( [ $action->mnemonic ] );
#
# $w->_construct_gobject;
# }
# }
#};
build 'Gapp::ImageMenuItem', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
my ( $image );
if ( $w->icon ) {
$image = Gtk2::Image->new_from_stock( $w->icon, 'menu' );
}
if ( $w->image ) {
$image = $w->image->gobject;
}
$gtkw->set_label( $w->label ) if defined $w->label && ! defined $w->mnemonic;
$gtkw->set_image( $image ) if defined $image;
$gtkw->set_tooltip_text( $w->tooltip ) if defined $w->tooltip;
if ( $w->menu ) {
$gtkw->set_submenu( $w->menu->gobject );
}
};
paint 'Gapp::ImageMenuItem', sub {
my ( $l, $w ) = @_;
return if ! $w->action;
#print $w, $w->mnemonic, "\n";
my ( $action, @args ) = parse_action ( $w->action );
if ( is_CodeRef $action ) {
$w->signal_connect( 'activate', $action, \@args );
}
else {
my $gtkw = $w->gobject;
$gtkw->set_label( $action->label ) if ! defined $w->label && ! defined $w->mnemonic && defined $action->label;
$gtkw->set_image( $action->create_gtk_image( 'menu' ) ) if ! $w->icon && ! defined $w->image && defined $action->icon;
$gtkw->set_tooltip_text( $action->tooltip ) if ! defined $w->tooltip && defined $action->tooltip;
$gtkw->signal_connect( activate => actioncb( $action, $w, \@args ) );
}
};
# MenuItem
#style 'Gapp::MenuItem', sub {
# my ( $l, $w ) = @_;
#
# my ( $action, @args ) = parse_action ( $w->action );
#
# if ( is_GappAction ( $action ) && $action->mnemonic ) {
# if ( ! $w->label && ! $w->mnemonic ) {
# $w->set_constructor( 'new_with_mnemonic' );
# $w->set_args( [ $action->mnemonic ] );
# }
# }
#};
build 'Gapp::MenuItem', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
$gtkw->set_label( $w->label ) if defined $w->label && ! defined $w->mnemonic;
$gtkw->set_tooltip_text( $w->tooltip ) if defined $w->tooltip;
if ( $w->menu ) {
$gtkw->set_submenu( $w->menu->gobject );
}
};
paint 'Gapp::MenuItem', sub {
my ( $l, $w ) = @_;
return if ! $w->action;
my ( $action, @args ) = parse_action ( $w->action );
if ( is_CodeRef $action ) {
$w->signal_connect( 'activate', $action, \@args );
}
else {
my $gtkw = $w->gobject;
$gtkw->set_label( $action->label ) if ! defined $w->label && ! defined $w->mnemonic && defined $action->label;
$gtkw->set_tooltip_text( $action->tooltip ) if ! defined $w->tooltip && defined $action->tooltip;
$gtkw->signal_connect( activate => actioncb( $action, $w, \@args ) );
}
};
add 'Gapp::MenuItem', to 'Gapp::MenuShell', sub {
my ( $l, $w, $c ) = @_;
$c->gobject->append( $w->gwrapper );
$c->gobject->show;
};
# ToolButton
style 'Gapp::MenuToolButton', sub {
my ( $l, $w ) = @_;
my $image = $w->image ?
$w->image->gobject :
Gtk2::Image->new_from_stock( $w->icon || 'gtk-dialog-error' , $w->icon_size || 'large-toolbar' );
$w->set_args( [ $image, defined $w->label ? $w->label : '' ] );
};
build 'Gapp::MenuToolButton', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
$w->gobject->set_menu( $w->menu->gobject ) if $w->menu;
$gtkw->set_stock_id( $w->stock_id ) if $w->stock_id;
$gtkw->set_label( $w->label ) if defined $w->label;
$gtkw->set_tooltip_text( $w->tooltip ) if defined $w->tooltip;
$gtkw->set_homogeneous( 1 ) if $w->homogeneous;
$w->menu->gwrapper->show_all if $w->menu;
};
paint 'Gapp::MenuToolButton', sub {
my ( $l, $w ) = @_;
return if ! $w->action;
my ( $action, @args ) = parse_action ( $w->action );
if ( is_CodeRef $action ) {
$w->signal_connect( 'clicked', $action, \@args );
}
else {
my $gtkw = $w->gobject;
$gtkw->set_label( $action->label ) if ! defined $w->label && defined $action->label;
$gtkw->set_icon_widget( $action->create_gtk_image( $w->icon_size || 'large-toolbar' ) ) if ! $w->icon && ! $w->image && defined $action->icon;
$gtkw->set_tooltip_text( $action->tooltip ) if ! defined $w->tooltip && defined $action->tooltip;
$gtkw->signal_connect( clicked => actioncb( $action, $w, \@args ) );
}
};
# Notice
build 'Gapp::Notebook', sub {
my ( $l, $w ) = @_;
my $gtkw = $w->gobject;
# handle action widget
if ( $w->action_widget ) {
$w->action_widget->show_all if $w->action_widget;
$gtkw->set_action_widget( $w->action_widget->gobject, 'end' );
}
};
add 'Gapp::Widget', to 'Gapp::Notebook', sub {
my ( $l, $w, $c) = @_;
my $gtkw = $w->gwrapper;
# check that widget is a NotebookPage
if ( ! $w->does('Gapp::Meta::Widget::Native::Trait::NotebookPage') ) {
die qq[ Could not add $w to $c, $w must have the NotebookPage trait applied.];
}
# append the page
$c->gobject->append_page( $gtkw, $w->page_name );
# create the label
$w->tab_label ?
$c->gobject->set_tab_label( $gtkw, $w->tab_label->gobject ) :
$c->gobject->set_tab_label_text( $gtkw, $w->page_name );
$w->tab_label->show_all if $w->tab_label;
# call show all on the widget
$w->show_all;
$c->{pages}{$w->page_name} = $w;
};
( run in 0.648 second using v1.01-cache-2.11-cpan-39bf76dae61 )