From 2d5ce0d95c50003074943eaa05b3c35255286279 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Thu, 29 Sep 2011 16:22:07 +0200
Subject: src/calendar.c: Add a count parameter to calendar_move()

Allows for moving more than one step forward/backward.

This is not used anywhere yet but a key binding will likely be added in
one of the following patches.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/calcurse.c | 12 ++++++------
 src/calcurse.h |  2 +-
 src/calendar.c | 14 ++++++++------
 3 files changed, 15 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/calcurse.c b/src/calcurse.c
index 2540a1f..05d8f6a 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -478,7 +478,7 @@ main (int argc, char **argv)
         case KEY_MOVE_RIGHT:
           if (wins_slctd () == CAL || key == KEY_GENERIC_NEXT_DAY)
             {
-              calendar_move (RIGHT);
+              calendar_move (RIGHT, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
@@ -488,7 +488,7 @@ main (int argc, char **argv)
         case KEY_MOVE_LEFT:
           if (wins_slctd () == CAL || key == KEY_GENERIC_PREV_DAY)
             {
-              calendar_move (LEFT);
+              calendar_move (LEFT, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
@@ -498,7 +498,7 @@ main (int argc, char **argv)
         case KEY_MOVE_UP:
           if (wins_slctd () == CAL || key == KEY_GENERIC_PREV_WEEK)
             {
-              calendar_move (UP);
+              calendar_move (UP, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
@@ -521,7 +521,7 @@ main (int argc, char **argv)
         case KEY_MOVE_DOWN:
           if (wins_slctd () == CAL || key == KEY_GENERIC_NEXT_WEEK)
             {
-              calendar_move (DOWN);
+              calendar_move (DOWN, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
@@ -544,7 +544,7 @@ main (int argc, char **argv)
         case KEY_START_OF_WEEK:
           if (wins_slctd () == CAL)
             {
-              calendar_move (WEEK_START);
+              calendar_move (WEEK_START, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
@@ -553,7 +553,7 @@ main (int argc, char **argv)
         case KEY_END_OF_WEEK:
           if (wins_slctd () == CAL)
             {
-              calendar_move (WEEK_END);
+              calendar_move (WEEK_END, 1);
               inday = do_storage (1);
               wins_update (FLAG_CAL | FLAG_APP);
             }
diff --git a/src/calcurse.h b/src/calcurse.h
index aaf9e24..37bf2c2 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -611,7 +611,7 @@ long          calendar_get_slctd_day_sec (void);
 void          calendar_update_panel (struct window *);
 void          calendar_goto_today (void);
 void          calendar_change_day (int);
-void          calendar_move (enum move);
+void          calendar_move (enum move, int);
 long          calendar_start_of_year (void);
 long          calendar_end_of_year (void);
 char         *calendar_get_pom (time_t);
diff --git a/src/calendar.c b/src/calendar.c
index 6664a93..ae2af26 100644
--- a/src/calendar.c
+++ b/src/calendar.c
@@ -665,7 +665,7 @@ calendar_change_day (int datefmt)
 }
 
 void
-calendar_move (enum move move)
+calendar_move (enum move move, int count)
 {
   int ret, days_to_remove, days_to_add;
   struct tm t;
@@ -681,25 +681,25 @@ calendar_move (enum move move)
       if ((slctd_day.dd <= 7) && (slctd_day.mm == 1)
           && (slctd_day.yyyy == 1902))
         return;
-      ret = date_change (&t, 0, -WEEKINDAYS);
+      ret = date_change (&t, 0, -count * WEEKINDAYS);
       break;
     case DOWN:
       if ((slctd_day.dd > days[slctd_day.mm - 1] - 7)
           && (slctd_day.mm == 12) && (slctd_day.yyyy == 2037))
         return;
-      ret = date_change (&t, 0, WEEKINDAYS);
+      ret = date_change (&t, 0, count * WEEKINDAYS);
       break;
     case LEFT:
       if ((slctd_day.dd == 1) && (slctd_day.mm == 1)
           && (slctd_day.yyyy == 1902))
         return;
-      ret = date_change (&t, 0, -1);
+      ret = date_change (&t, 0, -count);
       break;
     case RIGHT:
       if ((slctd_day.dd == 31) && (slctd_day.mm == 12)
           && (slctd_day.yyyy == 2037))
         return;
-      ret = date_change (&t, 0, 1);
+      ret = date_change (&t, 0, count);
       break;
     case WEEK_START:
       /* Normalize struct tm to get week day number. */
@@ -708,7 +708,8 @@ calendar_move (enum move move)
         days_to_remove = ((t.tm_wday == 0) ? WEEKINDAYS - 1 : t.tm_wday - 1);
       else
         days_to_remove = ((t.tm_wday == 0) ? 0 : t.tm_wday);
-      ret = date_change (&t, 0, 0 - days_to_remove);
+      days_to_remove += (count - 1) * WEEKINDAYS;
+      ret = date_change (&t, 0, -days_to_remove);
       break;
     case WEEK_END:
       (void)mktime (&t);
@@ -717,6 +718,7 @@ calendar_move (enum move move)
       else
           days_to_add = ((t.tm_wday == 0) ?
                          WEEKINDAYS - 1 : WEEKINDAYS - 1 - t.tm_wday);
+      days_to_add += (count - 1) * WEEKINDAYS;
       ret = date_change (&t, 0, days_to_add);
       break;
     default:
-- 
cgit v1.2.3-70-g09d2