📄 nxtodo.cxx
字号:
//strcat(msg, note->szId); char id[4]; sprintf(id, "%d", note->nId); strcat(msg, id); strcat(msg, "^"); strcat(msg, result); strcat(msg, "^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); } } strcpy(msg, "nxtodo^ACK^DATA^search^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = NULL;}voidNxTodoList::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 = formatLabel(note, width, true); strcpy(msg, "nxtodo^DATA^search^"); sprintf(msg, "%s^%d^%s^", msg, note->nId, result); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); } strcpy(msg, "nxtodo^ACK^DATA^seach^"); NxApp::Instance()->Write_Fd(ipc_id, msg, MAX_LENGTH); delete[]msg; msg = NULL;}#endif /* CONFIG_COLOSSEUM *///// Database methods//voidNxTodoList::exit_callback(Fl_Widget * fl, void *l){ exit_flag = 1; main_window->hide();}char *NxTodoList::Record(int id, int cat_id, int complete, int priority, string title, string desc, long time){ char *rec = new char[MAXRECSIZ]; memset(rec, 0, MAXRECSIZ); put16(&rec[tdFields[0].offset], id); DPRINT("Record id [%d]\n", id); put16(&rec[tdFields[1].offset], cat_id); put16(&rec[tdFields[2].offset], complete); put16(&rec[tdFields[3].offset], priority); strcpy(&rec[tdFields[4].offset], title.c_str()); strcpy(&rec[tdFields[5].offset], desc.c_str()); put32(&rec[tdFields[6].offset], time); return rec;}char *NxTodoList::Record(int pri_id, string pri_type, int dummy){ char *rec = new char[MAXRECSIZ]; memset(rec, 0, MAXRECSIZ); put16(&rec[pFields[0].offset], pri_id); strcpy(&rec[pFields[1].offset], pri_type.c_str()); return rec;}char *NxTodoList::Record(int catid, string cat_name){ char *rec = new char[MAXRECSIZ]; memset(rec, 0, MAXRECSIZ); put16(&rec[catFields[0].offset], catid); strcpy(&rec[catFields[1].offset], cat_name.c_str()); return rec;}//// Window Methods//Fl_Window *NxTodoList::get_main_window(){ if (main_window) return main_window; else return 0;}voidNxTodoList::show_default_window(){ show_window(todo_list_window->GetWindowPtr());}voidNxTodoList::make_list_window(){ todo_list_window = new NxPimWindow(APP_NAME, todoMenuItem, db, CATEGORY, TODO, (void (*)(const char *)) set_category); add_window((Fl_Window *) todo_list_window->GetWindowPtr()); { NxScroll *o = note_list = new NxScroll(-1, 31, W_W + 2, BUTTON_Y - 33); o->movable(false); { tree = new Fl_Toggle_Tree(0, 31, W_W, 10); tree->callback(checkit_callback); } o->end(); todo_list_window->add((Fl_Widget *) o); } { NxBox *o = new NxBox(5, 5, 85, 25, ""); o->labelfont(1); todo_list_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_X, BUTTON_Y, BUTTON_WIDTH - 5, BUTTON_HEIGHT, "Add"); o->box(FL_SHADOW_BOX); o->labelfont(1); o->callback(add_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_list_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_X + 58, BUTTON_Y, BUTTON_WIDTH - 5, BUTTON_HEIGHT, "Edit"); o->box(FL_SHADOW_BOX); o->labelfont(1); o->callback(edit_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_list_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_X + 116, BUTTON_Y, BUTTON_WIDTH - 5, BUTTON_HEIGHT, "Delete"); o->box(FL_SHADOW_BOX); o->labelfont(1); o->callback(delList_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_list_window->add((Fl_Widget *) o); }}voidNxTodoList::make_edit_window(){ todo_edit_window = new NxPimWindow(APP_NAME, editMenuItem, db, CATEGORY, TODO, (void (*)(const char *)) set_category); add_window((Fl_Window *) todo_edit_window->GetWindowPtr()); { NxOutput *o = new NxOutput(BUTTON_X, 30, BUTTON_WIDTH, 25); o->value(" Priority:"); o->movable(false); todo_edit_window->add((Fl_Widget *) o); } { NxMenuButton *o = edit_priority_list = new NxMenuButton(63, 34, BUTTON_WIDTH + 10, BUTTON_HEIGHT, ""); o->box(FL_SHADOW_BOX); o->align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT); int numRecs = db->NumRecs(PRIORITY); int get_recno[1]; get_recno[0] = -1; char buf[10]; for (int i = 0; i < numRecs; i++) { sprintf(buf, "%d", i); db->Select((string) PRIORITY, buf, 0, get_recno, 255); // id db->Extract((string) PRIORITY, get_recno[0], 1, buf); o->add(buf); } o->callback(priority_callback); o->value(0); todo_edit_window->add((Fl_Widget *) o); } { NxOutput *o = new NxOutput(BUTTON_X, 56, BUTTON_WIDTH, 25); o->value(" Title:"); o->movable(false); o->align(FL_ALIGN_INSIDE | FL_ALIGN_RIGHT); todo_edit_window->add((Fl_Widget *) o); } { NxInput *o = edit_title = new NxInput(63, 58, W_W - 93, 20, ""); o->movable(false); o->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED); o->maximum_size(TITLE - 1); todo_edit_window->add((Fl_Widget *) o); } { NxOutput *o = new NxOutput(BUTTON_X - 10, 79, BUTTON_WIDTH + 5, 25); o->value("Due Date:"); o->movable(false); NxApp::Instance()->def_font((Fl_Widget *) o); todo_edit_window->add((Fl_Widget *) o); } { NxButton *o = due_date = new NxButton(BUTTON_X + 56, 83, BUTTON_WIDTH + 10, BUTTON_HEIGHT, "Jun 09, 74"); o->movable(false); o->callback(dueDate_callback); o->box(FL_SHADOW_BOX); todo_edit_window->add((Fl_Widget *) o); } { NxCheckButton *o = edit_complete = new NxCheckButton(BUTTON_X + 30, 99, "Complete"); // NxCheckButton *o = stringCheck = new NxCheckButton(BUTTON_X, 35, 25, 25, "Only entries containing:"); o->movable(false); todo_edit_window->add((Fl_Widget *) o); } { { Fl_Editor *o = g_editor = new Fl_Editor(5, 124, W_W - 10, BUTTON_Y - 131); o->movable(false); o->callback(NxApp::Instance()->pasteTarget_callback, (void *) 1); o->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED); todo_edit_window->add((Fl_Widget *) o); } } { NxButton *o = new NxButton(BUTTON_X, BUTTON_Y, BUTTON_WIDTH, BUTTON_HEIGHT, "Done"); o->box(FL_SHADOW_BOX); o->labelfont(1); o->callback(done_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_edit_window->add((Fl_Widget *) o); }}voidNxTodoList::make_dellist_window(){ todo_dellist_window = new NxPimPopWindow("Delete"); add_window((Fl_Window *) todo_dellist_window->GetWindowPtr()); { NxBox *o = new NxBox(BUTTON_X, 43, W_W - BUTTON_X - 15, 0, "Delete current task ?"); o->box(FL_FLAT_BOX); o->align(FL_ALIGN_WRAP | FL_ALIGN_LEFT | FL_ALIGN_TOP); NxApp::Instance()->def_font((Fl_Widget *) o); todo_dellist_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(15, 90, BUTTON_WIDTH, BUTTON_HEIGHT, "Yes"); o->box(FL_SHADOW_BOX); o->callback(yesDelList_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_dellist_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_WIDTH + 17, 90, BUTTON_WIDTH, BUTTON_HEIGHT, "No"); o->box(FL_SHADOW_BOX); o->callback(noDelList_callback); NxApp::Instance()->def_font((Fl_Widget *) o); todo_dellist_window->add((Fl_Widget *) o); }}voidNxTodoList::make_results_window(){ todo_results_window = new NxPimPopWindow("Search Results", NxApp::Instance()->getGlobalColor(APP_FG), 5, (W_W / 3), W_W - 10, (W_H - (W_W / 2))); add_window((Fl_Window *) todo_results_window->GetWindowPtr()); { results_message = new NxOutput(4, 19, W_W - 19, 25); results_message->value("Nothing Found."); results_message->hide(); todo_results_window->add((Fl_Widget *) results_message); } { results_table = new Flv_Table_Child(4, 19, (W_W - 19), (W_H - (W_W / 2) - 3 * (BUTTON_HEIGHT)), 0, (W_W - 25)); results_table->callback(view_callback); results_table->SetCols(1); todo_results_window->add((Fl_Widget *) results_table); } { NxButton *o = new NxButton(BUTTON_X, (W_H - (W_W / 2) - BUTTON_HEIGHT - 9), BUTTON_WIDTH, BUTTON_HEIGHT, "Done"); o->callback(doneLookup_callback); todo_results_window->add((Fl_Widget *) o); }}voidNxTodoList::make_lookup_window(){ static char fromBuf[30]; static char toBuf[30]; toTime = fromTime = time(0); tm *tt = localtime(&fromTime); //strftime(fromBuf, 29, "%b %d, %y", tt); //strftime(toBuf, 29, "%b %d, %y", tt); GetDateString(fromBuf, tt, sizeof(fromBuf), SHORT_YEAR); GetDateString(toBuf, tt, sizeof(toBuf), SHORT_YEAR); todo_lookup_window = //new NxPimPopWindow("Todo Lookup", NxApp::Instance()->getGlobalColor(APP_FG), 10, 10, W_W -20, W_H - 100); new NxPimWindow(W_X, W_Y, W_W, W_H); add_window((Fl_Window *) todo_lookup_window->GetWindowPtr()); { NxCheckButton *o = stringCheck = new NxCheckButton(BUTTON_X, 10, "Only entries containing:"); o->movable(false); NxApp::Instance()->def_font((Fl_Widget *) o); todo_lookup_window->add((Fl_Widget *) o); } { NxInput *o = lookup_input = new NxInput(BUTTON_X + 19, 35, 141, 20); o->movable(false); lookup_input->maximum_size(99); todo_lookup_window->add((Fl_Widget *) o); } { NxCheckButton *o = dateCheck = new NxCheckButton(BUTTON_X, 60, "Limit by date range:"); o->movable(false); todo_lookup_window->add((Fl_Widget *) o); } { NxOutput *o = new NxOutput(BUTTON_X + 19, 85, 60, BUTTON_HEIGHT); o->movable(false); o->value("From:"); todo_lookup_window->add((Fl_Widget *) o); } { NxButton *o = fromDateButton = new NxButton(BUTTON_X + 60, 85, 100, BUTTON_HEIGHT); o->movable(false); NxApp::Instance()->def_font((Fl_Widget *) o); o->label(fromBuf); o->callback(fromCalendar_callback, this); o->redraw(); todo_lookup_window->add((Fl_Widget *) o); } { NxOutput *o = new NxOutput(BUTTON_X + 19, 105, 60, BUTTON_HEIGHT); o->movable(false); o->value("To:"); todo_lookup_window->add((Fl_Widget *) o); } { NxButton *o = toDateButton = new NxButton(BUTTON_X + 60, 105, 100, BUTTON_HEIGHT); o->movable(false); o->label(toBuf); o->redraw(); o->callback(toCalendar_callback, this); todo_lookup_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_X, BUTTON_Y, BUTTON_WIDTH, BUTTON_HEIGHT, "Search"); o->callback(searchLookup_callback, this); todo_lookup_window->add((Fl_Widget *) o); } { NxButton *o = new NxButton(BUTTON_X + 63, BUTTON_Y, BUTTON_WIDTH, BUTTON_HEIGHT, "Cancel"); o->callback(cancelLookup_callback); todo_lookup_window->add((Fl_Widget *) o); }}voidNxTodoList::make_due_date_window(){ due_date_window = new NxPimPopWindow("Due Date", FL_DARK2, 10, W_H / 6, W_W - 20, W_H - 110); add_window((Fl_Window *) due_date_window->GetWindowPtr()); { NxRadioRoundButton *o = noDateRadio = new NxRadioRoundButton(10, 20, 20, 20, "No Date"); due_date_window->add((Fl_Widget *) o); o->callback(noDueDate_callback, this); } { NxRadioRoundButton *o = todayDateRadio = new NxRadioRoundButton(10, 45, 20, 20, "Today"); due_date_window->add((Fl_Widget *) o); o->callback(todayDueDate_callback, this); } { NxRadioRoundButton *o = tomorrowDateRadio = new NxRadioRoundButton(10, 70, 20, 20, "Tomorrow"); due_date_window->add((Fl_Widget *) o); o->callback(tomorrowDueDate_callback, this); } { NxRadioRoundButton *o = EoWDateRadio = new NxRadioRoundButton(10, 95, 20, 20, "End of Week"); due_date_window->add((Fl_Widget *) o); o->callback(endOfWeek_callback, this); } { NxRadioRoundButton *o = chooseDateRadio = new NxRadioRoundButton(10, 120, 20, 20, ""); due_date_window->add((Fl_Widget *) o); o->callback(chooseDueDate_callback, this); } { NxButton *o = chooseDate = new NxButton(28, 120, BUTTON_WIDTH + 20, BUTTON_HEIGHT, "June 09, 74"); due_date_window->add((Fl_Widget *) o); o->callback(chooseDate_callback, this); o->deactivate(); } { NxButton *o = new NxButton(POP_BUTTON_X, POP_BUTTON_Y(due_date_window), BUTTON_WIDTH, BUTTON_HEIGHT, "Done"); o->callback(doneChoose_callback, this); due_date_window->add((Fl_Widget *) o); } /*** { m_pDatePickerCalendar = new NxCalendar((NxApp*)this, 0, 32, W_W, BUTTON_Y-38,""); //m_pDatePickerCalendar->CalendarUpdate((void(*)(NxCalendar *))calendar_updated); due_date_window->add((Fl_Widget*)m_pDatePickerCalendar); } ****/ ResetRadioButtons();}voidNxTodoList::make_error_window(){ error_window = new NxPimPopWindow("Error"); add_window((Fl_Window *) error_window->GetWindowPtr()); { error_msg = new NxOutput(4, 19, error_window->GetWindowPtr()->w() - 10, 25); error_msg->value("Error: No Search Constraint."); error_window->add((Fl_Widget *) error_msg); } { NxButton *o = new NxButton(BUTTON_X, 90, BUTTON_WIDTH, BUTTON_HEIGHT, "Ok"); o->callback(errorOK_callback); error_window->add((Fl_Widget *) o); }}voidNxTodoList::errorOK_callback(Fl_Widget * fl, void *l){ error_window->GetWindowPtr()->hide(); NxApp::Instance()->show_window(todo_lookup_window->GetWindowPtr(), DEACTIVATE, todo_list_window->GetWindowPtr());}voidNxTodoList::noDueDate_callback(Fl_Widget * fl, void *l){ date_type = NO_DATE; chooseDate->deactivate();}voidNxTodoList::todayDueDate_callback(Fl_Widget * fl, void *l){ date_type = TODAY; chooseDate->deactivate();}voidNxTodoList::tomorrowDueDate_callback(Fl_Widget * fl, void *l){ date_type = TOMORROW; chooseDate->deactivate();}voidNxTodoList::endOfWeek_callback(Fl_Widget * fl, void *l){ date_type = END_OF_WEEK; chooseDate->deactivate();}voidNxTodoList::chooseDueDate_callback(Fl_Widget * fl, void *l){ date_type = CHOOSE_DATE; chooseDate->activate();}voidNxTodoList::checkit_callback(Fl_Widget * fl, void *l){ Fl_Toggle_Node *node = tree->selected(); if (tree->selection_count() > 1) tree->unselect(); if (node) { NxTodo *n = (NxTodo *) node->user_data(); if ((Fl::event_x() >= 19) && (Fl::event_x() <= 27)) { tree->unselect(); int recno[1]; recno[0] = -1; char id[4]; sprintf(id, "%d", n->nId); db->Select(TODO, id, 0, recno, 1); if (recno[0] != -1) { n->nComplete = !n->nComplete; edit_note(n, recno[0]); if (node->pixmap() == echeck_pixmap) node->pixmap(check_pixmap); else if (node->pixmap() == check_pixmap) node->pixmap(echeck_pixmap); if (0 != strcmp("All", note_category->label())) set_category(n->szCategory, 0); } else { if (0 != strcmp("All", note_category->label())) set_category(n->szCategory, 0); return; } } else if (Fl::event_clicks()) { g_EditFlag = 1; NxApp::Instance()-> set_catlist_window((Fl_Window *) todo_edit_window-> GetEditCategoryWindowPtr()); NxTodo *n = (NxTodo *) node->user_data(); g_editor->Clear(); if (n->szFile[0] != '^') { FILE *fd = fopen(((NxTodo *) node->user_data())->szFile, "r"); if (fd) { g_editor->LoadFrom(fd); fclose(fd); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -