summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2008-10-25 16:34:15 +0000
committerNils Wallménius <nils@rockbox.org>2008-10-25 16:34:15 +0000
commit50a8017139981511ee0b0a0e3529a75560c511bd (patch)
treedc8443c48796392534e0a329615a31f10a37445c
parent3ae419d9557e7db0312407bcda29237d31e6b4be (diff)
downloadrockbox-50a8017139981511ee0b0a0e3529a75560c511bd.tar.gz
rockbox-50a8017139981511ee0b0a0e3529a75560c511bd.zip
Accept FS#9224 by Teruaki Kawashima, adding support for all RTC equipped targets and some other enhancements to the calendar plugin.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18875 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/SOURCES2
-rw-r--r--apps/plugins/calendar.c481
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
86wormlet.c 86wormlet.c
87 87
88#if CONFIG_RTC 88#if CONFIG_RTC
89#if CONFIG_KEYPAD == RECORDER_PAD /* Recorder models only for now */
90calendar.c 89calendar.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
28PLUGIN_HEADER 28PLUGIN_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
30static const struct plugin_api* rb; 186static const struct plugin_api* rb;
31 187
32static bool leap_year; 188static 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
195static const char *dayname_long[7] = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
196static const char *dayname_short[7] = {"M","T","W","T","F","S","S"};
197
39struct today { 198struct 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
104static int space = LCD_WIDTH / 7;
105static void draw_headers(void) 263static 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];
121static void draw_calendar(struct shown *shown) 290static 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
578static 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
404static bool edit_memo(int change, struct shown *shown) 586static 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
482static int start = 0; 651static 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
484static void show_lines(int selected, struct shown *shown) 669static 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
524static void update_memos_shown(struct shown *shown) 708static 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
546static bool any_events(struct shown *shown, bool force) 729static 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;