Index: src/apps/plugins/pictureflow/pictureflow.c =================================================================== --- src/apps/plugins/pictureflow/pictureflow.c (revision 26114) +++ src/apps/plugins/pictureflow/pictureflow.c (working copy) @@ -57,6 +57,7 @@ #define PF_WPS ACTION_TREE_WPS #define PF_QUIT (LAST_ACTION_PLACEHOLDER + 1) +#define PF_TRACKLIST (LAST_ACTION_PLACEHOLDER + 2) #if defined(HAVE_SCROLLWHEEL) || CONFIG_KEYPAD == IRIVER_H10_PAD || \ CONFIG_KEYPAD == SAMSUNG_YH_PAD @@ -119,6 +120,7 @@ {PF_QUIT, BUTTON_POWER, BUTTON_NONE}, #elif CONFIG_KEYPAD == SANSA_FUZE_PAD {PF_QUIT, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE}, + {PF_TRACKLIST, BUTTON_RIGHT, BUTTON_NONE}, /* These all use short press of BUTTON_POWER for menu, map long POWER to quit */ #elif CONFIG_KEYPAD == SANSA_C200_PAD || CONFIG_KEYPAD == SANSA_M200_PAD || \ @@ -312,11 +314,19 @@ static int num_slides = 4; static int zoom = 100; static bool show_fps = false; +static int auto_wps = 0; +static int last_album = 0; static bool resize = true; static int cache_version = 0; static int show_album_name = (LCD_HEIGHT > 100) ? album_name_top : album_name_bottom; +static const struct opt_items wps_options[] = { + { "Off", -1 }, + { "Direct", -1 }, + { "Via Track list", -1 } +}; + static struct configdata config[] = { { TYPE_INT, 0, MAX_SPACING, { .int_p = &slide_spacing }, "slide spacing", @@ -330,7 +340,9 @@ { TYPE_BOOL, 0, 1, { .bool_p = &resize }, "resize", NULL }, { TYPE_INT, 0, 100, { .int_p = &cache_version }, "cache version", NULL }, { TYPE_ENUM, 0, 2, { .int_p = &show_album_name }, "show album name", - show_album_name_conf } + show_album_name_conf }, + { TYPE_INT, 0, 2, { .int_p = &auto_wps }, "auto wps", NULL }, + { TYPE_INT, 0, 999999, { .int_p = &last_album }, "last album", NULL } }; #define CONFIG_NUM_ITEMS (sizeof(config) / sizeof(struct configdata)) @@ -870,13 +882,12 @@ buflib_buffer_out(&buf_ctx, &out); avail += out; borrowed += out; - if (track_count) - { - struct track_data *new_tracks = (struct track_data *)(out + (uintptr_t)tracks); - unsigned int bytes = track_count * sizeof(struct track_data); + + struct track_data *new_tracks = (struct track_data *)(out + (uintptr_t)tracks); + unsigned int bytes = track_count * sizeof(struct track_data); + if (track_count) rb->memmove(new_tracks, tracks, bytes); - tracks = new_tracks; - } + tracks = new_tracks; } goto retry; } @@ -2072,7 +2083,7 @@ MENUITEM_STRINGLIST(settings_menu, "PictureFlow Settings", NULL, "Show FPS", "Spacing", "Centre margin", "Number of slides", "Zoom", - "Show album title", "Resize Covers", "Rebuild cache"); + "Show album title", "Resize Covers", "Rebuild cache", "WPS Integration"); static const struct opt_items album_name_options[] = { { "Hide album title", -1 }, @@ -2135,6 +2146,9 @@ rb->remove(EMPTY_SLIDE); rb->splash(HZ, "Cache will be rebuilt on next restart"); break; + case 8: + rb->set_option("WPS Integration", &auto_wps, INT, wps_options, 3, NULL); + break; case MENU_ATTACHED_USB: return PLUGIN_USB_CONNECTED; @@ -2374,7 +2388,7 @@ /* * Puts the current tracklist into a newly created playlist and starts playling */ -void start_playback(void) +void start_playback(bool append) { static int old_playlist = -1, old_shuffle = 0; int count = 0; @@ -2383,14 +2397,14 @@ /* reuse existing playlist if possible * regenerate if shuffle is on or changed, since playlist index and * selected track are "out of sync" */ - if (!shuffle && center_slide.slide_index == old_playlist + if (!shuffle && !append && center_slide.slide_index == old_playlist && (old_shuffle == shuffle)) { goto play; } /* First, replace the current playlist with a new one */ - else if (rb->playlist_remove_all_tracks(NULL) == 0 - && rb->playlist_create(NULL, NULL) == 0) + else if (append || (rb->playlist_remove_all_tracks(NULL) == 0 + && rb->playlist_create(NULL, NULL) == 0)) { do { rb->yield(); @@ -2494,7 +2508,6 @@ int ret; rb->lcd_setfont(FONT_UI); - draw_splashscreen(); if ( ! rb->dir_exists( CACHE_PREFIX ) ) { if ( rb->mkdir( CACHE_PREFIX ) < 0 ) { @@ -2504,6 +2517,8 @@ } configfile_load(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION); + if(auto_wps == 0) + draw_splashscreen(); init_reflect_table(); @@ -2582,6 +2597,7 @@ recalc_offsets(); reset_slides(); + set_current_slide(last_album); char fpstxt[10]; int button; @@ -2713,14 +2729,41 @@ if ( pf_state == pf_idle || pf_state == pf_scrolling ) show_previous_slide(); break; - + + case PF_CONTEXT: + if ( auto_wps != 0 && pf_state == pf_idle ) { + create_track_index(center_slide.slide_index); + reset_track_list(); + start_playback(true); + rb->splash(HZ*2, "Added to playlist"); + } + break; + case PF_TRACKLIST: + if ( auto_wps == 1 && pf_state == pf_idle ) { + pf_state = pf_cover_in; + break; + } case PF_SELECT: if ( pf_state == pf_idle ) { - pf_state = pf_cover_in; +#if PF_PLAYBACK_CAPABLE + if(auto_wps == 1) { + create_track_index(center_slide.slide_index); + reset_track_list(); + start_playback(false); + last_album = center_index; + return PLUGIN_GOTO_WPS; + } + else +#endif + pf_state = pf_cover_in; } else if ( pf_state == pf_show_tracks ) { #if PF_PLAYBACK_CAPABLE - start_playback(); + start_playback(false); + if(auto_wps != 0) { + last_album = center_index; + return PLUGIN_GOTO_WPS; + } #endif } break; @@ -2760,7 +2803,7 @@ #endif #endif ret = main(); - if ( ret == PLUGIN_OK ) { + if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) { if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION)) { Index: src/apps/lang/english.lang =================================================================== --- src/apps/lang/english.lang (revision 26114) +++ src/apps/lang/english.lang (working copy) @@ -13731,4 +13731,17 @@ gigabeats: "3-D Enhancement" - + + id: LANG_ONPLAY_PICTUREFLOW + desc: Onplay pictureflow + user: core + + *: "PictureFlow" + + + *: "PictureFlow" + + + *: "open picture flow" + + \ No newline at end of file Index: src/apps/onplay.c =================================================================== --- src/apps/onplay.c (revision 26114) +++ src/apps/onplay.c (working copy) @@ -1195,6 +1195,12 @@ return list_viewers(); } +static bool open_pictureflow(void) +{ + plugin_load(PLUGIN_DEMOS_DIR "/pictureflow.rock", NULL); + return ONPLAY_OK; +} + static int playlist_insert_shuffled(void) { if ((audio_status() & AUDIO_STATUS_PLAY) || @@ -1244,6 +1250,9 @@ { HOTKEY_INSERT_SHUFFLED, LANG_INSERT_SHUFFLED, HOTKEY_FUNC(playlist_insert_shuffled, NULL), ONPLAY_OK }, + { HOTKEY_PICTUREFLOW, LANG_ONPLAY_PICTUREFLOW, + HOTKEY_FUNC(open_pictureflow, NULL), + ONPLAY_OK }, }; /* Return the language ID for this action */ Index: src/apps/gui/wps.c =================================================================== --- src/apps/gui/wps.c (revision 26114) +++ src/apps/gui/wps.c (working copy) @@ -66,6 +66,7 @@ #include "playlist_viewer.h" #include "wps.h" #include "statusbar-skinned.h" +#include "plugin.h" #define RESTORE_WPS_INSTANTLY 0l #define RESTORE_WPS_NEXT_SECOND ((long)(HZ+current_tick)) @@ -1213,6 +1214,8 @@ #endif if (global_settings.browse_current) return GO_TO_PREVIOUS_BROWSER; + if(global_settings.hotkey_wps == HOTKEY_PICTUREFLOW) + return plugin_load(PLUGIN_DEMOS_DIR "/pictureflow.rock", NULL); return GO_TO_PREVIOUS; } Index: src/apps/onplay.h =================================================================== --- src/apps/onplay.h (revision 26114) +++ src/apps/onplay.h (working copy) @@ -43,6 +43,7 @@ HOTKEY_DELETE, HOTKEY_INSERT, HOTKEY_INSERT_SHUFFLED, + HOTKEY_PICTUREFLOW, }; #endif Index: src/apps/settings_list.c =================================================================== --- src/apps/settings_list.c (revision 26114) +++ src/apps/settings_list.c (working copy) @@ -1783,10 +1783,10 @@ #ifdef HAVE_HOTKEY TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_wps, LANG_HOTKEY_WPS, HOTKEY_VIEW_PLAYLIST, "hotkey wps", - "off,view playlist,show track info,pitchscreen,open with,delete", - UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, 6, HOTKEY_OFF, + "off,view playlist,show track info,pitchscreen,open with,delete,pictureflow", + UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, 7, HOTKEY_OFF, HOTKEY_VIEW_PLAYLIST, HOTKEY_SHOW_TRACK_INFO, HOTKEY_PITCHSCREEN, - HOTKEY_OPEN_WITH, HOTKEY_DELETE), + HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_PICTUREFLOW), TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_tree, LANG_HOTKEY_FILE_BROWSER, HOTKEY_OFF, "hotkey tree", "off,open with,delete,insert,insert shuffled",