? browse_id3.patch.htm ? color_picker.patch ? dirwalker.patch ? eq.patch ? h140 ? h300 ? h300-sim ? ipoo ? random_folder.diff ? random_insert_dirs.patch ? remote_bookmark.patch ? remote_id3_browse.patch ? remote_patches.diff ? screens ? scrobbler.patch ? apps/scrobbler.c ? apps/scrobbler.h ? tools/codepages ? tools/ipod_fw ? tools/mkboot ? tools/rdf2binary Index: apps/bookmark.c =================================================================== RCS file: /cvsroot/rockbox/apps/bookmark.c,v retrieving revision 1.47 diff -u -r1.47 bookmark.c --- apps/bookmark.c 21 Jan 2006 23:43:56 -0000 1.47 +++ apps/bookmark.c 2 Jul 2006 08:36:23 -0000 @@ -401,6 +401,7 @@ { int key; int fd; + int i; bool done = false; if(global_settings.autoloadbookmark == BOOKMARK_NO) @@ -427,19 +428,25 @@ else { /* Prompting user to confirm bookmark load */ - lcd_clear_display(); + FOR_NB_SCREENS(i) + screens[i].clear_display(); + gui_syncstatusbar_draw(&statusbars, false); + + FOR_NB_SCREENS(i) + { #ifdef HAVE_LCD_BITMAP - lcd_setmargins(0, STATUSBAR_HEIGHT); - lcd_puts_scroll(0,0, str(LANG_BOOKMARK_AUTOLOAD_QUERY)); - lcd_puts(0,1, str(LANG_CONFIRM_WITH_PLAY_RECORDER)); - lcd_puts(0,2, str(LANG_BOOKMARK_SELECT_LIST_BOOKMARKS)); - lcd_puts(0,3, str(LANG_CANCEL_WITH_ANY_RECORDER)); + screens[i].setmargins(0, STATUSBAR_HEIGHT); + screens[i].puts_scroll(0,0, str(LANG_BOOKMARK_AUTOLOAD_QUERY)); + screens[i].puts(0,1, str(LANG_CONFIRM_WITH_PLAY_RECORDER)); + screens[i].puts(0,2, str(LANG_BOOKMARK_SELECT_LIST_BOOKMARKS)); + screens[i].puts(0,3, str(LANG_CANCEL_WITH_ANY_RECORDER)); #else - lcd_puts_scroll(0,0, str(LANG_BOOKMARK_AUTOLOAD_QUERY)); - lcd_puts(0,1,str(LANG_RESUME_CONFIRM_PLAYER)); + screens[i].puts_scroll(0,0, str(LANG_BOOKMARK_AUTOLOAD_QUERY)); + screens[i].puts(0,1,str(LANG_RESUME_CONFIRM_PLAYER)); #endif - lcd_update(); + screens[i].update(); + } while(!done) { @@ -448,9 +455,15 @@ switch(key) { #ifdef HAVE_LCD_BITMAP +#ifdef BOOKMARK_RC_DOWN + case BOOKMARK_RC_DOWN: +#endif case BOOKMARK_DOWN: return bookmark_load(global_bookmark_file_name, false); #endif +#ifdef SETTINGS_RC_OK + case SETTINGS_RC_OK: +#endif case SETTINGS_OK: return bookmark_load(global_bookmark_file_name, true); @@ -554,11 +567,13 @@ int lastkey = BUTTON_NONE; char* bookmark = NULL; int bookmark_count = 0; + int i; #ifdef HAVE_LCD_BITMAP int x = lcd_getxmargin(); int y = lcd_getymargin(); - lcd_setmargins(0, 0); + FOR_NB_SCREENS(i) + screens[i].setmargins(0, 0); #endif bookmark_count = get_bookmark_count(bookmark_file_name); @@ -602,6 +617,9 @@ key = button_get(true); switch(key) { +#ifdef BOOKMARK_RC_SELECT + case BOOKMARK_RC_SELECT: +#endif case BOOKMARK_SELECT: #ifdef BOOKMARK_SELECT_PRE if (lastkey != BOOKMARK_SELECT_PRE) @@ -610,12 +628,16 @@ /* User wants to use this bookmark */ #ifdef HAVE_LCD_BITMAP if (global_settings.statusbar) - lcd_setmargins(0, STATUSBAR_HEIGHT); + FOR_NB_SCREENS(i) + screens[i].setmargins(0, STATUSBAR_HEIGHT); else - lcd_setmargins(0, 0); + FOR_NB_SCREENS(i) + screens[i].setmargins(0, 0); #endif return bookmark; - +#ifdef BOOKMARK_RC_DELETE + case BOOKMARK_RC_DELETE: +#endif case BOOKMARK_DELETE: /* User wants to delete this bookmark */ delete_bookmark(bookmark_file_name, bookmark_id); @@ -625,25 +647,43 @@ bookmark_id = bookmark_count -1; break; +#ifdef SETTINGS_RC_DEC + case SETTINGS_RC_DEC: + case SETTINGS_RC_DEC | BUTTON_REPEAT: +#endif case SETTINGS_DEC: case SETTINGS_DEC | BUTTON_REPEAT: bookmark_id--; break; +#ifdef SETTINGS_RC_DEC + case SETTINGS_RC_INC: + case SETTINGS_RC_INC | BUTTON_REPEAT: +#endif case SETTINGS_INC: case SETTINGS_INC | BUTTON_REPEAT: bookmark_id++; break; +#ifdef SETTINGS_RC_CANCEL + case SETTINGS_RC_CANCEL: +#endif +#ifdef SETTINGS_RC_CANCEL2 + case SETTINGS_RC_CANCEL2: +#endif case SETTINGS_CANCEL: #ifdef SETTINGS_CANCEL2 case SETTINGS_CANCEL2: #endif +#ifdef SETTINGS_RC_OK2 + case SETTINGS_RC_OK2: +#endif #ifdef SETTINGS_OK2 case SETTINGS_OK2: #endif #ifdef HAVE_LCD_BITMAP - lcd_setmargins(x, y); + FOR_NB_SCREENS(i) + screens[i].setmargins(x, y); #endif return NULL; @@ -725,6 +765,7 @@ bool playlist_shuffle = false; int len; char *dot; + int i; /* getting the index and the time into the file */ parse_bookmark(bookmark, @@ -732,8 +773,11 @@ &ms, &repeat_mode, &playlist_shuffle, global_filename); - lcd_clear_display(); - lcd_stop_scroll(); + FOR_NB_SCREENS(i) + { + screens[i].clear_display(); + screens[i].stop_scroll(); + } #ifdef HAVE_LCD_BITMAP /* bookmark shuffle and repeat states*/ @@ -764,7 +808,8 @@ dot=NULL; if (dot) *dot='\0'; - lcd_puts_scroll(0, 0, (unsigned char *)global_filename); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, 0, (unsigned char *)global_filename); if (dot) *dot='.'; @@ -772,12 +817,14 @@ snprintf(global_temp_buffer, sizeof(global_temp_buffer), "%s: %2d/%2d", str(LANG_BOOKMARK_SELECT_BOOKMARK_TEXT), bookmark_id + 1, bookmark_count); - lcd_puts_scroll(0, 1, (unsigned char *)global_temp_buffer); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, 1, (unsigned char *)global_temp_buffer); /* bookmark resume index */ snprintf(global_temp_buffer, sizeof(global_temp_buffer), "%s: %2d", str(LANG_BOOKMARK_SELECT_INDEX_TEXT), resume_index+1); - lcd_puts_scroll(0, 2, (unsigned char *)global_temp_buffer); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, 2, (unsigned char *)global_temp_buffer); /* elapsed time*/ if ( ms < 3600000 ) @@ -797,12 +844,16 @@ ms % 3600000 / 60000, (unsigned int)(ms % 60000) / 1000); } - lcd_puts_scroll(0, 3, (unsigned char *)global_temp_buffer); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, 3, (unsigned char *)global_temp_buffer); /* commands */ - lcd_puts_scroll(0, 4, str(LANG_BOOKMARK_SELECT_PLAY)); - lcd_puts_scroll(0, 5, str(LANG_BOOKMARK_SELECT_EXIT)); - lcd_puts_scroll(0, 6, str(LANG_BOOKMARK_SELECT_DELETE)); + FOR_NB_SCREENS(i) + { + screens[i].puts_scroll(0, 4, str(LANG_BOOKMARK_SELECT_PLAY)); + screens[i].puts_scroll(0, 5, str(LANG_BOOKMARK_SELECT_EXIT)); + screens[i].puts_scroll(0, 6, str(LANG_BOOKMARK_SELECT_DELETE)); + } #else (void)bookmark_id; len=strlen(global_filename); @@ -833,12 +884,17 @@ } gui_syncstatusbar_draw(&statusbars, false); - lcd_puts_scroll(0,0,global_temp_buffer); - lcd_puts(0,1,str(LANG_RESUME_CONFIRM_PLAYER)); + + FOR_NB_SCREENS(i) + { + screens[i].puts_scroll(0,0,global_temp_buffer); + screens[i].puts(0,1,str(LANG_RESUME_CONFIRM_PLAYER)); + } if (dot) *dot='.'; #endif - lcd_update(); + FOR_NB_SCREENS(i) + screens[i].update(); } Index: apps/bookmark.h =================================================================== RCS file: /cvsroot/rockbox/apps/bookmark.h,v retrieving revision 1.11 diff -u -r1.11 bookmark.h --- apps/bookmark.h 24 Feb 2006 15:42:50 -0000 1.11 +++ apps/bookmark.h 2 Jul 2006 08:36:23 -0000 @@ -60,6 +60,13 @@ #endif +#if (CONFIG_REMOTE_KEYPAD == H100_REMOTE) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#define BOOKMARK_RC_SELECT BUTTON_RC_MENU +#define BOOKMARK_RC_DELETE (BUTTON_RC_ON | BUTTON_RC_MENU) +#define BOOKMARK_RC_DOWN BUTTON_RC_FF +#define BOOKMARK_RC_EXIT BUTTON_RC_STOP +#endif + bool bookmark_load_menu(void); bool bookmark_autobookmark(void); bool bookmark_create_menu(void); Index: apps/main_menu.c =================================================================== RCS file: /cvsroot/rockbox/apps/main_menu.c,v retrieving revision 1.150 diff -u -r1.150 main_menu.c --- apps/main_menu.c 6 Jun 2006 22:23:40 -0000 1.150 +++ apps/main_menu.c 2 Jul 2006 08:36:24 -0000 @@ -78,6 +78,7 @@ unsigned long size, free; long buflen = ((audiobufend - audiobuf) * 2) / 2097; /* avoid overflow */ int key; + int i; bool done = false; bool new_info = true; #ifdef HAVE_MULTIVOLUME @@ -147,10 +148,13 @@ new_info = false; } - lcd_clear_display(); + FOR_NB_SCREENS(i) + { + screens[i].clear_display(); #ifdef HAVE_LCD_BITMAP - lcd_puts(0, y++, str(LANG_ROCKBOX_INFO)); - y++; + screens[i].puts(0, y, str(LANG_ROCKBOX_INFO)); + } + y = y + 2; #endif #ifdef HAVE_LCD_CHARCELLS @@ -167,8 +171,9 @@ snprintf(s, sizeof(s), (char *)str(LANG_BUFFER_STAT_RECORDER), integer, decimal); #endif - lcd_puts_scroll(0, y++, (unsigned char *)s); - + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; #if CONFIG_CHARGING == CHARGING_CONTROL if (charge_state == CHARGING) snprintf(s, sizeof(s), (char *)str(LANG_BATTERY_CHARGE)); @@ -183,7 +188,9 @@ battery_time() / 60, battery_time() % 60); else strncpy(s, "(n/a)", sizeof(s)); - lcd_puts_scroll(0, y++, (unsigned char *)s); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; } #ifdef HAVE_LCD_CHARCELLS @@ -195,36 +202,53 @@ output_dyn_value(s2, sizeof s2, size, kbyte_units, true); snprintf(s, sizeof s, "%s %s/%s", str(LANG_DISK_NAME_INTERNAL), s1, s2); - lcd_puts_scroll(0, y++, (unsigned char *)s); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; if (size2) { output_dyn_value(s1, sizeof s1, free2, kbyte_units, true); output_dyn_value(s2, sizeof s2, size2, kbyte_units, true); snprintf(s, sizeof s, "%s %s/%s", str(LANG_DISK_NAME_MMC), s1, s2); - lcd_puts_scroll(0, y++, (unsigned char *)s); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; } #else output_dyn_value(s1, sizeof s1, size, kbyte_units, true); snprintf(s, sizeof s, SIZE_FMT, str(LANG_DISK_SIZE_INFO), s1); - lcd_puts_scroll(0, y++, (unsigned char *)s); - + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; output_dyn_value(s1, sizeof s1, free, kbyte_units, true); snprintf(s, sizeof s, SIZE_FMT, str(LANG_DISK_FREE_INFO), s1); - lcd_puts_scroll(0, y++, (unsigned char *)s); + FOR_NB_SCREENS(i) + screens[i].puts_scroll(0, y, (unsigned char *)s); + y++; #endif } - lcd_update(); + FOR_NB_SCREENS(i) + screens[i].update(); /* Wait for a key to be pushed */ key = button_get_w_tmo(HZ*5); switch(key) { case SETTINGS_OK: +#ifdef SETTINGS_RC_OK + case SETTINGS_RC_OK: +#endif #ifdef SETTINGS_OK2 case SETTINGS_OK2: #endif +#ifdef SETTINGS_RC_OK2 + case SETTINGS_RC_OK2: +#endif +#ifdef SETTINGS_RC_CANCEL + case SETTINGS_RC_CANCEL: +#endif case SETTINGS_CANCEL: done = true; break; @@ -232,11 +256,20 @@ #ifdef HAVE_LCD_CHARCELLS case SETTINGS_INC: case SETTINGS_DEC: +#ifdef SETTINGS_RC_INC + case SETTINGS_RC_INC: +#endif +#ifdef SETTINGS_RC_DEC + case SETTINGS_RC_DEC: +#endif page = (page == 0) ? 1 : 0; break; #endif #ifndef SIMULATOR +#ifdef SETTINGS_RC_ACCEPT + case SETTINGS_RC_ACCEPT: +#endif #ifdef SETTINGS_ACCEPT case SETTINGS_ACCEPT: #else Index: apps/screens.c =================================================================== RCS file: /cvsroot/rockbox/apps/screens.c,v retrieving revision 1.157 diff -u -r1.157 screens.c --- apps/screens.c 6 Jun 2006 22:23:40 -0000 1.157 +++ apps/screens.c 2 Jul 2006 08:36:25 -0000 @@ -53,6 +53,8 @@ #include "quickscreen.h" #include "logo.h" #include "pcmbuf.h" +#include "list.h" +#include "select.h" #if defined(HAVE_LCD_BITMAP) #include "widgets.h" @@ -1006,196 +1008,210 @@ } #endif -int draw_id3_item(int line, int top, int header, const char* body) -{ - if (line >= top) - { -#if defined(HAVE_LCD_BITMAP) - const int rows = LCD_HEIGHT / font_get(FONT_UI)->height; -#else - const int rows = 2; -#endif - int y = line - top; - - if (y < rows) - { - lcd_puts(0, y, str(header)); - } - - if (++y < rows) - { - lcd_puts_scroll(0, y, - body ? (const unsigned char*) body : str(LANG_ID3_NO_INFO)); - } - } - - return line + 2; -} - +static int id3_lines = 2; #if CONFIG_CODEC == SWCODEC #define ID3_ITEMS 13 #else #define ID3_ITEMS 11 #endif - -bool browse_id3(void) + +char* id3_name_callback(int selected_item, void *data, char *buffer) { char buf[64]; - const struct mp3entry* id3 = audio_current_track(); -#if defined(HAVE_LCD_BITMAP) - const int y_margin = global_settings.statusbar ? STATUSBAR_HEIGHT : 0; - const int line_height = font_get(FONT_UI)->height; - const int rows = (LCD_HEIGHT - y_margin) / line_height; - const bool show_scrollbar = global_settings.scrollbar - && (ID3_ITEMS * 2 > rows); -#else - const int rows = 2; -#endif - const int top_max = (ID3_ITEMS * 2) - (rows & ~1); - int top = 0; - int button; - bool exit = false; - - if (!id3 || (!(audio_status() & AUDIO_STATUS_PLAY))) - { - return false; - } - -#if defined(HAVE_LCD_BITMAP) - lcd_setmargins(show_scrollbar ? SCROLLBAR_WIDTH : 0, y_margin); -#endif - - while (!exit) - { - int line = 0; - int old_top = top; - char* body; - - lcd_clear_display(); - gui_syncstatusbar_draw(&statusbars, true); - line = draw_id3_item(line, top, LANG_ID3_TITLE, id3->title); - line = draw_id3_item(line, top, LANG_ID3_ARTIST, id3->artist); - line = draw_id3_item(line, top, LANG_ID3_ALBUM, id3->album); - - if (id3->track_string) - { - body = id3->track_string; - } - else if (id3->tracknum) - { - snprintf(buf, sizeof(buf), "%d", id3->tracknum); - body = buf; - } - else - { - body = NULL; - } - - line = draw_id3_item(line, top, LANG_ID3_TRACKNUM, body); - - body = id3->genre_string ? id3->genre_string : id3_get_genre(id3); - line = draw_id3_item(line, top, LANG_ID3_GENRE, body); - - if (id3->year_string) - { - body = id3->year_string; - } - else if (id3->year) - { - snprintf(buf, sizeof(buf), "%d", id3->year); - body = buf; - } - else - { - body = NULL; - } - - line = draw_id3_item(line, top, LANG_ID3_YEAR, body); - - gui_wps_format_time(buf, sizeof(buf), id3->length); - line = draw_id3_item(line, top, LANG_ID3_LENGTH, buf); - - snprintf(buf, sizeof(buf), "%d/%d", playlist_get_display_index(), - playlist_amount()); - line = draw_id3_item(line, top, LANG_ID3_PLAYLIST, buf); - - snprintf(buf, sizeof(buf), "%d kbps%s", id3->bitrate, - id3->vbr ? str(LANG_ID3_VBR) : (const unsigned char*) ""); - line = draw_id3_item(line, top, LANG_ID3_BITRATE, buf); - - snprintf(buf, sizeof(buf), "%ld Hz", id3->frequency); - line = draw_id3_item(line, top, LANG_ID3_FRECUENCY, buf); - -#if CONFIG_CODEC == SWCODEC - line = draw_id3_item(line, top, LANG_ID3_TRACK_GAIN, - id3->track_gain_string); - - line = draw_id3_item(line, top, LANG_ID3_ALBUM_GAIN, - id3->album_gain_string); -#endif - - line = draw_id3_item(line, top, LANG_ID3_PATH, id3->path); - -#if defined(HAVE_LCD_BITMAP) - if (show_scrollbar) - { - scrollbar(0, y_margin, SCROLLBAR_WIDTH - 1, rows * line_height, - ID3_ITEMS * 2 + (rows & 1), top, top + rows, VERTICAL); + char* value = NULL; + struct mp3entry *id3 = (struct mp3entry *)data; + + if (id3_lines == 3) { + if ( ((selected_item+1) % 3) == 0 ) { + /* add a space or the inverse selector doesn't show */ + buffer[0] = ' '; + buffer[1] = '\0'; + return buffer; } -#endif - - while (!exit && (top == old_top)) - { - gui_syncstatusbar_draw(&statusbars, false); - lcd_update(); - button = button_get_w_tmo(HZ / 2); - - switch(button) + selected_item -= selected_item/3; + } + + /* Skip a case number between items, the default case will add a space */ + switch (selected_item) { + /* title */ + case 0: + value = str(LANG_ID3_TITLE); + break; + case 1: + value = id3->title; + break; + + /* artist */ + case 2: + value = str(LANG_ID3_ARTIST); + break; + case 3: + value = id3->artist; + break; + + /* album */ + case 4: + value = str(LANG_ID3_ALBUM); + break; + case 5: + value = id3->album; + break; + + /* track number */ + case 6: + value = str(LANG_ID3_TRACKNUM); + break; + case 7: + if (id3->track_string) { - /* It makes more sense to have the keys mapped "backwards" when - * scrolling a list on the archos studios/players and the ipod. - */ -#if defined(HAVE_LCD_BITMAP) && !(CONFIG_KEYPAD == IPOD_4G_PAD) - case SETTINGS_INC: - case SETTINGS_INC | BUTTON_REPEAT: -#else - case SETTINGS_DEC: -#endif - if (top > 0) - { - top -= 2; - } - else if (!(button & BUTTON_REPEAT)) - { - top = top_max; - } - - break; + value = id3->track_string; + } + else if (id3->tracknum) + { + snprintf(buf, sizeof(buf), "%d", id3->tracknum); + value = buf; + } + break; + + /* genre */ + case 8: + value = str(LANG_ID3_GENRE); + break; + case 9: + value = id3->genre_string ? id3->genre_string : id3_get_genre(id3); + break; + + /* year */ + case 10: + value = str(LANG_ID3_YEAR); + break; + case 11: + if (id3->year_string) + { + value = id3->year_string; + } + else if (id3->year) + { + snprintf(buf, sizeof(buf), "%d", id3->year); + value = buf; + } + break; + + /* length */ + case 12: + value = str(LANG_ID3_LENGTH); + break; + case 13: + gui_wps_format_time(buf, sizeof(buf), id3->length); + value = buf; + break; + + /* playlist position */ + case 14: + value = str(LANG_ID3_PLAYLIST); + break; + case 15: + snprintf(buf, sizeof(buf), "%d/%d", playlist_get_display_index(), + playlist_amount()); + value = buf; + break; + + /* bitrate */ + case 16: + value = str(LANG_ID3_BITRATE); + break; + case 17: + snprintf(buf, sizeof(buf), "%d kbps%s", id3->bitrate, + id3->vbr ? str(LANG_ID3_VBR) : (const unsigned char*) ""); + value = buf; + break; + + /* frequency */ + case 18: + value = str(LANG_ID3_FRECUENCY); + break; + case 19: + snprintf(buf, sizeof(buf), "%ld Hz", id3->frequency); + value = buf; + break; + +#if CONFIG_CODEC == SWCODEC + /* replaygain track gain */ + case 20: + value = str(LANG_ID3_TRACK_GAIN); + break; + case 21: + value = id3->track_gain_string; + break; + + /* replaygain album gain */ + case 22: + value = str(LANG_ID3_ALBUM_GAIN); + break; + case 23: + value = id3->album_gain_string; + break; +#endif + + /* path (leave this last) */ + case (2*ID3_ITEMS-2): + value = str(LANG_ID3_PATH); + break; + case (2*ID3_ITEMS-1): + value = id3->path; + break; + } + + if (value == NULL) + value = str(LANG_ID3_NO_INFO); + + strcpy(buffer, value); + return(buffer); +} -#if defined(HAVE_LCD_BITMAP) && !(CONFIG_KEYPAD == IPOD_4G_PAD) - case SETTINGS_DEC: - case SETTINGS_DEC | BUTTON_REPEAT: -#else - case SETTINGS_INC: -#endif - if (top < top_max) - { - top += 2; - } - else if (!(button & BUTTON_REPEAT)) - { - top = 0; +bool browse_id3(void) +{ + struct mp3entry* id3 = audio_current_track(); + struct gui_synclist id3_lists; + bool exit = false; + int item_number = 0; + int total_items = ID3_ITEMS*id3_lines; + + gui_synclist_init(&id3_lists, &id3_name_callback, id3); + gui_synclist_set_nb_items(&id3_lists, total_items); + gui_synclist_select_item(&id3_lists, item_number); + gui_synclist_draw(&id3_lists); + + while (!exit) { + int button = button_get_w_tmo(HZ / 2); + gui_synclist_do_button(&id3_lists, button); + + switch (button) { + case SELECT_OK: +#ifdef SELECT_RC_OK2 + case SELECT_RC_OK2: +#endif + /* switch between having a space between item pairs and not */ + item_number = gui_synclist_get_sel_pos(&id3_lists); + if (id3_lines == 2) { + id3_lines = 3; + total_items = 3*ID3_ITEMS - 1; + item_number += (item_number/2); + } else { + id3_lines = 2; + total_items = 2*ID3_ITEMS; + item_number -= (item_number/3); } - - break; - -#ifdef SETTINGS_OK2 - case SETTINGS_OK2: -#endif - case SETTINGS_CANCEL: - lcd_stop_scroll(); - /* Eat release event */ - button_get(true); + + gui_synclist_set_nb_items(&id3_lists, total_items); + gui_synclist_select_item(&id3_lists, item_number); + gui_synclist_draw(&id3_lists); + break; + + case SELECT_CANCEL: +#ifdef SELECT_RC_CANCEL + case SELECT_RC_CANCEL: +#endif exit = true; break; @@ -1206,7 +1222,6 @@ } break; - } } } Index: apps/gui/color_picker.c =================================================================== RCS file: /cvsroot/rockbox/apps/gui/color_picker.c,v retrieving revision 1.6 diff -u -r1.6 color_picker.c --- apps/gui/color_picker.c 21 Mar 2006 02:02:04 -0000 1.6 +++ apps/gui/color_picker.c 2 Jul 2006 08:36:28 -0000 @@ -16,6 +16,7 @@ * KIND, either express or implied. * ****************************************************************************/ +#include "config.h" #include "stdarg.h" #include "string.h" #include "stdio.h" @@ -75,7 +76,7 @@ #endif static const int max_val[3] = {LCD_MAX_RED,LCD_MAX_GREEN,LCD_MAX_BLUE}; - + static void draw_screen(struct screen *display, char *title, int *rgb_val, int color, int row) { @@ -97,11 +98,13 @@ i = display->getstringsize(title,0,0); display->putsxy((display->width-i)/2,6,title ); - for (i=0;i<3;i++) + text_top = display->char_height*2; + for (i=0; i<3 ;i++) { - text_top =display->char_height*((i*2)+2); + if (display->screen_type != SCREEN_MAIN) + i = row; - if (i==row) + if ((i==row) && (display->screen_type == SCREEN_MAIN)) { if (global_settings.invert_cursor) { @@ -145,6 +148,9 @@ gui_scrollbar_draw(display,SLIDER_START,text_top,slider_width, display->char_height/2, max_val[i],0,rgb_val[i],HORIZONTAL); + if (display->screen_type != SCREEN_MAIN) + break; + text_top += display->char_height; } if (display->depth > 1) { @@ -152,7 +158,7 @@ display->set_foreground(text_color); } - if (text_top + (display->char_height*2) < (LCD_HEIGHT-40-display->char_height)) + if (text_top + (display->char_height*2) < (display->height-40-display->char_height)) text_top += (display->char_height*2); else text_top += (display->char_height); @@ -162,7 +168,7 @@ RGB_UNPACK_GREEN(color), RGB_UNPACK_BLUE(color)); - display->putsxy((LCD_WIDTH-(display->char_width*21))/2,text_top,buf); + display->putsxy((display->width-(display->char_width*11))/2,text_top,buf); if (display->depth > 1) { display->set_foreground(color); @@ -183,11 +189,10 @@ ***********/ bool set_color(struct screen *display,char *title, int* color, int banned_color) { - int exit = 0, button, slider=0; + int exit = 0, button, slider=0,i; int rgb_val[3]; /* native depth r,g,b*/; int fgcolor = display->get_foreground(); int newcolor = *color; - int i; #if LCD_PIXELFORMAT == RGB565 rgb_val[0] = ((*color)&0xf800) >> 11; @@ -213,20 +218,22 @@ newcolor = swap16((rgb_val[0] << 11) | (rgb_val[1] << 5) | (rgb_val[2])); #endif FOR_NB_SCREENS(i) + { draw_screen(&screens[i], title, rgb_val, newcolor, slider); - + } + button = button_get(true); switch (button) { case SLIDER_UP: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_UP case SLIDER_RC_UP: #endif slider = (slider+2)%3; break; case SLIDER_DOWN: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_DOWN case SLIDER_RC_DOWN: #endif slider = (slider+1)%3; @@ -234,7 +241,7 @@ case SLIDER_RIGHT: case SLIDER_RIGHT|BUTTON_REPEAT: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_RIGHT case SLIDER_RC_RIGHT: case SLIDER_RC_RIGHT|BUTTON_REPEAT: #endif @@ -244,7 +251,7 @@ case SLIDER_LEFT: case SLIDER_LEFT|BUTTON_REPEAT: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_LEFT case SLIDER_RC_LEFT: case SLIDER_RC_LEFT|BUTTON_REPEAT: #endif @@ -253,7 +260,7 @@ break; case SLIDER_OK: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_OK case SLIDER_RC_OK: #endif #ifdef SLIDER_OK2 @@ -269,7 +276,7 @@ break; case SLIDER_CANCEL: -#ifdef HAVE_LCD_REMOTE +#ifdef SLIDER_RC_CANCEL case SLIDER_RC_CANCEL: #endif exit = 1; Index: apps/recorder/peakmeter.c =================================================================== RCS file: /cvsroot/rockbox/apps/recorder/peakmeter.c,v retrieving revision 1.34 diff -u -r1.34 peakmeter.c --- apps/recorder/peakmeter.c 3 Apr 2006 08:20:20 -0000 1.34 +++ apps/recorder/peakmeter.c 2 Jul 2006 08:36:29 -0000 @@ -1129,6 +1129,7 @@ { int barstart, barend; int icon, ixpos; + int i; switch (trig_status) { case TRIG_READY: @@ -1170,8 +1171,11 @@ scrollbar(xpos + ICON_PLAY_STATE_WIDTH + 1, ypos + 1, TRIGBAR_WIDTH, TRIG_HEIGHT - 2, TRIGBAR_WIDTH, barstart, barend, HORIZONTAL); - lcd_mono_bitmap(bitmap_icons_7x8[icon], ixpos, ypos, - ICON_PLAY_STATE_WIDTH, STATUSBAR_HEIGHT); + FOR_NB_SCREENS(i) + { + screens[i].mono_bitmap(bitmap_icons_7x8[icon], ixpos, ypos, + ICON_PLAY_STATE_WIDTH, STATUSBAR_HEIGHT); + } } #endif @@ -1236,7 +1240,7 @@ unsigned int max = 0; int y = 0; int x = 0; - lcd_clear_display(); + screens[0].clear_display(); for (i = 0; i < PEEKS_PER_DRAW_SIZE; i++) { max = MAX(max, peeks_per_redraw[i]); @@ -1244,7 +1248,7 @@ for (i = 0; i < PEEKS_PER_DRAW_SIZE; i++) { x = peeks_per_redraw[i] * (LCD_WIDTH - 1)/ max; - lcd_hline(0, x, y + i); + screens[0].hline(0, x, y + i); } y = PEEKS_PER_DRAW_SIZE + 1; @@ -1256,9 +1260,9 @@ for (i = 0; i < TICKS_PER_DRAW_SIZE; i++) { x = ticks_per_redraw[i] * (LCD_WIDTH - 1)/ max; - lcd_hline(0, x, y + i); + screens[0].hline(0, x, y + i); } - lcd_update(); + screens[0].update(); btn = button_get(true); if (btn == BUTTON_PLAY) { Index: apps/recorder/recording.c =================================================================== RCS file: /cvsroot/rockbox/apps/recorder/recording.c,v retrieving revision 1.115 diff -u -r1.115 recording.c --- apps/recorder/recording.c 1 Jul 2006 00:15:43 -0000 1.115 +++ apps/recorder/recording.c 2 Jul 2006 08:36:31 -0000 @@ -975,8 +975,10 @@ if (peak_meter_trigger_status() != TRIG_OFF) { peak_meter_draw_trig(LCD_WIDTH - TRIG_WIDTH, 4 * h); - lcd_update_rect(LCD_WIDTH - (TRIG_WIDTH + 2), 4 * h, - TRIG_WIDTH + 2, TRIG_HEIGHT); + FOR_NB_SCREENS(i){ + screens[i].update_rect(LCD_WIDTH - (TRIG_WIDTH + 2), 4 * h, + TRIG_WIDTH + 2, TRIG_HEIGHT); + } } } @@ -996,7 +998,10 @@ { gui_syncsplash(0, true, str(LANG_DISK_FULL)); gui_syncstatusbar_draw(&statusbars, true); - lcd_update(); + + FOR_NB_SCREENS(i) + screens[i].update(); + audio_error_clear(); while(1) @@ -1026,7 +1031,8 @@ sound_settings_apply(); - lcd_setfont(FONT_UI); + FOR_NB_SCREENS(i) + screens[i].setfont(FONT_UI); if (have_recorded) reload_directory(); @@ -1042,34 +1048,47 @@ { bool exit = false; bool used = false; - int w, h; + int w, h, i; char buf[32]; int button; - lcd_setfont(FONT_SYSFIXED); - lcd_getstringsize("A",&w,&h); + FOR_NB_SCREENS(i) + { + screens[i].setfont(FONT_SYSFIXED); + screens[i].getstringsize("A",&w,&h); + } while (!exit) { const char* ptr=NULL; - lcd_clear_display(); + FOR_NB_SCREENS(i) + { + screens[i].clear_display(); - /* Recording quality */ - lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_QUALITY)); - snprintf(buf, 32, "%d", global_settings.rec_quality); - lcd_putsxy(0, LCD_HEIGHT/2-h, buf); - lcd_mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], + /* Recording quality */ + screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_QUALITY)); + } + + snprintf(buf, 32, "%d", global_settings.rec_quality); + FOR_NB_SCREENS(i) + { + screens[i].putsxy(0, LCD_HEIGHT/2-h, buf); + screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); + } /* Frequency */ snprintf(buf, sizeof buf, "%s:", str(LANG_RECORDING_FREQUENCY)); - lcd_getstringsize(buf,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); ptr = freq_str[global_settings.rec_frequency]; - lcd_getstringsize(ptr, &w, &h); - lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); - lcd_mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], - LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); + FOR_NB_SCREENS(i) + { + screens[i].getstringsize(buf,&w,&h); + screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); + screens[i].getstringsize(ptr, &w, &h); + screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); + screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], + LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); + } /* Channel mode */ switch ( global_settings.rec_channels ) { @@ -1082,17 +1101,20 @@ break; } - lcd_getstringsize(str(LANG_RECORDING_CHANNELS), &w, &h); - lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, - str(LANG_RECORDING_CHANNELS)); - lcd_getstringsize(str(LANG_F2_MODE), &w, &h); - lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); - lcd_getstringsize(ptr, &w, &h); - lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); - lcd_mono_bitmap(bitmap_icons_7x8[Icon_FastForward], + FOR_NB_SCREENS(i) + { + screens[i].getstringsize(str(LANG_RECORDING_CHANNELS), &w, &h); + screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, + str(LANG_RECORDING_CHANNELS)); + screens[i].getstringsize(str(LANG_F2_MODE), &w, &h); + screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); + screens[i].getstringsize(ptr, &w, &h); + screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); + screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastForward], LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8); - lcd_update(); + screens[i].update(); + } button = button_get(true); switch (button) { @@ -1150,7 +1172,8 @@ set_gain(); settings_save(); - lcd_setfont(FONT_UI); + FOR_NB_SCREENS(i) + screens[i].setfont(FONT_UI); return false; } @@ -1161,7 +1184,7 @@ { bool exit = false; bool used = false; - int w, h; + int w, h, i; int button; char *src_str[] = { @@ -1169,31 +1192,39 @@ str(LANG_RECORDING_SRC_LINE), str(LANG_RECORDING_SRC_DIGITAL) }; - - lcd_setfont(FONT_SYSFIXED); - lcd_getstringsize("A",&w,&h); - + FOR_NB_SCREENS(i) + { + screens[i].setfont(FONT_SYSFIXED); + screens[i].getstringsize("A",&w,&h); + } + while (!exit) { char* ptr=NULL; - - lcd_clear_display(); - - /* Recording source */ - lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_SOURCE)); ptr = src_str[global_settings.rec_source]; - lcd_getstringsize(ptr, &w, &h); - lcd_putsxy(0, LCD_HEIGHT/2-h, ptr); - lcd_mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], - LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); + FOR_NB_SCREENS(i) + { + screens[i].clear_display(); + + /* Recording source */ + screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_SOURCE)); + + screens[i].getstringsize(ptr, &w, &h); + screens[i].putsxy(0, LCD_HEIGHT/2-h, ptr); + screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], + LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); + } /* trigger setup */ ptr = str(LANG_RECORD_TRIGGER); - lcd_getstringsize(ptr,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, ptr); - lcd_mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], + FOR_NB_SCREENS(i) + { + screens[i].getstringsize(ptr,&w,&h); + screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, ptr); + screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); - lcd_update(); + screens[i].update(); + } button = button_get(true); switch (button) { @@ -1245,7 +1276,8 @@ set_gain(); settings_save(); - lcd_setfont(FONT_UI); + FOR_NB_SCREENS(i) + screens[i].setfont(FONT_UI); return false; }