diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-08-07 07:55:18 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-08-07 07:55:18 +0000 |
| commit | 73160322fe454b561cf7a15e0a3b9ac160c52428 (patch) | |
| tree | 204eef09ff527f862f0361dc2b14d8f70b1e3ff3 /apps | |
| parent | c43629f08bc03cc1b169731236d96c11a6a81ac1 (diff) | |
| download | rockbox-73160322fe454b561cf7a15e0a3b9ac160c52428.zip rockbox-73160322fe454b561cf7a15e0a3b9ac160c52428.tar.gz rockbox-73160322fe454b561cf7a15e0a3b9ac160c52428.tar.bz2 rockbox-73160322fe454b561cf7a15e0a3b9ac160c52428.tar.xz | |
Fix the properties and shortucts plugins after accidently breaking them last night.
Also possibly make them load a bit faster.
Make the open with screen nicer, and show all aviable viewers again (If people prefered it only showing useful viewers maybe we can make this a setting?)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14227 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/filetypes.c | 107 |
1 files changed, 63 insertions, 44 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c index 77d73df..530dab1 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c @@ -381,7 +381,7 @@ int filetype_get_color(const char * name, int attr) if (!extension) return custom_colors[MAX_FILETYPES]; extension++; - logf("%s %s",name,extension); + for (i=1; i<filetype_count; i++) { if (filetypes[i].extension && @@ -420,39 +420,40 @@ bool filetype_supported(int attr) return find_attr(attr) >= 0; } +/**** Open With Screen ****/ +enum themable_icons openwith_get_icon(int selected_item, void * data) +{ + int *items = (int*)data; + return filetypes[items[selected_item]].icon; +} +char * openwith_get_name(int selected_item, void * data, char * buffer) +{ + (void)buffer; + int *items = (int*)data; + char *s = strrchr(filetypes[items[selected_item]].plugin, '/'); + if (s) + return s+1; + else return filetypes[items[selected_item]].plugin; +} + int filetype_list_viewers(const char* current_file) { - int i, count = 0; - char *strings[MAX_FILETYPES/2]; - char *ext; - struct menu_callback_with_desc cb_and_desc = - { NULL, ID2P(LANG_ONPLAY_OPEN_WITH), Icon_Plugin }; - struct menu_item_ex menu; - - ext = strrchr(current_file, '.'); - if (ext) - ext++; - for (i=0; i<filetype_count && count < (MAX_FILETYPES/2); i++) + int i, count = 0, action; + int items[MAX_FILETYPES]; + struct gui_synclist lists; + for (i=0; i<filetype_count && count < MAX_FILETYPES; i++) { if (filetypes[i].plugin) { int j; for (j=0;j<count;j++) /* check if the plugin is in the list yet */ { - if (!strcmp(strings[j], filetypes[i].plugin)) + if (items[j] == i) break; } if (j<count) continue; /* it is so grab the next plugin */ - if (ext && filetypes[i].extension && - (filetypes[i].extension[0] != '*')) - { - if (strcasecmp(filetypes[i].extension, ext)) - continue; /* skip this one */ - } - strings[count] = strrchr(filetypes[i].plugin,'/'); - if (strings[count]) - strings[count++]++; + items[count++] = i; } } #ifndef HAVE_LCD_BITMAP @@ -463,35 +464,53 @@ int filetype_list_viewers(const char* current_file) return PLUGIN_OK; } #endif - menu.flags = MT_RETURN_ID|MENU_HAS_DESC|MENU_ITEM_COUNT(count); - menu.strings = (const char**)strings; - menu.callback_and_desc = &cb_and_desc; - i = do_menu(&menu, NULL); - if (i >= 0) - return filetype_load_plugin(strings[i], (void*)current_file); - return i; + gui_synclist_init(&lists,openwith_get_name,(void*)items, false, 1); + gui_synclist_set_nb_items(&lists, count); + gui_synclist_set_icon_callback(&lists, openwith_get_icon); + gui_synclist_set_title(&lists, str(LANG_ONPLAY_OPEN_WITH), Icon_Plugin); + gui_synclist_select_item(&lists, 0); + gui_synclist_draw(&lists); + while (1) + { + gui_syncstatusbar_draw(&statusbars, true); + action = get_action(CONTEXT_MAINMENU,HZ); + if ((action == ACTION_NONE) || + gui_synclist_do_button(&lists, action, LIST_WRAP_UNLESS_HELD)) + continue; + else if (action == ACTION_STD_OK) + { + i = gui_synclist_get_sel_pos(&lists); + return filetype_load_plugin(filetypes[i].plugin, + (void*)current_file); + } + else if (action == ACTION_STD_CANCEL) + return action; + } } int filetype_load_plugin(const char* plugin, char* file) { - int fd; + int i; char plugin_name[MAX_PATH]; - snprintf(plugin_name, sizeof(plugin_name), "%s/%s.%s", - VIEWERS_DIR, plugin, ROCK_EXTENSION); - if ((fd = open(plugin_name,O_RDONLY))>=0) + char *s; + + for (i=0;i<filetype_count;i++) { - close(fd); - return plugin_load(plugin_name,file); - } - else - { - snprintf(plugin_name, sizeof(plugin_name), "%s/%s.%s", - PLUGIN_DIR, plugin, ROCK_EXTENSION); - if ((fd = open(plugin_name,O_RDONLY))>=0) + if (filetypes[i].plugin) { - close(fd); - return plugin_load(plugin_name,file); + s = strrchr(filetypes[i].plugin, '/'); + if (s) + { + if (!strcmp(s+1, plugin)) + break; + } + else if (!strcmp(filetypes[i].plugin, plugin)) + break; } } - return PLUGIN_ERROR; + if (i >= filetype_count) + return PLUGIN_ERROR; + snprintf(plugin_name, MAX_PATH, "%s/%s.%s", + PLUGIN_DIR, filetypes[i].plugin, ROCK_EXTENSION); + return plugin_load(plugin_name,file); } |