Also saving and restoring the status of the task (done or not)

This commit is contained in:
Pierre Pronchery 2010-06-06 00:29:45 +00:00
parent 26550ea34a
commit e0b3d8a009
3 changed files with 57 additions and 5 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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);
}