Code

Update copyright notices
[ncmpc.git] / src / screen_utils.c
index b4bd971f634b50a86dea4f2560f045c056acb022..ab1b39b0163c6c25a32de3bf9cff58b0f7d19935 100644 (file)
@@ -1,5 +1,5 @@
 /* ncmpc (Ncurses MPD Client)
- * (c) 2004-2009 The Music Player Daemon Project
+ * (c) 2004-2010 The Music Player Daemon Project
  * Project homepage: http://musicpd.org
  
  * This program is free software; you can redistribute it and/or modify
 #include "options.h"
 #include "colors.h"
 #include "wreadln.h"
-#ifndef NCMPC_H
-#include "ncmpc.h"
-#endif /* NCMPC_H */
 
-#include <stdlib.h>
-#include <unistd.h>
-
-#define FIND_PROMPT  _("Find")
-#define RFIND_PROMPT _("Find backward")
-#define JUMP_PROMPT _("Jump")
+#include <mpd/client.h>
 
 void
 screen_bell(void)
@@ -46,8 +38,9 @@ screen_bell(void)
 }
 
 int
-screen_getch(WINDOW *w, const char *prompt)
+screen_getch(const char *prompt)
 {
+       WINDOW *w = screen.status_bar.window.w;
        int key = -1;
 
        colors_use(w, COLOR_STATUS_ALERT);
@@ -64,7 +57,7 @@ screen_getch(WINDOW *w, const char *prompt)
 #ifdef HAVE_GETMOUSE
        /* ignore mouse events */
        if (key == KEY_MOUSE)
-               return screen_getch(w, prompt);
+               return screen_getch(prompt);
 #endif
 
        noecho();
@@ -74,200 +67,42 @@ screen_getch(WINDOW *w, const char *prompt)
 }
 
 char *
