home *** CD-ROM | disk | FTP | other *** search
- /*
- * day.c : The day windows
- *
- * $Id: day.c,v 1.1 90/11/07 11:22:38 ferguson Exp $
- */
- #include <X11/Intrinsic.h>
- #include <X11/Shell.h>
- #include <X11/StringDefs.h>
- #include <X11/Xaw/Form.h>
- #include <X11/Xaw/Command.h>
- #include <X11/Xaw/Label.h>
- #include <X11/Xaw/AsciiText.h>
- #include <X11/Xaw/Cardinals.h>
- #include "widgets.h"
- #include "month.h"
- #include "day.h"
- #include "db.h"
- #include "date-strings.h"
-
- extern int appointsChanged;
-
- /*
- * Functions defined in this file
- */
- DayFormData *createDayFormData(),*createPopupDayFormData();
- void setDayFormData();
- void checkpointAppoints();
-
- static void textEventProc(),dismissProc(),selectProc(),unselectProc();
-
- /*
- * Data defined in this file
- */
- DayFormData *currentDayFormData;
-
- static int dayAppointsChanged; /* fast, local check */
-
- /* - - - - - - - - */
-
- DayFormData *
- createDayFormData(parent)
- Widget parent;
- {
- DayFormData *d;
- DayTextData *t;
- Arg args[3];
- int i;
- char *time="XX:XX";
-
- d = XtNew(DayFormData);
- d->form = XtCreateManagedWidget("dayForm",formWidgetClass,parent,
- NULL,ZERO);
- d->date = XtCreateManagedWidget("dayLabel",labelWidgetClass,d->form,
- NULL,ZERO);
- XtSetArg(args[0],XtNfromVert,d->date);
- for (i = 0; i < 22; i++) {
- t = d->items[i] = XtNew(DayTextData);
- XtSetArg(args[1],XtNfromHoriz,NULL);
- if (i < 20)
- sprintf(time,"%2d:%02d",8+i/2,i%2*30);
- else
- sprintf(time,"NOTES");
- XtSetArg(args[2],XtNlabel,time);
- t->time = XtCreateManagedWidget("timeLabel",labelWidgetClass,
- d->form,args,THREE);
- XtSetArg(args[1],XtNfromHoriz,t->time);
- t->text = XtCreateManagedWidget("textText",asciiTextWidgetClass,
- d->form,args,TWO);
- XtAddEventHandler(t->text,KeyPressMask,False,textEventProc,NULL);
- XtSetArg(args[0],XtNfromVert,t->time);
- }
- return(d);
- }
-
- DayFormData *
- createPopupDayFormData()
- {
- Widget shell,form,select,dismiss,unselect;
- DayFormData *d;
-
- shell = XtCreatePopupShell("popupShell",topLevelShellWidgetClass,
- toplevel,NULL,ZERO);
- form = XtCreateManagedWidget("popupForm",formWidgetClass,shell,
- NULL,ZERO);
- dismiss = XtCreateManagedWidget("dismissButton",commandWidgetClass,form,
- NULL,ZERO);
- select = XtCreateManagedWidget("selectButton",commandWidgetClass,form,
- NULL,ZERO);
- unselect = XtCreateManagedWidget("unselectButton",commandWidgetClass,form,
- NULL,ZERO);
- d = createDayFormData(form);
- d->shell = shell;
- XtAddCallback(select,"callback",selectProc,d);
- XtAddCallback(dismiss,"callback",dismissProc,d);
- XtAddCallback(unselect,"callback",unselectProc,d);
- XtPopup(shell,XtGrabNone);
- return(d);
- }
-
- static void
- textEventProc(w,client_data,event,continue_flag)
- Widget w;
- XtPointer client_data;
- XEvent *event;
- Boolean *continue_flag;
- {
- dayAppointsChanged = True;
- }
-
- static void
- dismissProc(w,client_data,call_data)
- Widget w;
- caddr_t client_data,call_data;
- {
- DayFormData *d = (DayFormData *)client_data;
-
- checkpointAppoints(d);
- if (currentDayFormData == d)
- currentDayFormData = NULL;
- XtPopdown(d->shell);
- XtDestroyWidget(d->shell);
- }
-
- static void
- selectProc(w,client_data,call_data)
- Widget w;
- caddr_t client_data,call_data;
- {
- DayFormData *d = (DayFormData *)client_data;
-
- checkpointAppoints(d);
- if (currentDayFormData == d)
- return;
- if (currentDayFormData != NULL)
- XtSetSensitive(currentDayFormData->form,False);
- XtSetSensitive(d->form,True);
- currentDayFormData = d;
- }
-
- static void
- unselectProc(w,client_data,call_data)
- Widget w;
- caddr_t client_data,call_data;
- {
- DayFormData *d = (DayFormData *)client_data;
-
- checkpointAppoints(d);
- XtSetSensitive(d->form,False);
- currentDayFormData = NULL;
- }
-
- void
- setDayFormData(d,day,month,year)
- DayFormData *d;
- int day,month,year;
- {
- char text[32];
- Arg args[1];
- char *s;
- int i;
-
- sprintf(text,"%s %d %s %d",shortDayStr[computeDOW(day,month,year)],day,
- shortMonStr[month],year+1900);
- XtSetArg(args[0],XtNlabel,text);
- XtSetValues(d->date,args,ONE);
- for (i=0; i < 22; i++) {
- if ((s=lookupAppoint(i,day,month,year)) != NULL) {
- XtSetArg(args[0],XtNstring,s);
- XtSetValues(d->items[i]->text,args[0],ONE);
- } else if ((s=lookupSchedule(i,day,month,year)) != NULL) {
- XtSetArg(args[0],XtNstring,s);
- XtSetValues(d->items[i]->text,args[0],ONE);
- } else {
- XtSetArg(args[0],XtNstring,"");
- XtSetValues(d->items[i]->text,args[0],ONE);
- }
- }
- d->day = day;
- d->month = month;
- d->year = year;
- }
-
- void
- checkpointAppoints(d)
- DayFormData *d;
- {
- Arg args[1];
- int i;
- char *new,*sch,*app;
-
- if (!dayAppointsChanged)
- return;
- XtSetArg(args[0],XtNstring,&new);
- for (i=0; i < 22; i++) {
- XtGetValues(d->items[i]->text,args,ONE);
- sch = lookupSchedule(i,d->day,d->month,d->year);
- app = lookupAppoint(i,d->day,d->month,d->year);
- if (*new != '\0') {
- if ((app != NULL && strcmp(new,app) != 0) ||
- (sch != NULL && strcmp(new,sch) != 0) ||
- (app == NULL && sch == NULL)) {
- addAppoint(i,d->day,d->month,d->year,new);
- appointsChanged = True;
- }
- } else if (app != NULL) {
- deleteAppoint(i,d->day,d->month,d->year);
- appointsChanged = True;
- }
- }
- dayAppointsChanged = False;
- if (currentDayFormData != NULL)
- shadeButton(currentDayFormData->buttonData,(GC)NULL,0,0);
- }
-