2009-03-30 Alberto Garcia <agarcia@igalia.com>
[hildon] / src / hildon-dialog.c
1 /*
2  * This file is a part of hildon
3  *
4  * Copyright (C) 2008 Nokia Corporation, all rights reserved.
5  *
6  * Contact: Rodrigo Novo <rodrigo.novo@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24
25 /**
26  * SECTION:hildon-dialog
27  * @short_description: Widget representing a popup window in the Hildon framework.
28  * @see_also: #HildonCodeDialog, #HildonColorChooserDialog, #HildonFontSelectionDialog, #HildonGetPasswordDialog, #HildonLoginDialog, #HildonSetPasswordDialog, #HildonSortDialog, #HildonWizardDialog
29  *
30  * #HildonDialog is a GTK widget which represent a popup window in the
31  * Hildon framework. It is derived from #GtkDialog and provides additional
32  * commodities specific to the Hildon framework.
33  *
34  * As of hildon 2.2, #HildonDialog has been deprecated in favor of #GtkDialog.
35  *
36  * <example>
37  * <title>Simple <structname>HildonDialog</structname> usage</title>
38  * <programlisting>
39  * void quick_message (gchar *message)
40  * {
41  * <!-- -->
42  *     GtkWidget *dialog, *label;
43  * <!-- -->
44  *     dialog = hildon_dialog_new ();
45  *     label = gtk_label_new (message);
46  * <!-- -->
47  *     g_signal_connect_swapped (dialog,
48  *                               "response",
49  *                               G_CALLBACK (gtk_widget_destroy),
50  *                               dialog);
51  * <!-- -->
52  *     gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
53  *                        label);
54  *     gtk_widget_show_all (dialog);
55  * <!-- -->
56  * }
57  * </programlisting>
58  * </example>
59  */
60
61 #undef                                          HILDON_DISABLE_DEPRECATED
62
63 #include                                        "hildon-dialog.h"
64 #include                                        "hildon-gtk.h"
65
66 G_DEFINE_TYPE (HildonDialog, hildon_dialog, GTK_TYPE_DIALOG);
67
68 static void
69 hildon_dialog_class_init                        (HildonDialogClass *dialog_class)
70 {
71 }
72
73 static void
74 hildon_dialog_init                              (HildonDialog *self)
75 {
76 }
77
78 /**
79  * hildon_dialog_new:
80  *
81  * Creates a new #HildonDialog widget
82  *
83  * Returns: the newly created #HildonDialog
84  *
85  * Since: 2.2
86  */
87 GtkWidget*
88 hildon_dialog_new                               (void)
89 {
90     GtkWidget *self = g_object_new (HILDON_TYPE_DIALOG, NULL);
91
92     return self;
93 }
94
95 /**
96  * hildon_dialog_new_with_buttons:
97  * @title: Title of the dialog, or %NULL
98  * @parent: Transient parent of the dialog, or %NULL
99  * @flags: from #GtkDialogFlags
100  * @first_button_text: stock ID or text to go in first button, or %NULL
101  * @Varargs: response ID for first button, then additional buttons, ending with %NULL
102  *
103  * Creates a new #HildonDialog. See gtk_dialog_new_with_buttons() for
104  * more information.
105  *
106  * Return value: a new #HildonDialog
107  *
108  * Since: 2.2
109  */
110 GtkWidget*
111 hildon_dialog_new_with_buttons                  (const gchar *title,
112                                                  GtkWindow *parent,
113                                                  GtkDialogFlags flags,
114                                                  const gchar *first_button_text,
115                                                  ...)
116 {
117     GtkWidget *dialog;
118
119     dialog = g_object_new (HILDON_TYPE_DIALOG, NULL);
120
121     /* This code is copied from gtk_dialog_new_empty(), as it's a
122      * private function that we cannot use here */
123     if (title)
124         gtk_window_set_title (GTK_WINDOW (dialog), title);
125
126     if (parent)
127         gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
128
129     if (flags & GTK_DIALOG_MODAL)
130         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
131
132     if (flags & GTK_DIALOG_DESTROY_WITH_PARENT)
133         gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
134
135     if (flags & GTK_DIALOG_NO_SEPARATOR)
136         gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
137
138     /* This is almost copied from gtk_dialog_add_buttons_valist() */
139     if (first_button_text != NULL) {
140         va_list args;
141         const gchar *text;
142         gint response_id;
143
144         va_start (args, first_button_text);
145         text = first_button_text;
146         response_id = va_arg (args, gint);
147
148         while (text != NULL) {
149             hildon_dialog_add_button (HILDON_DIALOG (dialog), text, response_id);
150
151             text = va_arg (args, gchar*);
152             if (text == NULL)
153                 break;
154             response_id = va_arg (args, int);
155         }
156         va_end (args);
157     }
158
159     return dialog;
160 }
161
162 /**
163  * hildon_dialog_add_button:
164  * @dialog: a #HildonDialog
165  * @button_text: text of the button, or stock ID
166  * @response_id: response ID for the button.
167  *
168  * Adds a button to the dialog. Works exactly like
169  * gtk_dialog_add_button(), the only difference being that the button
170  * has finger size.
171  *
172  * Returns: the button widget that was added
173  *
174  * Since: 2.2
175  */
176 GtkWidget *
177 hildon_dialog_add_button                        (HildonDialog *dialog,
178                                                  const gchar  *button_text,
179                                                  gint          response_id)
180 {
181     GtkWidget *button;
182     button = gtk_dialog_add_button (GTK_DIALOG (dialog), button_text, response_id);
183     return button;
184 }
185
186 /**
187  * hildon_dialog_add_buttons:
188  * @dialog: a #HildonDialog
189  * @first_button_text: text of the button, or stock ID
190  * @Varargs: response ID for first button, then more text-response_id pairs
191  *
192  * Adds several buttons to the dialog. Works exactly like
193  * gtk_dialog_add_buttons(), the only difference being that the
194  * buttons have finger size.
195  *
196  * Since: 2.2
197  */
198 void
199 hildon_dialog_add_buttons                       (HildonDialog *dialog,
200                                                  const gchar  *first_button_text,
201                                                  ...)
202 {
203     va_list args;
204     const gchar *text;
205     gint response_id;
206
207     va_start (args, first_button_text);
208     text = first_button_text;
209     response_id = va_arg (args, gint);
210
211     while (text != NULL) {
212         hildon_dialog_add_button (HILDON_DIALOG (dialog), text, response_id);
213
214         text = va_arg (args, gchar*);
215         if (text == NULL)
216             break;
217         response_id = va_arg (args, int);
218     }
219
220     va_end (args);
221 }
222