day_item_s2apoint_s() updated to take item state into account

day_item_nb() created
day_edit_item() and day_erase_item() updated to use day_item_nb()
This commit is contained in:
Frederic Culot 2007-02-24 17:37:51 +00:00
parent 8955f5e7e6
commit 9cdea998ba

View File

@ -1,4 +1,4 @@
/* $calcurse: day.c,v 1.17 2007/01/16 07:53:39 culot Exp $ */ /* $calcurse: day.c,v 1.18 2007/02/24 17:37:51 culot Exp $ */
/* /*
* Calcurse - text-based organizer * Calcurse - text-based organizer
@ -157,7 +157,8 @@ int day_store_recur_apoints(long date)
j->rpt->type, j->rpt->freq, j->rpt->until, date)) ){ j->rpt->type, j->rpt->freq, j->rpt->until, date)) ){
a_nb++; a_nb++;
ptr = day_add_apoint( ptr = day_add_apoint(
RECUR_APPT, j->mesg, real_start, j->dur, n); RECUR_APPT, j->mesg, real_start, j->dur,
j->state, n);
n++; n++;
} }
} }
@ -183,7 +184,8 @@ int day_store_apoints(long date)
for (j = alist_p->root; j != 0; j = j->next) { for (j = alist_p->root; j != 0; j = j->next) {
if (apoint_inday(j, date)) { if (apoint_inday(j, date)) {
a_nb++; a_nb++;
ptr = day_add_apoint(APPT, j->mesg, j->start, j->dur, 0); ptr = day_add_apoint(APPT, j->mesg, j->start, j->dur,
j->state, 0);
} }
} }
pthread_mutex_unlock(&(alist_p->mutex)); pthread_mutex_unlock(&(alist_p->mutex));
@ -217,7 +219,7 @@ struct day_item_s *day_add_event(int type, char *mesg, long day, int id)
/* Add an appointment in the current day list. */ /* Add an appointment in the current day list. */
struct day_item_s *day_add_apoint(int type, char *mesg, long start, long dur, struct day_item_s *day_add_apoint(int type, char *mesg, long start, long dur,
int real_pos) char state, int real_pos)
{ {
struct day_item_s *o, **i; struct day_item_s *o, **i;
int insert_item = 0; int insert_item = 0;
@ -228,6 +230,7 @@ struct day_item_s *day_add_apoint(int type, char *mesg, long start, long dur,
o->start = start; o->start = start;
o->appt_dur = dur; o->appt_dur = dur;
o->appt_pos = real_pos; o->appt_pos = real_pos;
o->state = state;
o->type = type; o->type = type;
o->evnt_id = 0; o->evnt_id = 0;
i = &day_items_ptr; i = &day_items_ptr;
@ -326,6 +329,7 @@ apoint_llist_node_t *day_item_s2apoint_s(struct day_item_s *p)
a = (apoint_llist_node_t *) malloc(sizeof(apoint_llist_node_t)); a = (apoint_llist_node_t *) malloc(sizeof(apoint_llist_node_t));
a->mesg = (char *) malloc(strlen(p->mesg) + 1); a->mesg = (char *) malloc(strlen(p->mesg) + 1);
a->state = p->state;
a->start = p->start; a->start = p->start;
a->dur = p->appt_dur; a->dur = p->appt_dur;
a->mesg = p->mesg; a->mesg = p->mesg;
@ -406,9 +410,8 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
recur_apoint_llist_node_t *ra, *ra_new; recur_apoint_llist_node_t *ra, *ra_new;
long newtime = 0; long newtime = 0;
const long date = date2sec(year, month, day, 0, 0); const long date = date2sec(year, month, day, 0, 0);
int cancel, i, ch = 0, valid_date = 0, newfreq = 0, date_entered = 0; int cancel, ch = 0, valid_date = 0, newfreq = 0, date_entered = 0;
int newmonth, newday, newyear; int newmonth, newday, newyear;
int nb_item[MAX_TYPES];
unsigned hr, mn; unsigned hr, mn;
char *timestr, *typestr, *freqstr; char *timestr, *typestr, *freqstr;
char *msg_norecur = char *msg_norecur =
@ -435,18 +438,12 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
char *mesg_until_1 = char *mesg_until_1 =
_("Enter the new ending date: [mm/dd/yyyy] or '0'"); _("Enter the new ending date: [mm/dd/yyyy] or '0'");
for (i = 0; i < MAX_TYPES; i++)
nb_item[i] = 0;
p = day_items_ptr;
for (i = 1; i < item_num; i++) {
nb_item[p->type - 1]++;
p = p->next;
}
p = day_get_item(item_num); p = day_get_item(item_num);
switch (p->type) { switch (p->type) {
case RECUR_EVNT: case RECUR_EVNT:
re = recur_get_event(date, nb_item[RECUR_EVNT - 1]); re = recur_get_event(date,
day_item_nb(date, item_num, RECUR_EVNT));
rpt = re->rpt; rpt = re->rpt;
status_mesg(msg_event_recur, choice_event_recur); status_mesg(msg_event_recur, choice_event_recur);
while (ch != STRT && ch != END && ch != ESCAPE) while (ch != STRT && ch != END && ch != ESCAPE)
@ -460,7 +457,8 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
ch = DESC; ch = DESC;
break; break;
case RECUR_APPT: case RECUR_APPT:
ra = recur_get_apoint(date, nb_item[RECUR_APPT - 1]); ra = recur_get_apoint(date,
day_item_nb(date, item_num, RECUR_APPT));
rpt = ra->rpt; rpt = ra->rpt;
status_mesg(msg_recur, choice_recur); status_mesg(msg_recur, choice_recur);
while (ch != STRT && ch != END && ch != DESC && while (ch != STRT && ch != END && ch != DESC &&
@ -597,11 +595,11 @@ void day_edit_item(int year, int month, int day, int item_num, int colr)
break; break;
case RECUR_APPT: case RECUR_APPT:
ra_new = recur_apoint_new(p->mesg, p->start, p->appt_dur, ra_new = recur_apoint_new(p->mesg, p->start, p->appt_dur,
rpt->type, rpt->freq, rpt->until, NULL); p->state, rpt->type, rpt->freq, rpt->until, NULL);
if (notify_bar()) notify_check_repeated(ra_new); if (notify_bar()) notify_check_repeated(ra_new);
break; break;
case APPT: case APPT:
apoint_new(p->mesg, p->start, p->appt_dur); apoint_new(p->mesg, p->start, p->appt_dur, p->state);
if (notify_bar()) notify_check_added(p->mesg, p->start); if (notify_bar()) notify_check_added(p->mesg, p->start);
break; break;
} }
@ -634,9 +632,7 @@ char *day_edit_time(long time, int colr) {
* type of the item to be deleted. * type of the item to be deleted.
*/ */
int day_erase_item(long date, int item_number, int force_erase) { int day_erase_item(long date, int item_number, int force_erase) {
int i;
int ch = 0; int ch = 0;
int nb_item[MAX_TYPES];
unsigned delete_whole; unsigned delete_whole;
struct day_item_s *p; struct day_item_s *p;
char *erase_warning = char *erase_warning =
@ -647,17 +643,13 @@ int day_erase_item(long date, int item_number, int force_erase) {
if (force_erase) if (force_erase)
ch = 'a'; ch = 'a';
for (i = 0; i < MAX_TYPES; i++)
nb_item[i] = 0; p = day_get_item(item_number);
p = day_items_ptr;
for (i = 1; i < item_number; i++) {
nb_item[p->type - 1]++;
p = p->next;
}
if (p->type == EVNT) { if (p->type == EVNT) {
event_delete_bynum(date, nb_item[EVNT - 1]); event_delete_bynum(date, day_item_nb(date, item_number, EVNT));
} else if (p->type == APPT) { } else if (p->type == APPT) {
apoint_delete_bynum(date, nb_item[APPT - 1]); apoint_delete_bynum(date, day_item_nb(date, item_number, APPT));
} else { } else {
while ( (ch != 'a') && (ch != 'o') && (ch != ESCAPE)) { while ( (ch != 'a') && (ch != 'o') && (ch != ESCAPE)) {
status_mesg(erase_warning, erase_choice); status_mesg(erase_warning, erase_choice);
@ -671,8 +663,9 @@ int day_erase_item(long date, int item_number, int force_erase) {
return 0; return 0;
} }
if (p->type == RECUR_EVNT) { if (p->type == RECUR_EVNT) {
recur_event_erase(date, nb_item[RECUR_EVNT - 1], recur_event_erase(date,
delete_whole); day_item_nb(date, item_number, RECUR_EVNT),
delete_whole);
} else { } else {
recur_apoint_erase(date, p->appt_pos, delete_whole); recur_apoint_erase(date, p->appt_pos, delete_whole);
} }
@ -692,3 +685,23 @@ struct day_item_s *day_get_item(int item_number)
} }
return o; return o;
} }
/* Returns the real item number, given its type. */
int
day_item_nb(long date, int day_num, int type)
{
int i, nb_item[MAX_TYPES];
struct day_item_s *p;
for (i = 0; i < MAX_TYPES; i++)
nb_item[i] = 0;
p = day_items_ptr;
for (i = 1; i < day_num; i++) {
nb_item[p->type - 1]++;
p = p->next;
}
return (nb_item[type - 1]);
}