diff options
Diffstat (limited to 'hildon/hildon-dialog.c')
-rw-r--r-- | hildon/hildon-dialog.c | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/hildon/hildon-dialog.c b/hildon/hildon-dialog.c new file mode 100644 index 0000000..5b5653e --- /dev/null +++ b/hildon/hildon-dialog.c @@ -0,0 +1,231 @@ +/* + * This file is a part of hildon + * + * Copyright (C) 2008 Nokia Corporation, all rights reserved. + * + * Contact: Rodrigo Novo <rodrigo.novo@nokia.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +/** + * SECTION:hildon-dialog + * @short_description: Widget representing a popup window in the Hildon framework. + * @see_also: #HildonCodeDialog, #HildonColorChooserDialog, #HildonFontSelectionDialog, #HildonGetPasswordDialog, #HildonLoginDialog, #HildonSetPasswordDialog, #HildonSortDialog, #HildonWizardDialog + * + * #HildonDialog is a GTK widget which represent a popup window in the + * Hildon framework. It is derived from #GtkDialog and provides additional + * commodities specific to the Hildon framework. + * + * As of hildon 2.2, #HildonDialog has been deprecated in favor of #GtkDialog. + * + * <note> + * <para> + * #HildonDialog has been deprecated since Hildon 2.2 and should not + * be used in newly written code. See + * <link linkend="hildon-migrating-hildon-dialogs">Migrating Hildon Dialogs</link> + * section to know how to migrate this deprecated widget. + * </para> + * </note> + * + * <example> + * <title>Simple <structname>HildonDialog</structname> usage</title> + * <programlisting> + * void quick_message (gchar *message) + * { + * <!-- --> + * GtkWidget *dialog, *label; + * <!-- --> + * dialog = hildon_dialog_new (); + * label = gtk_label_new (message); + * <!-- --> + * g_signal_connect_swapped (dialog, + * "response", + * G_CALLBACK (gtk_widget_destroy), + * dialog); + * <!-- --> + * gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), + * label); + * gtk_widget_show_all (dialog); + * <!-- --> + * } + * </programlisting> + * </example> + */ + +#undef HILDON_DISABLE_DEPRECATED + +#include "hildon-dialog.h" +#include "hildon-gtk.h" + +G_DEFINE_TYPE (HildonDialog, hildon_dialog, GTK_TYPE_DIALOG); + +static void +hildon_dialog_class_init (HildonDialogClass *dialog_class) +{ +} + +static void +hildon_dialog_init (HildonDialog *self) +{ +} + +/** + * hildon_dialog_new: + * + * Creates a new #HildonDialog widget + * + * Returns: the newly created #HildonDialog + * + * Since: 2.2 + */ +GtkWidget* +hildon_dialog_new (void) +{ + GtkWidget *self = g_object_new (HILDON_TYPE_DIALOG, NULL); + + return self; +} + +/** + * hildon_dialog_new_with_buttons: + * @title: Title of the dialog, or %NULL + * @parent: Transient parent of the dialog, or %NULL + * @flags: from #GtkDialogFlags + * @first_button_text: stock ID or text to go in first button, or %NULL + * @Varargs: response ID for first button, then additional buttons, ending with %NULL + * + * Creates a new #HildonDialog. See gtk_dialog_new_with_buttons() for + * more information. + * + * Return value: a new #HildonDialog + * + * Since: 2.2 + */ +GtkWidget* +hildon_dialog_new_with_buttons (const gchar *title, + GtkWindow *parent, + GtkDialogFlags flags, + const gchar *first_button_text, + ...) +{ + GtkWidget *dialog; + + dialog = g_object_new (HILDON_TYPE_DIALOG, NULL); + + /* This code is copied from gtk_dialog_new_empty(), as it's a + * private function that we cannot use here */ + if (title) + gtk_window_set_title (GTK_WINDOW (dialog), title); + + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + + if (flags & GTK_DIALOG_MODAL) + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + + if (flags & GTK_DIALOG_DESTROY_WITH_PARENT) + gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); + + if (flags & GTK_DIALOG_NO_SEPARATOR) + gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); + + /* This is almost copied from gtk_dialog_add_buttons_valist() */ + if (first_button_text != NULL) { + va_list args; + const gchar *text; + gint response_id; + + va_start (args, first_button_text); + text = first_button_text; + response_id = va_arg (args, gint); + + while (text != NULL) { + hildon_dialog_add_button (HILDON_DIALOG (dialog), text, response_id); + + text = va_arg (args, gchar*); + if (text == NULL) + break; + response_id = va_arg (args, int); + } + va_end (args); + } + + return dialog; +} + +/** + * hildon_dialog_add_button: + * @dialog: a #HildonDialog + * @button_text: text of the button, or stock ID + * @response_id: response ID for the button. + * + * Adds a button to the dialog. Works exactly like + * gtk_dialog_add_button(), the only difference being that the button + * has finger size. + * + * Returns: the button widget that was added + * + * Since: 2.2 + */ +GtkWidget * +hildon_dialog_add_button (HildonDialog *dialog, + const gchar *button_text, + gint response_id) +{ + GtkWidget *button; + button = gtk_dialog_add_button (GTK_DIALOG (dialog), button_text, response_id); + return button; +} + +/** + * hildon_dialog_add_buttons: + * @dialog: a #HildonDialog + * @first_button_text: text of the button, or stock ID + * @Varargs: response ID for first button, then more text-response_id pairs + * + * Adds several buttons to the dialog. Works exactly like + * gtk_dialog_add_buttons(), the only difference being that the + * buttons have finger size. + * + * Since: 2.2 + */ +void +hildon_dialog_add_buttons (HildonDialog *dialog, + const gchar *first_button_text, + ...) +{ + va_list args; + const gchar *text; + gint response_id; + + va_start (args, first_button_text); + text = first_button_text; + response_id = va_arg (args, gint); + + while (text != NULL) { + hildon_dialog_add_button (HILDON_DIALOG (dialog), text, response_id); + + text = va_arg (args, gchar*); + if (text == NULL) + break; + response_id = va_arg (args, int); + } + + va_end (args); +} + |