[gnome-todo] task: Add support for position
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] task: Add support for position
- Date: Tue, 27 Feb 2018 19:49:50 +0000 (UTC)
commit 7d2d4f7dd9510faec453e0bea3a9d6620586a141
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue Feb 27 16:47:02 2018 -0300
task: Add support for position
This will be used later to set custom sorting.
src/gtd-task.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
src/gtd-task.h | 9 ++++++
2 files changed, 98 insertions(+), 1 deletion(-)
---
diff --git a/src/gtd-task.c b/src/gtd-task.c
index 11cd8bd..aef403f 100644
--- a/src/gtd-task.c
+++ b/src/gtd-task.c
@@ -48,6 +48,7 @@ typedef struct
gchar *title;
gint32 priority;
+ gint64 position;
gboolean complete;
} GtdTaskPrivate;
@@ -63,6 +64,7 @@ enum
PROP_DUE_DATE,
PROP_LIST,
PROP_PARENT,
+ PROP_POSITION,
PROP_PRIORITY,
PROP_TITLE,
LAST_PROP
@@ -323,6 +325,23 @@ gtd_task_real_set_due_date (GtdTask *self,
priv->due_date = g_date_time_ref (due_date);
}
+static gint64
+gtd_task_real_get_position (GtdTask *self)
+{
+ GtdTaskPrivate *priv = gtd_task_get_instance_private (self);
+
+ return priv->position;
+}
+
+static void
+gtd_task_real_set_position (GtdTask *self,
+ gint64 position)
+{
+ GtdTaskPrivate *priv = gtd_task_get_instance_private (self);
+
+ priv->position = position;
+}
+
static gint32
gtd_task_real_get_priority (GtdTask *self)
{
@@ -420,6 +439,10 @@ gtd_task_get_property (GObject *object,
g_value_set_object (value, priv->parent);
break;
+ case PROP_POSITION:
+ g_value_set_int64 (value, gtd_task_get_position (self));
+ break;
+
case PROP_PRIORITY:
g_value_set_int (value, gtd_task_get_priority (self));
break;
@@ -459,6 +482,10 @@ gtd_task_set_property (GObject *object,
gtd_task_set_list (self, g_value_get_object (value));
break;
+ case PROP_POSITION:
+ gtd_task_set_position (self, g_value_get_int64 (value));
+ break;
+
case PROP_PRIORITY:
gtd_task_set_priority (self, g_value_get_int (value));
break;
@@ -484,6 +511,8 @@ gtd_task_class_init (GtdTaskClass *klass)
klass->set_description = gtd_task_real_set_description;
klass->get_due_date = gtd_task_real_get_due_date;
klass->set_due_date = gtd_task_real_set_due_date;
+ klass->get_position = gtd_task_real_get_position;
+ klass->set_position = gtd_task_real_set_position;
klass->get_priority = gtd_task_real_get_priority;
klass->set_priority = gtd_task_real_set_priority;
klass->get_title = gtd_task_real_get_title;
@@ -613,6 +642,22 @@ gtd_task_class_init (GtdTaskClass *klass)
0,
G_PARAM_READWRITE));
+ /**
+ * GtdTask::position:
+ *
+ * Position of the task, -1 if not set.
+ */
+ g_object_class_install_property (
+ object_class,
+ PROP_POSITION,
+ g_param_spec_int64 ("position",
+ "Position of the task",
+ "The position of the task. -1 means no position, and tasks will be sorted
alphabetically.",
+ -1,
+ G_MAXINT64,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
/**
* GtdTask::title:
*
@@ -664,6 +709,9 @@ gtd_task_class_init (GtdTaskClass *klass)
static void
gtd_task_init (GtdTask *self)
{
+ GtdTaskPrivate *priv = gtd_task_get_instance_private (self);
+
+ priv->position = -1;
}
/**
@@ -706,7 +754,7 @@ void
gtd_task_set_complete (GtdTask *task,
gboolean complete)
{
- g_assert (GTD_IS_TASK (task));
+ g_return_if_fail (GTD_IS_TASK (task));
if (gtd_task_get_complete (task) == complete)
return;
@@ -874,6 +922,46 @@ gtd_task_set_list (GtdTask *task,
g_object_notify (G_OBJECT (task), "list");
}
+/**
+ * gtd_task_get_position:
+ * @task: a #GtdTask
+ *
+ * Returns the position of @task inside the parent #GtdTaskList,
+ * or -1 if not set.
+ *
+ * Returns: the position of the task, or -1
+ */
+gint64
+gtd_task_get_position (GtdTask *self)
+{
+ g_return_val_if_fail (GTD_IS_TASK (self), -1);
+
+ return GTD_TASK_CLASS (G_OBJECT_GET_CLASS (self))->get_position (self);
+}
+
+/**
+ * gtd_task_set_position:
+ * @task: a #GtdTask
+ * @position: the priority of @task, or -1
+ *
+ * Sets the @task position inside the parent #GtdTaskList. It
+ * is up to the interface to handle two or more #GtdTask with
+ * the same position value.
+ */
+void
+gtd_task_set_position (GtdTask *self,
+ gint64 position)
+{
+ g_return_if_fail (GTD_IS_TASK (self));
+
+ if (gtd_task_get_position (self) == position)
+ return;
+
+ GTD_TASK_CLASS (G_OBJECT_GET_CLASS (self))->set_position (self, position);
+
+ g_object_notify (G_OBJECT (self), "position");
+}
+
/**
* gtd_task_get_priority:
* @task: a #GtdTask
diff --git a/src/gtd-task.h b/src/gtd-task.h
index 121f942..3b1c846 100644
--- a/src/gtd-task.h
+++ b/src/gtd-task.h
@@ -47,6 +47,10 @@ struct _GtdTaskClass
void (*set_due_date) (GtdTask *self,
GDateTime *due_date);
+ gint64 (*get_position) (GtdTask *task);
+ void (*set_position) (GtdTask *task,
+ gint64 position);
+
gint32 (*get_priority) (GtdTask *self);
void (*set_priority) (GtdTask *self,
gint32 priority);
@@ -90,6 +94,11 @@ GtdTaskList* gtd_task_get_list (GtdTask *tas
void gtd_task_set_list (GtdTask *task,
GtdTaskList *list);
+gint64 gtd_task_get_position (GtdTask *self);
+
+void gtd_task_set_position (GtdTask *self,
+ gint64 position);
+
gint gtd_task_get_priority (GtdTask *task);
void gtd_task_set_priority (GtdTask *task,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]