📄 nxschedule.cxx
字号:
g_SearchFlag = false; /* buttonGroup = new Fl_Group(BUTTON_X+180, 0, 50, BUTTON_HEIGHT, ""); { dailyButton = new GroupButton(BUTTON_X+180, BUTTON_Y, 10, BUTTON_HEIGHT, type_daily); dailyButton->callback(dailyView_callback, this); buttonGroup->add((Fl_Widget*)dailyButton); } { weeklyButton = new GroupButton(BUTTON_X+193, BUTTON_Y, 10, BUTTON_HEIGHT, type_weekly); weeklyButton->callback(weeklyView_callback, this); buttonGroup->add((Fl_Widget*)weeklyButton); } { monthlyButton = new GroupButton(BUTTON_X+206, BUTTON_Y, 10, BUTTON_HEIGHT, type_monthly); monthlyButton->callback(monthlyView_callback, this); buttonGroup->add((Fl_Widget*)monthlyButton); } { yearlyButton = new GroupButton(BUTTON_X+219, BUTTON_Y, 10, BUTTON_HEIGHT, type_yearly); yearlyButton->callback(yearlyView_callback, this); buttonGroup->add((Fl_Widget*)yearlyButton); } buttonGroup->end(); */ mainWindow = new NxWindow(W_W, W_H, APP_NAME); MakeWeekViewWindow(); MakeDayWindow(); MakeTimeWindow(); MakeDetailsWindow(); MakeRepeatWindow(); MakeMonthWindow(); // for some reason this is created slow! //MakeMonthViewWindow(); m_pCalendar->MakeDateWindow(); dateWindow = m_pCalendar->GetDateWindow(); add_window((Fl_Window *) dateWindow->GetWindowPtr()); w_pCalendar->MakeDateWindow(); weekDateWindow = w_pCalendar->GetDateWindow(); add_window((Fl_Window *) weekDateWindow->GetWindowPtr()); MakeYearViewWindow(); MakeSetTimeWindow(); MakeDeleteWindow(); MakeLookupWindow(); MakeResultsWindow(); MakeErrorWindow(); MakeRepeatEventWindow();#ifdef DO_ALARM MakeAlarmViewWindow();#endif mainWindow->end(); //dayWindow->add((Fl_Widget*)buttonGroup); set_shown_window(dayWindow->GetWindowPtr()); // FLNX-Colosseum IPC SyncRegisterDB(db, sFields, SCHEDULE, 0, NULL, 0);#ifdef CONFIG_COLOSSEUM Add_Fd("nxschedule", _ClientIPCHandler);#else ExecuteShow();#endif MakeMonthViewWindow(); mainWindow->add((Fl_Window *) monthViewWindow->GetWindowPtr()); //show_default_window(); UpdateDateDisplay();}NxSchedule::~NxSchedule(){ db->Close(SCHEDULE); delete db; db = 0;}voidNxSchedule::Refresh(){ UpdateDateDisplay();}voidNxSchedule::dailyView_callback(Fl_Widget * w, void *l){ NxSchedule *pThis = (NxSchedule *) l; if (!dayWindow->GetWindowPtr()->shown()) { // dayWindow->add((Fl_Widget*)buttonGroup); pThis->show_window(dayWindow->GetWindowPtr()); }}voidNxSchedule::weeklyView_callback(Fl_Widget * w, void *l){ NxSchedule *pThis = (NxSchedule *) l; pThis->UpdateWeekView(); if (pThis->weekGrid) { pThis->weekGrid->hide(); pThis->weekGrid->redraw(); pThis->weekGrid->show(); } if (!weekViewWindow->GetWindowPtr()->shown()) { // weekViewWindow->add((Fl_Widget*)buttonGroup); pThis->show_window(weekViewWindow->GetWindowPtr()); }}voidNxSchedule::monthlyView_callback(Fl_Widget * w, void *l){ NxSchedule *pThis = (NxSchedule *) l; if (!(pThis->monthViewWindow->GetWindowPtr()->shown())) { pThis->pMonthCal->SetPickedDate(pThis->m_CurrentDay); // monthViewWindow->add((Fl_Widget*)buttonGroup); pThis->show_window(pThis->monthViewWindow->GetWindowPtr()); }}voidNxSchedule::yearlyView_callback(Fl_Widget * w, void *l){ NxSchedule *pThis = (NxSchedule *) l; if (!(pThis->yearViewWindow->GetWindowPtr()->shown())) { // yearViewWindow->add((Fl_Widget*)buttonGroup); pThis->show_window(pThis->yearViewWindow->GetWindowPtr()); }}//// FLNX-Colosseum IPC Methods//#ifdef CONFIG_COLOSSEUMvoidNxSchedule::ClientIPCHandler(int fd, void *o, int ipc_id){ DPRINT("\n"); DPRINT("ClientIPCHandler has now been started.\n"); char *tokenMsg = new char[MAX_LENGTH]; memset(tokenMsg, 0, MAX_LENGTH); char *passMsg = new char[MAX_LENGTH]; memset(passMsg, 0, MAX_LENGTH); DPRINT("And this is the message... %s.\n", (char *) o); if (o == NULL) { int length = MAX_LENGTH - 1; ipc_id = NxApp::Instance()->Read_Fd(passMsg, &length); if ((passMsg == NULL) || (passMsg[0] == 0)) return; else strcpy(tokenMsg, passMsg); } else if (ipc_id == -1) { strcpy(tokenMsg, (char *) o); strcpy(passMsg, (char *) o); ipc_id = NxApp::Instance()->Find_Fd("nxschedule"); } else { strcpy(tokenMsg, (char *) o); strcpy(passMsg, (char *) o); } // Explode Message char *service = new char[MAX_LENGTH]; char *msg_cmd = new char[MAX_LENGTH]; char *data_item = new char[MAX_LENGTH]; // SERVICE char *tmp = strtok(tokenMsg, TOKEN); if (NULL != tmp) strcpy(service, tmp); // MSG_CMD tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(msg_cmd, tmp); // DATA_ITEM tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(data_item, tmp); // DPRINT("Expoding Message... %s, %s, %s.\n", service, msg_cmd, data_item);#ifdef DO_ALARM if (strcmp(msg_cmd, "ALARM") == 0) { if (!NxApp::Instance()->VerifyClient(service)) return; int rec_array[1]; rec_array[0] = -1; db->Select(SCHEDULE, data_item, 0, rec_array, 1); if (-1 != rec_array[0]) { viewAlarm(rec_array[0]); } }#endif if (strcmp(msg_cmd, "EXECUTE") == 0) { // DPRINT("EXECUTE message command recv.\n"); if (!NxApp::Instance()->VerifyClient(service)) return; if (strcmp(data_item, "search") == 0) { DPRINT("%s, %s, %s\n", service, msg_cmd, data_item); char *searchStr = new char[MAX_LENGTH]; char *startStr = new char[16]; char *endStr = new char[16]; char *widthStr = new char[8]; tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(searchStr, tmp); tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(widthStr, tmp); tmp = strtok(NULL, TOKEN); if (NULL == tmp) ExecuteSearch(ipc_id, searchStr, atoi(widthStr)); else { strcpy(startStr, tmp); long startTime = strtol(startStr, NULL, 10); tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(endStr, tmp); long endTime = strtol(endStr, NULL, 10); DPRINT("Executing StringDateSearch\n"); ExecuteStringDateSearch(ipc_id, searchStr, atoi(widthStr), startTime, endTime); } delete[]startStr; delete[]endStr; delete[]searchStr; delete[]widthStr; searchStr = widthStr = startStr = endStr = 0; } if (0 == strcmp(data_item, "datesearch")) { char *startStr = new char[16]; char *endStr = new char[16]; char *widthStr = new char[8]; tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(widthStr, tmp); tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(startStr, tmp); tmp = strtok(NULL, TOKEN); if (NULL != tmp) strcpy(endStr, tmp); long startTime = strtol(startStr, NULL, 10); long endTime = strtol(endStr, NULL, 10); ExecuteDateSearch(ipc_id, atoi(widthStr), startTime, endTime); delete[]startStr; delete[]endStr; delete[]widthStr; startStr = endStr = widthStr = 0; } if (strcmp(data_item, "showrecord") == 0) { int recno = 0; char *data = strtok(NULL, TOKEN); recno = atoi(data); viewRecord(recno); } } // Memory Mangement delete[]service; delete[]msg_cmd; delete[]data_item; delete[]tokenMsg; service = msg_cmd = data_item = tokenMsg = NULL; NxApp::Instance()->ServerIPCHandler(fd, ipc_id, (char *) passMsg); delete[]passMsg; passMsg = NULL;}#endiftime_tGetAlarmTime(NxTodo * n){ time_t alarmTime; switch (n->alarmFlags) { case ALARM_MIN: alarmTime = n->startTime - (60 * n->alarmInt); break; case ALARM_HOUR: alarmTime = n->startTime - (3600 * n->alarmInt); break; case ALARM_DAY: alarmTime = n->startTime - (86400 * n->alarmInt); break; default: alarmTime = n->startTime; break; } return alarmTime;}#ifdef DO_ALARMvoidNxSchedule::SetAlarm(NxTodo * n, time_t new_time){ int ipc_id = NxApp::Instance()->Find_Fd("alarmd"); time_t alarmTime = 0; DPRINT("SetAlarm ipc_id [%d]\n", ipc_id); if (0 == new_time) { alarmTime = GetAlarmTime(n); if (0 > alarmTime) alarmTime = n->startTime; } else { alarmTime = new_time; } if (0 < ipc_id) { char *msg = new char[MAX_LENGTH]; char buf[DESC]; int recno = n->recno; sprintf(msg, "nxschedule^INITIATE^0^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); if (0 == strcmp(n->szDescription, "")) strcpy(buf, " "); else strcpy(buf, n->szDescription); if ((g_EditFlag & CHANGED_NEW)) recno = idNum + 1; sprintf(msg, "nxschedule^SET^%d^%s^%ld^%ld^%ld^", recno, buf, n->startTime, n->endTime, alarmTime); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = 0; }}voidNxSchedule::DeleteAlarm(NxTodo * n){ int ipc_id = NxApp::Instance()->Find_Fd("alarmd"); if (0 < ipc_id) { char *msg = new char[MAX_LENGTH]; int recno = n->recno; sprintf(msg, "nxschedule^INITIATE^0^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); sprintf(msg, "nxschedule^DELETE^%d^", recno); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = 0; }}#endif#ifdef CONFIG_COLOSSEUMvoidNxSchedule::ExecuteSearch(int ipc_id, char *searchStr, int width){ if (searchStr == NULL) return; char *msg = new char[MAX_LENGTH]; NxTodo *note; while ((note = searchString(searchStr)) != NULL) { char *result = formatString(note, width); // Send DATA message to client // (e.g. "nxschedule^DATA^1^Century *Software* is neato^") strcpy(msg, "nxschedule^DATA^search^"); char recno[4]; sprintf(recno, "%d", note->recno); strcat(msg, recno); strcat(msg, "^"); strcat(msg, result); strcat(msg, "^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); } strcpy(msg, "nxschedule^ACK^DATA^search^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = NULL;}voidNxSchedule::ExecuteStringDateSearch(int ipc_id, char *searchStr, int width, long startTime, long endTime){ if (searchStr == NULL) return; char *msg = new char[MAX_LENGTH]; NxTodo *note; while ((note = searchString(searchStr)) != NULL) { if (true == checkDate(note, (time_t) startTime, (time_t) endTime)) { char *result = formatString(note, width); // Send DATA message to client strcpy(msg, "nxschedule^DATA^search^"); char recno[16]; sprintf(recno, "%d", note->recno); strcat(msg, recno); strcat(msg, "^"); strcat(msg, result); strcat(msg, "^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); } } strcpy(msg, "nxschedule^ACK^DATA^search^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = NULL;}voidNxSchedule::ExecuteDateSearch(int ipc_id, int width, long startTime, long endTime){ char *msg = new char[MAX_LENGTH]; NxTodo *note; while ((note = searchDate(startTime, endTime)) != NULL) { char *result = formatString(note, width); // Send DATA message to client // (e.g. "nxschedule^DATA^1^Century *Software* is neato^") strcpy(msg, "nxschedule^DATA^search^"); char recno[4]; sprintf(recno, "%d", note->recno); strcat(msg, recno); strcat(msg, "^"); strcat(msg, result); strcat(msg, "^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); } strcpy(msg, "nxschedule^ACK^DATA^search^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = NULL;}#endifvoidNxSchedule::exit_callback(Fl_Widget * fl, void *l){ exit_flag = 1; mainWindow->hide();}//// Database Methods//char *NxSchedule::Record(int id, int catid, long startTime, long endTime, int allDayFlag, int repeatFlag_1, int repeatFlag_2, long repeatFlag_3, long repeatWkMonFlag, entry_type entryType, char *szDescription, int except, int recnoPtr, int alarmInt, int alarmFlags){ char *rec = new char[MAXRECSIZ]; if (id >= INT_MAX) { fprintf(stderr, "Fatal Error!!!!!\n"); exit(1); } memset(rec, 0, MAXRECSIZ); put16(&rec[sFields[0].offset], id); put16(&rec[sFields[1].offset], catid); put32(&rec[sFields[2].offset], startTime); put32(&rec[sFields[3].offset], endTime); put16(&rec[sFields[4].offset], allDayFlag); put16(&rec[sFields[5].offset], repeatFlag_1); put16(&rec[sFields[6].offset], repeatFlag_2); put32(&rec[sFields[7].offset], repeatFlag_3); put32(&rec[sFields[8].offset], repeatWkMonFlag); put16(&rec[sFields[9].offset], (int) entryType); strcpy(&rec[sFields[10].offset], szDescription); put16(&rec[sFields[11].offset], except); put16(&rec[sFields[12].offset], recnoPtr); put16(&rec[sFields[13].offset], alarmInt); put16(&rec[sFields[14].offset], alarmFlags);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -