1 /*
2 * Copyright (C) 2007 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
3 * 2005 Paolo Maggi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 */
19
20 #include "gtr-io-error-info-bar.h"
21
22 #include <glib.h>
23 #include <gtk/gtk.h>
24 #include <glib/gi18n.h>
25
26 static void
set_contents(GtkInfoBar * infobar,GtkWidget * contents)27 set_contents (GtkInfoBar * infobar, GtkWidget * contents)
28 {
29 GtkWidget *content_area;
30
31 content_area = gtk_info_bar_get_content_area (infobar);
32 gtk_container_add (GTK_CONTAINER (content_area), contents);
33 }
34
35 /*
36 * Message area funcs
37 */
38 static void
set_info_bar_text_and_icon(GtkInfoBar * infobar,const gchar * icon_stock_id,const gchar * primary_text,const gchar * secondary_text)39 set_info_bar_text_and_icon (GtkInfoBar * infobar,
40 const gchar * icon_stock_id,
41 const gchar * primary_text,
42 const gchar * secondary_text)
43 {
44 GtkWidget *hbox_content;
45 GtkWidget *image;
46 GtkWidget *vbox;
47 gchar *primary_markup;
48 gchar *secondary_markup;
49 GtkWidget *primary_label;
50 GtkWidget *secondary_label;
51
52 hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
53 gtk_widget_show (hbox_content);
54
55 image = gtk_image_new_from_icon_name (icon_stock_id, GTK_ICON_SIZE_DIALOG);
56 gtk_widget_show (image);
57 gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
58 gtk_widget_set_halign (image, 0.5);
59 gtk_widget_set_valign (image, 0.0);
60
61 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
62 gtk_widget_show (vbox);
63 gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
64
65 primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
66 primary_label = gtk_label_new (primary_markup);
67 g_free (primary_markup);
68
69 gtk_widget_show (primary_label);
70
71 gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
72 gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
73 gtk_label_set_line_wrap (GTK_LABEL (primary_label), FALSE);
74 gtk_label_set_xalign (GTK_LABEL (primary_label), 0.0);
75 gtk_label_set_yalign (GTK_LABEL (primary_label), 0.5);
76
77 gtk_widget_set_can_focus (primary_label, TRUE);
78
79 gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
80
81 if (secondary_text != NULL)
82 {
83 secondary_markup = g_strdup_printf ("<small>%s</small>",
84 secondary_text);
85 secondary_label = gtk_label_new (secondary_markup);
86 g_free (secondary_markup);
87
88 gtk_widget_show (secondary_label);
89
90 gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
91
92 gtk_widget_set_can_focus (secondary_label, TRUE);
93
94 gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
95 gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
96 gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
97 gtk_label_set_xalign (GTK_LABEL (secondary_label), 0.0);
98 gtk_label_set_yalign (GTK_LABEL (secondary_label), 0.5);
99 }
100
101 set_contents (infobar, hbox_content);
102 }
103
104 /*
105 * Callback func called when warning button is clicked
106 */
107 static void
warning_message_button_clicked(GtkWidget * widget,gint response_id,gpointer data)108 warning_message_button_clicked (GtkWidget * widget,
109 gint response_id, gpointer data)
110 {
111 if (response_id == GTK_RESPONSE_CLOSE)
112 {
113 gtk_widget_hide (GTK_WIDGET (widget));
114 }
115 }
116
117 GtkWidget *
create_error_info_bar(const gchar * primary_text,const gchar * secondary_text)118 create_error_info_bar (const gchar * primary_text,
119 const gchar * secondary_text)
120 {
121 GtkWidget *infobar;
122
123 infobar = gtk_info_bar_new_with_buttons (_("_Close"),
124 GTK_RESPONSE_CLOSE, NULL);
125
126 gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_WARNING);
127
128 set_info_bar_text_and_icon (GTK_INFO_BAR (infobar),
129 "dialog-error-symbolic",
130 primary_text, secondary_text);
131
132 g_signal_connect (G_OBJECT (infobar), "response",
133 G_CALLBACK (warning_message_button_clicked), NULL);
134
135 gtk_widget_show (infobar);
136
137 return infobar;
138 }
139
140 GtkWidget *
create_info_info_bar(const gchar * primary_text,const gchar * secondary_text)141 create_info_info_bar (const gchar * primary_text,
142 const gchar * secondary_text)
143 {
144 GtkWidget *infobar;
145
146 infobar = gtk_info_bar_new_with_buttons (_("_OK"),
147 GTK_RESPONSE_OK, NULL);
148
149 gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO);
150
151 set_info_bar_text_and_icon (GTK_INFO_BAR (infobar),
152 "dialog-information-symbolic",
153 primary_text, secondary_text);
154
155 g_signal_connect (G_OBJECT (infobar), "response",
156 G_CALLBACK (gtk_widget_hide), NULL);
157
158 gtk_widget_show (infobar);
159
160 return infobar;
161 }
162