[gnome-todo] task-row: improve alignment of labels



commit 98ee5a2f2f5c88aed87f95b2bd004acbc3ae1096
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Apr 22 19:38:14 2017 -0300

    task-row: improve alignment of labels
    
    By sharing sizegroups for the due date label and the tasklist
    name label, we can force them have the same size without having
    to resort to the fixed width horror show.

 data/ui/list-view.ui     |    6 ++++++
 data/ui/task-row.ui      |    6 +++---
 src/gtd-task-list-view.c |   15 ++++++++++++++-
 src/gtd-task-row.c       |    9 +++++++++
 src/gtd-task-row.h       |    4 ++++
 5 files changed, 36 insertions(+), 4 deletions(-)
---
diff --git a/data/ui/list-view.ui b/data/ui/list-view.ui
index d9f63ba..2e7c35f 100644
--- a/data/ui/list-view.ui
+++ b/data/ui/list-view.ui
@@ -187,4 +187,10 @@
       </object>
     </child>
   </template>
+  <object class="GtkSizeGroup" id="tasklist_name_sizegroup">
+    <property name="mode">horizontal</property>
+  </object>
+  <object class="GtkSizeGroup" id="due_date_sizegroup">
+    <property name="mode">horizontal</property>
+  </object>
 </interface>
diff --git a/data/ui/task-row.ui b/data/ui/task-row.ui
index aa27886..9dbd998 100644
--- a/data/ui/task-row.ui
+++ b/data/ui/task-row.ui
@@ -151,7 +151,8 @@
               <object class="GtkLabel" id="task_date_label">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">1</property>
+                <property name="xalign">0</property>
+                <property name="margin-end">6</property>
                 <style>
                   <class name="dim-label"/>
                 </style>
@@ -161,8 +162,7 @@
               <object class="GtkLabel" id="task_list_label">
                 <property name="visible">False</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">1</property>
-                <property name="width_chars">18</property>
+                <property name="xalign">0</property>
                 <property name="max_width_chars">18</property>
                 <property name="ellipsize">middle</property>
                 <style>
diff --git a/src/gtd-task-list-view.c b/src/gtd-task-list-view.c
index ec90946..0e6b6a9 100644
--- a/src/gtd-task-list-view.c
+++ b/src/gtd-task-list-view.c
@@ -106,7 +106,9 @@ typedef struct
   GtdTaskListViewSortFunc sort_func;
   gpointer                sort_user_data;
 
-  GtkWidget             *active_row;
+  GtkWidget              *active_row;
+  GtkSizeGroup           *due_date_sizegroup;
+  GtkSizeGroup           *tasklist_name_sizegroup;
 } GtdTaskListViewPrivate;
 
 struct _GtdTaskListView
@@ -927,6 +929,15 @@ insert_task (GtdTaskListView *self,
   gtk_list_box_insert (priv->listbox,
                        new_row,
                        0);
+
+  /*
+   * Setup a sizegroup to let all the tasklist labels have
+   * the same width.
+   */
+  gtd_task_row_set_sizegroups (GTD_TASK_ROW (new_row),
+                               priv->tasklist_name_sizegroup,
+                               priv->due_date_sizegroup);
+
   gtd_task_row_reveal (GTD_TASK_ROW (new_row));
 }
 
@@ -1631,6 +1642,7 @@ gtd_task_list_view_class_init (GtdTaskListViewClass *klass)
 
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, arrow_frame);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, dnd_row);
+  gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, due_date_sizegroup);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, edit_pane);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, edit_revealer);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, empty_box);
@@ -1639,6 +1651,7 @@ gtd_task_list_view_class_init (GtdTaskListViewClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, done_image);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, done_label);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, new_task_row);
+  gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, tasklist_name_sizegroup);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, viewport);
   gtk_widget_class_bind_template_child_private (widget_class, GtdTaskListView, scrolled_window);
 
diff --git a/src/gtd-task-row.c b/src/gtd-task-row.c
index 471afe8..d9f3a15 100644
--- a/src/gtd-task-row.c
+++ b/src/gtd-task-row.c
@@ -832,3 +832,12 @@ gtd_task_row_set_active (GtdTaskRow *self,
       gtk_stack_set_visible_child_name (self->task_stack, "label");
     }
 }
+
+void
+gtd_task_row_set_sizegroups (GtdTaskRow   *self,
+                             GtkSizeGroup *name_group,
+                             GtkSizeGroup *date_group)
+{
+  gtk_size_group_add_widget (name_group, GTK_WIDGET (self->task_list_label));
+  gtk_size_group_add_widget (name_group, GTK_WIDGET (self->task_date_label));
+}
diff --git a/src/gtd-task-row.h b/src/gtd-task-row.h
index 4437ae8..3f43936 100644
--- a/src/gtd-task-row.h
+++ b/src/gtd-task-row.h
@@ -54,6 +54,10 @@ gboolean                  gtd_task_row_get_active               (GtdTaskRow
 void                      gtd_task_row_set_active               (GtdTaskRow          *self,
                                                                  gboolean             active);
 
+void                      gtd_task_row_set_sizegroups           (GtdTaskRow          *self,
+                                                                 GtkSizeGroup        *name_group,
+                                                                 GtkSizeGroup        *date_group);
+
 G_END_DECLS
 
 #endif /* GTD_TASK_ROW_H */


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