The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use warnings;



package Foo::Layout;
use Gapp::Layout;
extends 'Gapp::Layout::Default';

style 'Gapp::Dialog', sub {
    my ( $layout, $widget ) = @_;
    $widget->properties->{has_separator} ||= 0;
    $widget->properties->{border_width} ||= 6;
    $layout->parent->style_widget( $widget );
};

build 'Gapp::Dialog', sub {
    my ( $layout, $widget ) = @_;
    $widget->gobject->get_content_area->set_spacing( 6 );
    $layout->parent->build_widget( $widget );
};

style 'Gapp::HBox', sub {
    my ( $layout, $widget ) = @_;
    $widget->properties->{spacing} = 12;
    $widget->properties->{border_width} = 6  if ! defined $widget->properties->{border_width};
    $layout->parent->style_widget( $widget );
};

style 'Gapp::VBox', sub {
    my ( $layout, $widget ) = @_;
    $widget->properties->{spacing} = 12;
    $layout->parent->style_widget( $widget );
};




package main;

use Gapp;
use GappX::Dialogs;

use Gapp::Actions::Basic qw(Quit);

my @params = (
    text => 'Primary Message',
    secondary => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam malesuada dignissim augue.',
    layout => 'Foo::Layout',
);

my $w = Gapp::Window->new(
    layout => 'Foo::Layout',
    content => [
        Gapp::VButtonBox->new(
            content => [
                Gapp::Button->new(
                    icon => 'gtk-dialog-question',
                    label => 'ConfirmDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(ConfirmDialog)], @params );
                        $w->run;
                        $w->destroy;
                    }]
                ),
                Gapp::Button->new(
                    icon => 'gtk-dialog-error',
                    label => 'ErrorDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(ErrorDialog)], @params, alert => 1 );
                        $w->run;
                        $w->destroy;
                    }]
                ),
                Gapp::Button->new(
                    icon => 'gtk-dialog-info',
                    label => 'InfoDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(InfoDialog)], @params );
                        $w->run;
                        $w->destroy;
                    }]
                ),
                Gapp::Button->new(
                    icon => 'gtk-dialog-info',
                    label => 'MessageDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(MessageDialog)], @params );
                        $w->run;
                        $w->destroy;
                    }]
                ),
                Gapp::Button->new(
                    icon => 'gtk-dialog-question',
                    label => 'QuestionDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(QuestionDialog)], @params );
                        $w->run;
                        $w->destroy;
                    }]
                ),
                Gapp::Button->new(
                    icon => 'gtk-dialog-warning',
                    label => 'WarningDialog',
                    action =>  [sub {
                        my $w = Gapp::Dialog->new( traits => [qw(WarningDialog)], @params );
                        $w->run;
                        $w->destroy;
                    }]
                ),
            ]
        )
    ],
    signal_connect => [
        [ delete_event => Quit ],
    ]
);

$w->show_all;

Gapp->main;