-screen_readln(WINDOW *w,
-             const char *prompt,
+screen_readln(const char *prompt,
              const char *value,
              GList **history,
              GCompletion *gcmp)
 {
+       struct window *window = &screen.status_bar.window;
+       WINDOW *w = window->w;
        char *line = NULL;
 
        wmove(w, 0,0);
        curs_set(1);
        colors_use(w, COLOR_STATUS_ALERT);
-       line = wreadln(w, prompt, value, COLS, history, gcmp);
+       line = wreadln(w, prompt, value, window->cols, history, gcmp);
        curs_set(0);
        return line;
 }
 
 char *
-screen_getstr(WINDOW *w, const char *prompt)
-{
-       return screen_readln(w, prompt, NULL, NULL, NULL);
-}
-
-static char *
-screen_read_password(WINDOW *w, const char *prompt)
+screen_read_password(const char *prompt)
 {
+       struct window *window = &screen.status_bar.window;
+       WINDOW *w = window->w;
        char *ret;
 
-       if (w == NULL) {
-               int rows, cols;
-               getmaxyx(stdscr, rows, cols);
-               /* create window for input */
-               w = newwin(1,  cols, rows-1, 0);
-               leaveok(w, FALSE);
-               keypad(w, TRUE);
-       }
-
        wmove(w, 0,0);
        curs_set(1);
        colors_use(w, COLOR_STATUS_ALERT);
 
        if (prompt == NULL)
                prompt = _("Password");
-       ret = wreadln_masked(w, prompt, NULL, COLS, NULL, NULL);
+       ret = wreadln_masked(w, prompt, NULL, window->cols, NULL, NULL);
 
        curs_set(0);
        return ret;
 }
 
-static gint
-_screen_auth(struct mpdclient *c, gint recursion)
-{
-       char *password;
-
-       mpd_clearError(c->connection);
-       if (recursion > 2)
-               return 1;
-
-       password = screen_read_password(NULL, NULL);
-       if (password == NULL)
-               return 1;
-
-       mpd_sendPasswordCommand(c->connection, password);
-       g_free(password);
-
-       mpd_finishCommand(c->connection);
-       mpdclient_update(c);
-       if (c->connection->errorCode == MPD_ACK_ERROR_PASSWORD)
-               return  _screen_auth(c, ++recursion);
-       return 0;
-}
-
-gint
-screen_auth(struct mpdclient *c)
-{
-       gint ret = _screen_auth(c, 0);
-       mpdclient_update(c);
-       curs_set(0);
-       return ret;
-}
-
-/* query user for a string and find it in a list window */
-int
-screen_find(list_window_t *lw,
-           int rows,
-           command_t findcmd,
-           list_window_callback_fn_t callback_fn,
-           void *callback_data)
-{
-       int reversed = 0;
-       bool found;
-       const char *prompt = FIND_PROMPT;
-       char *value = options.find_show_last_pattern ? (char *) -1 : NULL;
-
-       if (findcmd == CMD_LIST_RFIND || findcmd == CMD_LIST_RFIND_NEXT) {
-               prompt = RFIND_PROMPT;
-               reversed = 1;
-       }
-
-       switch (findcmd) {
-       case CMD_LIST_FIND:
-       case CMD_LIST_RFIND:
-               if (screen.findbuf) {
-                       g_free(screen.findbuf);
-                       screen.findbuf=NULL;
-               }
-               /* continue... */
-
-       case CMD_LIST_FIND_NEXT:
-       case CMD_LIST_RFIND_NEXT:
-               if (!screen.findbuf)
-                       screen.findbuf=screen_readln(screen.status_window.w,
-                                                    prompt,
-                                                    value,
-                                                    &screen.find_history,
-                                                    NULL);
-
-               if (screen.findbuf == NULL)
-                       return 1;
-
-               found = reversed
-                       ? list_window_rfind(lw,
-                                           callback_fn, callback_data,
-                                           screen.findbuf,
-                                           options.find_wrap,
-                                           options.bell_on_wrap,
-                                           rows)
-                       : list_window_find(lw,
-                                          callback_fn, callback_data,
-                                          screen.findbuf,
-                                          options.find_wrap,
-                                          options.bell_on_wrap);
-               if (!found) {
-                       screen_status_printf(_("Unable to find \'%s\'"),
-                                            screen.findbuf);
-                       screen_bell();
-               }
-               return 1;
-       default:
-               break;
-       }
-       return 0;
-}
-
-/* query user for a string and jump to the entry
- * which begins with this string while the users types */
-void
-screen_jump(struct list_window *lw,
-               list_window_callback_fn_t callback_fn,
-               void *callback_data)
-{
-       char *search_str, *iter;
-       const int WRLN_MAX_LINE_SIZE = 1024;
-       int key = 65;
-       command_t cmd;
-
-       if (screen.findbuf) {
-               g_free(screen.findbuf);
-               screen.findbuf = NULL;
-       }
-       screen.findbuf = g_malloc0(WRLN_MAX_LINE_SIZE);
-       /* In screen.findbuf is the whole string which is displayed in the status_window
-        * and search_str is the string the user entered (without the prompt) */
-       search_str = screen.findbuf + g_snprintf(screen.findbuf, WRLN_MAX_LINE_SIZE, "%s: ", JUMP_PROMPT);
-       iter = search_str;
-
-       /* unfortunately wgetch returns "next/previous-page" not as an ascii-char */
-       while(!g_ascii_iscntrl(key) && key != KEY_NPAGE && key != KEY_PPAGE) {
-               key = screen_getch(screen.status_window.w, screen.findbuf);
-               /* if backspace was pressed */
-               if (key == KEY_BACKSPACE) {
-                       /* don't end the loop */
-                       key = 65;
-                       if (search_str <= g_utf8_find_prev_char(screen.findbuf, iter))
-                               iter = g_utf8_find_prev_char(screen.findbuf, iter);
-                       *iter = '\0';
-                       continue;
-               }
-               else {
-                       *iter = key;
-                       if (iter < screen.findbuf + WRLN_MAX_LINE_SIZE - 3)
-                               ++iter;
-               }
-               list_window_jump(lw, callback_fn, callback_data, search_str);
-               /* repaint the list_window */
-               list_window_paint(lw, callback_fn, callback_data);
-               wrefresh(lw->w);
-       }
-
-       /* ncmpc should get the command */
-       ungetch(key);
-       if ((cmd=get_keyboard_command()) != CMD_NONE)
-               do_input_event(cmd);
-}
-
 void
 screen_display_completion_list(GList *list)
 {
@@ -311,7 +146,7 @@ void
 set_xterm_title(const char *format, ...)
 {
        /* the current xterm title exists under the WM_NAME property */
-       /* and can be retreived with xprop -id $WINDOWID */
+       /* and can be retrieved with xprop -id $WINDOWID */
 
        if (options.enable_xterm_title) {
                if (g_getenv("WINDOWID")) {