⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nxweek.cxx

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CXX
📖 第 1 页 / 共 3 页
字号:
					(temp_appt->y + temp_appt->h))) {				    l_mark_appt = temp_appt;				    break;				}				temp_appt = temp_appt->prev_appt;			    }			    if (l_mark_appt) {	// can't go left either which one ends first?				if ((l_mark_appt->y + l_mark_appt->h) >				    (r_mark_appt->y + r_mark_appt->h)) {				    mark_appt = r_mark_appt;				    left = 0;				} else {				    mark_appt = l_mark_appt;				    left = 1;				}			    }			}		    }		    if (l_mark_appt && r_mark_appt) {	// deterine which has bigger overlay			int l_size = 0;			int r_size = 0;			r_size = Overlap(r_mark_appt);			l_size = Overlap(l_mark_appt);			if (r_size < l_size) {			    left = 0;			    mark_appt = r_mark_appt;			} else if (r_size > l_size) {			    mark_appt = l_mark_appt;			    left = 1;			} else			    left = temp_left;		    }		    DPRINT("IN DOUBLE\n");		    if (mark_appt && (temp_left != left)) {	// went the other way on top of another			DPRINT("other way on top\n");			if (left)			    p_CurAppt->overlay = LEFT;			else {			    p_CurAppt->overlay = RIGHT;			}		    } else if (!mark_appt && (temp_left != left)) {	// went the other way alone			DPRINT("other way alone\n");			if (left)			    p_CurAppt->overlay = LEFT;			else {			    p_CurAppt->overlay = RIGHT;			}		    } else if (!mark_appt && (left == temp_left)) {	// same way alone			DPRINT("same alone\n");			if (left)			    p_CurAppt->overlay = LEFT;			else {			    p_CurAppt->overlay = RIGHT;			}		    } else {	// went the same way on top			DPRINT("same on top\n");			if (left)			    p_CurAppt->overlay = LEFT;			else {			    p_CurAppt->overlay = RIGHT;			}		    }		    GetOverlapDim(p_CurAppt, NULL);		    break;		} else {	// single overlay		    GetOverlapDim(p_CurAppt, p_PrevAppt);		    break;		}	    }	    p_PrevAppt = p_PrevAppt->prev_appt;	}	if (single) {	    DPRINT("GetOverlap: setting single appt overlay dim\n");	    GetOverlapDim(NULL, p_CurAppt);	}	p_CurAppt = p_CurAppt->next_appt;    }}voidWeekGrid::GetAppointments(){    int rec_array[255];    int idx = 0;    int jdx = 0;    int numRecs = db->NumRecs(db_name);    int recCount = 0;    bool ret = false;    appt *p_Appt = NULL;    time_t start_time;    time_t end_time;    int wday = 0;    tm *tt = NULL;    NxTodo *note = new NxTodo;    NxSchedule *pThis = (NxSchedule *) (NxApp::Instance());    for (idx = 0; idx < 255; idx++)	rec_array[idx] = -1;    db->Select(db_name, rec_array, 255);    idx = -1;    //if(date_sunday != date_mark || numRecs != num_recs) {     memset(appt_array, 0, sizeof(appt_array));    if (first_appt) {	free_appts(first_appt);	first_appt = NULL;    }    for (idx = 0; idx < 255; idx++) {	if (-1 != rec_array[idx]) {	    for (jdx = 0; jdx < 7; jdx++) {		pThis->ExtractRecord(note, rec_array[idx]);		ret = pThis->IsForToday(note, date_sunday + (jdx * 86400),					date_sunday + ((jdx + 1) * 86400) -					1);		if (ret) {		    tt = localtime(&note->startTime);		    wday = tt->tm_wday;		    start_time = note->startTime + ((jdx - wday) * 86400);		    end_time = note->endTime + ((jdx - wday) * 86400);		    MakeAppt(p_Appt, rec_array[idx], start_time, end_time);		}		if (recCount < numRecs && ret) {		    p_Appt = appt_alloc();		}	    }	    recCount++;	}    }    date_mark = date_sunday;    num_recs = numRecs;    GetOverlap();    note = NULL;    delete note;    //}}bool WeekGrid::MakeAppt(appt * p_Appt, int recno, time_t start_time,			time_t end_time){    appt *	temp_appt =	NULL;    appt	swap_appt;    memset(&swap_appt, 0, sizeof(swap_appt));    swap_appt.recno = recno;    swap_appt.start_time = start_time;    swap_appt.end_time = end_time;    swap_appt.overlay = SINGLE;    if (!first_appt) {	first_appt = appt_alloc();	memcpy(first_appt, &swap_appt, sizeof(swap_appt));	GetApptDim(first_appt);	return true;    }    memcpy(p_Appt, &swap_appt, sizeof(swap_appt));    GetApptDim(p_Appt);    temp_appt = first_appt;    while (temp_appt) {	if (temp_appt->start_time >= p_Appt->start_time) {	    if (temp_appt->prev_appt)		temp_appt->prev_appt->next_appt = p_Appt;	    p_Appt->prev_appt = temp_appt->prev_appt;	    p_Appt->next_appt = temp_appt;	    temp_appt->prev_appt = p_Appt;	    if (temp_appt == first_appt) {		first_appt = p_Appt;	    }	    break;	}	if (!temp_appt->next_appt) {	// insert here at end	    p_Appt->prev_appt = temp_appt;	    temp_appt->next_appt = p_Appt;	    break;	}	temp_appt = temp_appt->next_appt;    }    return true;}bool WeekGrid::IsForWeek(time_t start_time, time_t end_time){    time_t	date_sat =	date_sunday + (7 * 86400) -	1;    DPRINT("date_sunday [%ld] date_sat [%ld]\n", date_sunday, date_sat);    if (start_time >= date_sunday && start_time <= date_sat)	return true;    else if (end_time <= date_sat && end_time >= date_sunday)	return true;    else	return false;}voidWeekGrid::GetApptDim(appt * p_Appt){    time_t new_time = p_Appt->start_time;    int hour;    int min;    int wday;    double h;    double y;    char buf[16];    tm *tt = localtime(&new_time);    p_Appt->x = (b_width * tt->tm_wday);    hour = tt->tm_hour;    min = tt->tm_min;    wday = tt->tm_wday;    y = (wday * day_pix) + (hour * 3600) * pix_ratio + (min * 60) * pix_ratio;    sprintf(buf, "%.0f", y);    p_Appt->y = strtol(buf, NULL, 10);    new_time = p_Appt->end_time;    tt = localtime(&new_time);    hour = tt->tm_hour;    min = tt->tm_min;    wday = tt->tm_wday;    h = (wday * day_pix) + (hour * 3600) * pix_ratio + (min * 60) * pix_ratio;    h = h - p_Appt->y;    sprintf(buf, "%.0f", h);    p_Appt->h = strtol(buf, NULL, 10);    DPRINT("p_Appt->y [%f] p_Appt->h [%f]\n", p_Appt->y, p_Appt->h);}appt *appt_alloc(void){    appt *p_appt;    p_appt = (appt *) malloc(sizeof(appt));    memset(p_appt, 0, sizeof(appt));    return p_appt;}voidfree_appts(appt * app){    appt *swap_appt;    DPRINT("FREEING APPTS\n");    while (app) {	swap_appt = app;	app = app->next_appt;	DPRINT("FREEING [%d]\n", swap_appt->recno);	free(swap_appt);	swap_appt = NULL;    }}doubleWeekGrid::GetOffSet(double val){    int num = (int) (val / day_pix);    double close = num * day_pix;    double rem = val - close;    return rem;}intWeekGrid::GetGridVal(){    int dy = 0;    switch (scroll_count) {    case 0:	dy = 0;	break;    case 1:	dy = 4 * b_height;	break;    case 2:	dy = 6 * b_height;	break;    default:	dy = 0;    }    return dy;}voidWeekGrid::DrawAppointments(){    int dy = 0;    if (NULL == db)	return;    GetAppointments();    dy = GetGridVal();    DrawOverlaps(dy);    DrawRects(dy);}voidWeekGrid::DrawOverlaps(int dy){    int col = 0;    int row = 0;    double h_val = 0;    double dec = 0;    int last_val = 0;    int low_val;    int hi_val;    int H;    int start_row = 0;    double y_val;    int Y;    int X;    int x_off;    int next_val;    int width;    double rem = 0;    int offset = 0;    // go low    for (col = 0; col <= 6; col++) {	for (row = 0; row <= 287; row++) {	    if (0 == (appt_array[col][row] & APPT_MASK)) {		last_val = 0;		h_val = 0;		continue;	    } else {		low_val = appt_array[col][row] & APPT_MASK;		next_val = low_val;		h_val = 1;		start_row = row;		H = Y = 0;		while ((next_val == low_val) && (row <= 287)) {		    DPRINT("h_val [%f]\n", h_val);		    h_val++;		    row++;		    next_val = appt_array[col][row] & APPT_MASK;		}		width = b_width / 2 - 4;		X = (col * b_width);		x_off = X + width;		y_val = (5 * start_row) * 60 * pix_ratio;		Y = (int) y_val;		dec = y_val - Y;		if (dec > .5)		    y_val++;		Y = (int) y_val;		h_val = (5 * h_val) * 60 * pix_ratio;		H = (int) h_val;		dec = h_val - H;		if (dec > .5)		    h_val++;		H = (int) h_val;		DPRINT("Y [%d] x_off [%d] w [%d] H [%d]\n", Y, x_off, width,		       H);		DPRINT("dy [%d]\n", dy);		if (dy > Y - 2) {		    DPRINT("HERE\n");		    if ((Y + H) > dy) {			DPRINT("H big\n");			H = (Y + H) - dy;			Y = 0;		    } else			H = 0;		} else {		    DPRINT("Y [%d] H [%d]\n", Y, H);		    // correct Y		    rem = GetOffSet((double) Y);		    offset = Y;		    Y = (int) rem - dy;		    if (offset >= (dy + (int) (6.5 * b_height)))			H = 0;		    else if ((offset + H) <= dy)			H = 0;		    else if ((offset + H) > (dy + (int) (6.5 * b_height))) {			H = (int) (6.5 * b_height) - Y;		    }		    if (H > (int) (6.5 * b_height))			H = (int) (6.5 * b_height);		}		switch (low_val) {		case 0:		    break;		case 1:		    fl_color(FL_LIGHT3);		    break;		case 2:		    fl_color(FL_LIGHT1);		    break;		case 3:		    fl_color(FL_DARK1);		    break;		case 4:		    fl_color(FL_DARK3);		    break;		default:		    fl_color(FL_LIGHT3);		    break;		}		DPRINT("Y [%d] x_off [%d] w [%d] H [%d]\n", Y, x_off, width,		       H);		if (H > 0 && low_val)		    fl_rectf(x_off + 4 + x(), Y + y(), width, H - 1);	    }	}    }    // go high    for (col = 0; col <= 6; col++) {	for (row = 0; row <= 287; row++) {	    if (0 == (appt_array[col][row] >> 4)) {		last_val = 0;		h_val = 0;		continue;	    } else {		hi_val = appt_array[col][row] >> 4;		next_val = hi_val;		h_val = 1;		start_row = row;		while ((next_val == hi_val) && (row <= 287)) {		    h_val++;		    row++;		    next_val = appt_array[col][row] >> 4;		}		width = b_width / 2 - 4;		X = (col * b_width);		x_off = X;		y_val = (5 * start_row) * 60 * pix_ratio;		Y = (int) y_val;		dec = y_val - Y;		if (dec > .5)		    y_val++;		Y = (int) y_val;		h_val = (5 * h_val) * 60 * pix_ratio;		H = (int) h_val;		dec = h_val - H;		if (dec > .5)		    h_val++;		H = (int) h_val;		if (dy > Y - 2) {		    if ((Y + H) > dy) {			H = (Y + H) - dy;			Y = 0;		    } else			H = 0;		} else {		    rem = GetOffSet((double) Y);		    offset = Y;		    Y = (int) rem - dy;		    if (offset >= (dy + (int) (6.5 * b_height)))			H = 0;		    else if ((offset + H) <= dy)			H = 0;		    else if ((offset + H + 2) > (dy + (int) (6.5 * b_height))) {			H = (int) (6.5 * b_height) - Y;		    }		    if (H > (int) (6.5 * b_height))			H = (int) (6.5 * b_height);		}		switch (hi_val) {		case 0:		    break;		case 1:		    fl_color(FL_LIGHT3);		    break;		case 2:		    fl_color(FL_LIGHT1);		    break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -