* src/hildon-dialog.c * src/hildon-dialog.h (hildon_dialog_new_with_buttons): New...
[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: Karl Lattimer <karl.lattimer@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  * The HildonDialog is a GTK widget which represent a popup window in the
31  * Hildon framework. It is derived from the GtkDialog and provides additional
32  * commodities specific to the Hildon framework.
33  *
34  * <example>
35  * <title>Simple <structname>HildonDialog</structname> usage</title>
36  * <programlisting>
37  * void quick_message (gchar *message)
38  * {
39  * <!-- -->
40  *     GtkWidget *dialog, *label;
41  * <!-- -->
42  *     dialog = hildon_dialog_new ();
43  *     label = gtk_label_new (message);
44  * <!-- -->
45  *     g_signal_connect_swapped (dialog,
46  *                               "response",
47  *                               G_CALLBACK (gtk_widget_destroy),
48  *                               dialog);
49  * <!-- -->
50  *     gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
51  *                        label);
52  *     gtk_widget_show_all (dialog);
53  * <!-- -->
54  * }
55  * </programlisting>
56  * </example>
57  */
58
59 #include                                        "hildon-dialog.h"
60
61 G_DEFINE_TYPE (HildonDialog, hildon_dialog, GTK_TYPE_DIALOG);
62
63 static void
64 hildon_dialog_class_init                        (HildonDialogClass * dialog_class)
65 {
66 }
67
68 static void
69 hildon_dialog_init (HildonDialog *self)
70 {
71 }
72
73 /**
74  * hildon_dialog_new:
75  *
76  * Creates a new #HildonDialog widget
77  *
78  * Returns: the newly created #HildonDialog
79  */
80 GtkWidget*
81 hildon_dialog_new                               (void)
82 {
83     GtkWidget *self = g_object_new (HILDON_TYPE_DIALOG, NULL);
84
85     return self;
86 }
87
88 /**
89  * hildon_dialog_new_with_buttons:
90  * @title: Title of the dialog, or %NULL
91  * @parent: Transient parent of the dialog, or %NULL
92  * @flags: from #GtkDialogFlags
93  * @first_button_text: stock ID or text to go in first button, or %NULL
94  * @Varargs: response ID for first button, then additional buttons, ending with %NULL
95  *
96  * Creates a new #HildonDialog. See gtk_dialog_new_with_buttons() for
97  * more information.
98  *
99  * Return value: a new #HildonDialog
100  */
101 GtkWidget*
102 hildon_dialog_new_with_buttons (const gchar    *title,
103                                 GtkWindow      *parent,
104                                 GtkDialogFlags  flags,
105                                 const gchar    *first_button_text,
106                                 ...)
107 {
108   GtkWidget *dialog;
109
110   dialog = g_object_new (HILDON_TYPE_DIALOG, NULL);
111
112   /* This code is copied from gtk_dialog_new_empty(), as it's a
113    * private function that we cannot use here */
114   if (title)
115     gtk_window_set_title (GTK_WINDOW (dialog), title);
116
117   if (parent)
118     gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
119
120   if (flags & GTK_DIALOG_MODAL)
121     gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
122
123   if (flags & GTK_DIALOG_DESTROY_WITH_PARENT)
124     gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
125
126   if (flags & GTK_DIALOG_NO_SEPARATOR)
127     gtk_dialog_set_has_separator (dialog, FALSE);
128
129   /* This is almost copied from gtk_dialog_add_buttons_valist() */
130   if (first_button_text != NULL)
131     {
132       va_list args;
133       const gchar *text;
134       gint response_id;
135
136       va_start (args, first_button_text);
137       text = first_button_text;
138       response_id = va_arg (args, gint);
139
140       while (text != NULL)
141         {
142           gtk_dialog_add_button (GTK_DIALOG (dialog), text, response_id);
143
144           text = va_arg (args, gchar*);
145           if (text == NULL)
146              break;
147           response_id = va_arg (args, int);
148         }
149       va_end (args);
150     }
151
152   return dialog;
153 }