summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2021-11-21 15:03:02 +0100
committerWilliam Wilgus <me.theuser@yahoo.com>2021-12-03 23:51:12 -0500
commit09e1cd489f2316e2a2714436674fc4b97c8f9c49 (patch)
tree1ed9d2df3fdcef3df8882be92ce68826be654ad4 /apps/plugins
parent7200b738a5426d384e70fe814b7b84ab86326f01 (diff)
downloadrockbox-09e1cd489f2316e2a2714436674fc4b97c8f9c49.tar.gz
rockbox-09e1cd489f2316e2a2714436674fc4b97c8f9c49.zip
PictureFlow: Add alphabetic browsing (iPod&fiiom3k)
Offers more efficient navigation when number of albums is large. Scrolling with the touch wheel or touch strip works as before, but the prev/next buttons jump between album artists by first letter now. - Keymap has only been adjusted for iPod and Fiio M3K at the moment. - requires separate fix for infinite loop Change-Id: I68da7304d2c7714a5a1aecdf83e937bc9daae3e1
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/pictureflow/pictureflow.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c
index 2c0a7c3f33..6db28f3aa1 100644
--- a/apps/plugins/pictureflow/pictureflow.c
+++ b/apps/plugins/pictureflow/pictureflow.c
@@ -55,14 +55,21 @@ static fb_data *lcd_fb;
55#define PF_BACK ACTION_STD_CANCEL 55#define PF_BACK ACTION_STD_CANCEL
56#define PF_MENU ACTION_STD_MENU 56#define PF_MENU ACTION_STD_MENU
57#define PF_WPS ACTION_TREE_WPS 57#define PF_WPS ACTION_TREE_WPS
58#define PF_JMP ACTION_LISTTREE_PGDOWN
59#define PF_JMP_PREV ACTION_LISTTREE_PGUP
58 60
59#define PF_QUIT (LAST_ACTION_PLACEHOLDER + 1) 61#define PF_QUIT (LAST_ACTION_PLACEHOLDER + 1)
60#define PF_TRACKLIST (LAST_ACTION_PLACEHOLDER + 2) 62#define PF_TRACKLIST (LAST_ACTION_PLACEHOLDER + 2)
61 63
62#if defined(HAVE_SCROLLWHEEL) || CONFIG_KEYPAD == IRIVER_H10_PAD || \ 64#if defined(HAVE_SCROLLWHEEL) || CONFIG_KEYPAD == IRIVER_H10_PAD || \
63 CONFIG_KEYPAD == MPIO_HD300_PAD 65 CONFIG_KEYPAD == MPIO_HD300_PAD
66#if (CONFIG_KEYPAD != IPOD_1G2G_PAD) \
67 && (CONFIG_KEYPAD != IPOD_3G_PAD) \
68 && (CONFIG_KEYPAD != IPOD_4G_PAD) \
69 && (CONFIG_KEYPAD != FIIO_M3K_PAD)
64#define USE_CORE_PREVNEXT 70#define USE_CORE_PREVNEXT
65#endif 71#endif
72#endif
66 73
67#ifndef USE_CORE_PREVNEXT 74#ifndef USE_CORE_PREVNEXT
68 /* scrollwheel targets use the wheel, just as they do in lists, 75 /* scrollwheel targets use the wheel, just as they do in lists,
@@ -81,6 +88,18 @@ const struct button_mapping pf_context_album_scroll[] =
81 {PF_PREV_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT,BUTTON_NONE}, 88 {PF_PREV_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT,BUTTON_NONE},
82 {PF_NEXT, BUTTON_RC_FF, BUTTON_NONE}, 89 {PF_NEXT, BUTTON_RC_FF, BUTTON_NONE},
83 {PF_NEXT_REPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE}, 90 {PF_NEXT_REPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE},
91#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) \
92 || (CONFIG_KEYPAD == IPOD_3G_PAD) \
93 || (CONFIG_KEYPAD == IPOD_4G_PAD) \
94 || (CONFIG_KEYPAD == FIIO_M3K_PAD)
95 {PF_JMP_PREV, BUTTON_LEFT, BUTTON_NONE},
96 {PF_JMP_PREV, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
97 {PF_JMP, BUTTON_RIGHT, BUTTON_NONE},
98 {PF_JMP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
99 {ACTION_NONE, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT},
100 {ACTION_NONE, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT},
101 {ACTION_NONE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT},
102 {ACTION_NONE, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT},
84#elif defined(BUTTON_LEFT) && defined(BUTTON_RIGHT) 103#elif defined(BUTTON_LEFT) && defined(BUTTON_RIGHT)
85 {PF_PREV, BUTTON_LEFT, BUTTON_NONE}, 104 {PF_PREV, BUTTON_LEFT, BUTTON_NONE},
86 {PF_PREV_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE}, 105 {PF_PREV_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
@@ -1559,6 +1578,35 @@ static char* get_track_filename(const int track_index)
1559} 1578}
1560#endif 1579#endif
1561 1580
1581
1582
1583static int get_album_artist_alpha_prev_index(void)
1584{
1585 char* current_album_artist = get_album_artist(center_index);
1586 for (int i = center_index - 1; i > 0; i-- )
1587 {
1588 int artist_idx = pf_idx.album_index[i].artist_idx;
1589 if(rb->strncmp(pf_idx.artist_names + artist_idx, current_album_artist, 1))
1590 current_album_artist = pf_idx.artist_names + artist_idx;
1591 while (i > 0 && !rb->strncmp(pf_idx.artist_names + pf_idx.album_index[i-1].artist_idx, current_album_artist, 1))
1592 i--;
1593 return i;
1594 }
1595 return 0;
1596}
1597
1598static int get_album_artist_alpha_next_index(void)
1599{
1600 char* current_album_artist = get_album_artist(center_index);
1601 for (int i = center_index + 1; i < pf_idx.album_ct; i++ )
1602 {
1603 int artist_idx = pf_idx.album_index[i].artist_idx;
1604 if(rb->strncmp(pf_idx.artist_names + artist_idx, current_album_artist, 1))
1605 return i;
1606 }
1607 return pf_idx.album_ct - 1;
1608}
1609
1562static int get_wps_current_index(void) 1610static int get_wps_current_index(void)
1563{ 1611{
1564 char* current_artist = UNTAGGED; 1612 char* current_artist = UNTAGGED;
@@ -3940,6 +3988,20 @@ static int pictureflow_main(void)
3940 if ( pf_state == pf_idle || pf_state == pf_scrolling ) 3988 if ( pf_state == pf_idle || pf_state == pf_scrolling )
3941 show_previous_slide(); 3989 show_previous_slide();
3942 break; 3990 break;
3991 case PF_JMP:
3992 if (pf_state == pf_idle || pf_state == pf_scrolling)
3993 {
3994 pf_state = pf_idle;
3995 set_current_slide(get_album_artist_alpha_next_index());
3996 }
3997 break;
3998 case PF_JMP_PREV:
3999 if (pf_state == pf_idle || pf_state == pf_scrolling)
4000 {
4001 pf_state = pf_idle;
4002 set_current_slide(get_album_artist_alpha_prev_index());
4003 }
4004 break;
3943#if PF_PLAYBACK_CAPABLE 4005#if PF_PLAYBACK_CAPABLE
3944 case PF_CONTEXT: 4006 case PF_CONTEXT:
3945 if (pf_cfg.auto_wps != 0 && 4007 if (pf_cfg.auto_wps != 0 &&