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 )