[gnome-todo] task-row: make edit pane drop from above



commit cc8033731e394f2aacff2574c352a7dbd3854baa
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Sep 28 21:30:46 2017 -0300

    task-row: make edit pane drop from above

 data/ui/task-row.ui |  195 ++++++++++++++++++++++++++++-----------------------
 src/gtd-task-row.c  |   42 ++++++-----
 2 files changed, 131 insertions(+), 106 deletions(-)
---
diff --git a/data/ui/task-row.ui b/data/ui/task-row.ui
index 0d2d904..d6b224d 100644
--- a/data/ui/task-row.ui
+++ b/data/ui/task-row.ui
@@ -14,120 +14,145 @@
         <property name="transition_duration">200</property>
 
         <child>
-          <object class="GtkStack" id="stack">
+          <object class="GtkBox">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="interpolate-size">True</property>
-            <property name="homogeneous">False</property>
-            <property name="transition-type">slide-up-down</property>
-            <property name="transition-duration">500</property>
+            <property name="orientation">vertical</property>
 
-            <!-- Main page, visible when the task row is unfocused -->
             <child>
-              <object class="GtkEventBox">
+              <object class="GtkStack" id="stack">
                 <property name="visible">True</property>
-                <signal name="enter-notify-event" handler="mouse_over_event_cb" object="GtdTaskRow" 
swapped="no" />
-                <signal name="leave-notify-event" handler="mouse_out_event_cb" object="GtdTaskRow" 
swapped="no" />
+                <property name="can_focus">False</property>
+                <property name="interpolate-size">True</property>
+                <property name="homogeneous">False</property>
+                <property name="transition-type">crossfade</property>
+                <property name="transition-duration">500</property>
+
+                <!-- Main page, visible when the task row is unfocused -->
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkEventBox">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="margin-end">18</property>
-                    <property name="margin-start">8</property>
-                    <property name="margin-top">3</property>
-                    <property name="margin-bottom">3</property>
-                    <property name="height-request">32</property>
-                    <property name="spacing">4</property>
-
-                    <!-- Box with DnD margin -->
+                    <signal name="enter-notify-event" handler="mouse_over_event_cb" object="GtdTaskRow" 
swapped="no" />
+                    <signal name="leave-notify-event" handler="mouse_out_event_cb" object="GtdTaskRow" 
swapped="no" />
                     <child>
-                      <object class="GtkBox" id="dnd_box">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                      </object>
-                    </child>
+                        <property name="margin-end">18</property>
+                        <property name="margin-start">8</property>
+                        <property name="margin-top">3</property>
+                        <property name="margin-bottom">3</property>
+                        <property name="height-request">32</property>
+                        <property name="spacing">4</property>
+
+                        <!-- Box with DnD margin -->
+                        <child>
+                          <object class="GtkBox" id="dnd_box">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                          </object>
+                        </child>
+
+                        <child>
+                          <object class="GtkEventBox" id="dnd_event_box">
+                            <property name="visible">True</property>
+                            <signal name="button-press-event" handler="button_press_event" 
object="GtdTaskRow" swapped="no" />
+                            <signal name="drag-begin" handler="drag_begin_cb" object="GtdTaskRow" 
swapped="no" />
+                            <signal name="drag-failed" handler="drag_failed_cb" object="GtdTaskRow" 
swapped="no" />
+                            <signal name="enter-notify-event" handler="mouse_over_dnd_event_cb" 
object="GtdTaskRow" swapped="no" />
+                            <signal name="leave-notify-event" handler="mouse_out_dnd_event_cb" 
object="GtdTaskRow" swapped="no" />
+                            <child>
+                              <object class="GtkImage" id="dnd_icon">
+                                <property name="visible">True</property>
+                                <property name="icon-name">open-menu-symbolic</property>
+                                <property name="pixel-size">12</property>
+                                <style>
+                                  <class name="dim-label" />
+                                </style>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
 
-                    <child>
-                      <object class="GtkEventBox" id="dnd_event_box">
-                        <property name="visible">True</property>
-                        <signal name="button-press-event" handler="button_press_event" object="GtdTaskRow" 
swapped="no" />
-                        <signal name="drag-begin" handler="drag_begin_cb" object="GtdTaskRow" swapped="no" />
-                        <signal name="drag-failed" handler="drag_failed_cb" object="GtdTaskRow" swapped="no" 
/>
-                        <signal name="enter-notify-event" handler="mouse_over_dnd_event_cb" 
object="GtdTaskRow" swapped="no" />
-                        <signal name="leave-notify-event" handler="mouse_out_dnd_event_cb" 
object="GtdTaskRow" swapped="no" />
                         <child>
-                          <object class="GtkImage" id="dnd_icon">
+                          <object class="GtkCheckButton" id="done_check">
                             <property name="visible">True</property>
-                            <property name="icon-name">open-menu-symbolic</property>
-                            <property name="pixel-size">12</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="halign">center</property>
+                            <property name="valign">center</property>
+                            <property name="vexpand">True</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="margin-start">6</property>
+                            <signal name="toggled" handler="complete_check_toggled_cb" object="GtdTaskRow" 
swapped="no" />
+                          </object>
+                        </child>
+
+                        <child>
+                          <object class="GtkLabel" id="title_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="ellipsize">end</property>
+                            <property name="xalign">0.0</property>
+                          </object>
+                        </child>
+
+                        <child>
+                          <object class="GtkLabel" id="task_date_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">1.0</property>
                             <style>
