3 * Copyright (C) 2009 Jim Evins <evins@snaught.com>.
5 * This file is part of gLabels.
7 * gLabels is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * gLabels is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
23 #include "message-bar.h"
28 /*===========================================*/
29 /* Private data types */
30 /*===========================================*/
32 struct _glMessageBarPrivate {
38 gchar *secondary_text;
42 /*===========================================*/
44 /*===========================================*/
47 /*===========================================*/
48 /* Local function prototypes */
49 /*===========================================*/
51 static void gl_message_bar_finalize (GObject *object);
53 static void gl_message_bar_construct (glMessageBar *this,
55 GtkButtonsType buttons,
56 const gchar *message_format,
60 /*****************************************************************************/
61 /* Boilerplate object stuff. */
62 /*****************************************************************************/
63 G_DEFINE_TYPE (glMessageBar, gl_message_bar, GTK_TYPE_INFO_BAR)
66 /*****************************************************************************/
67 /* Class Init Function. */
68 /*****************************************************************************/
70 gl_message_bar_class_init (glMessageBarClass *class)
72 GObjectClass *object_class = G_OBJECT_CLASS (class);
74 gl_message_bar_parent_class = g_type_class_peek_parent (class);
76 object_class->finalize = gl_message_bar_finalize;
80 /*****************************************************************************/
81 /* Object Instance Init Function. */
82 /*****************************************************************************/
84 gl_message_bar_init (glMessageBar *dialog)
86 g_return_if_fail (GL_IS_MESSAGE_BAR (dialog));
88 dialog->priv = g_new0 (glMessageBarPrivate, 1);
92 /*****************************************************************************/
93 /* Finalize Function. */
94 /*****************************************************************************/
96 gl_message_bar_finalize (GObject *object)
98 glMessageBar* dialog = GL_MESSAGE_BAR (object);;
100 g_return_if_fail (object != NULL);
101 g_return_if_fail (GL_IS_MESSAGE_BAR (dialog));
102 g_return_if_fail (dialog->priv != NULL);
104 g_free (dialog->priv->primary_text);
105 g_free (dialog->priv->secondary_text);
106 g_free (dialog->priv);
108 G_OBJECT_CLASS (gl_message_bar_parent_class)->finalize (object);
112 /*****************************************************************************/
113 /* NEW message bar. */
114 /*****************************************************************************/
116 gl_message_bar_new (GtkMessageType type,
117 GtkButtonsType buttons,
118 const gchar *message_format,
124 widget = GTK_WIDGET (g_object_new (GL_TYPE_MESSAGE_BAR, NULL));
126 va_start (args, message_format);
127 gl_message_bar_construct (GL_MESSAGE_BAR (widget), type, buttons, message_format, args);
134 /*****************************************************************************/
135 /* Construct message bar. */
136 /*****************************************************************************/
138 gl_message_bar_construct (glMessageBar *this,
140 GtkButtonsType buttons,
141 const gchar *message_format,
146 gtk_info_bar_set_message_type (GTK_INFO_BAR (this), type);
148 this->priv->icon = gtk_image_new ();
151 case GTK_MESSAGE_INFO:
152 gtk_image_set_from_stock (GTK_IMAGE (this->priv->icon),
153 GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG);
155 case GTK_MESSAGE_WARNING:
156 gtk_image_set_from_stock (GTK_IMAGE (this->priv->icon),
157 GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
159 case GTK_MESSAGE_QUESTION:
160 gtk_image_set_from_stock (GTK_IMAGE (this->priv->icon),
161 GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
163 case GTK_MESSAGE_ERROR:
164 gtk_image_set_from_stock (GTK_IMAGE (this->priv->icon),
165 GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG);
171 this->priv->primary_text = g_strdup_vprintf (message_format, args);
172 this->priv->label = gtk_label_new (this->priv->primary_text);
174 hbox = gtk_info_bar_get_content_area (GTK_INFO_BAR (this));
175 gtk_box_pack_start (GTK_BOX (hbox), this->priv->icon, FALSE, FALSE, 0);
176 gtk_box_pack_start (GTK_BOX (hbox), this->priv->label, FALSE, FALSE, 0);
181 gtk_info_bar_add_button (GTK_INFO_BAR (this),
182 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
184 case GTK_BUTTONS_CLOSE:
185 gtk_info_bar_add_button (GTK_INFO_BAR (this),
186 GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT);
188 case GTK_BUTTONS_CANCEL:
189 gtk_info_bar_add_button (GTK_INFO_BAR (this),
190 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
192 case GTK_BUTTONS_YES_NO:
193 gtk_info_bar_add_button (GTK_INFO_BAR (this),
194 GTK_STOCK_YES, GTK_RESPONSE_ACCEPT);
195 gtk_info_bar_add_button (GTK_INFO_BAR (this),
196 GTK_STOCK_NO, GTK_RESPONSE_REJECT);
198 case GTK_BUTTONS_OK_CANCEL:
199 gtk_info_bar_add_button (GTK_INFO_BAR (this),
200 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
201 gtk_info_bar_add_button (GTK_INFO_BAR (this),
202 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
210 /*****************************************************************************/
211 /* Set secondary text. */
212 /*****************************************************************************/
214 gl_message_bar_format_secondary_text (glMessageBar *this,
215 const gchar *message_format,
221 g_free (this->priv->secondary_text);
223 va_start (args, message_format);
224 this->priv->secondary_text = g_strdup_vprintf (message_format, args);
227 markup = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
228 this->priv->primary_text,
229 this->priv->secondary_text);
231 gtk_label_set_markup (GTK_LABEL (this->priv->label), markup);
242 * Local Variables: -- emacs
244 * c-basic-offset: 8 -- emacs
245 * tab-width: 8 -- emacs
246 * indent-tabs-mode: nil -- emacs