Also saving and restoring the status of the task (done or not)
This commit is contained in:
parent
26550ea34a
commit
e0b3d8a009
38
src/task.c
38
src/task.c
|
@ -34,6 +34,11 @@ struct _Task
|
|||
};
|
||||
|
||||
|
||||
/* prototype */
|
||||
static int _task_config_get_boolean(Task * task, char const * section,
|
||||
char const * variable);
|
||||
|
||||
|
||||
/* public */
|
||||
/* functions */
|
||||
/* task_new */
|
||||
|
@ -82,6 +87,13 @@ void task_delete(Task * task)
|
|||
|
||||
|
||||
/* accessors */
|
||||
/* task_get_done */
|
||||
int task_get_done(Task * task)
|
||||
{
|
||||
return _task_config_get_boolean(task, NULL, "done");
|
||||
}
|
||||
|
||||
|
||||
/* task_get_filename */
|
||||
char const * task_get_filename(Task * task)
|
||||
{
|
||||
|
@ -96,6 +108,13 @@ char const * task_get_title(Task * task)
|
|||
}
|
||||
|
||||
|
||||
/* task_set_done */
|
||||
int task_set_done(Task * task, int done)
|
||||
{
|
||||
return config_set(task->config, NULL, "done", done ? "1" : "0");
|
||||
}
|
||||
|
||||
|
||||
/* task_set_filename */
|
||||
int task_set_filename(Task * task, char const * filename)
|
||||
{
|
||||
|
@ -141,3 +160,22 @@ int task_unlink(Task * task)
|
|||
return 1; /* XXX set error */
|
||||
return unlink(task->filename);
|
||||
}
|
||||
|
||||
|
||||
/* private */
|
||||
/* functions */
|
||||
/* task_config_get_boolean */
|
||||
static int _task_config_get_boolean(Task * task, char const * section,
|
||||
char const * variable)
|
||||
{
|
||||
int ret;
|
||||
char const * string;
|
||||
char * p;
|
||||
|
||||
if((string = config_get(task->config, section, variable)) == NULL)
|
||||
return -1;
|
||||
ret = strtol(string, &p, 10);
|
||||
if(string[0] == '\0' || *p != '\0')
|
||||
return -1;
|
||||
return ret ? 1 : 0;
|
||||
}
|
||||
|
|
|
@ -31,9 +31,11 @@ void task_delete(Task * task);
|
|||
|
||||
|
||||
/* accessors */
|
||||
int task_get_done(Task * task);
|
||||
char const * task_get_filename(Task * task);
|
||||
char const * task_get_title(Task * task);
|
||||
|
||||
int task_set_done(Task * task, int done);
|
||||
int task_set_filename(Task * task, char const * filename);
|
||||
int task_set_title(Task * task, char const * title);
|
||||
|
||||
|
|
22
src/todo.c
22
src/todo.c
|
@ -157,6 +157,7 @@ static DesktopToolbar _toolbar[] =
|
|||
static char * _todo_task_get_directory(void);
|
||||
static char * _todo_task_get_filename(char const * filename);
|
||||
static char * _todo_task_get_new_filename(void);
|
||||
static void _todo_task_save(Todo * todo, GtkTreeIter * iter);
|
||||
|
||||
|
||||
/* public */
|
||||
|
@ -347,6 +348,7 @@ Task * todo_task_add(Todo * todo, Task * task)
|
|||
}
|
||||
gtk_list_store_insert(todo->store, &iter, 0);
|
||||
gtk_list_store_set(todo->store, &iter, TD_COL_TASK, task,
|
||||
TD_COL_DONE, task_get_done(task) > 0 ? TRUE : FALSE,
|
||||
TD_COL_TITLE, task_get_title(task), -1);
|
||||
return task;
|
||||
}
|
||||
|
@ -479,14 +481,10 @@ void todo_task_save_all(Todo * todo)
|
|||
GtkTreeModel * model = GTK_TREE_MODEL(todo->store);
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
Task * task;
|
||||
|
||||
valid = gtk_tree_model_get_iter_first(model, &iter);
|
||||
for(; valid == TRUE; valid = gtk_tree_model_iter_next(model, &iter))
|
||||
{
|
||||
gtk_tree_model_get(model, &iter, TD_COL_TASK, &task, -1);
|
||||
task_save(task);
|
||||
}
|
||||
_todo_task_save(todo, &iter);
|
||||
}
|
||||
|
||||
|
||||
|
@ -594,3 +592,17 @@ static char * _todo_task_get_new_filename(void)
|
|||
close(fd);
|
||||
return filename;
|
||||
}
|
||||
|
||||
|
||||
/* todo_task_save */
|
||||
static void _todo_task_save(Todo * todo, GtkTreeIter * iter)
|
||||
{
|
||||
GtkTreeModel * model = GTK_TREE_MODEL(todo->store);
|
||||
Task * task;
|
||||
gboolean done;
|
||||
|
||||
gtk_tree_model_get(model, iter, TD_COL_TASK, &task,
|
||||
TD_COL_DONE, &done, -1);
|
||||
task_set_done(task, done);
|
||||
task_save(task);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user