[gnome-todo] task-row: Show a star widget for task importance



commit 1d7442c369c008cc1eab64999b1f2ad9e4993e0f
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat May 2 18:25:26 2020 -0300

    task-row: Show a star widget for task importance
    
    Right now, this is pretty minimal; it only displays the
    importance of the task, but doesn't sort anything differently.

 src/task-list-view/gtd-task-row.c  | 45 ++++++++++++++++++++++++++++++++++++++
 src/task-list-view/gtd-task-row.ui | 14 +++++++++++-
 2 files changed, 58 insertions(+), 1 deletion(-)
---
diff --git a/src/task-list-view/gtd-task-row.c b/src/task-list-view/gtd-task-row.c
index caad47e..e653ec0 100644
--- a/src/task-list-view/gtd-task-row.c
+++ b/src/task-list-view/gtd-task-row.c
@@ -24,6 +24,7 @@
 #include "gtd-markdown-renderer.h"
 #include "gtd-provider.h"
 #include "gtd-rows-common-private.h"
+#include "gtd-star-widget.h"
 #include "gtd-task-row.h"
 #include "gtd-task.h"
 #include "gtd-task-list.h"
@@ -45,6 +46,7 @@ struct _GtdTaskRow
   GtkWidget          *done_check;
   GtkWidget          *edit_panel_revealer;
   GtkWidget          *header_event_box;
+  GtdStarWidget      *star_widget;
   GtkWidget          *title_entry;
 
   /* task widgets */
@@ -73,6 +75,10 @@ struct _GtdTaskRow
 
 #define PRIORITY_ICON_SIZE 8
 
+static void          on_star_widget_activated_cb                 (GtdStarWidget      *star_widget,
+                                                                  GParamSpec         *pspec,
+                                                                  GtdTaskRow         *self);
+
 G_DEFINE_TYPE (GtdTaskRow, gtd_task_row, GTK_TYPE_BIN)
 
 enum
@@ -352,6 +358,31 @@ on_depth_changed_cb (GtdTaskRow *self,
   gtk_widget_set_margin_start (self->content_box, margin);
 }
 
+static void
+on_task_important_changed_cb (GtdTask    *task,
+                              GParamSpec *pspec,
+                              GtdTaskRow *self)
+{
+  g_signal_handlers_block_by_func (self->star_widget, on_star_widget_activated_cb, self);
+
+  gtd_star_widget_set_active (self->star_widget, gtd_task_get_important (task));
+
+  g_signal_handlers_unblock_by_func (self->star_widget, on_star_widget_activated_cb, self);
+}
+
+static void
+on_star_widget_activated_cb (GtdStarWidget *star_widget,
+                             GParamSpec    *pspec,
+                             GtdTaskRow    *self)
+{
+  g_signal_handlers_block_by_func (self->task, on_task_important_changed_cb, self);
+
+  gtd_task_set_important (self->task, gtd_star_widget_get_active (star_widget));
+  gtd_provider_update_task (gtd_task_get_provider (self->task), self->task);
+
+  g_signal_handlers_unblock_by_func (self->task, on_task_important_changed_cb, self);
+}
+
 static gboolean
 on_key_pressed_cb (GtkEventControllerKey *controller,
                    guint                  keyval,
@@ -511,6 +542,19 @@ gtd_task_row_set_property (GObject      *object,
                                self,
                                G_CONNECT_SWAPPED);
 
+      on_task_important_changed_cb (self->task, NULL, self);
+      g_signal_connect_object (self->task,
+                               "notify::important",
+                               G_CALLBACK (on_task_important_changed_cb),
+                               self,
+                               0);
+
+      g_signal_connect_object (self->star_widget,
+                               "notify::active",
+                               G_CALLBACK (on_star_widget_activated_cb),
+                               self,
+                               0);
+
       g_signal_handlers_unblock_by_func (self->done_check, on_complete_check_toggled_cb, self);
       g_signal_handlers_unblock_by_func (self->title_entry, on_task_changed_cb, self);
 
@@ -631,6 +675,7 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, edit_panel_revealer);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, header_event_box);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, main_box);
+  gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, star_widget);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, task_date_label);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, task_list_label);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, title_entry);
diff --git a/src/task-list-view/gtd-task-row.ui b/src/task-list-view/gtd-task-row.ui
index 304b9d9..fc9fd6a 100644
--- a/src/task-list-view/gtd-task-row.ui
+++ b/src/task-list-view/gtd-task-row.ui
@@ -17,7 +17,7 @@
             <property name="orientation">vertical</property>
             <child>
               <object class="GtkBox">
-                <property name="margin-end">18</property>
+                <property name="margin-end">6</property>
                 <property name="margin-start">5</property>
                 <property name="margin-top">5</property>
                 <property name="margin-bottom">5</property>
@@ -96,6 +96,18 @@
                         </style>
                       </object>
                     </child>
+
+                    <!-- Star Widget -->
+                    <child>
+                      <object class="GtkBox">
+                        <property name="margin-start">18</property>
+                        <child>
+                          <object class="GtdStarWidget" id="star_widget">
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+
                   </object>
                 </child>
               </object>


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