-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
infobar.pl
109 lines (90 loc) · 3.19 KB
/
infobar.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/perl
#
# Info bar
#
# Info bar widgets are used to report important messages to the user.
#
# Perl version by Dave M <[email protected]>
use strict;
use warnings;
use Gtk3 '-init';
use Glib 'TRUE', 'FALSE';
use constant GTK_RESPONSE_OK => -5;
my $window = Gtk3::Window->new('toplevel');
$window->set_title('Info Bars');
$window->signal_connect( destroy => sub { Gtk3->main_quit } );
my $icon = 'gtk-logo-rgb.gif';
if ( -e $icon ) {
my $pixbuf = Gtk3::Gdk::Pixbuf->new_from_file($icon);
my $transparent = $pixbuf->add_alpha( TRUE, 0xff, 0xff, 0xff );
$window->set_icon($transparent);
}
my $box = Gtk3::Box->new( 'vertical', 0 );
$box->set_border_width(5);
$box->set_homogeneous(FALSE);
$window->add($box);
my $bar = Gtk3::InfoBar->new();
$bar->set_message_type('info');
$bar->get_content_area()->add(
Gtk3::Label->new(
'This is an info bar with message type GTK_MESSAGE_INFO') );
$box->pack_start( $bar, FALSE, FALSE, 0 );
my $bar2 = Gtk3::InfoBar->new();
$bar2->set_message_type('warning');
$bar2->get_content_area()->add(
Gtk3::Label->new(
'This is an info bar with message type GTK_MESSAGE_WARNING') );
$box->pack_start( $bar2, FALSE, FALSE, 0 );
my $bar3 = Gtk3::InfoBar->new();
$bar3->add_button( 'gtk-ok', GTK_RESPONSE_OK );
$bar3->signal_connect(
response => sub {
on_bar_response( GTK_RESPONSE_OK, $window );
} );
$bar3->set_message_type('question');
$bar3->get_content_area()->add(
Gtk3::Label->new(
'This is an info bar with message type GTK_MESSAGE_QUESTION') );
$box->pack_start( $bar3, FALSE, FALSE, 0 );
my $bar4 = Gtk3::InfoBar->new();
$bar4->set_message_type('error');
$bar4->get_content_area()->add(
Gtk3::Label->new(
'This is an info bar with message type GTK_MESSAGE_ERROR') );
$box->pack_start( $bar4, FALSE, FALSE, 0 );
my $bar5 = Gtk3::InfoBar->new();
$bar5->set_message_type('other');
$bar5->get_content_area()->add(
Gtk3::Label->new(
'This is an info bar with message type GTK_MESSAGE_OTHER') );
$box->pack_start( $bar5, FALSE, FALSE, 0 );
my $frame = Gtk3::Frame->new('Info Bars');
$box->pack_start( $frame, FALSE, FALSE, 8 );
my $vbox = Gtk3::Box->new( 'vertical', 8 );
$vbox->set_border_width(8);
$vbox->set_homogeneous(FALSE);
$frame->add($vbox);
$vbox->pack_start( Gtk3::Label->new('An example of different info bars'),
FALSE, FALSE, 0 );
$window->show_all();
Gtk3->main();
sub on_bar_response {
my ( $response_id, $window ) = @_;
my $dialog = Gtk3::MessageDialog->new(
$window,
[qw(modal destroy-with-parent)],
'info',
'ok',
'You clicked a button on an info bar.' . ' Your response has id %d',
$response_id
);
# This next line doesn't work
#$dialog->format_secondary_text(
# 'Your response has id %d', $response_id );
$dialog->run();
$dialog->destroy();
}
# This library is free software; you can redistribute it and/or
# # modify it under the terms of the GNU Library General Public License
# # as published by the Free Software Foundation; either version 2.1 of
# # the License, or (at your option) any later version.