From 39f8dfd7ef9dd730273d6f3729d02d3238f87bcf Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Thu, 1 Dec 2011 18:13:25 +0300 Subject: [PATCH] Created a statusbar update function and extended code for the statusbar to show image dimensions as well as the percentage the image is scaled at. --- src/image_viewer.c | 26 +++++++++++++ src/image_viewer.h | 6 +++ src/main_window.c | 102 ++++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 111 insertions(+), 23 deletions(-) diff --git a/src/image_viewer.c b/src/image_viewer.c index ff20e3d..a3eafea 100644 --- a/src/image_viewer.c +++ b/src/image_viewer.c @@ -363,6 +363,12 @@ rstto_image_viewer_class_init(RsttoImageViewerClass *viewer_class) G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); + g_signal_new ("size-ready", G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } /** @@ -1559,6 +1565,25 @@ rstto_image_viewer_get_orientation (RsttoImageViewer *viewer) return viewer->priv->orientation; } +gint +rstto_image_viewer_get_width (RsttoImageViewer *viewer) +{ + if (viewer) + { + return viewer->priv->image_width; + } + return 0; +} +gint +rstto_image_viewer_get_height (RsttoImageViewer *viewer) +{ + if (viewer) + { + return viewer->priv->image_height; + } + return 0; +} + void rstto_image_viewer_set_menu ( RsttoImageViewer *viewer, @@ -1793,6 +1818,7 @@ cb_rstto_image_loader_closed (GdkPixbufLoader *loader, RsttoImageViewerTransacti FALSE); } + g_signal_emit_by_name(transaction->viewer, "size-ready"); rstto_image_viewer_transaction_free (transaction); } diff --git a/src/image_viewer.h b/src/image_viewer.h index 9f93097..dd2a465 100644 --- a/src/image_viewer.h +++ b/src/image_viewer.h @@ -96,6 +96,12 @@ rstto_image_viewer_set_orientation ( RsttoImageOrientation rstto_image_viewer_get_orientation (RsttoImageViewer *viewer); +gint +rstto_image_viewer_get_width (RsttoImageViewer *viewer); + +gint +rstto_image_viewer_get_height (RsttoImageViewer *viewer); + void rstto_image_viewer_set_menu ( RsttoImageViewer *viewer, diff --git a/src/main_window.c b/src/main_window.c index b564fc4..431f50d 100644 --- a/src/main_window.c +++ b/src/main_window.c @@ -154,6 +154,8 @@ static gboolean cb_rstto_main_window_show_fs_toolbar_timeout (RsttoMainWindow *window); static void cb_rstto_main_window_image_list_iter_changed (RsttoImageListIter *iter, RsttoMainWindow *window); +static void +rstto_main_window_update_statusbar (RsttoMainWindow *window); static void cb_rstto_main_window_zoom_100 (GtkWidget *widget, RsttoMainWindow *window); @@ -199,6 +201,8 @@ static void cb_rstto_main_window_navigationtoolbar_position_changed (GtkRadioAction *, GtkRadioAction *, RsttoMainWindow *window); static void cb_rstto_main_window_navigationtoolbar_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); +static void +cb_rstto_main_window_update_statusbar (GtkWidget *widget, RsttoMainWindow *window); static void cb_rstto_main_window_play (GtkWidget *widget, RsttoMainWindow *window); @@ -702,6 +706,7 @@ rstto_main_window_init (RsttoMainWindow *window) g_signal_connect(G_OBJECT(window), "window-state-event", G_CALLBACK(cb_rstto_main_window_state_event), NULL); g_signal_connect(G_OBJECT(window->priv->image_list_toolbar), "button-press-event", G_CALLBACK(cb_rstto_main_window_navigationtoolbar_button_press_event), window); g_signal_connect(G_OBJECT(window->priv->thumbnailbar), "button-press-event", G_CALLBACK(cb_rstto_main_window_navigationtoolbar_button_press_event), window); + g_signal_connect(G_OBJECT(window->priv->image_viewer), "size-ready", G_CALLBACK(cb_rstto_main_window_update_statusbar), window); if ( TRUE == rstto_settings_get_boolean_property (window->priv->settings_manager, "merge-toolbars")) { @@ -855,15 +860,11 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window) { const gchar *file_basename = NULL; gchar *title = NULL; - gchar *status = NULL; - gchar *tmp_status = NULL; RsttoFile *cur_file = NULL; gint position, count; RsttoImageList *image_list = window->priv->image_list; GList *app_list, *iter; const gchar *content_type; - ExifEntry *exif_entry = NULL; - gchar exif_data[20]; GtkWidget *open_with_menu = gtk_menu_new(); GtkWidget *open_with_window_menu = gtk_menu_new(); gtk_menu_item_set_submenu (GTK_MENU_ITEM (gtk_ui_manager_get_widget ( window->priv->ui_manager, "/image-viewer-menu/open-with-menu")), open_with_menu); @@ -914,6 +915,55 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window) title = g_strdup_printf ("%s - %s", RISTRETTO_APP_TITLE, file_basename); } + } + else + { + GtkWidget *menu_item = gtk_image_menu_item_new_with_label (_("Empty")); + gtk_menu_shell_append (GTK_MENU_SHELL (open_with_menu), menu_item); + gtk_widget_set_sensitive (menu_item, FALSE); + + rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), NULL, -1, 0); + + menu_item = gtk_image_menu_item_new_with_label (_("Empty")); + gtk_menu_shell_append (GTK_MENU_SHELL (open_with_window_menu), menu_item); + gtk_widget_set_sensitive (menu_item, FALSE); + + gtk_widget_show_all (open_with_menu); + gtk_widget_show_all (open_with_window_menu); + + title = g_strdup (RISTRETTO_APP_TITLE); + } + + rstto_main_window_update_buttons (window); + gtk_window_set_title (GTK_WINDOW (window), title); + g_free (title); + + } +} + +/** + * rstto_main_window_update_statusbar: + * @window: + * + */ +static void +rstto_main_window_update_statusbar (RsttoMainWindow *window) +{ + const gchar *file_basename = NULL; + gchar *status = NULL; + gchar *tmp_status = NULL; + RsttoFile *cur_file = NULL; + RsttoImageViewer *viewer = RSTTO_IMAGE_VIEWER(window->priv->image_viewer); + ExifEntry *exif_entry = NULL; + gchar exif_data[20]; + + if (window->priv->image_list) + { + cur_file = rstto_image_list_iter_get_file (window->priv->iter); + if (NULL != cur_file) + { + file_basename = rstto_file_get_display_name (cur_file); + status = g_strdup(file_basename); if (TRUE == rstto_file_has_exif (cur_file)) @@ -932,7 +982,7 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window) g_free (status); status = tmp_status; - exif_entry_free (exif_entry); + /*exif_entry_free (exif_entry);*/ } exif_entry = rstto_file_get_exif ( cur_file, @@ -946,31 +996,26 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window) g_free (status); status = tmp_status; - exif_entry_free (exif_entry); + /*exif_entry_free (exif_entry);*/ } } + + if(rstto_image_viewer_get_width(viewer) != 0 && rstto_image_viewer_get_height(viewer) != 0) + { + tmp_status = g_strdup_printf ("%s\t%d x %d\t%.1f%%", status, + rstto_image_viewer_get_width(viewer), + rstto_image_viewer_get_height(viewer), + (100 * rstto_image_viewer_get_scale(viewer))); + + g_free (status); + status = tmp_status; + } } else { - GtkWidget *menu_item = gtk_image_menu_item_new_with_label (_("Empty")); - gtk_menu_shell_append (GTK_MENU_SHELL (open_with_menu), menu_item); - gtk_widget_set_sensitive (menu_item, FALSE); - - rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), NULL, -1, 0); - - menu_item = gtk_image_menu_item_new_with_label (_("Empty")); - gtk_menu_shell_append (GTK_MENU_SHELL (open_with_window_menu), menu_item); - gtk_widget_set_sensitive (menu_item, FALSE); - - gtk_widget_show_all (open_with_menu); - gtk_widget_show_all (open_with_window_menu); - - title = g_strdup (RISTRETTO_APP_TITLE); status = g_strdup (_("Press open to select an image")); } - rstto_main_window_update_buttons (window); - gtk_window_set_title (GTK_WINDOW (window), title); gtk_statusbar_pop (GTK_STATUSBAR (window->priv->statusbar), window->priv->statusbar_context_id); if (status) @@ -980,7 +1025,6 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window) status = NULL; } - g_free (title); } } @@ -2412,6 +2456,12 @@ cb_rstto_main_window_configure_event (GtkWidget *widget, GdkEventConfigure *even return FALSE; } +static void +cb_rstto_main_window_update_statusbar (GtkWidget *widget, RsttoMainWindow *window) +{ + rstto_main_window_update_statusbar(window); +} + /******************/ /* ZOOM CALLBACKS */ /******************/ @@ -2427,6 +2477,7 @@ static void cb_rstto_main_window_zoom_fit (GtkWidget *widget, RsttoMainWindow *window) { rstto_image_viewer_set_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), 0); + rstto_main_window_update_statusbar(window); } /** @@ -2440,6 +2491,7 @@ static void cb_rstto_main_window_zoom_100 (GtkWidget *widget, RsttoMainWindow *window) { rstto_image_viewer_set_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), 1); + rstto_main_window_update_statusbar(window); } /** @@ -2454,6 +2506,7 @@ cb_rstto_main_window_zoom_in (GtkWidget *widget, RsttoMainWindow *window) { gdouble scale = rstto_image_viewer_get_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer)); rstto_image_viewer_set_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), scale*1.2); + rstto_main_window_update_statusbar(window); } /** @@ -2468,6 +2521,7 @@ cb_rstto_main_window_zoom_out (GtkWidget *widget, RsttoMainWindow *window) { gdouble scale = rstto_image_viewer_get_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer)); rstto_image_viewer_set_scale (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), scale/1.2); + rstto_main_window_update_statusbar(window); } /**********************/ @@ -2501,6 +2555,7 @@ cb_rstto_main_window_rotate_cw (GtkWidget *widget, RsttoMainWindow *window) rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_ORIENT_NONE); break; } + rstto_main_window_update_statusbar(window); } /** @@ -2530,6 +2585,7 @@ cb_rstto_main_window_rotate_ccw (GtkWidget *widget, RsttoMainWindow *window) rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_ORIENT_180); break; } + rstto_main_window_update_statusbar(window); } -- 1.7.5.4