aboutsummaryrefslogblamecommitdiffstats
path: root/screen_help.c
blob: 34a007c0af1a53dbce9c36f7238d1e11ae90b53b (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                         
                         



















                                                     


                                                



                                                  
                       








                                                  






                                                                   



                                                


                                                              











































































                                                               








                                                                  
 
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <ncurses.h>

#include "config.h"
#include "libmpdclient.h"
#include "mpc.h"
#include "command.h"
#include "screen.h"
#include "screen_utils.h"
#include "screen_help.h"

typedef struct
{
  char highlight;
  command_t command;
  char *text;
} help_text_row_t;

static help_text_row_t help_text[] = 
{
  { 1, CMD_NONE,  "          Keys   " },
  { 0, CMD_NONE,  "        --------" },
  { 0, CMD_STOP,           "Stop" },
  { 0, CMD_PAUSE,          "Pause" },
  { 0, CMD_TRACK_NEXT,     "Next track" },
  { 0, CMD_TRACK_PREVIOUS, "Prevoius track (back)" },
  { 0, CMD_VOLUME_DOWN,    "Volume down" },
  { 0, CMD_VOLUME_UP,      "Volume up" },
  { 0, CMD_NONE, " " },
  { 0, CMD_LIST_NEXT,      "Move cursor up" },
  { 0, CMD_LIST_PREVIOUS,  "Move cursor down" },
  { 0, CMD_LIST_FIND,      "Find" },
  { 0, CMD_LIST_RFIND,     "find backward" },
  { 0, CMD_LIST_FIND_NEXT, "Find next" },
  { 0, CMD_LIST_RFIND_NEXT,"Find previuos" },
  { 0, CMD_TOGGLE_FIND_WRAP, "Toggle find mode" },
  { 0, CMD_NONE, " " },
  { 0, CMD_SCREEN_NEXT,   "Change screen" },
  { 0, CMD_SCREEN_HELP,   "Help screen" },
  { 0, CMD_SCREEN_PLAY,   "Playlist screen" },
  { 0, CMD_SCREEN_FILE,   "Browse screen" },
  { 0, CMD_QUIT,          "Quit" },
  { 0, CMD_NONE, " " },
  { 0, CMD_NONE, " " },
  { 1, CMD_NONE, "    Keys - Playlist screen " },
  { 0, CMD_NONE, "  --------------------------" },
  { 0, CMD_PLAY,           "Play selected entry" },
  { 0, CMD_DELETE,         "Delete selected entry from playlist" },
  { 0, CMD_SHUFFLE,        "Shuffle playlist" },
  { 0, CMD_CLEAR,          "Clear playlist" },
  { 0, CMD_SAVE_PLAYLIST,  "Save playlist" },
  { 0, CMD_REPEAT,         "Toggle repeat mode" },
  { 0, CMD_RANDOM,         "Toggle random mode" },
  { 0, CMD_NONE, " " },
  { 0, CMD_NONE, " " },
  { 1, CMD_NONE, "    Keys - Browse screen " },
  { 0, CMD_NONE, "  ------------------------" },
  { 0, CMD_PLAY,            "Enter directory/Load playlist" },
  { 0, CMD_SELECT,          "Add/remove song from playlist" },
  { 0, CMD_DELETE_PLAYLIST, "Delete playlist" },
  { 0, CMD_NONE, " " },
  { 0, CMD_NONE, " " },
  { 1, CMD_NONE, " " PACKAGE " version " VERSION },
  { 0, CMD_NONE, NULL }
};

static int help_text_rows = -1;



static char *
list_callback(int index, int *highlight, void *data)
{
  static char buf[256];

  if( help_text_rows<0 )
    {
      help_text_rows = 0;
      while( help_text[help_text_rows].text )
	help_text_rows++;
    }

  *highlight = 0;
  if( index<help_text_rows )
    {
      *highlight = help_text[index].highlight;
      if( help_text[index].command == CMD_NONE )
	return help_text[index].text;
      snprintf(buf, 256, 
	       "%20s : %s", 
	       command_get_keys(help_text[index].command),
	       help_text[index].text);
      return buf;
    }

  return NULL;
}


void 
help_open(screen_t *screen, mpd_client_t *c)
{
}

void 
help_close(screen_t *screen, mpd_client_t *c)
{
}

void 
help_paint(screen_t *screen, mpd_client_t *c)
{
  list_window_t *w = screen->helplist;

  w->clear = 1;
  list_window_paint(screen->helplist, list_callback, NULL);
  wrefresh(screen->helplist->w);
}

void 
help_update(screen_t *screen, mpd_client_t *c)
{  
  list_window_t *w = screen->helplist;
 
  if( w->repaint )
    {
      list_window_paint(screen->helplist, list_callback, NULL);
      wrefresh(screen->helplist->w);
      w->repaint = 0;
    }
}


int 
help_cmd(screen_t *screen, mpd_client_t *c, command_t cmd)
{
  int retval;

  retval = list_window_cmd(screen->helplist, help_text_rows, cmd);
  if( !retval )
    return screen_find(screen, c, 
		       screen->helplist, help_text_rows,
		       cmd, list_callback);

  return retval;
}