Add an image property

This commit is contained in:
Matthias Clasen 2006-05-09 04:36:43 +00:00
parent 5c53411e77
commit 7f371df51a
7 changed files with 98 additions and 45 deletions

View File

@ -1,3 +1,8 @@
2006-05-09 Matthias Clasen <mclasen@redhat.com>
* gtk/gtk.symbols:
* gtk/gtkmessagedialog.[hc]: Add an image property. (#337306, Alex Graveley)
2006-05-09 Carlos Garnacho <carlosg@gnome.org> 2006-05-09 Carlos Garnacho <carlosg@gnome.org>
* gtk/gtknotebook.c: create an independent GdkWindow to behave nicely * gtk/gtknotebook.c: create an independent GdkWindow to behave nicely

View File

@ -1,3 +1,8 @@
2006-05-09 Matthias Clasen <mclasen@redhat.com>
* gtk/gtk.symbols:
* gtk/gtkmessagedialog.[hc]: Add an image property. (#337306, Alex Graveley)
2006-05-09 Carlos Garnacho <carlosg@gnome.org> 2006-05-09 Carlos Garnacho <carlosg@gnome.org>
* gtk/gtknotebook.c: create an independent GdkWindow to behave nicely * gtk/gtknotebook.c: create an independent GdkWindow to behave nicely

View File

@ -1,3 +1,7 @@
2006-05-09 Matthias Clasen <mclasen@redhat.com>
* gtk/gtk-sections.txt: Add gtk_message_dialog_set_image.
2006-05-08 Matthias Clasen <mclasen@redhat.com> 2006-05-08 Matthias Clasen <mclasen@redhat.com>
* gtk/question_index.sgml (reference): Update the internationalization * gtk/question_index.sgml (reference): Update the internationalization

View File

@ -2323,6 +2323,7 @@ GtkButtonsType
gtk_message_dialog_new gtk_message_dialog_new
gtk_message_dialog_new_with_markup gtk_message_dialog_new_with_markup
gtk_message_dialog_set_markup gtk_message_dialog_set_markup
gtk_message_dialog_set_image
gtk_message_dialog_format_secondary_text gtk_message_dialog_format_secondary_text
gtk_message_dialog_format_secondary_markup gtk_message_dialog_format_secondary_markup
<SUBSECTION Standard> <SUBSECTION Standard>

View File

@ -2301,6 +2301,7 @@ gtk_message_dialog_get_type G_GNUC_CONST
gtk_message_dialog_new G_GNUC_PRINTF(5,6) gtk_message_dialog_new G_GNUC_PRINTF(5,6)
gtk_message_dialog_new_with_markup G_GNUC_PRINTF(5,6) gtk_message_dialog_new_with_markup G_GNUC_PRINTF(5,6)
gtk_message_dialog_set_markup gtk_message_dialog_set_markup
gtk_message_dialog_set_image
#endif #endif
#endif #endif

View File

@ -46,8 +46,9 @@ typedef struct _GtkMessageDialogPrivate GtkMessageDialogPrivate;
struct _GtkMessageDialogPrivate struct _GtkMessageDialogPrivate
{ {
GtkWidget *secondary_label; GtkWidget *secondary_label;
gboolean has_primary_markup; guint message_type : 3;
gboolean has_secondary_text; guint has_primary_markup : 1;
guint has_secondary_text : 1;
}; };
static void gtk_message_dialog_style_set (GtkWidget *widget, static void gtk_message_dialog_style_set (GtkWidget *widget,
@ -71,7 +72,8 @@ enum {
PROP_TEXT, PROP_TEXT,
PROP_USE_MARKUP, PROP_USE_MARKUP,
PROP_SECONDARY_TEXT, PROP_SECONDARY_TEXT,
PROP_SECONDARY_USE_MARKUP PROP_SECONDARY_USE_MARKUP,
PROP_IMAGE
}; };
G_DEFINE_TYPE (GtkMessageDialog, gtk_message_dialog, GTK_TYPE_DIALOG); G_DEFINE_TYPE (GtkMessageDialog, gtk_message_dialog, GTK_TYPE_DIALOG);
@ -99,7 +101,7 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class)
12, 12,
GTK_PARAM_READABLE)); GTK_PARAM_READABLE));
/** /**
* GtkMessageDialog::use_separator * GtkMessageDialog:use-separator:
* *
* Whether to draw a separator line between the message label and the buttons * Whether to draw a separator line between the message label and the buttons
* in the dialog. * in the dialog.
@ -112,6 +114,13 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class)
P_("Whether to put a separator between the message dialog's text and the buttons"), P_("Whether to put a separator between the message dialog's text and the buttons"),
FALSE, FALSE,
GTK_PARAM_READABLE)); GTK_PARAM_READABLE));
/**
* GtkMessageDialog:message-type:
*
* The type of the message. The type is used to determine
* the image that is shown in the dialog, unless the image is
* explicitly set by the ::image property.
*/
g_object_class_install_property (gobject_class, g_object_class_install_property (gobject_class,
PROP_MESSAGE_TYPE, PROP_MESSAGE_TYPE,
g_param_spec_enum ("message-type", g_param_spec_enum ("message-type",
@ -192,6 +201,21 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class)
FALSE, FALSE,
GTK_PARAM_READWRITE)); GTK_PARAM_READWRITE));
/**
* GtkMessageDialog:image:
*
* The image for this dialog.
*
* Since: 2.10
*/
g_object_class_install_property (gobject_class,
PROP_IMAGE,
g_param_spec_object ("image",
P_("Image"),
P_("The image"),
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE));
g_type_class_add_private (gobject_class, g_type_class_add_private (gobject_class,
sizeof (GtkMessageDialogPrivate)); sizeof (GtkMessageDialogPrivate));
} }
@ -255,35 +279,6 @@ gtk_message_dialog_init (GtkMessageDialog *dialog)
_gtk_dialog_set_ignore_separator (GTK_DIALOG (dialog), TRUE); _gtk_dialog_set_ignore_separator (GTK_DIALOG (dialog), TRUE);
} }
static GtkMessageType
gtk_message_dialog_get_message_type (GtkMessageDialog *dialog)
{
const gchar* stock_id = NULL;
g_return_val_if_fail (GTK_IS_MESSAGE_DIALOG (dialog), GTK_MESSAGE_INFO);
g_return_val_if_fail (GTK_IS_IMAGE(dialog->image), GTK_MESSAGE_INFO);
stock_id = GTK_IMAGE(dialog->image)->data.stock.stock_id;
/* Look at the stock id of the image to guess the
* GtkMessageType value that was used to choose it
* in setup_type()
*/
if (strcmp (stock_id, GTK_STOCK_DIALOG_INFO) == 0)
return GTK_MESSAGE_INFO;
else if (strcmp (stock_id, GTK_STOCK_DIALOG_QUESTION) == 0)
return GTK_MESSAGE_QUESTION;
else if (strcmp (stock_id, GTK_STOCK_DIALOG_WARNING) == 0)
return GTK_MESSAGE_WARNING;
else if (strcmp (stock_id, GTK_STOCK_DIALOG_ERROR) == 0)
return GTK_MESSAGE_ERROR;
else
{
g_assert_not_reached ();
return GTK_MESSAGE_INFO;
}
}
static void static void
setup_primary_label_font (GtkMessageDialog *dialog) setup_primary_label_font (GtkMessageDialog *dialog)
{ {
@ -311,9 +306,11 @@ static void
setup_type (GtkMessageDialog *dialog, setup_type (GtkMessageDialog *dialog,
GtkMessageType type) GtkMessageType type)
{ {
GtkMessageDialogPrivate *priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
const gchar *stock_id = NULL; const gchar *stock_id = NULL;
GtkStockItem item;
priv->message_type = type;
switch (type) switch (type)
{ {
case GTK_MESSAGE_INFO: case GTK_MESSAGE_INFO:
@ -332,19 +329,17 @@ setup_type (GtkMessageDialog *dialog,
stock_id = GTK_STOCK_DIALOG_ERROR; stock_id = GTK_STOCK_DIALOG_ERROR;
break; break;
case GTK_MESSAGE_OTHER:
break;
default: default:
g_warning ("Unknown GtkMessageType %d", type); g_warning ("Unknown GtkMessageType %d", type);
break; break;
} }
if (stock_id == NULL) if (stock_id)
stock_id = GTK_STOCK_DIALOG_INFO;
if (gtk_stock_lookup (stock_id, &item))
gtk_image_set_from_stock (GTK_IMAGE (dialog->image), stock_id, gtk_image_set_from_stock (GTK_IMAGE (dialog->image), stock_id,
GTK_ICON_SIZE_DIALOG); GTK_ICON_SIZE_DIALOG);
else
g_warning ("Stock dialog ID doesn't exist?");
} }
static void static void
@ -376,7 +371,7 @@ gtk_message_dialog_set_property (GObject *object,
g_value_get_string (value)); g_value_get_string (value));
break; break;
case PROP_USE_MARKUP: case PROP_USE_MARKUP:
priv->has_primary_markup = g_value_get_boolean (value); priv->has_primary_markup = g_value_get_boolean (value) != FALSE;
gtk_label_set_use_markup (GTK_LABEL (dialog->label), gtk_label_set_use_markup (GTK_LABEL (dialog->label),
priv->has_primary_markup); priv->has_primary_markup);
setup_primary_label_font (dialog); setup_primary_label_font (dialog);
@ -407,7 +402,10 @@ gtk_message_dialog_set_property (GObject *object,
gtk_label_set_use_markup (GTK_LABEL (priv->secondary_label), gtk_label_set_use_markup (GTK_LABEL (priv->secondary_label),
g_value_get_boolean (value)); g_value_get_boolean (value));
break; break;
case PROP_IMAGE:
gtk_message_dialog_set_image (dialog, (GtkWidget *)g_value_get_object (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -429,7 +427,7 @@ gtk_message_dialog_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_MESSAGE_TYPE: case PROP_MESSAGE_TYPE:
g_value_set_enum (value, gtk_message_dialog_get_message_type (dialog)); g_value_set_enum (value, (GtkMessageType) priv->message_type);
break; break;
case PROP_TEXT: case PROP_TEXT:
g_value_set_string (value, gtk_label_get_label (GTK_LABEL (dialog->label))); g_value_set_string (value, gtk_label_get_label (GTK_LABEL (dialog->label)));
@ -451,6 +449,9 @@ gtk_message_dialog_get_property (GObject *object,
else else
g_value_set_boolean (value, FALSE); g_value_set_boolean (value, FALSE);
break; break;
case PROP_IMAGE:
g_value_set_object (value, dialog->image);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -596,6 +597,38 @@ gtk_message_dialog_new_with_markup (GtkWindow *parent,
return widget; return widget;
} }
/**
* gtk_message_dialog_set_image:
* @dialog: a #GtkMessageDialog
* @image: the image
*
* Sets the dialog's image to @image.
*
* Since: 2.10
**/
void
gtk_message_dialog_set_image (GtkMessageDialog *dialog,
GtkWidget *image)
{
GtkMessageDialogPrivate *priv;
GtkWidget *parent;
g_return_if_fail (GTK_IS_MESSAGE_DIALOG (dialog));
priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
priv->message_type = GTK_MESSAGE_OTHER;
parent = dialog->image->parent;
gtk_container_add (GTK_CONTAINER (parent), image);
gtk_container_remove (GTK_CONTAINER (parent), dialog->image);
gtk_box_reorder_child (GTK_BOX (parent), image, 0);
dialog->image = image;
g_object_notify (G_OBJECT (dialog), "image");
}
/** /**
* gtk_message_dialog_set_markup: * gtk_message_dialog_set_markup:
* @message_dialog: a #GtkMessageDialog * @message_dialog: a #GtkMessageDialog

View File

@ -37,7 +37,8 @@ typedef enum
GTK_MESSAGE_INFO, GTK_MESSAGE_INFO,
GTK_MESSAGE_WARNING, GTK_MESSAGE_WARNING,
GTK_MESSAGE_QUESTION, GTK_MESSAGE_QUESTION,
GTK_MESSAGE_ERROR GTK_MESSAGE_ERROR,
GTK_MESSAGE_OTHER
} GtkMessageType; } GtkMessageType;
typedef enum typedef enum
@ -97,6 +98,9 @@ GtkWidget* gtk_message_dialog_new_with_markup (GtkWindow *parent,
const gchar *message_format, const gchar *message_format,
...) G_GNUC_PRINTF (5, 6); ...) G_GNUC_PRINTF (5, 6);
void gtk_message_dialog_set_image (GtkMessageDialog *dialog,
GtkWidget *image);
void gtk_message_dialog_set_markup (GtkMessageDialog *message_dialog, void gtk_message_dialog_set_markup (GtkMessageDialog *message_dialog,
const gchar *str); const gchar *str);