This is WeekWindow.m in view mode; [Download] [Up]
// // WeekWindow.m // Copyright (c) 1989, 1990, 1991 by Jiro Nakamura // All rights reserved // // by Jiro Nakamura (jiro@shaman.com) // // RCS Information // Revision Number-> $Revision: 1.3 $ // Last Revised-> $Date: 91/02/17 22:03:21 $ // static char rcsid[] = "$Id: WeekWindow.m,v 1.3 91/02/17 22:03:21 jiro Exp Locker: jiro $"; #import "Global.h" #import "Event.h" #import "cass.h" // for TODAYICON #import "calendar.h" // for ascMyDate() #import <appkit/Application.h> // For NXApp #import <appkit/ScrollView.h> #import <appkit/Text.h> #import <appkit/TextField.h> #import <appkit/PopUpList.h> #import <appkit/Matrix.h> #import "WeekWindow.h" #import <sys/file.h> #import <libc.h> #import <strings.h> // The minimum dimensions of the week window #define MIN_WIDTH 870.0 #define MIN_HEIGHT 100.0 @implementation WeekWindow - open:sender { static alreadyInited = FALSE; if( !alreadyInited) { char dumbChar[5]; // dumb references to some static constants, just // to avoid warning messages from the compiler (Garance) dumbChar[0] = rcsid[0]; // dumb de dumb alreadyInited = TRUE; [self placeWindow: [global weekFrame]]; thisWeek = *timeNow(); thisWeek.tm_mday -= thisWeek.tm_wday; thisWeek.tm_hour = thisWeek.tm_min = thisWeek.tm_sec = 0; fixTmStructure( &thisWeek); #ifdef DEBUG fprintf(stderr,"This week is: %s", ascMyDate(&thisWeek)); #endif priorityCutOff = [global lowPriority]; [self setDelegate: self]; mondayView = [mondayScroll docView]; tuesdayView = [tuesdayScroll docView]; wednesdayView = [wednesdayScroll docView]; thursdayView = [thursdayScroll docView]; fridayView = [fridayScroll docView]; saturdayView = [saturdayScroll docView]; sundayView = [sundayScroll docView]; [mondayView setMonoFont: FALSE]; [tuesdayView setMonoFont: FALSE]; [wednesdayView setMonoFont: FALSE]; [thursdayView setMonoFont: FALSE]; [fridayView setMonoFont: FALSE]; [saturdayView setMonoFont: FALSE]; [sundayView setMonoFont: FALSE]; [mondayView setEditable: FALSE]; [tuesdayView setEditable: FALSE]; [wednesdayView setEditable: FALSE]; [thursdayView setEditable: FALSE]; [fridayView setEditable: FALSE]; [saturdayView setEditable: FALSE]; [sundayView setEditable: FALSE]; [self setMiniwindowIcon: WEEKICON]; viewPopUp = [PopUpList new]; [viewPopUp addItem: "View All"]; [viewPopUp addItem: "View Mid~High"]; [viewPopUp addItem: "View Only High"]; [[viewPopUp itemList] selectCellAt:1:0]; NXAttachPopUpList(viewPopUpButton, viewPopUp); } [self makeKeyAndOrderFront: self]; [self update]; // this will cause an update return self; } - save { // This window shouldn't save itself. return self; } - close { [global saveThisWindowPosition: DEFAULTWEEKFRAME : self]; [super close]; miniaturized = FALSE; return self; } - update { struct tm tempDay; char temp[80]; extern const char *shortMonths[12]; int tmp; fixTmStructure( &thisWeek ); tempDay = thisWeek; if( miniaturized || ![self isVisible]) return self; sprintf(temp, "Week of: %s %d, %d", shortMonths[tempDay.tm_mon], tempDay.tm_mday, tempDay.tm_year + 1900); [weekTextField setStringValue: temp]; tmp = [self updateView: sundayView on: &tempDay fromEvent: 0]; tempDay.tm_mday ++; tmp = [self updateView: mondayView on: &tempDay fromEvent: tmp]; tempDay.tm_mday ++; tmp = [self updateView: tuesdayView on: &tempDay fromEvent: tmp]; tempDay.tm_mday ++; tmp = [self updateView: wednesdayView on: &tempDay fromEvent: tmp]; tempDay.tm_mday ++; tmp = [self updateView: thursdayView on: &tempDay fromEvent: tmp]; tempDay.tm_mday ++; tmp = [self updateView: fridayView on: &tempDay fromEvent: tmp]; tempDay.tm_mday ++; [self updateView: saturdayView on: &tempDay fromEvent: tmp]; return self; } - (int) updateView: (id) dayView on: (struct tm *) thisDay fromEvent: (int) en { NXStream *output; Event *ev; int eventCount; int today, temp; extern const char *shortMonths[12], *shortWeekDays[7]; fixTmStructure( thisDay ); // We want to read the eventFile pointed to by global ev = [Event newAt:[global eventFile]]; // We need a temporary memory stream to store the queue. if( (output = NXOpenMemory( NULL, 0, NX_READWRITE)) == NULL) { fprintf(stderr,"%s: Couldn't open memory stream for " "Week Window queue scrollview. FATAL ERRROR.\n", PROGNAME); exit(1) ; } if( en != 0) [ev readEvent: en]; else [ev firstEvent]; today = [ev mday]; if( dayCompare( thisDay, (struct tm *) timeNow()) == -1) today = -2; else { while( [ev present] != 0 && dayCompare( [ev time], thisDay ) == -1 ) [ev readEvent : [ev next]]; if( ([ev mday] != thisDay->tm_mday) || ([ev mon] != thisDay->tm_mon) || ([ev year] != thisDay->tm_year)) today = -1; else today = [ev mday]; } NXPrintf(output, "{\\rtf0\\ansi{\\fonttbl\\f0\\fmodern " "%s;}\\fs%.0f\n", [global fontName], [global fontSize] * 2); NXPrintf(output, "{\\f0\\b %s %s %2d\\par}\n", shortWeekDays[thisDay->tm_wday], shortMonths[thisDay->tm_mon], thisDay->tm_mday); eventCount = 0; /* Print all events for today regardless of priority */ while ( [ev present] != 0 && [ev mday] == today) { if( [ev priority] < priorityCutOff) { [ev readEvent : [ev next]]; eventCount++; continue; } if( [ev priority] > [global highPriority]) NXPrintf(output, "{\\f0\\b "); else NXPrintf(output, "{\\f0 "); if( [global militaryTime]) NXPrintf(output, "\\par {\\f0\\b %2d:%02d}" "{\\par \\li360 %s\\par}}\n", [ev hour], [ev min], [ev message]); else { temp = [ev hour]; if( temp > 12 ) temp -= 12; if( temp == 0 ) temp = 12; NXPrintf(output, "\\par{\\f0\\b %2d:%02d %s}" "{\\par \\li360 %s\\par}}\n", temp, [ev min], ([ev hour]>11)?"pm":"am", [ev message]); } [ev readEvent : [ev next]]; } if( [ev present] == 0 || today < 0) { if( today == -2) NXPrintf(output, "{\\f0\\par Ancient history.}\n"); else NXPrintf(output, "{\\f0\\par No events.}\n"); } if( eventCount > 0) // Number of invisible events { NXPrintf(output, "{\\par (%d hidden)\\par}\n", eventCount); } NXPrintf(output, "}\n"); NXSeek(output, 0, NX_FROMSTART); [dayView readRichText: output]; NXCloseMemory(output, NX_FREEBUFFER); [dayView hideCaret]; // for some reason the Text temp = [ev present]; [ev free]; return temp; } - weekBefore:sender { if( ([NXApp currentEvent]->flags) & NX_ALTERNATEMASK) thisWeek.tm_mday -= 1; else thisWeek.tm_mday -= 7; [self update]; return self; } - weekAfter:sender { if( ([NXApp currentEvent]->flags) & NX_ALTERNATEMASK) thisWeek.tm_mday += 1; else thisWeek.tm_mday += 7; [self update]; return self; } - weekNow:sender { thisWeek = *timeNow(); thisWeek.tm_mday -= thisWeek.tm_wday; thisWeek.tm_hour = thisWeek.tm_min = thisWeek.tm_sec = 0; fixTmStructure( &thisWeek); [self update]; return self; } - viewPopUpChanged:sender { switch( [[viewPopUp itemList] selectedRow]) { case 2: priorityCutOff = [global highPriority]; break; case 1: priorityCutOff = [global lowPriority]; break; case 0: default: priorityCutOff = 0; break; } #ifdef DEBUG fprintf(stderr, "Priority changed to %d.... (tag = %d)\n", priorityCutOff, [[viewPopUp itemList] selectedRow]); #endif [self update]; return self; } - windowDidMiniaturize: sender { #ifdef DEBUG fprintf(stderr,"Today did miniaturize\n"); #endif miniaturized = TRUE; minute = -1; // Force a redisplay on reopening return self; } - windowDidDeminiaturize: sender { #ifdef DEBUG fprintf(stderr,"Today did deminiaturize\n"); #endif miniaturized = FALSE; minute = -1; // Force a redisplay [self update]; return self; } - defaultsDidChange: sender { #ifdef DEBUG fprintf(stderr,"Defaults changed.... Week win compensating\n"); #endif militaryTime = [global militaryTime]; [self update]; return self; } - windowWillResize: (id) sender toSize: (NXSize *) size { #ifdef DEBUG fprintf(stderr,"Window would have resized to %f x %f.\n", size->width, size->height); #endif size->width = MIN_WIDTH; // can't change the width, ever if( size->height < MIN_HEIGHT) size->height = MIN_HEIGHT; #ifdef DEBUG fprintf(stderr,"Window will resize to %f x %f.\n", size->width, size->height); #endif return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.