diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/SOURCES | 2 | ||||
-rw-r--r-- | apps/plugins/calendar.c | 481 |
2 files changed, 310 insertions, 173 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index b1b397d062..fe00ebc948 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES | |||
@@ -86,9 +86,7 @@ vu_meter.c | |||
86 | wormlet.c | 86 | wormlet.c |
87 | 87 | ||
88 | #if CONFIG_RTC | 88 | #if CONFIG_RTC |
89 | #if CONFIG_KEYPAD == RECORDER_PAD /* Recorder models only for now */ | ||
90 | calendar.c | 89 | calendar.c |
91 | #endif | ||
92 | #endif /* CONFIG_RTC */ | 90 | #endif /* CONFIG_RTC */ |
93 | 91 | ||
94 | #if (MEMORYSIZE <= 8) && !defined(SIMULATOR) /* loaders, only needed for Archos */ | 92 | #if (MEMORYSIZE <= 8) && !defined(SIMULATOR) /* loaders, only needed for Archos */ |
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index f7e4ffe786..b54cd98199 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c | |||
@@ -27,6 +27,162 @@ | |||
27 | 27 | ||
28 | PLUGIN_HEADER | 28 | PLUGIN_HEADER |
29 | 29 | ||
30 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
31 | #define CALENDAR_QUIT BUTTON_OFF | ||
32 | #define CALENDAR_SELECT BUTTON_PLAY | ||
33 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
34 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
35 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
36 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
37 | #define CALENDAR_NEXT_MONTH (BUTTON_ON|BUTTON_DOWN) | ||
38 | #define CALENDAR_PREV_MONTH (BUTTON_ON|BUTTON_UP) | ||
39 | |||
40 | #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD | ||
41 | #define CALENDAR_QUIT BUTTON_OFF | ||
42 | #define CALENDAR_SELECT BUTTON_SELECT | ||
43 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
44 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
45 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
46 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
47 | #define CALENDAR_NEXT_MONTH (BUTTON_ON|BUTTON_DOWN) | ||
48 | #define CALENDAR_PREV_MONTH (BUTTON_ON|BUTTON_UP) | ||
49 | |||
50 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
51 | #define CALENDAR_QUIT BUTTON_OFF | ||
52 | #define CALENDAR_SELECT (BUTTON_MENU|BUTTON_REL) | ||
53 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
54 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
55 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
56 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
57 | #define CALENDAR_NEXT_MONTH (BUTTON_MENU|BUTTON_DOWN) | ||
58 | #define CALENDAR_PREV_MONTH (BUTTON_MENU|BUTTON_UP) | ||
59 | |||
60 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
61 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
62 | #define CALENDAR_QUIT BUTTON_OFF | ||
63 | #define CALENDAR_SELECT BUTTON_SELECT | ||
64 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
65 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
66 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
67 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
68 | #define CALENDAR_NEXT_MONTH BUTTON_MODE | ||
69 | #define CALENDAR_PREV_MONTH BUTTON_REC | ||
70 | |||
71 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
72 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | ||
73 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | ||
74 | #define CALENDAR_QUIT (BUTTON_SELECT|BUTTON_MENU) | ||
75 | #define CALENDAR_SELECT (BUTTON_SELECT|BUTTON_PLAY) | ||
76 | #define CALENDAR_NEXT_WEEK BUTTON_SCROLL_FWD | ||
77 | #define CALENDAR_PREV_WEEK BUTTON_SCROLL_BACK | ||
78 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
79 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
80 | #define CALENDAR_NEXT_MONTH BUTTON_PLAY | ||
81 | #define CALENDAR_PREV_MONTH BUTTON_MENU | ||
82 | |||
83 | #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) | ||
84 | #define CALENDAR_QUIT BUTTON_POWER | ||
85 | #define CALENDAR_SELECT BUTTON_SELECT | ||
86 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
87 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
88 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
89 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
90 | #define CALENDAR_NEXT_MONTH (BUTTON_PLAY|BUTTON_DOWN) | ||
91 | #define CALENDAR_PREV_MONTH (BUTTON_PLAY|BUTTON_UP) | ||
92 | |||
93 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | ||
94 | #define CALENDAR_QUIT BUTTON_POWER | ||
95 | #define CALENDAR_SELECT BUTTON_SELECT | ||
96 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
97 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
98 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
99 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
100 | #define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN | ||
101 | #define CALENDAR_PREV_MONTH BUTTON_VOL_UP | ||
102 | |||
103 | #elif CONFIG_KEYPAD == SANSA_E200_PAD | ||
104 | #define CALENDAR_QUIT BUTTON_POWER | ||
105 | #define CALENDAR_SELECT BUTTON_SELECT | ||
106 | #define CALENDAR_NEXT_WEEK BUTTON_SCROLL_FWD | ||
107 | #define CALENDAR_PREV_WEEK BUTTON_SCROLL_BACK | ||
108 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
109 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
110 | #define CALENDAR_NEXT_MONTH BUTTON_DOWN | ||
111 | #define CALENDAR_PREV_MONTH BUTTON_UP | ||
112 | |||
113 | #elif CONFIG_KEYPAD == SANSA_C200_PAD | ||
114 | #define CALENDAR_QUIT BUTTON_POWER | ||
115 | #define CALENDAR_SELECT BUTTON_SELECT | ||
116 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
117 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
118 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
119 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
120 | #define CALENDAR_NEXT_MONTH BUTTON_VOL_UP | ||
121 | #define CALENDAR_PREV_MONTH BUTTON_VOL_DOWN | ||
122 | |||
123 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
124 | #define CALENDAR_QUIT BUTTON_POWER | ||
125 | #define CALENDAR_SELECT BUTTON_PLAY | ||
126 | #define CALENDAR_NEXT_WEEK BUTTON_SCROLL_DOWN | ||
127 | #define CALENDAR_PREV_WEEK BUTTON_SCROLL_UP | ||
128 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
129 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
130 | #define CALENDAR_NEXT_MONTH BUTTON_FF | ||
131 | #define CALENDAR_PREV_MONTH BUTTON_REW | ||
132 | |||
133 | #elif CONFIG_KEYPAD == GIGABEAT_S_PAD | ||
134 | #define CALENDAR_QUIT BUTTON_BACK | ||
135 | #define CALENDAR_SELECT BUTTON_SELECT | ||
136 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
137 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
138 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
139 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
140 | #define CALENDAR_NEXT_MONTH BUTTON_NEXT | ||
141 | #define CALENDAR_PREV_MONTH BUTTON_PREV | ||
142 | |||
143 | #elif CONFIG_KEYPAD == MROBE100_PAD | ||
144 | #define CALENDAR_QUIT BUTTON_POWER | ||
145 | #define CALENDAR_SELECT BUTTON_SELECT | ||
146 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
147 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
148 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
149 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
150 | #define CALENDAR_NEXT_MONTH (BUTTON_MENU|BUTTON_DOWN) | ||
151 | #define CALENDAR_PREV_MONTH (BUTTON_MENU|BUTTON_UP) | ||
152 | |||
153 | #elif CONFIG_KEYPAD == IAUDIO_M3_PAD | ||
154 | #define CALENDAR_QUIT BUTTON_RC_REC | ||
155 | #define CALENDAR_SELECT BUTTON_RC_PLAY | ||
156 | #define CALENDAR_NEXT_WEEK BUTTON_RC_VOL_DOWN | ||
157 | #define CALENDAR_PREV_WEEK BUTTON_RC_VOL_UP | ||
158 | #define CALENDAR_NEXT_DAY BUTTON_RC_FF | ||
159 | #define CALENDAR_PREV_DAY BUTTON_RC_REW | ||
160 | #define CALENDAR_NEXT_MONTH BUTTON_RC_MODE | ||
161 | #define CALENDAR_PREV_MONTH BUTTON_RC_MENU | ||
162 | |||
163 | #elif (CONFIG_KEYPAD == COWOND2_PAD) | ||
164 | #define CALENDAR_QUIT BUTTON_POWER | ||
165 | #define CALENDAR_SELECT BUTTON_CENTER | ||
166 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
167 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
168 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
169 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
170 | #define CALENDAR_NEXT_MONTH BUTTON_BOTTOMRIGHT | ||
171 | #define CALENDAR_PREV_MONTH BUTTON_BOTTOMLEFT | ||
172 | |||
173 | #else | ||
174 | #error "No keypad setting." | ||
175 | #endif | ||
176 | |||
177 | #define X_OFFSET ((LCD_WIDTH%7)/2) | ||
178 | #if LCD_HEIGHT <= 80 | ||
179 | #define Y_OFFSET 1 | ||
180 | #else | ||
181 | #define Y_OFFSET 4 | ||
182 | #endif | ||
183 | #define CELL_WIDTH (LCD_WIDTH / 7) | ||
184 | #define CELL_HEIGHT (LCD_HEIGHT / 7) | ||
185 | |||
30 | static const struct plugin_api* rb; | 186 | static const struct plugin_api* rb; |
31 | 187 | ||
32 | static bool leap_year; | 188 | static bool leap_year; |
@@ -36,6 +192,9 @@ static const int days_in_month[2][13] = { | |||
36 | {31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, | 192 | {31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, |
37 | }; | 193 | }; |
38 | 194 | ||
195 | static const char *dayname_long[7] = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}; | ||
196 | static const char *dayname_short[7] = {"M","T","W","T","F","S","S"}; | ||
197 | |||
39 | struct today { | 198 | struct today { |
40 | int mday; /* day of the month */ | 199 | int mday; /* day of the month */ |
41 | int mon; /* month */ | 200 | int mon; /* month */ |
@@ -101,17 +260,27 @@ static void calendar_init(struct today *today, struct shown *shown) | |||
101 | leap_year = is_leap_year(shown->year); | 260 | leap_year = is_leap_year(shown->year); |
102 | } | 261 | } |
103 | 262 | ||
104 | static int space = LCD_WIDTH / 7; | ||
105 | static void draw_headers(void) | 263 | static void draw_headers(void) |
106 | { | 264 | { |
107 | int i,w,h; | 265 | int i,w,h; |
108 | const char *dayname[7] = {"M","T","W","T","F","S","S"}; | 266 | int x = X_OFFSET; |
109 | int ws = 2; | 267 | const char **dayname = (const char**)&dayname_long; |
268 | |||
269 | for (i = 0; i < 7; i++) | ||
270 | { | ||
271 | rb->lcd_getstringsize(dayname[i],&w,&h); | ||
272 | if (w > CELL_WIDTH) | ||
273 | { | ||
274 | dayname = (const char**)&dayname_short; | ||
275 | break; | ||
276 | } | ||
277 | } | ||
278 | |||
110 | rb->lcd_getstringsize("A",&w,&h); | 279 | rb->lcd_getstringsize("A",&w,&h); |
111 | for (i = 0; i < 7; i++) | 280 | for (i = 0; i < 7; i++) |
112 | { | 281 | { |
113 | rb->lcd_putsxy(ws, 0 , dayname[i]); | 282 | rb->lcd_putsxy(x, 0 , dayname[i]); |
114 | ws += space; | 283 | x += CELL_WIDTH; |
115 | } | 284 | } |
116 | rb->lcd_hline(0, LCD_WIDTH-1 ,h); | 285 | rb->lcd_hline(0, LCD_WIDTH-1 ,h); |
117 | } | 286 | } |
@@ -121,7 +290,7 @@ static bool wday_has_memo[7]; | |||
121 | static void draw_calendar(struct shown *shown) | 290 | static void draw_calendar(struct shown *shown) |
122 | { | 291 | { |
123 | int w,h; | 292 | int w,h; |
124 | int ws,row,pos,days_per_month,j; | 293 | int x,y,pos,days_per_month,j; |
125 | char buffer[9]; | 294 | char buffer[9]; |
126 | const char *monthname[] = { | 295 | const char *monthname[] = { |
127 | "Jan", | 296 | "Jan", |
@@ -137,42 +306,49 @@ static void draw_calendar(struct shown *shown) | |||
137 | "Nov", | 306 | "Nov", |
138 | "Dec" | 307 | "Dec" |
139 | }; | 308 | }; |
309 | if(use_system_font) | ||
310 | rb->lcd_setfont(FONT_SYSFIXED); | ||
140 | rb->lcd_getstringsize("A",&w,&h); | 311 | rb->lcd_getstringsize("A",&w,&h); |
141 | rb->lcd_clear_display(); | 312 | rb->lcd_clear_display(); |
142 | draw_headers(); | 313 | draw_headers(); |
143 | if (shown->firstday > 6) | 314 | if (shown->firstday > 6) |
144 | shown->firstday -= 7; | 315 | shown->firstday -= 7; |
145 | row = 1; | ||
146 | pos = shown->firstday; | 316 | pos = shown->firstday; |
147 | days_per_month = days_in_month[leap_year][shown->mon]; | 317 | days_per_month = days_in_month[leap_year][shown->mon]; |
148 | ws = 2 + (pos * space); | 318 | x = X_OFFSET + (pos * CELL_WIDTH); |
149 | for (j = 0; j < days_per_month;) | 319 | y = Y_OFFSET + h; |
320 | for (j = 1; j <= days_per_month; j++) | ||
150 | { | 321 | { |
151 | if ( (day_has_memo[++j]) || (wday_has_memo[pos]) ) | 322 | if ( (day_has_memo[j]) || (wday_has_memo[pos]) ) |
152 | rb->snprintf(buffer,4,"%02d.", j); | 323 | rb->snprintf(buffer,4,"%02d.", j); |
153 | else | 324 | else |
154 | rb->snprintf(buffer,4,"%02d", j); | 325 | rb->snprintf(buffer,4,"%02d", j); |
155 | rb->lcd_putsxy(ws, (row * h) + 5 ,buffer); | ||
156 | if (shown->mday == j) | 326 | if (shown->mday == j) |
157 | { | 327 | { |
158 | rb->lcd_set_drawmode(DRMODE_COMPLEMENT); | ||
159 | rb->lcd_fillrect(ws, row*h+5, space, h); | ||
160 | rb->lcd_set_drawmode(DRMODE_SOLID); | 328 | rb->lcd_set_drawmode(DRMODE_SOLID); |
329 | rb->lcd_fillrect(x, y - 1, CELL_WIDTH - 1, CELL_HEIGHT); | ||
330 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
161 | shown->wday = pos; | 331 | shown->wday = pos; |
162 | } | 332 | } |
163 | ws += space; | 333 | else |
334 | { | ||
335 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
336 | } | ||
337 | rb->lcd_putsxy(x, y, buffer); | ||
338 | x += CELL_WIDTH; | ||
164 | pos++; | 339 | pos++; |
165 | if (pos >= 7) | 340 | if (pos >= 7) |
166 | { | 341 | { |
167 | row++; | ||
168 | pos = 0; | 342 | pos = 0; |
169 | ws = 2; | 343 | x = X_OFFSET; |
344 | y += CELL_HEIGHT; | ||
170 | } | 345 | } |
171 | } | 346 | } |
172 | rb->lcd_vline(60,LCD_HEIGHT-h-3,LCD_HEIGHT-1); | 347 | rb->lcd_set_drawmode(DRMODE_SOLID); |
173 | rb->lcd_hline(60,LCD_WIDTH-1,LCD_HEIGHT-h-3); | 348 | rb->lcd_vline(LCD_WIDTH-w*8-10,LCD_HEIGHT-h-3,LCD_HEIGHT-1); |
349 | rb->lcd_hline(LCD_WIDTH-w*8-10,LCD_WIDTH-1,LCD_HEIGHT-h-3); | ||
174 | rb->snprintf(buffer,9,"%s %04d",monthname[shown->mon-1],shown->year); | 350 | rb->snprintf(buffer,9,"%s %04d",monthname[shown->mon-1],shown->year); |
175 | rb->lcd_putsxy(62,(LCD_HEIGHT-h-1),buffer); | 351 | rb->lcd_putsxy(LCD_WIDTH-w*8-8,LCD_HEIGHT-h-1,buffer); |
176 | shown->lastday = pos; | 352 | shown->lastday = pos; |
177 | rb->lcd_update(); | 353 | rb->lcd_update(); |
178 | } | 354 | } |
@@ -394,138 +570,145 @@ static void add_memo(struct shown *shown, int type) | |||
394 | if(use_system_font) | 570 | if(use_system_font) |
395 | rb->lcd_setfont(FONT_SYSFIXED); | 571 | rb->lcd_setfont(FONT_SYSFIXED); |
396 | if (saved) | 572 | if (saved) |
397 | rb->lcd_puts(0,0,"Event added"); | 573 | rb->splash(HZ/2,"Event added"); |
398 | else | 574 | else |
399 | rb->lcd_puts(0,0,"Event not added"); | 575 | rb->splash(HZ/2,"Event not added"); |
400 | rb->lcd_update(); | 576 | } |
401 | rb->sleep(HZ/2); | 577 | |
578 | static int edit_menu_cb(int action, const struct menu_item_ex *this_item) | ||
579 | { | ||
580 | (void) this_item; | ||
581 | if (action == ACTION_REQUEST_MENUITEM && memos_in_shown_memory <= 0) | ||
582 | return ACTION_EXIT_MENUITEM; | ||
583 | return action; | ||
402 | } | 584 | } |
403 | 585 | ||
404 | static bool edit_memo(int change, struct shown *shown) | 586 | static bool edit_memo(int change, struct shown *shown) |
405 | { | 587 | { |
406 | bool exit = false; | 588 | bool exit = false; |
407 | int button; | 589 | int selected = 0; |
408 | 590 | ||
591 | MENUITEM_RETURNVALUE(edit_menu_remove, "Remove", 0, | ||
592 | edit_menu_cb, Icon_NOICON); | ||
593 | MENUITEM_RETURNVALUE(edit_menu_edit, "Edit", 1, | ||
594 | edit_menu_cb, Icon_NOICON); | ||
595 | MENUITEM_RETURNVALUE(edit_menu_weekly, "New Weekly", 2, | ||
596 | NULL, Icon_NOICON); | ||
597 | MENUITEM_RETURNVALUE(edit_menu_monthly, "New Monthly", 3, | ||
598 | NULL, Icon_NOICON); | ||
599 | MENUITEM_RETURNVALUE(edit_menu_yearly, "New Yearly", 4, | ||
600 | NULL, Icon_NOICON); | ||
601 | MENUITEM_RETURNVALUE(edit_menu_oneoff, "New One off", 5, | ||
602 | NULL, Icon_NOICON); | ||
603 | |||
604 | MAKE_MENU(edit_menu, "Edit menu", | ||
605 | NULL, Icon_NOICON, | ||
606 | &edit_menu_remove, &edit_menu_edit, | ||
607 | &edit_menu_weekly, &edit_menu_monthly, | ||
608 | &edit_menu_yearly, &edit_menu_oneoff); | ||
609 | |||
409 | while (!exit) | 610 | while (!exit) |
410 | { | 611 | { |
411 | rb->lcd_clear_display(); | 612 | switch (rb->do_menu(&edit_menu, &selected, NULL, false)) |
412 | if (memos_in_shown_memory > 0) | ||
413 | { | 613 | { |
414 | rb->lcd_puts(0,0,"Remove : Up"); | 614 | case 0: /* remove */ |
415 | rb->lcd_puts(0,1,"Edit : Down"); | 615 | save_memo(pointer_array[change],false,shown); |
416 | rb->lcd_puts(0,2,"New :"); | 616 | return false; |
417 | rb->lcd_puts(2,3,"weekly : Left"); | 617 | |
418 | rb->lcd_puts(2,4,"monthly : Play"); | 618 | case 1: /* edit */ |
419 | rb->lcd_puts(2,5,"annually : Right"); | 619 | if(rb->kbd_input(memos[pointer_array[change]].message, |
420 | rb->lcd_puts(2,6,"one off : On"); | 620 | sizeof memos[pointer_array[change]].message) != -1) |
421 | } | 621 | save_memo(pointer_array[change],true,shown); |
422 | else | ||
423 | { | ||
424 | rb->lcd_puts(0,0,"New :"); | ||
425 | rb->lcd_puts(2,1,"weekly : Left"); | ||
426 | rb->lcd_puts(2,2,"monthly : Play"); | ||
427 | rb->lcd_puts(2,3,"annually : Right"); | ||
428 | rb->lcd_puts(2,4,"one off : On"); | ||
429 | } | ||
430 | rb->lcd_update(); | ||
431 | button = rb->button_get(true); | ||
432 | switch (button) | ||
433 | { | ||
434 | case BUTTON_OFF: | ||
435 | return false; | 622 | return false; |
436 | 623 | ||
437 | case BUTTON_LEFT: | 624 | case 2: /* weekly */ |
438 | add_memo(shown,0); | 625 | add_memo(shown,0); |
439 | return false; | 626 | return false; |
440 | 627 | ||
441 | case BUTTON_PLAY: | 628 | case 3: /* monthly */ |
442 | add_memo(shown,1); | 629 | add_memo(shown,1); |
443 | return false; | 630 | return false; |
444 | 631 | ||
445 | case BUTTON_RIGHT: | 632 | case 4: /* yearly */ |
446 | add_memo(shown,2); | 633 | add_memo(shown,2); |
447 | return false; | 634 | return false; |
448 | 635 | ||
449 | case BUTTON_ON: | 636 | case 5: /* one off */ |
450 | add_memo(shown,3); | 637 | add_memo(shown,3); |
451 | return false; | 638 | return false; |
452 | 639 | ||
453 | case BUTTON_DOWN: | 640 | case GO_TO_PREVIOUS: |
454 | if (memos_in_shown_memory > 0) | 641 | return false; |
455 | { | ||
456 | if(rb->kbd_input(memos[pointer_array[change]].message, | ||
457 | sizeof memos[pointer_array[change]].message) != -1) | ||
458 | save_memo(pointer_array[change],true,shown); | ||
459 | if(use_system_font) | ||
460 | rb->lcd_setfont(FONT_SYSFIXED); | ||
461 | exit = true; | ||
462 | } | ||
463 | break; | ||
464 | |||
465 | case BUTTON_UP: | ||
466 | if (memos_in_shown_memory > 0) | ||
467 | { | ||
468 | save_memo(pointer_array[change],false,shown); | ||
469 | exit = true; | ||
470 | } | ||
471 | break; | ||
472 | 642 | ||
473 | default: | 643 | case MENU_ATTACHED_USB: |
474 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) | 644 | been_in_usb_mode = true; |
475 | been_in_usb_mode = true; | ||
476 | break; | 645 | break; |
477 | } | 646 | } |
478 | } | 647 | } |
479 | return false; | 648 | return false; |
480 | } | 649 | } |
481 | 650 | ||
482 | static int start = 0; | 651 | static char * get_event_text(int selected, void *data, |
652 | char *buffer, size_t buffer_len) | ||
653 | { | ||
654 | struct shown *shown = (struct shown *) data; | ||
655 | if (selected < 0 || memos_in_shown_memory <= selected) | ||
656 | { | ||
657 | return NULL; | ||
658 | } | ||
659 | if (memos[pointer_array[selected]].type == 2) | ||
660 | rb->snprintf(buffer, buffer_len, "%s (%d yrs)", | ||
661 | memos[pointer_array[selected]].message, | ||
662 | shown->year - memos[pointer_array[selected]].year); | ||
663 | else | ||
664 | rb->snprintf(buffer, buffer_len, "%s", | ||
665 | memos[pointer_array[selected]].message); | ||
666 | return buffer; | ||
667 | } | ||
483 | 668 | ||
484 | static void show_lines(int selected, struct shown *shown) | 669 | static bool view_events(int selected, struct shown *shown) |
485 | { | 670 | { |
486 | int lines,j = 1,w,h,i,k = 0, pos = 1,m = 0; | 671 | struct gui_synclist gui_memos; |
487 | char temp[MAX_CHAR_MEMO_LEN + 12]; | 672 | bool exit=false; |
488 | rb->lcd_getstringsize("A",&w,&h); | 673 | int button; |
489 | lines = (LCD_HEIGHT / h) - 1; | 674 | |
490 | 675 | rb->gui_synclist_init(&gui_memos, &get_event_text, shown, false, 1, NULL); | |
491 | rb->lcd_clear_display(); | 676 | rb->gui_synclist_set_title(&gui_memos, "Events (play : menu)", NOICON); |
492 | rb->lcd_puts(0,0,"Events (play : menu)"); | 677 | rb->gui_synclist_set_nb_items(&gui_memos, memos_in_shown_memory); |
493 | 678 | rb->gui_synclist_select_item(&gui_memos, selected); | |
494 | while (selected >= (lines + start)) | 679 | rb->gui_synclist_draw(&gui_memos); |
495 | start++; | 680 | |
496 | while (selected < start) | 681 | while (!exit) |
497 | start--; | ||
498 | i = start; | ||
499 | while ( (i < memos_in_shown_memory) && (k < lines) ) | ||
500 | { | 682 | { |
501 | if (memos[pointer_array[i]].type == 2) | 683 | rb->gui_syncstatusbar_draw(rb->statusbars, true); |
502 | rb->snprintf(temp, sizeof temp, "%s (%d yrs)", | 684 | button = rb->get_action(CONTEXT_LIST,TIMEOUT_BLOCK); |
503 | memos[pointer_array[i]].message, | 685 | rb->gui_synclist_do_button(&gui_memos,&button,LIST_WRAP_UNLESS_HELD); |
504 | shown->year - memos[pointer_array[i]].year); | 686 | |
505 | else | 687 | switch (button) |
506 | rb->snprintf(temp, sizeof temp, "%s", | ||
507 | memos[pointer_array[i]].message); | ||
508 | m = 0; | ||
509 | if (i == selected) | ||
510 | { | 688 | { |
511 | pos = k + 1; | 689 | case ACTION_STD_OK: |
512 | rb->lcd_puts_scroll(m,j++,temp); | 690 | selected = rb->gui_synclist_get_sel_pos(&gui_memos); |
691 | return edit_memo(selected, shown); | ||
692 | break; | ||
693 | |||
694 | case ACTION_STD_CANCEL: | ||
695 | return false; | ||
696 | break; | ||
697 | |||
698 | default: | ||
699 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
700 | been_in_usb_mode = true; | ||
701 | break; | ||
513 | } | 702 | } |
514 | else | ||
515 | rb->lcd_puts(m,j++,temp); | ||
516 | k++; | ||
517 | i++; | ||
518 | } | 703 | } |
519 | rb->lcd_set_drawmode(DRMODE_COMPLEMENT); | 704 | |
520 | rb->lcd_fillrect(0, (pos) * h, LCD_WIDTH, h); | 705 | return false; |
521 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
522 | } | 706 | } |
523 | 707 | ||
524 | static void update_memos_shown(struct shown *shown) | 708 | static void update_memos_shown(struct shown *shown) |
525 | { | 709 | { |
526 | int i; | 710 | int i; |
527 | memos_in_shown_memory = 0; | 711 | memos_in_shown_memory = 0; |
528 | start = 0; | ||
529 | for (i = 0; i < memos_in_memory; i++) | 712 | for (i = 0; i < memos_in_memory; i++) |
530 | if ( | 713 | if ( |
531 | ( | 714 | ( |
@@ -545,59 +728,15 @@ static void update_memos_shown(struct shown *shown) | |||
545 | 728 | ||
546 | static bool any_events(struct shown *shown, bool force) | 729 | static bool any_events(struct shown *shown, bool force) |
547 | { | 730 | { |
548 | int lines_displayed = 0; | ||
549 | bool exit=false; | ||
550 | int button; | ||
551 | |||
552 | update_memos_shown(shown); | 731 | update_memos_shown(shown); |
732 | |||
553 | if (memos_in_shown_memory > 0) | 733 | if (memos_in_shown_memory > 0) |
554 | show_lines(lines_displayed,shown); | 734 | return view_events(0, shown); |
555 | else if (force) | 735 | else if (force) |
556 | return edit_memo(lines_displayed, shown); | 736 | return edit_memo(0, shown); |
557 | else | 737 | else |
558 | return false; | 738 | return false; |
559 | rb->lcd_update(); | ||
560 | while (!exit) | ||
561 | { | ||
562 | button = rb->button_get(true); | ||
563 | switch (button) | ||
564 | { | ||
565 | case BUTTON_DOWN: | ||
566 | if (memos_in_shown_memory > 0) | ||
567 | { | ||
568 | lines_displayed++; | ||
569 | if (lines_displayed >= memos_in_shown_memory) | ||
570 | lines_displayed = memos_in_shown_memory - 1; | ||
571 | show_lines(lines_displayed,shown); | ||
572 | rb->lcd_update(); | ||
573 | } | ||
574 | break; | ||
575 | |||
576 | case BUTTON_UP: | ||
577 | if (memos_in_shown_memory > 0) | ||
578 | { | ||
579 | lines_displayed--; | ||
580 | if (lines_displayed < 0) | ||
581 | lines_displayed = 0; | ||
582 | show_lines(lines_displayed,shown); | ||
583 | rb->lcd_update(); | ||
584 | } | ||
585 | break; | ||
586 | |||
587 | case BUTTON_PLAY: | ||
588 | return edit_memo(lines_displayed, shown); | ||
589 | 739 | ||
590 | case BUTTON_OFF: | ||
591 | return false; | ||
592 | |||
593 | default: | ||
594 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
595 | been_in_usb_mode = true; | ||
596 | show_lines(lines_displayed,shown); | ||
597 | rb->lcd_update(); | ||
598 | break; | ||
599 | } | ||
600 | } | ||
601 | return false; | 740 | return false; |
602 | } | 741 | } |
603 | 742 | ||
@@ -675,40 +814,40 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame | |||
675 | button = rb->button_get(true); | 814 | button = rb->button_get(true); |
676 | switch (button) | 815 | switch (button) |
677 | { | 816 | { |
678 | case BUTTON_OFF: | 817 | case CALENDAR_QUIT: |
679 | return false; | 818 | return PLUGIN_OK; |
680 | 819 | ||
681 | case BUTTON_ON | BUTTON_DOWN: | 820 | case CALENDAR_NEXT_MONTH: |
682 | case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: | 821 | case CALENDAR_NEXT_MONTH | BUTTON_REPEAT: |
683 | next_month(&shown, 0); | 822 | next_month(&shown, 0); |
684 | break; | 823 | break; |
685 | 824 | ||
686 | case BUTTON_ON | BUTTON_UP: | 825 | case CALENDAR_PREV_MONTH: |
687 | case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: | 826 | case CALENDAR_PREV_MONTH | BUTTON_REPEAT: |
688 | prev_month(&shown, 0); | 827 | prev_month(&shown, 0); |
689 | break; | 828 | break; |
690 | 829 | ||
691 | case BUTTON_DOWN: | 830 | case CALENDAR_NEXT_WEEK: |
692 | case BUTTON_DOWN | BUTTON_REPEAT: | 831 | case CALENDAR_NEXT_WEEK | BUTTON_REPEAT: |
693 | next_day(&shown, 7); | 832 | next_day(&shown, 7); |
694 | break; | 833 | break; |
695 | 834 | ||
696 | case BUTTON_UP: | 835 | case CALENDAR_PREV_WEEK: |
697 | case BUTTON_UP | BUTTON_REPEAT: | 836 | case CALENDAR_PREV_WEEK | BUTTON_REPEAT: |
698 | prev_day(&shown, 7); | 837 | prev_day(&shown, 7); |
699 | break; | 838 | break; |
700 | 839 | ||
701 | case BUTTON_LEFT: | 840 | case CALENDAR_PREV_DAY: |
702 | case BUTTON_LEFT | BUTTON_REPEAT: | 841 | case CALENDAR_PREV_DAY | BUTTON_REPEAT: |
703 | prev_day(&shown, 1); | 842 | prev_day(&shown, 1); |
704 | break; | 843 | break; |
705 | 844 | ||
706 | case BUTTON_RIGHT: | 845 | case CALENDAR_NEXT_DAY: |
707 | case BUTTON_RIGHT | BUTTON_REPEAT: | 846 | case CALENDAR_NEXT_DAY | BUTTON_REPEAT: |
708 | next_day(&shown, 1); | 847 | next_day(&shown, 1); |
709 | break; | 848 | break; |
710 | 849 | ||
711 | case BUTTON_PLAY: | 850 | case CALENDAR_SELECT: |
712 | any_events(&shown, true); | 851 | any_events(&shown, true); |
713 | draw_calendar(&shown); | 852 | draw_calendar(&shown); |
714 | break; | 853 | break; |