From d069415d0da5870cecc8bbdb4974a2a7f5512ad4 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Sat, 21 Jul 2007 19:35:40 +0000
Subject: todo_update_panel() and todo_delete() added

---
 src/todo.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/todo.h | 18 +++++++------
 2 files changed, 95 insertions(+), 9 deletions(-)

diff --git a/src/todo.c b/src/todo.c
index 177f943..c793baa 100755
--- a/src/todo.c
+++ b/src/todo.c
@@ -1,4 +1,4 @@
-/*	$calcurse: todo.c,v 1.11 2007/04/04 19:38:18 culot Exp $	*/
+/*	$calcurse: todo.c,v 1.12 2007/07/21 19:35:40 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -80,6 +80,40 @@ todo_add(char *mesg, int id)
 	return o;
 }
 
+/* Delete an item from the ToDo list. */
+void 
+todo_delete(conf_t *conf, int *nb_tod, int *hilt_tod)
+{
+	char *choices = "[y/n] ";
+	char *del_todo_str = _("Do you really want to delete this task ?");
+	bool go_for_todo_del = false;
+	int answer = 0;
+	
+	if (conf->confirm_delete) {
+		status_mesg(del_todo_str, choices);
+		answer = wgetch(swin);
+		if ( (answer == 'y') && (*nb_tod > 0) ) {
+			go_for_todo_del = true;
+		} else {
+			erase_status_bar();
+			return;
+		}
+	} else 
+		if (*nb_tod > 0) 
+			go_for_todo_del = true;
+
+	if (go_for_todo_del) {
+		todo_delete_bynum(*hilt_tod - 1);
+		(*nb_tod)--;
+		if (*hilt_tod > 1) 
+			(*hilt_tod)--;
+		if (*nb_tod == 0) 
+			*hilt_tod = 0;
+	}
+}
+
+
+
 /* Delete an item from the todo linked list. */
 void 
 todo_delete_bynum(unsigned num)
@@ -185,3 +219,53 @@ todo_edit_item(int item_num)
 	i = todo_get_item(item_num);
 	updatestring(swin, &i->mesg, 0, 1);
 }
+
+/* Updates the ToDo panel. */
+void 
+todo_update_panel(window_t *wintod, int hilt_tod, int nb_tod, int which_pan,
+    int first_todo_onscreen, char **saved_t_mesg)
+{
+	struct todo_s *i;
+	int len = wintod->w - 6;
+	int num_todo = 0;
+	int y_offset = 3, x_offset = 1;
+	int t_realpos = -1;
+	int title_lines = 3;
+	int todo_lines = 1;
+	int max_items = wintod->h - 4;
+	int incolor = -1;
+	char mesg[BUFSIZ] = "";
+
+	/* Print todo item in the panel. */
+	erase_window_part(twin, 1, title_lines, wintod->w - 2, wintod->h - 2);
+	for (i = todolist; i != 0; i = i->next) {
+		num_todo++;
+		t_realpos = num_todo - first_todo_onscreen;
+		incolor = num_todo - hilt_tod;
+		if (incolor == 0) 
+			*saved_t_mesg = i->mesg; 
+		if (t_realpos >= 0 && t_realpos < max_items) {
+			snprintf(mesg, BUFSIZ, "%d. ", i->id);	
+			strncat(mesg, i->mesg, strlen(i->mesg));
+			display_item(twin, incolor, mesg, 0, 
+					len, y_offset, x_offset);
+			y_offset = y_offset + todo_lines;	
+		}
+	}
+
+	/* Draw the scrollbar if necessary. */
+	if (nb_tod > max_items){
+		float ratio = ((float) max_items) / ((float) nb_tod);
+		int sbar_length = (int) (ratio * (max_items + 1)); 
+		int highend = (int) (ratio * first_todo_onscreen);
+		bool hilt_bar = (which_pan == TODO) ? true : false;
+		int sbar_top = highend + title_lines;
+	
+		if ((sbar_top + sbar_length) > wintod->h - 1)
+			sbar_length = wintod->h - 1 - sbar_top;
+		draw_scrollbar(twin, sbar_top, wintod->w - 2, 
+	    	    sbar_length, title_lines, wintod->h - 1, hilt_bar);
+	}
+	
+	wnoutrefresh(twin);
+}
diff --git a/src/todo.h b/src/todo.h
index 909ac00..78a0583 100755
--- a/src/todo.h
+++ b/src/todo.h
@@ -1,4 +1,4 @@
-/*	$calcurse: todo.h,v 1.5 2007/03/10 15:54:59 culot Exp $	*/
+/*	$calcurse: todo.h,v 1.6 2007/07/21 19:35:40 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -35,12 +35,14 @@ struct todo_s {
 
 extern struct todo_s *todolist;
 
-int todo_new_item(int total); 
-struct todo_s *todo_add(char *mesg, int id);
-void todo_delete_bynum(unsigned num);
-struct todo_s *todo_get_item(int item_number);
-int todo_get_position(struct todo_s *i);
-int todo_chg_priority(int action, int item_num);
-void todo_edit_item(int item_num);
+int 		todo_new_item(int); 
+struct todo_s  *todo_add(char *, int);
+void		todo_delete(conf_t *, int *, int *);
+void 		todo_delete_bynum(unsigned);
+struct todo_s  *todo_get_item(int);
+int 		todo_get_position(struct todo_s *);
+int 		todo_chg_priority(int, int);
+void 		todo_edit_item(int);
+void		todo_update_panel(window_t *, int, int, int, int, char **);
 
 #endif /* CALCURSE_TODO_H */
-- 
cgit v1.2.3-70-g09d2