-                              <class name="dim-label" />
+                              <class name="dim-label"/>
+                            </style>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="task_list_label">
+                            <property name="visible">False</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="max_width_chars">18</property>
+                            <property name="ellipsize">middle</property>
+                            <style>
+                              <class name="dim-label"/>
                             </style>
                           </object>
                         </child>
-                      </object>
-                    </child>
 
-                    <child>
-                      <object class="GtkCheckButton" id="done_check">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="halign">center</property>
-                        <property name="valign">center</property>
-                        <property name="vexpand">True</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="margin-start">6</property>
-                        <signal name="toggled" handler="complete_check_toggled_cb" object="GtdTaskRow" 
swapped="no" />
                       </object>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="name">unfocused</property>
+                  </packing>
+                </child>
 
-                    <child>
-                      <object class="GtkLabel" id="title_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hexpand">True</property>
-                        <property name="ellipsize">end</property>
-                        <property name="xalign">0.0</property>
-                      </object>
-                    </child>
+                <!-- Edit header page -->
+                <child>
+                  <object class="GtkBox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
 
-                    <child>
-                      <object class="GtkLabel" id="task_date_label">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">1.0</property>
-                        <style>
-                          <class name="dim-label"/>
-                        </style>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="task_list_label">
-                        <property name="visible">False</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="max_width_chars">18</property>
-                        <property name="ellipsize">middle</property>
-                        <style>
-                          <class name="dim-label"/>
-                        </style>
-                      </object>
-                    </child>
+                    <!-- TODO: move the title entry to this page -->
 
                   </object>
+                  <packing>
+                    <property name="name">edit</property>
+                  </packing>
                 </child>
+
               </object>
-              <packing>
-                <property name="name">unfocused</property>
-              </packing>
             </child>
 
-            <!-- Edit page -->
+            <!-- Edit Panel revealer -->
             <child>
-              <object class="GtkBox">
+              <object class="GtkRevealer" id="edit_panel_revealer">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="transition_type">slide-down</property>
+                <property name="transition_duration">500</property>
                 <child>
                   <object class="GtdEditPane" id="edit_panel">
                     <property name="visible">True</property>
@@ -137,11 +162,7 @@
                   </object>
                 </child>
               </object>
-              <packing>
-                <property name="name">edit</property>
-              </packing>
             </child>
-
           </object>
         </child>
       </object>
diff --git a/src/gtd-task-row.c b/src/gtd-task-row.c
index 1d2ab2e..cfa960b 100644
--- a/src/gtd-task-row.c
+++ b/src/gtd-task-row.c
@@ -29,35 +29,35 @@
 
 struct _GtdTaskRow
 {
-  GtkListBoxRow      parent;
+  GtkListBoxRow       parent;
 
   /*<private>*/
-  GtkRevealer               *revealer;
+  GtkRevealer        *revealer;
 
-  GtkWidget                 *done_check;
-  GtkWidget                 *edit_panel;
-  GtkWidget                 *stack;
+  GtkWidget          *done_check;
+  GtkWidget          *edit_panel;
+  GtkWidget          *edit_panel_revealer;
+  GtkWidget          *stack;
 
   /* task widgets */
-  GtkEntry                  *title_label;
-  GtkLabel                  *task_date_label;
-  GtkLabel                  *task_list_label;
+  GtkEntry           *title_label;
+  GtkLabel           *task_date_label;
+  GtkLabel           *task_list_label;
 
   /* dnd widgets */
-  GtkWidget                 *dnd_box;
-  GtkWidget                 *dnd_event_box;
-  GtkWidget                 *dnd_icon;
-  gdouble                    clicked_x;
-  gdouble                    clicked_y;
+  GtkWidget          *dnd_box;
+  GtkWidget          *dnd_event_box;
+  GtkWidget          *dnd_icon;
+  gdouble             clicked_x;
+  gdouble             clicked_y;
 
-  gboolean                   handle_subtasks : 1;
+  gboolean            handle_subtasks : 1;
 
   /* data */
-  GtdTask                   *task;
+  GtdTask            *task;
 
-  gint                       destroy_row_timeout_id;
-
-  gboolean                   active;
+  gint                destroy_row_timeout_id;
+  gboolean            active;
 };
 
 #define PRIORITY_ICON_SIZE         8
@@ -65,7 +65,8 @@ struct _GtdTaskRow
 
 G_DEFINE_TYPE (GtdTaskRow, gtd_task_row, GTK_TYPE_LIST_BOX_ROW)
 
-enum {
+enum
+{
   ENTER,
   EXIT,
   REMOVE_TASK,
@@ -615,6 +616,7 @@ gtd_task_row_class_init (GtdTaskRowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, dnd_icon);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, done_check);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, edit_panel);
+  gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, edit_panel_revealer);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, revealer);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, stack);
   gtk_widget_class_bind_template_child (widget_class, GtdTaskRow, task_date_label);
@@ -872,6 +874,8 @@ gtd_task_row_set_active (GtdTaskRow *self,
   gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (self), !active);
   gtk_widget_set_can_focus (GTK_WIDGET (self), !active);
 
+  gtk_revealer_set_reveal_child (GTK_REVEALER (self->edit_panel_revealer), active);
+
   if (active)
     {
       gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "edit");


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