diff --git a/src/screen.c b/src/screen.c
index 966dbd303ea56ec6cbdef04b5a565e80767fbff2..b947190011aac6beaf6c1dd71f0390dca3ef5214 100644 (file)
--- a/src/screen.c
+++ b/src/screen.c
#define SCREEN_PLAYLIST_ID 0
#define SCREEN_BROWSE_ID 1
+#define SCREEN_ARTIST_ID 2
#define SCREEN_HELP_ID 100
#define SCREEN_KEYDEF_ID 101
#define SCREEN_CLOCK_ID 102
+#define SCREEN_SEARCH_ID 103
+
+
/* screens */
extern screen_functions_t *get_screen_playlist(void);
extern screen_functions_t *get_screen_browse(void);
extern screen_functions_t *get_screen_help(void);
+extern screen_functions_t *get_screen_search(void);
+extern screen_functions_t *get_screen_artist(void);
extern screen_functions_t *get_screen_keydef(void);
extern screen_functions_t *get_screen_clock(void);
static screen_mode_info_t screens[] = {
{ SCREEN_PLAYLIST_ID, "playlist", get_screen_playlist },
{ SCREEN_BROWSE_ID, "browse", get_screen_browse },
+#ifdef ENABLE_ARTIST_SCREEN
+ { SCREEN_ARTIST_ID, "artist", get_screen_artist },
+#endif
{ SCREEN_HELP_ID, "help", get_screen_help },
+#ifdef ENABLE_SEARCH_SCREEN
+ { SCREEN_SEARCH_ID, "search", get_screen_search },
+#endif
#ifdef ENABLE_KEYDEF_SCREEN
{ SCREEN_KEYDEF_ID, "keydef", get_screen_keydef },
#endif
#ifdef ENABLE_CLOCK_SCREEN
{ SCREEN_CLOCK_ID, "clock", get_screen_clock },
#endif
- { -1, NULL, NULL }
+ { G_MAXINT, NULL, NULL }
};
static gboolean welcome = TRUE;
static int seek_id = -1;
static int seek_target_time = 0;
+gint
+screen_get_id(char *name)
+{
+ gint i=0;
+
+ while( screens[i].name )
+ {
+ if( strcmp(name, screens[i].name) == 0 )
+ return screens[i].id;
+ i++;
+ }
+ return -1;
+}
+
static gint
lookup_mode(gint id)
{
new_mode = lookup_mode(id);
if( new_mode>=0 && screens[new_mode].get_mode_functions )
{
+ D("switch_screen(%s)\n", screens[new_mode].name );
mode_fn = screens[new_mode].get_mode_functions();
screen->mode = new_mode;
}
}
+static void
+screen_next_mode(mpdclient_t *c, int offset)
+{
+ int max = g_strv_length(options.screen_list);
+ int current, next;
+ int i;
+
+ /* find current screen */
+ current = -1;
+ i = 0;
+ while( options.screen_list[i] )
+ {
+ if( strcmp(options.screen_list[i], screens[screen->mode].name) == 0 )
+ current = i;
+ i++;
+ }
+ next = current + offset;
+ if( next<0 )
+ next = max-1;
+ else if( next>=max )
+ next = 0;
+
+ D("current mode: %d:%d next:%d\n", current, max, next);
+ switch_screen_mode(screen_get_id(options.screen_list[next]), c);
+}
+
static void
paint_top_window(char *header, mpdclient_t *c, int clear)
{
colors_use(w, COLOR_TITLE_BOLD);
waddstr(w, get_key_names(CMD_SCREEN_FILE, FALSE));
colors_use(w, COLOR_TITLE);
- waddstr(w, _(":Browse"));
+ waddstr(w, _(":Browse "));
+#ifdef ENABLE_ARTIST_SCREEN
+ colors_use(w, COLOR_TITLE_BOLD);
+ waddstr(w, get_key_names(CMD_SCREEN_ARTIST, FALSE));
+ colors_use(w, COLOR_TITLE);
+ waddstr(w, _(":Artist "));
+#endif
+#ifdef ENABLE_SEARCH_SCREEN
+ colors_use(w, COLOR_TITLE_BOLD);
+ waddstr(w, get_key_names(CMD_SCREEN_SEARCH, FALSE));
+ colors_use(w, COLOR_TITLE);
+ waddstr(w, _(":Search "));
+#endif
}
if( c->status->volume==MPD_STATUS_NO_VOLUME )
{
i++;
}
+#if 0
+ /* broken */
+ mode_fn = NULL;
+ switch_screen_mode(screen_get_id(options.screen_list[0]), c);
+#else
mode_fn = get_screen_playlist();
+#endif
+
if( mode_fn && mode_fn->open )
mode_fn->open(screen, c);
void
screen_paint(mpdclient_t *c)
{
- D("screen_paint()\n");
- /* paint the title/header window */
+ char *title = NULL;
+
if( mode_fn && mode_fn->get_title )
- paint_top_window(mode_fn->get_title(screen->buf,screen->buf_size), c, 1);
+ title = mode_fn->get_title(screen->buf,screen->buf_size);
+
+ D("screen_paint(%s)\n", title);
+ /* paint the title/header window */
+ if( title )
+ paint_top_window(title, c, 1);
else
paint_top_window("", c, 1);
seek_id = c->song->id;
seek_target_time = c->status->elapsedTime;
}
- seek_target_time++;
+ seek_target_time+=options.seek_time;
if( seek_target_time < c->status->totalTime )
break;
seek_target_time = c->status->totalTime;
seek_id = c->song->id;
seek_target_time = c->status->elapsedTime;
}
- seek_target_time--;
+ seek_target_time-=options.seek_time;
if( seek_target_time < 0 )
seek_target_time=0;
}
screen->painted = 0;
break;
case CMD_SCREEN_PREVIOUS:
- if( screen->mode > 0 )
- switch_screen_mode(screens[screen->mode-1].id, c);
- else
- switch_screen_mode(lookup_mode(SCREEN_HELP_ID)-1, c);
+ screen_next_mode(c, -1);
break;
case CMD_SCREEN_NEXT:
- if( screens[screen->mode+1].id < SCREEN_HELP_ID )
- switch_screen_mode(screens[screen->mode+1].id, c);
- else
- switch_screen_mode(screens[0].id, c);
+ screen_next_mode(c, 1);
break;
case CMD_SCREEN_PLAY:
switch_screen_mode(SCREEN_PLAYLIST_ID, c);
case CMD_SCREEN_HELP:
switch_screen_mode(SCREEN_HELP_ID, c);
break;
+ case CMD_SCREEN_SEARCH:
+ switch_screen_mode(SCREEN_SEARCH_ID, c);
+ break;
+ case CMD_SCREEN_ARTIST:
+ switch_screen_mode(SCREEN_ARTIST_ID, c);
+ break;
case CMD_SCREEN_KEYDEF:
switch_screen_mode(SCREEN_KEYDEF_ID, c);
break;