]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - gui.c
gui: Kill struct gui_window->beg{xy}.
[paraslash.git] / gui.c
diff --git a/gui.c b/gui.c
index e4849fbab3f622ea160494bf7bbc9bdc653337cc..c467845251d72b74bdaa3ce0b270532fecb69aaa 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -34,8 +34,6 @@ static int signal_pipe;
 
 static struct gui_window {
        WINDOW *win;
-       size_t begx;
-       size_t begy;
        size_t cols;
        size_t lines;
 } top, bot, sb, in, sep;
@@ -73,7 +71,6 @@ enum gui_color_pair {
        COLOR_OUTPUT,
        COLOR_MSG,
        COLOR_ERRMSG,
-       COLOR_WELCOME,
        COLOR_SEPARATOR,
        COLOR_TOP,
        COLOR_BOT,
@@ -360,20 +357,14 @@ __printf_2_3 static void print_in_bar(int color, const char *fmt,...)
        wrefresh(in.win);
 }
 
-/*
- * update the status bar
- */
 static void print_status_bar(void)
 {
        char *tmp;
 
-       if (!curses_active)
-               return;
        tmp = para_strdup("para_gui " PACKAGE_VERSION " (hit ? for help)");
        wmove(sb.win, 0, 0);
        align_str(sb.win, tmp, sb.cols, CENTER);
        free(tmp);
-       wrefresh(sb.win);
 }
 
 /*
@@ -526,6 +517,7 @@ static __printf_2_3 void curses_log(int ll, const char *fmt,...)
        int color;
        char *msg;
        va_list ap;
+       unsigned bytes;
 
        if (ll < loglevel || !curses_active)
                return;
@@ -539,9 +531,10 @@ static __printf_2_3 void curses_log(int ll, const char *fmt,...)
                        color = COLOR_ERRMSG;
        }
        va_start(ap, fmt);
-       xvasprintf(&msg, fmt, ap);
+       bytes = xvasprintf(&msg, fmt, ap);
        va_end(ap);
-       chop(msg);
+       if (bytes > 0 && msg[bytes - 1] == '\n')
+               msg[bytes - 1] = '\0'; /* cut trailing newline */
        rb_add_entry(color, msg);
        wrefresh(bot.win);
 }
@@ -595,69 +588,42 @@ __noreturn __printf_2_3 static void msg_n_exit(int ret, const char* fmt, ...)
        kill_pg_and_die(ret);
 }
 
