[gnome-photos] empty-results-box: Implement the new empty states design
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] empty-results-box: Implement the new empty states design
- Date: Mon, 22 Jan 2018 15:33:56 +0000 (UTC)
commit b4af3f4f7743d445da5bfb5e8c4888faf00d3222
Author: Shivam Tripathi <shivam flash gmail com>
Date: Mon Jan 22 16:01:59 2018 +0100
empty-results-box: Implement the new empty states design
Some changes by Debarshi Ray.
Original patch from Alessandro Bono for gnome-documents.
https://bugzilla.gnome.org/show_bug.cgi?id=774297
src/photos-empty-results-box.c | 219 +++++++++++++++++++++++------------------
1 file changed, 121 insertions(+), 98 deletions(-)
---
diff --git a/src/photos-empty-results-box.c b/src/photos-empty-results-box.c
index 62918d2c..dcd1cdf6 100644
--- a/src/photos-empty-results-box.c
+++ b/src/photos-empty-results-box.c
@@ -28,16 +28,12 @@
#include "photos-empty-results-box.h"
#include "photos-enums.h"
-#include "photos-search-context.h"
-#include "photos-source-manager.h"
#include "photos-utils.h"
struct _PhotosEmptyResultsBox
{
GtkGrid parent_instance;
- GtkWidget *labels_grid;
- PhotosBaseManager *src_mngr;
PhotosWindowMode mode;
};
@@ -96,81 +92,63 @@ photos_empty_results_box_activate_link (PhotosEmptyResultsBox *self, const gchar
static void
-photos_empty_results_box_add_collections_label (PhotosEmptyResultsBox *self)
+photos_empty_results_box_add_image (PhotosEmptyResultsBox *self)
{
- GtkWidget *details;
-
- details = gtk_label_new (_("Name your first album"));
- gtk_widget_set_halign (details, GTK_ALIGN_START);
- gtk_label_set_line_wrap (GTK_LABEL (details), TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (details), 24);
- gtk_label_set_use_markup (GTK_LABEL (details), TRUE);
- gtk_label_set_xalign (GTK_LABEL (details), 0.0);
- gtk_container_add (GTK_CONTAINER (self->labels_grid), details);
-}
+ GtkWidget *image;
+ const gchar *icon_name = NULL;
+ switch (self->mode)
+ {
+ case PHOTOS_WINDOW_MODE_COLLECTIONS:
+ icon_name = "emblem-photos-symbolic";
+ break;
-static void
-photos_empty_results_box_add_system_settings_label (PhotosEmptyResultsBox *self)
-{
- GtkWidget *details;
- g_autofree gchar *details_str = NULL;
- g_autofree gchar *system_settings_href = NULL;
-
- /* Translators: this should be translated in the context of the "You
- * can add your online accounts in Settings" sentence below
- */
- system_settings_href = g_strconcat ("<a href=\"system-settings\">", _("Settings"), "</a>", NULL);
-
- /* Translators: %s here is "Settings", which is in a separate string
- * due to markup, and should be translated only in the context of
- * this sentence.
- */
- details_str = g_strdup_printf (_("You can add your online accounts in %s"), system_settings_href);
-
- details = gtk_label_new (details_str);
- gtk_widget_set_halign (details, GTK_ALIGN_START);
- gtk_label_set_line_wrap (GTK_LABEL (details), TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (details), 24);
- gtk_label_set_use_markup (GTK_LABEL (details), TRUE);
- gtk_label_set_xalign (GTK_LABEL (details), 0.0);
- gtk_container_add (GTK_CONTAINER (self->labels_grid), details);
-
- g_signal_connect_swapped (details, "activate-link", G_CALLBACK (photos_empty_results_box_activate_link),
self);
+ case PHOTOS_WINDOW_MODE_FAVORITES:
+ icon_name = "starred-symbolic";
+ break;
+
+ /* TODO: Don't show a collection if there are no screenshots in
+ * the relevant locations.
+ */
+ case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
+ case PHOTOS_WINDOW_MODE_OVERVIEW:
+ icon_name = "camera-photo-symbolic";
+ break;
+
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ icon_name = "system-search-symbolic";
+ break;
+
+ case PHOTOS_WINDOW_MODE_NONE:
+ case PHOTOS_WINDOW_MODE_EDIT:
+ case PHOTOS_WINDOW_MODE_PREVIEW:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_INVALID);
+ gtk_widget_set_margin_bottom (GTK_WIDGET (image), 9);
+ gtk_image_set_pixel_size (GTK_IMAGE (image), 128);
+ gtk_container_add (GTK_CONTAINER (self), image);
}
static void
-photos_empty_results_box_constructed (GObject *object)
+photos_empty_results_box_add_primary_label (PhotosEmptyResultsBox *self)
{
- PhotosEmptyResultsBox *self = PHOTOS_EMPTY_RESULTS_BOX (object);
- GtkStyleContext *context;
- GtkWidget *image;
- GtkWidget *title_label;
+ GtkWidget *primary_label;
+ const gchar *text = NULL;
g_autofree gchar *label = NULL;
- G_OBJECT_CLASS (photos_empty_results_box_parent_class)->constructed (object);
-
- gtk_widget_set_halign (GTK_WIDGET (self), GTK_ALIGN_CENTER);
- gtk_widget_set_hexpand (GTK_WIDGET (self), TRUE);
- gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_CENTER);
- gtk_widget_set_vexpand (GTK_WIDGET (self), TRUE);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_HORIZONTAL);
- gtk_grid_set_column_spacing (GTK_GRID (self), 12);
- context = gtk_widget_get_style_context (GTK_WIDGET (self));
- gtk_style_context_add_class (context, "dim-label");
-
switch (self->mode)
{
case PHOTOS_WINDOW_MODE_COLLECTIONS:
- image = gtk_image_new_from_icon_name ("emblem-photos-symbolic", GTK_ICON_SIZE_INVALID);
- label = g_strconcat ("<b><span size=\"large\">", _("No Albums Found"), "</span></b>", NULL);
+ text = _("No albums found");
break;
case PHOTOS_WINDOW_MODE_FAVORITES:
- image = gtk_image_new_from_icon_name ("starred-symbolic", GTK_ICON_SIZE_INVALID);
- label = g_strconcat ("<b><span size=\"large\">", _("Starred photos will appear here"), "</span></b>",
NULL);
+ text = _("Starred photos will appear here");
break;
/* TODO: Don't show a collection if there are no screenshots in
@@ -179,8 +157,7 @@ photos_empty_results_box_constructed (GObject *object)
case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
case PHOTOS_WINDOW_MODE_OVERVIEW:
case PHOTOS_WINDOW_MODE_SEARCH:
- image = gtk_image_new_from_icon_name ("emblem-photos-symbolic", GTK_ICON_SIZE_INVALID);
- label = g_strconcat ("<b><span size=\"large\">", _("No Photos Found"), "</span></b>", NULL);
+ text = _("No photos found");
break;
case PHOTOS_WINDOW_MODE_NONE:
@@ -191,25 +168,25 @@ photos_empty_results_box_constructed (GObject *object)
break;
}
- gtk_image_set_pixel_size (GTK_IMAGE (image), 64);
- gtk_container_add (GTK_CONTAINER (self), image);
+ label = g_strconcat ("<b><span size=\"large\">", text, "</span></b>", NULL);
+ primary_label = gtk_label_new (label);
+ gtk_widget_set_margin_top (GTK_WIDGET (primary_label), 9);
+ gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
+ gtk_container_add (GTK_CONTAINER (self), primary_label);
+}
- self->labels_grid = gtk_grid_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self->labels_grid), GTK_ORIENTATION_VERTICAL);
- gtk_grid_set_row_spacing (GTK_GRID (self->labels_grid), 12);
- gtk_container_add (GTK_CONTAINER (self), self->labels_grid);
- title_label = gtk_label_new (label);
- gtk_widget_set_halign (title_label, GTK_ALIGN_START);
- gtk_widget_set_vexpand (title_label, TRUE);
- gtk_label_set_use_markup (GTK_LABEL (title_label), TRUE);
- gtk_container_add (GTK_CONTAINER (self->labels_grid), title_label);
+static void
+photos_empty_results_box_add_secondary_label (PhotosEmptyResultsBox *self)
+{
+ gboolean handle_activate_link = FALSE;
+ gboolean use_markup = FALSE;
+ g_autofree gchar *label = NULL;
switch (self->mode)
{
case PHOTOS_WINDOW_MODE_COLLECTIONS:
- gtk_widget_set_valign (title_label, GTK_ALIGN_START);
- photos_empty_results_box_add_collections_label (self);
+ label = g_strdup (_("You can create albums from the Photos view"));
break;
/* TODO: Don't show a collection if there are no screenshots in
@@ -217,18 +194,43 @@ photos_empty_results_box_constructed (GObject *object)
*/
case PHOTOS_WINDOW_MODE_COLLECTION_VIEW:
case PHOTOS_WINDOW_MODE_FAVORITES:
- case PHOTOS_WINDOW_MODE_SEARCH:
- gtk_widget_set_valign (title_label, GTK_ALIGN_CENTER);
break;
case PHOTOS_WINDOW_MODE_OVERVIEW:
- if (photos_source_manager_has_online_sources (PHOTOS_SOURCE_MANAGER (self->src_mngr)))
- gtk_widget_set_valign (title_label, GTK_ALIGN_CENTER);
- else
- {
- gtk_widget_set_valign (title_label, GTK_ALIGN_START);
- photos_empty_results_box_add_system_settings_label (self);
- }
+ {
+ const gchar *pictures_path;
+ g_autofree gchar *pictures_path_href = NULL;
+ g_autofree gchar *system_settings_href = NULL;
+
+ /* Translators: this should be translated in the context of
+ * the "Photos from your Online Accounts and Pictures folder
+ * will appear here." sentence below.
+ */
+ system_settings_href = g_strdup_printf ("<a href=\"system-settings\">%s</a>", _("Online Accounts"));
+
+ /* Translators: this should be translated in the context of
+ * the "Photos from your Online Accounts and Pictures folder
+ * will appear here." sentence below.
+ */
+ pictures_path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES);
+ pictures_path_href = g_strdup_printf ("<a href=\"file://%s\">%s</a>", pictures_path, _("Pictures
folder"));
+
+ /* Translators: the first %s here is "Online Accounts" and the
+ * second %s is "Pictures folder", which are in separate
+ * strings due to markup, and should be translated only in the
+ * context of this sentence.
+ */
+ label = g_strdup_printf (_("Photos from your %s and %s will appear here."),
+ system_settings_href,
+ pictures_path_href);
+
+ handle_activate_link = TRUE;
+ use_markup = TRUE;
+ break;
+ }
+
+ case PHOTOS_WINDOW_MODE_SEARCH:
+ label = g_strdup (_("Try a different search"));
break;
case PHOTOS_WINDOW_MODE_NONE:
@@ -239,18 +241,47 @@ photos_empty_results_box_constructed (GObject *object)
break;
}
- gtk_widget_show_all (GTK_WIDGET (self));
+ if (label != NULL)
+ {
+ GtkWidget *secondary_label;
+
+ secondary_label = gtk_label_new (label);
+ gtk_label_set_use_markup (GTK_LABEL (secondary_label), use_markup);
+ gtk_container_add (GTK_CONTAINER (self), secondary_label);
+ if (handle_activate_link)
+ {
+ g_signal_connect_swapped (secondary_label,
+ "activate-link",
+ G_CALLBACK (photos_empty_results_box_activate_link),
+ self);
+ }
+ }
}
static void
-photos_empty_results_box_dispose (GObject *object)
+photos_empty_results_box_constructed (GObject *object)
{
PhotosEmptyResultsBox *self = PHOTOS_EMPTY_RESULTS_BOX (object);
+ GtkStyleContext *context;
+ g_autofree gchar *label = NULL;
+
+ G_OBJECT_CLASS (photos_empty_results_box_parent_class)->constructed (object);
+
+ gtk_widget_set_halign (GTK_WIDGET (self), GTK_ALIGN_CENTER);
+ gtk_widget_set_hexpand (GTK_WIDGET (self), TRUE);
+ gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_CENTER);
+ gtk_widget_set_vexpand (GTK_WIDGET (self), TRUE);
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_VERTICAL);
+ gtk_grid_set_row_spacing (GTK_GRID (self), 12);
+ context = gtk_widget_get_style_context (GTK_WIDGET (self));
+ gtk_style_context_add_class (context, "dim-label");
- g_clear_object (&self->src_mngr);
+ photos_empty_results_box_add_image (self);
+ photos_empty_results_box_add_primary_label (self);
+ photos_empty_results_box_add_secondary_label (self);
- G_OBJECT_CLASS (photos_empty_results_box_parent_class)->dispose (object);
+ gtk_widget_show_all (GTK_WIDGET (self));
}
@@ -275,13 +306,6 @@ photos_empty_results_box_set_property (GObject *object, guint prop_id, const GVa
static void
photos_empty_results_box_init (PhotosEmptyResultsBox *self)
{
- GApplication *app;
- PhotosSearchContextState *state;
-
- app = g_application_get_default ();
- state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
-
- self->src_mngr = g_object_ref (state->src_mngr);
}
@@ -291,7 +315,6 @@ photos_empty_results_box_class_init (PhotosEmptyResultsBoxClass *class)
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->constructed = photos_empty_results_box_constructed;
- object_class->dispose = photos_empty_results_box_dispose;
object_class->set_property = photos_empty_results_box_set_property;
g_object_class_install_property (object_class,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]