From 1d9c90bb18969faed7dc2e833c4b21949bd31bbb Mon Sep 17 00:00:00 2001
From: Baptiste Jonglez <baptiste--git@jonglez.org>
Date: Mon, 14 May 2012 12:38:22 +0200
Subject: Use status_ask_choice() where applicable

These cases make obvious candidates for factorisation.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/day.c  | 58 ++++++++++++++++++++++++++++++++--------------------------
 src/todo.c | 24 ++++++++++--------------
 2 files changed, 42 insertions(+), 40 deletions(-)

(limited to 'src')

diff --git a/src/day.c b/src/day.c
index b102705..8b7e87d 100644
--- a/src/day.c
+++ b/src/day.c
@@ -922,33 +922,40 @@ int
 day_erase_item (long date, int item_number, enum eraseflg flag)
 {
   struct day_item *p;
+
   const char *erase_warning =
       _("This item is recurrent. "
         "Delete (a)ll occurences or just this (o)ne ?");
+  const char *erase_choices = _("[ao]");
+  const int nb_erase_choices = 2;
+
   const char *note_warning =
       _("This item has a note attached to it. "
         "Delete (i)tem or just its (n)ote ?");
-  const char *note_choice = _("[i/n] ");
-  const char *erase_choice = _("[a/o] ");
-  int ch, ans;
+  const char *note_choices = _("[in]");
+  const int nb_note_choices = 2;
+  int ans;
   unsigned delete_whole;
 
-  ch = -1;
   p = day_get_item (item_number);
   if (flag == ERASE_DONT_FORCE)
     {
-      ans = 0;
       if (p->note == NULL)
-        ans = 'i';
-      while (ans != 'i' && ans != 'n')
+        ans = 1;
+      else
+        ans = status_ask_choice (note_warning, note_choices, nb_note_choices);
+
+      switch (ans)
         {
-          status_mesg (note_warning, note_choice);
-          ans = wgetch (win[STA].p);
+        case 1:
+          flag = ERASE_FORCE;
+          break;
+        case 2:
+          flag = ERASE_FORCE_ONLY_NOTE;
+          break;
+        default: /* User escaped */
+          return 0;
         }
-      if (ans == 'i')
-        flag = ERASE_FORCE;
-      else
-        flag = ERASE_FORCE_ONLY_NOTE;
     }
   if (p->type == EVNT)
     {
@@ -961,24 +968,23 @@ day_erase_item (long date, int item_number, enum eraseflg flag)
   else
     {
       if (flag == ERASE_FORCE_ONLY_NOTE)
-        ch = 'a';
-      while ((ch != 'a') && (ch != 'o') && (ch != KEY_GENERIC_CANCEL))
-        {
-          status_mesg (erase_warning, erase_choice);
-          ch = wgetch (win[STA].p);
-        }
-      if (ch == 'a')
+        ans = 1;
+      else
+        ans = status_ask_choice (erase_warning, erase_choices,
+                                 nb_erase_choices);
+
+      switch (ans)
         {
+        case 1:
           delete_whole = 1;
-        }
-      else if (ch == 'o')
-        {
+          break;
+        case 2:
           delete_whole = 0;
-        }
-      else
-        {
+          break;
+        default:
           return 0;
         }
+
       if (p->type == RECUR_EVNT)
         {
           recur_event_erase (date, day_item_nb (date, item_number, RECUR_EVNT),
diff --git a/src/todo.c b/src/todo.c
index a4c75da..87d6faf 100644
--- a/src/todo.c
+++ b/src/todo.c
@@ -246,8 +246,9 @@ todo_delete (void)
   const char *erase_warning =
       _("This item has a note attached to it. "
         "Delete (t)odo or just its (n)ote ?");
-  const char *erase_choice = _("[t/n] ");
-  int answer, has_note;
+  const char *erase_choice = _("[tn]");
+  const int nb_erase_choice = 2;
+  int answer;
 
   if (conf.confirm_delete)
     {
@@ -265,20 +266,15 @@ todo_delete (void)
       return;
     }
 
-  answer = -1;
-  has_note = (todo_get_item (hilt)->note != NULL) ? 1 : 0;
-  if (has_note == 0)
-    answer = 't';
-
-  while (answer != 't' && answer != 'n' && answer != KEY_GENERIC_CANCEL)
-    {
-      status_mesg (erase_warning, erase_choice);
-      answer = wgetch (win[STA].p);
-    }
+  /* This todo item doesn't have any note associated. */
+  if (todo_get_item (hilt)->note == NULL)
+    answer = 1;
+  else
+    answer = status_ask_choice (erase_warning, erase_choice, nb_erase_choice);
 
   switch (answer)
     {
-    case 't':
+    case 1:
       todo_delete_bynum (hilt - 1);
       todos--;
       if (hilt > 1)
@@ -288,7 +284,7 @@ todo_delete (void)
       if (hilt - first < 0)
         first--;
       break;
-    case 'n':
+    case 2:
       todo_delete_note_bynum (hilt - 1);
       break;
     default:
-- 
cgit v1.2.3-70-g09d2