-static void print_welcome(void)
-{
-       if (loglevel > LL_NOTICE)
-               return;
-       outputf(COLOR_WELCOME, "Welcome to %s. Theme: %s",
-               version_single_line("gui"), theme.name);
-       wclrtoeol(bot.win);
-}
-
 /*
  * init all windows
  */
 static void init_wins(int top_lines)
 {
-       int i;
+       int top_y = 0, bot_y = top_lines + 1, sb_y = LINES - 2,
+               in_y = LINES - 1, sep_y = top_lines;
 
        top.lines = top_lines;
-       top.cols = COLS;
-       top.begy = 0;
-       top.begx = 0;
-
        bot.lines = LINES - top.lines - 3;
-       bot.cols = COLS;
-       bot.begy = top.lines + 1;
-       bot.begx = 0;
+       sb.lines = in.lines = sep.lines = 1;
 
-       sb.lines = 1;
-       sb.cols = COLS;
-       sb.begy = LINES - 2;
-       sb.begx = 0;
-
-       in.lines = 1;
-       in.cols = COLS;
-       in.begy = LINES - 1;
-       in.begx = 0;
-
-       sep.lines = 1;
-       sep.cols = COLS;
-       sep.begy = top.lines;
-       sep.begx = 0;
+       top.cols = bot.cols = sb.cols = in.cols = sep.cols = COLS;
 
        assume_default_colors(theme.default_fg, theme.default_bg);
        if (top.win) {
-               mvwin(top.win, top.begy, top.begx);
                wresize(top.win, top.lines, top.cols);
+               mvwin(top.win, top_y, 0);
 
-               mvwin(sb.win, sb.begy, sb.begx);
                wresize(sb.win, sb.lines, sb.cols);
+               mvwin(sb.win, sb_y, 0);
 
-               mvwin(sep.win, sep.begy, sep.begx);
                wresize(sep.win, sep.lines, sep.cols);
+               mvwin(sep.win, sep_y, 0);
 
-               mvwin(bot.win, bot.begy, bot.begx);
                wresize(bot.win, bot.lines, bot.cols);
+               mvwin(bot.win, bot_y, 0);
 
-               mvwin(in.win, in.begy, in.begx);
                wresize(in.win, in.lines, in.cols);
+               mvwin(in.win, in_y, 0);
        } else {
-               sep.win = newwin(sep.lines, sep.cols, sep.begy, sep.begx);
-               top.win = newwin(top.lines, top.cols, top.begy, top.begx);
-               bot.win = newwin(bot.lines, bot.cols, bot.begy, bot.begx);
-               sb.win = newwin(sb.lines, sb.cols, sb.begy, sb.begx);
-               in.win = newwin(in.lines, in.cols, in.begy, in.begx);
+               sep.win = newwin(sep.lines, sep.cols, sep_y, 0);
+               top.win = newwin(top.lines, top.cols, top_y, 0);
+               bot.win = newwin(bot.lines, bot.cols, bot_y, 0);
+               sb.win = newwin(sb.lines, sb.cols, sb_y, 0);
+               in.win = newwin(in.lines, in.cols, in_y, 0);
                if (!top.win || !bot.win || !sb.win || !in.win || !sep.win)
                        msg_n_exit(1, "Error: Cannot create curses windows\n");
                wclear(bot.win);
@@ -679,14 +645,13 @@ static void init_wins(int top_lines)
                keypad(in.win, 1);
        }
        wmove(sep.win, 0, 0);
-       for (i = 1; i <= COLS; i++)
-               waddstr(sep.win, theme.sep_str);
+       whline(sep.win, theme.sep_char, COLS);
        wclear(top.win);
        //wclear(bot.win);
        wnoutrefresh(top.win);
        wnoutrefresh(bot.win);
-       //wnoutrefresh(sb.win);
        print_status_bar();
+       wnoutrefresh(sb.win);
        wnoutrefresh(in.win);
        wnoutrefresh(sep.win);
        doupdate();
@@ -819,7 +784,6 @@ static void init_colors_or_die(void)
        init_pair_or_die(COLOR_OUTPUT, theme.output_fg, theme.output_bg);
        init_pair_or_die(COLOR_MSG, theme.msg_fg, theme.msg_bg);
        init_pair_or_die(COLOR_ERRMSG, theme.err_msg_fg, theme.err_msg_bg);
-       init_pair_or_die(COLOR_WELCOME, theme.welcome_fg, theme.welcome_bg);
        init_pair_or_die(COLOR_SEPARATOR, theme.sep_fg, theme.sep_bg);
        init_pair_or_die(COLOR_TOP, theme.default_fg, theme.default_bg);
        init_pair_or_die(COLOR_BOT, theme.default_fg, theme.default_bg);
@@ -1429,29 +1393,18 @@ static void com_refresh(void)
        init_curses();
 }
 
-static void change_theme(int next)
-{
-       if (next)
-               next_theme(&theme);
-       else
-               prev_theme(&theme);
-       /* This seems to be needed twice, why? */
-       com_refresh();
-       com_refresh();
-       PARA_NOTICE_LOG("new theme: %s\n", theme.name);
-}
-
 static void com_next_theme(void)
 {
-       change_theme(1);
+       theme_next(&theme);
+       com_refresh();
 }
 
 static void com_prev_theme(void)
 {
-       change_theme(0);
+       theme_prev(&theme);
+       com_refresh();
 }
 
-
 static void handle_command(int c)
 {
        int i;
@@ -1537,13 +1490,12 @@ int main(int argc, char *argv[])
                fprintf(stderr, "invalid key map\n");
                exit(EXIT_FAILURE);
        }
-       init_theme_or_die(conf.theme_arg, &theme);
+       theme_init(conf.theme_arg, &theme);
        setup_signal_handling();
        bot_win_rb = ringbuffer_new(RINGBUFFER_SIZE);
        setlocale(LC_CTYPE, "");
        initscr(); /* needed only once, always successful */
        init_curses();
-       print_welcome();
        for (;;) {
                print_status_bar();
                ret = do_select(GETCH_MODE);