[gnome-todo] empty-list-widget: Add button to add more tasks



commit abb45b1f88d69808deb8d81fff679cf72821c96c
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Tue Apr 13 11:50:41 2021 -0300

    empty-list-widget: Add button to add more tasks
    
    It's a simple extra widget that emits the (newly introduced) 'add-tasks'
    signal, which will be used by GtdTaskListView to switch back to the task
    list.

 src/gui/gtd-empty-list-widget.c  | 48 +++++++++++++++++++++++++++++++++++++---
 src/gui/gtd-empty-list-widget.ui | 12 ++++++++++
 2 files changed, 57 insertions(+), 3 deletions(-)
---
diff --git a/src/gui/gtd-empty-list-widget.c b/src/gui/gtd-empty-list-widget.c
index 2b69739c..045ad0af 100644
--- a/src/gui/gtd-empty-list-widget.c
+++ b/src/gui/gtd-empty-list-widget.c
@@ -26,6 +26,7 @@ struct _GtdEmptyListWidget
 {
   GtkBox              parent;
 
+  GtkWidget          *add_button;
   GtkWidget          *subtitle_label;
   GtkWidget          *title_label;
 
@@ -34,6 +35,15 @@ struct _GtdEmptyListWidget
 
 G_DEFINE_TYPE (GtdEmptyListWidget, gtd_empty_list_widget, GTK_TYPE_BOX)
 
+enum
+{
+  ADD_TASKS,
+  N_SIGNALS,
+};
+
+static guint signals[N_SIGNALS] = { 0, };
+
+
 /* Icons that will be randomly picked */
 const gchar *messages[] =
 {
@@ -55,12 +65,13 @@ const gchar *subtitles[] =
 static void
 update_message (GtdEmptyListWidget *self)
 {
-  const gchar *title_text, *subtitle_text;
+  const gchar *title_text, *subtitle_text, *button_text;
 
   if (self->is_empty)
     {
-      title_text = _("No tasks found");
-      subtitle_text = _("You can add tasks using the <b>+</b> above");
+      title_text = _("Tasks Will Appear Here");
+      subtitle_text = "";
+      button_text = _("Add Tasks…");
     }
   else
     {
@@ -71,12 +82,33 @@ update_message (GtdEmptyListWidget *self)
 
       title_text = gettext (messages[message_index]);
       subtitle_text = gettext (subtitles[subtitle_index]);
+      button_text = _("Add More Tasks…");
     }
 
   gtk_label_set_markup (GTK_LABEL (self->title_label), title_text);
   gtk_label_set_markup (GTK_LABEL (self->subtitle_label), subtitle_text);
+  gtk_button_set_label (GTK_BUTTON (self->add_button), button_text);
+
+  gtk_widget_set_visible (self->subtitle_label, !self->is_empty);
+}
+
+
+/*
+ * Callbacks
+ */
+
+static void
+on_add_button_clicked_cb (GtkButton          *button,
+                          GtdEmptyListWidget *self)
+{
+  g_signal_emit (self, signals[ADD_TASKS], 0);
 }
 
+
+/*
+ * GObject overrides
+ */
+
 static void
 gtd_empty_list_widget_get_property (GObject    *object,
                                     guint       prop_id,
@@ -104,11 +136,21 @@ gtd_empty_list_widget_class_init (GtdEmptyListWidgetClass *klass)
   object_class->get_property = gtd_empty_list_widget_get_property;
   object_class->set_property = gtd_empty_list_widget_set_property;
 
+  signals[ADD_TASKS] = g_signal_new ("add-tasks",
+                                     GTD_TYPE_EMPTY_LIST_WIDGET,
+                                     G_SIGNAL_RUN_LAST,
+                                     0, NULL, NULL, NULL,
+                                     G_TYPE_NONE,
+                                     0);
+
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/gtd-empty-list-widget.ui");
 
+  gtk_widget_class_bind_template_child (widget_class, GtdEmptyListWidget, add_button);
   gtk_widget_class_bind_template_child (widget_class, GtdEmptyListWidget, subtitle_label);
   gtk_widget_class_bind_template_child (widget_class, GtdEmptyListWidget, title_label);
 
+  gtk_widget_class_bind_template_callback (widget_class, on_add_button_clicked_cb);
+
   gtk_widget_class_set_css_name (widget_class, "emptylistwidget");
 }
 
diff --git a/src/gui/gtd-empty-list-widget.ui b/src/gui/gtd-empty-list-widget.ui
index 850672e8..e6958484 100644
--- a/src/gui/gtd-empty-list-widget.ui
+++ b/src/gui/gtd-empty-list-widget.ui
@@ -42,6 +42,18 @@
                 </style>
               </object>
             </child>
+
+            <!-- Add Tasks button -->
+            <child>
+              <object class="GtkButton" id="add_button">
+                <property name="margin-top">24</property>
+                <signal name="clicked" handler="on_add_button_clicked_cb" object="GtdEmptyListWidget" 
swapped="no" />
+                <style>
+                  <class name="suggested-action"/>
+                </style>
+              </object>
+            </child>
+
           </object>
         </child>
       </object>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]