From bb4b8052431eaee9640e8e4fab4fb2f0055ce1de Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Tue, 26 Jun 2007 15:07:58 +0000 Subject: [PATCH] app/dialogs/image-properties-dialog.c show comment and color profile in 2007-06-26 Sven Neumann * app/dialogs/image-properties-dialog.c * app/widgets/gimpimageprofileview.[ch]: show comment and color profile in text views instead of using labels. Deals much better with longer texts. svn path=/trunk/; revision=22837 --- ChangeLog | 7 ++ app/dialogs/image-properties-dialog.c | 68 +++++++++----- app/widgets/gimpimageprofileview.c | 129 ++++++++++---------------- app/widgets/gimpimageprofileview.h | 7 +- 4 files changed, 102 insertions(+), 109 deletions(-) diff --git a/ChangeLog b/ChangeLog index 209829bcf7..7a8cd85c5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-06-26 Sven Neumann + + * app/dialogs/image-properties-dialog.c + * app/widgets/gimpimageprofileview.[ch]: show comment and color + profile in text views instead of using labels. Deals much better + with longer texts. + 2007-06-26 Sven Neumann * app/widgets/gimpimagepropview.c diff --git a/app/dialogs/image-properties-dialog.c b/app/dialogs/image-properties-dialog.c index f91411fb96..5e166981a9 100644 --- a/app/dialogs/image-properties-dialog.c +++ b/app/dialogs/image-properties-dialog.c @@ -41,8 +41,9 @@ #include "gimp-intl.h" -static void image_comment_update (GtkWidget *page, - GtkWidget *label); +static GtkWidget * image_comment_view_new (GimpImage *image); +static void image_comment_view_update (GtkWidget *page, + GtkTextBuffer *buffer); /* public functions */ @@ -55,7 +56,6 @@ image_properties_dialog_new (GimpImage *image, GtkWidget *dialog; GtkWidget *notebook; GtkWidget *view; - GtkWidget *label; g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL); g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL); @@ -92,38 +92,56 @@ image_properties_dialog_new (GimpImage *image, gtk_widget_show (view); view = gimp_image_profile_view_new (image); - gtk_container_set_border_width (GTK_CONTAINER (view), 12); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), view, gtk_label_new (_("Color Profile"))); gtk_widget_show (view); - view = gimp_image_parasite_view_new (image, "gimp-comment"); - gtk_container_set_border_width (GTK_CONTAINER (view), 12); + view = image_comment_view_new (image); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), view, gtk_label_new (_("Comment"))); - label = g_object_new (GTK_TYPE_LABEL, - "wrap", TRUE, - "justify", GTK_JUSTIFY_LEFT, - "xalign", 0.0, - "yalign", 0.0, - "selectable", TRUE, - NULL); - gtk_container_add (GTK_CONTAINER (view), label); - gtk_widget_show (label); - - g_signal_connect (view, "update", - G_CALLBACK (image_comment_update), - label); - - image_comment_update (view, label); + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); return dialog; } +static GtkWidget * +image_comment_view_new (GimpImage *image) +{ + GtkWidget *view; + GtkWidget *scrolled_window; + GtkWidget *text_view; + GtkTextBuffer *buffer; + + view = gimp_image_parasite_view_new (image, "gimp-comment"); + + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 2); + gtk_container_add (GTK_CONTAINER (view), scrolled_window); + gtk_widget_show (scrolled_window); + + text_view = gtk_text_view_new (); + gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE); + gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); + gtk_widget_show (text_view); + + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); + + g_signal_connect (view, "update", + G_CALLBACK (image_comment_view_update), + buffer); + + image_comment_view_update (view, buffer); + + return view; +} + static void -image_comment_update (GtkWidget *page, - GtkWidget *label) +image_comment_view_update (GtkWidget *page, + GtkTextBuffer *buffer) { GimpImageParasiteView *view = GIMP_IMAGE_PARASITE_VIEW (page); const GimpParasite *parasite; @@ -143,7 +161,7 @@ image_comment_update (GtkWidget *page, text = tmp; } - gtk_label_set_text (GTK_LABEL (label), text); + gtk_text_buffer_set_text (buffer, text, -1); g_free (text); gtk_widget_show (page); @@ -151,6 +169,6 @@ image_comment_update (GtkWidget *page, else { gtk_widget_hide (page); - gtk_label_set_text (GTK_LABEL (label), NULL); + gtk_text_buffer_set_text (buffer, "", 0); } } diff --git a/app/widgets/gimpimageprofileview.c b/app/widgets/gimpimageprofileview.c index 1b1c736384..b445eccc21 100644 --- a/app/widgets/gimpimageprofileview.c +++ b/app/widgets/gimpimageprofileview.c @@ -40,13 +40,9 @@ #include "gimp-intl.h" -static void gimp_image_profile_view_dispose (GObject *object); +static void gimp_image_profile_view_dispose (GObject *object); -static GtkWidget * gimp_image_profile_view_add_label (GtkTable *table, - gint row, - const gchar *text); - -static void gimp_image_profile_view_update (GimpImageParasiteView *view); +static void gimp_image_profile_view_update (GimpImageParasiteView *view); G_DEFINE_TYPE (GimpImageProfileView, @@ -71,28 +67,31 @@ gimp_image_profile_view_class_init (GimpImageProfileViewClass *klass) static void gimp_image_profile_view_init (GimpImageProfileView *view) { - gint row = 0; + GtkWidget *scrolled_window; + GtkWidget *text_view; - view->table = gtk_table_new (3, 2, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (view->table), 6); - gtk_table_set_row_spacings (GTK_TABLE (view->table), 6); - gtk_container_add (GTK_CONTAINER (view), view->table); + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 2); + gtk_container_add (GTK_CONTAINER (view), scrolled_window); + gtk_widget_show (scrolled_window); - view->name_label = - gimp_image_profile_view_add_label (GTK_TABLE (view->table), row++, - _("Name:")); - view->desc_label = - gimp_image_profile_view_add_label (GTK_TABLE (view->table), row++, - _("Description:")); - view->info_label = - gimp_image_profile_view_add_label (GTK_TABLE (view->table), row++, - _("Info:")); + text_view = gtk_text_view_new (); + gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE); + gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); + gtk_widget_show (text_view); - view->message = g_object_new (GTK_TYPE_LABEL, - "xalign", 0.5, - "yalign", 0.5, - NULL); - gtk_container_add (GTK_CONTAINER (view), view->message); + view->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); + + gtk_text_buffer_create_tag (view->buffer, "strong", + "weight", PANGO_WEIGHT_BOLD, + "scale", PANGO_SCALE_LARGE, + NULL); + gtk_text_buffer_create_tag (view->buffer, "emphasis", + "style", PANGO_STYLE_OBLIQUE, + NULL); view->idle_id = 0; } @@ -128,70 +127,45 @@ gimp_image_profile_view_new (GimpImage *image) /* private functions */ -static GtkWidget * -gimp_image_profile_view_add_label (GtkTable *table, - gint row, - const gchar *text) -{ - GtkWidget *label; - GtkWidget *desc; - - desc = g_object_new (GTK_TYPE_LABEL, - "label", text, - "xalign", 1.0, - "yalign", 0.0, - NULL); - gimp_label_set_attributes (GTK_LABEL (desc), - PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD, - -1); - gtk_table_attach (table, desc, - 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (desc); - - label = g_object_new (GTK_TYPE_LABEL, - "xalign", 0.0, - "yalign", 0.0, - "selectable", TRUE, - NULL); - gtk_table_attach (table, label, - 1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (label); - - return label; -} - static gboolean gimp_image_profile_view_query (GimpImageProfileView *view) { - GimpImage *image; - gchar *name = NULL; - gchar *desc = NULL; - gchar *info = NULL; - GError *error = NULL; + GimpImage *image; + gchar *desc = NULL; + gchar *info = NULL; + GError *error = NULL; + GtkTextIter iter; + + gtk_text_buffer_set_text (view->buffer, "", 0); + gtk_text_buffer_get_start_iter (view->buffer, &iter); image = gimp_image_parasite_view_get_image (GIMP_IMAGE_PARASITE_VIEW (view)); if (plug_in_icc_profile_info (image, gimp_get_user_context (image->gimp), NULL, - &name, &desc, &info, + NULL, &desc, &info, &error)) { - gtk_label_set_text (GTK_LABEL (view->message), NULL); - gtk_widget_hide (view->message); + if (desc) + { + gtk_text_buffer_insert_with_tags_by_name (view->buffer, &iter, + desc, -1, + "strong", NULL); + gtk_text_buffer_insert (view->buffer, &iter, "\n", 1); + } - gtk_label_set_text (GTK_LABEL (view->name_label), name); - gtk_label_set_text (GTK_LABEL (view->desc_label), desc); - gtk_label_set_text (GTK_LABEL (view->info_label), info); - gtk_widget_show (view->table); + if (info) + gtk_text_buffer_insert (view->buffer, &iter, info, -1); } else { - gtk_label_set_text (GTK_LABEL (view->message), error->message); + gtk_text_buffer_insert_with_tags_by_name (view->buffer, &iter, + error->message, -1, + "emphasis", NULL); g_error_free (error); } - g_free (name); g_free (desc); g_free (info); @@ -202,14 +176,13 @@ static void gimp_image_profile_view_update (GimpImageParasiteView *view) { GimpImageProfileView *profile_view = GIMP_IMAGE_PROFILE_VIEW (view); + GtkTextIter iter; - gtk_label_set_text (GTK_LABEL (profile_view->name_label), NULL); - gtk_label_set_text (GTK_LABEL (profile_view->desc_label), NULL); - gtk_label_set_text (GTK_LABEL (profile_view->info_label), NULL); - gtk_widget_hide (profile_view->table); - - gtk_label_set_text (GTK_LABEL (profile_view->message), _("Querying...")); - gtk_widget_show (profile_view->message); + gtk_text_buffer_set_text (profile_view->buffer, "", 0); + gtk_text_buffer_get_start_iter (profile_view->buffer, &iter); + gtk_text_buffer_insert_with_tags_by_name (profile_view->buffer, &iter, + _("Querying..."), -1, + "emphasis", NULL); if (profile_view->idle_id) g_source_remove (profile_view->idle_id); diff --git a/app/widgets/gimpimageprofileview.h b/app/widgets/gimpimageprofileview.h index 0e67d6c199..62438a87ec 100644 --- a/app/widgets/gimpimageprofileview.h +++ b/app/widgets/gimpimageprofileview.h @@ -40,12 +40,7 @@ struct _GimpImageProfileView { GimpImageParasiteView parent_instance; - GtkWidget *table; - GtkWidget *name_label; - GtkWidget *desc_label; - GtkWidget *info_label; - - GtkWidget *message; + GtkTextBuffer *buffer; guint idle_id; };