📄 calendar.c
字号:
return true; } else if (fp != -1) rb->close(fp); else if (fq != -1) rb->close(fq); return false;}static void add_memo(struct shown *shown, int type){ bool saved = false; if (rb->kbd_input(memos[memos_in_memory].message, sizeof memos[memos_in_memory].message) != -1) { if (memos[memos_in_memory].message != "") { memos[memos_in_memory].file_pointer_start = 0; memos[memos_in_memory].file_pointer_end = 0; memos[memos_in_memory].day = shown->mday; memos[memos_in_memory].month = shown->mon; memos[memos_in_memory].wday = shown->wday; memos[memos_in_memory].year = shown->year; memos[memos_in_memory].type = type; if (save_memo(memos_in_memory,true,shown)) { saved = true; memos_in_memory++; } else { memos[memos_in_memory].file_pointer_start = 0; memos[memos_in_memory].file_pointer_end = 0; memos[memos_in_memory].day = 0; memos[memos_in_memory].month = 0; memos[memos_in_memory].year = 0; memos[memos_in_memory].type = 0; memos[memos_in_memory].wday = 0; } } } rb->lcd_clear_display(); if(use_system_font) rb->lcd_setfont(FONT_SYSFIXED); if (saved) rb->lcd_puts(0,0,"Event added"); else rb->lcd_puts(0,0,"Event not added"); rb->lcd_update(); rb->sleep(HZ/2);}static bool edit_memo(int change, struct shown *shown){ bool exit = false; rb->lcd_clear_display(); if (memos_in_shown_memory > 0) { rb->lcd_puts(0,0,"Remove : Up"); rb->lcd_puts(0,1,"Edit : Down"); rb->lcd_puts(0,2,"New :"); rb->lcd_puts(2,3,"weekly : Left"); rb->lcd_puts(2,4,"monthly : Play"); rb->lcd_puts(2,5,"annually : Right"); rb->lcd_puts(2,6,"one off : On"); } else { rb->lcd_puts(0,0,"New :"); rb->lcd_puts(2,1,"weekly : Left"); rb->lcd_puts(2,2,"monthly : Play"); rb->lcd_puts(2,3,"anualy : Right"); rb->lcd_puts(2,4,"one off : On"); } rb->lcd_update(); while (!exit) { switch (rb->button_get(true)) { case BUTTON_OFF: return false; case BUTTON_LEFT: add_memo(shown,0); return false; case BUTTON_PLAY: add_memo(shown,1); return false; case BUTTON_RIGHT: add_memo(shown,2); return false; case BUTTON_ON: add_memo(shown,3); return false; case BUTTON_DOWN: if (memos_in_shown_memory > 0) { if(rb->kbd_input(memos[pointer_array[change]].message, sizeof memos[pointer_array[change]].message) != -1) save_memo(pointer_array[change],true,shown); if(use_system_font) rb->lcd_setfont(FONT_SYSFIXED); exit = true; } break; case BUTTON_UP: if (memos_in_shown_memory > 0) { save_memo(pointer_array[change],false,shown); exit = true; } break; case SYS_USB_CONNECTED: return true; } } return false;}static int start = 0;static void show_lines(int selected, struct shown *shown){ int lines,j = 1,w,h,i,k = 0, pos = 1,m = 0; char temp[MAX_CHAR_MEMO_LEN + 12]; rb->lcd_getstringsize("A",&w,&h); lines = (LCD_HEIGHT / h) - 1; rb->lcd_clear_display(); rb->lcd_puts(0,0,"Events (play : menu)"); while (selected >= (lines + start)) start++; while (selected < start) start--; i = start; while ( (i < memos_in_shown_memory) && (k < lines) ) { if (memos[pointer_array[i]].type == 2) rb->snprintf(temp, sizeof temp, "%s (%d yrs)", memos[pointer_array[i]].message, shown->year - memos[pointer_array[i]].year); else rb->snprintf(temp, sizeof temp, "%s", memos[pointer_array[i]].message); m = 0; if (i == selected) { pos = k + 1; rb->lcd_puts_scroll(m,j++,temp); } else rb->lcd_puts(m,j++,temp); k++; i++; } rb->lcd_invertrect(0, (pos) * h, LCD_WIDTH, h);}static void update_memos_shown(struct shown *shown){ int i; memos_in_shown_memory = 0; start = 0; for (i = 0; i < memos_in_memory; i++) if ( (memos[i].day == shown->mday) || ( (memos[i].type < 1) && (memos[i].wday == shown->wday) ) ) pointer_array[memos_in_shown_memory++] = i;}static bool any_events(struct shown *shown, bool force){ int lines_displayed = 0; bool exit=false; update_memos_shown(shown); if (memos_in_shown_memory > 0) show_lines(lines_displayed,shown); else if (force) return edit_memo(lines_displayed, shown); else return false; rb->lcd_update(); while (!exit) { switch (rb->button_get(true)) { case BUTTON_DOWN: if (memos_in_shown_memory > 0) { lines_displayed++; if (lines_displayed >= memos_in_shown_memory) lines_displayed = memos_in_shown_memory - 1; show_lines(lines_displayed,shown); rb->lcd_update(); } break; case BUTTON_UP: if (memos_in_shown_memory > 0) { lines_displayed--; if (lines_displayed < 0) lines_displayed = 0; show_lines(lines_displayed,shown); rb->lcd_update(); } break; case BUTTON_PLAY: return edit_memo(lines_displayed, shown); case BUTTON_OFF: return false; case SYS_USB_CONNECTED: return true; } } return false;}static void next_month(struct shown *shown, int step){ shown->mon++; if (shown->mon > 12) { shown->mon=1; shown->year++; leap_year = is_leap_year(shown->year); } else if (step > 0) shown->mday = shown->mday - days_in_month[leap_year][shown->mon-1]; else if (shown->mday > days_in_month[leap_year][shown->mon]) shown->mday = days_in_month[leap_year][shown->mon]; shown->firstday = shown->lastday; load_memo(shown); draw_calendar(shown);}static void prev_month(struct shown *shown, int step){ shown->mon--; if (shown->mon < 1) { shown->mon = 12; shown->year--; leap_year = is_leap_year(shown->year); } if (step > 0) shown->mday = shown->mday + days_in_month[leap_year][shown->mon]; else if (shown->mday > days_in_month[leap_year][shown->mon]) shown->mday = days_in_month[leap_year][shown->mon]; shown->firstday += 7 - (days_in_month[leap_year][shown->mon] % 7); load_memo(shown); draw_calendar(shown);}static void next_day(struct shown *shown, int step){ shown->mday += step; if (shown->mday > days_in_month[leap_year][shown->mon]) next_month(shown, step); else draw_calendar(shown);}static void prev_day(struct shown *shown, int step){ shown->mday -= step; if (shown->mday < 1) prev_month(shown, step); else draw_calendar(shown);}enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ struct today today; struct shown shown; bool exit = false; TEST_PLUGIN_API(api); (void)(parameter); rb = api; calendar_init(&today, &shown); load_memo(&shown); any_events(&shown, false); draw_calendar(&shown); while (!exit) { switch (rb->button_get(true)) { case BUTTON_OFF: return false; case BUTTON_ON | BUTTON_DOWN: case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: next_month(&shown, 0); break; case BUTTON_ON | BUTTON_UP: case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: prev_month(&shown, 0); break; case BUTTON_DOWN: case BUTTON_DOWN | BUTTON_REPEAT: next_day(&shown, 7); break; case BUTTON_UP: case BUTTON_UP | BUTTON_REPEAT: prev_day(&shown, 7); break; case BUTTON_LEFT: case BUTTON_LEFT | BUTTON_REPEAT: prev_day(&shown, 1); break; case BUTTON_RIGHT: case BUTTON_RIGHT | BUTTON_REPEAT: next_day(&shown, 1); break; case BUTTON_PLAY: if (any_events(&shown, true)) rb->usb_screen(); draw_calendar(&shown); break; case SYS_USB_CONNECTED: rb->usb_screen(); draw_calendar(&shown); break; } } return false;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -