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 */ /* public */
/* functions */ /* functions */
/* task_new */ /* task_new */
@ -82,6 +87,13 @@ void task_delete(Task * task)
/* accessors */ /* accessors */
/* task_get_done */
int task_get_done(Task * task)
{
return _task_config_get_boolean(task, NULL, "done");
}
/* task_get_filename */ /* task_get_filename */
char const * task_get_filename(Task * task) 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 */ /* task_set_filename */
int task_set_filename(Task * task, char const * 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 1; /* XXX set error */
return unlink(task->filename); 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 */ /* accessors */
int task_get_done(Task * task);
char const * task_get_filename(Task * task); char const * task_get_filename(Task * task);
char const * task_get_title(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_filename(Task * task, char const * filename);
int task_set_title(Task * task, char const * title); 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_directory(void);
static char * _todo_task_get_filename(char const * filename); static char * _todo_task_get_filename(char const * filename);
static char * _todo_task_get_new_filename(void); static char * _todo_task_get_new_filename(void);
static void _todo_task_save(Todo * todo, GtkTreeIter * iter);
/* public */ /* public */
@ -347,6 +348,7 @@ Task * todo_task_add(Todo * todo, Task * task)
} }
gtk_list_store_insert(todo->store, &iter, 0); gtk_list_store_insert(todo->store, &iter, 0);
gtk_list_store_set(todo->store, &iter, TD_COL_TASK, task, 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); TD_COL_TITLE, task_get_title(task), -1);
return task; return task;
} }
@ -479,14 +481,10 @@ void todo_task_save_all(Todo * todo)
GtkTreeModel * model = GTK_TREE_MODEL(todo->store); GtkTreeModel * model = GTK_TREE_MODEL(todo->store);
GtkTreeIter iter; GtkTreeIter iter;
gboolean valid; gboolean valid;
Task * task;
valid = gtk_tree_model_get_iter_first(model, &iter); valid = gtk_tree_model_get_iter_first(model, &iter);
for(; valid == TRUE; valid = gtk_tree_model_iter_next(model, &iter)) for(; valid == TRUE; valid = gtk_tree_model_iter_next(model, &iter))
{ _todo_task_save(todo, &iter);
gtk_tree_model_get(model, &iter, TD_COL_TASK, &task, -1);
task_save(task);
}
} }
@ -594,3 +592,17 @@ static char * _todo_task_get_new_filename(void)
close(fd); close(fd);
return filename; 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);
}