summaryrefslogtreecommitdiff
path: root/src/ui-day.c
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@calcurse.org>2016-09-30 18:21:59 +0200
committerLukas Fleischer <lfleischer@calcurse.org>2016-10-08 14:42:51 +0200
commit1f39b5c6681536ef833a2e2e1312f2747be728f3 (patch)
tree26a77922ee9a1eb73c88e6448dccc435fef8116e /src/ui-day.c
parent1003be18dfbf05d0748214711ae8723bceb374c7 (diff)
downloadcalcurse-1f39b5c6681536ef833a2e2e1312f2747be728f3.zip
Add support for moving items to another day
When moving an item (or when changing the start time of an item), allow for optionally specifying a date. If both date and time are entered, the item is updated to start on the given date and time. If only a date is entered, the item is modified to start on the given date, keeping the current start time. If only a time is entered, the item is modified to start on the current date and the new start time. Fixes GitHub issue #12. Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Diffstat (limited to 'src/ui-day.c')
-rw-r--r--src/ui-day.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/ui-day.c b/src/ui-day.c
index c094031..b651ca5 100644
--- a/src/ui-day.c
+++ b/src/ui-day.c
@@ -61,26 +61,42 @@ void ui_day_set_selitem(struct day_item *day)
/* Request the user to enter a new time. */
static int day_edit_time(int time)
{
- char *timestr = date_sec2date_str(time, "%H:%M");
+ char *input = date_sec2date_str(time, "%H:%M");
const char *msg_time =
- _("Enter start time ([hh:mm] or [hhmm]):");
+ _("Enter start time ([hh:mm] or [hhmm]) or date:");
const char *enter_str = _("Press [Enter] to continue");
const char *fmt_msg =
_("You entered an invalid time, should be [hh:mm] or [hhmm]");
- int hour, minute;
+ unsigned int hour, minute;
+ int year, month, day;
+ struct date new_date;
for (;;) {
status_mesg(msg_time, "");
- if (updatestring(win[STA].p, &timestr, 0, 1) !=
- GETSTRING_VALID)
+ if (updatestring(win[STA].p, &input, 0, 1) != GETSTRING_VALID)
return 0;
- if (parse_time(timestr, &hour, &minute) == 1) {
- mem_free(timestr);
- return update_time_in_date(time, hour, minute);
- } else {
- status_mesg(fmt_msg, enter_str);
- wgetch(win[KEY].p);
+ char *inputcpy = mem_strdup(input);
+ char *p = strtok(inputcpy, " ");
+ while (p) {
+ if (parse_date(p, conf.input_datefmt, &year, &month,
+ &day, ui_calendar_get_slctd_day())) {
+ new_date.dd = day;
+ new_date.mm = month;
+ new_date.yyyy = year;
+ time = date2sec(new_date, 0, 0) +
+ get_item_time(time);
+ } else if (parse_time(p, &hour, &minute) == 1) {
+ time = update_time_in_date(time, hour, minute);
+ } else {
+ status_mesg(fmt_msg, enter_str);
+ wgetch(win[KEY].p);
+ break;
+ }
+ p = strtok(NULL, " ");
}
+ mem_free(inputcpy);
+ if (!p)
+ return time;
}
}