From a7190ed7e483c6791e8f05fd3564d31bd17c8cfa Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 8 Feb 2012 23:49:46 +0000 Subject: [PATCH] Split window functions --- Makefile | 5 +- app.c | 4 +- windows.c | 133 ++---------------------------------------------------- windows.h | 24 +++++++--- 4 files changed, 26 insertions(+), 140 deletions(-) diff --git a/Makefile b/Makefile index 9451b991..176c8bb4 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,16 @@ CC = gcc WARNS = -Werror -Wall -Wextra -Wno-unused-parameter -Wno-unused-but-set-variable LIBS = -lxml2 -lssl -lresolv -lncurses -lstrophe CFLAGS = -O3 $(WARNS) $(LIBS) -OBJS = log.o windows.o jabber.o app.o profanity.o +OBJS = log.o windows.o title_bar.o input_bar.o input_win.o jabber.o app.o profanity.o profanity: $(OBJS) $(CC) -o profanity $(OBJS) $(LIBS) log.o: log.h windows.o: windows.h +title_bar.o: windows.h +input_bar.o: windows.h +input_win.o: windows.h jabber.o: jabber.h log.h windows.h app.o: log.h windows.h jabber.h profanity.o: log.h windows.h app.h diff --git a/app.c b/app.c index c1c0cc99..2f01ca12 100644 --- a/app.c +++ b/app.c @@ -24,11 +24,11 @@ void start_profanity(void) char *user; user = strndup(cmd+9, strlen(cmd)-9); - bar_print_message("Enter password:"); + inp_bar_print_message("Enter password:"); char passwd[20]; inp_get_password(passwd); - bar_print_message(user); + inp_bar_print_message(user); jabber_connect(user, passwd); main_event_loop(); break; diff --git a/windows.c b/windows.c index 983583a5..3b4a153c 100644 --- a/windows.c +++ b/windows.c @@ -2,19 +2,9 @@ #include #include "windows.h" -// common window references -static WINDOW *title_bar; -static WINDOW *inp_bar; -static WINDOW *inp_win; - static struct prof_win wins[10]; static int curr_win = 0; -// main windows -static void create_title_bar(void); -static void create_input_bar(void); -static void create_input_window(void); - static void create_windows(void); void gui_init(void) @@ -37,15 +27,10 @@ void gui_init(void) refresh(); create_title_bar(); - wrefresh(title_bar); create_input_bar(); - wrefresh(inp_bar); create_input_window(); - wrefresh(inp_win); create_windows(); - - wmove(inp_win, 0, 0); } void gui_close(void) @@ -67,10 +52,7 @@ void close_win(void) wclear(wins[curr_win].win); // set it as inactive in the status bar - mvwaddch(inp_bar, 0, 30 + curr_win, ' '); - if (curr_win == 9) - mvwaddch(inp_bar, 0, 30 + curr_win + 1, ' '); - wrefresh(inp_bar); + inp_bar_inactive(curr_win); // go back to console window touchwin(wins[0].win); @@ -111,9 +93,7 @@ void show_incomming_msg(char *from, char *message) wprintw(wins[i].win, line); // signify active window in status bar - mvwprintw(inp_bar, 0, 30 + i, "%d", i+1); - touchwin(inp_bar); - wrefresh(inp_bar); + inp_bar_active(i); // if its the current window, draw it if (curr_win == i) { @@ -127,9 +107,7 @@ void show_incomming_msg(char *from, char *message) wprintw(wins[i].win, line); // signify active window in status bar - mvwprintw(inp_bar, 0, 30 + i, "%d", i+1); - touchwin(inp_bar); - wrefresh(inp_bar); + inp_bar_active(i); // if its the current window, draw it if (curr_win == i) { @@ -149,81 +127,6 @@ void show_outgoing_msg(char *from, char* message) wrefresh(wins[curr_win].win); } -void inp_get_command_str(char *cmd) -{ - wmove(inp_win, 0, 0); - wgetstr(inp_win, cmd); -} - -void inp_clear(void) -{ - wclear(inp_win); - wmove(inp_win, 0, 0); - wrefresh(inp_win); -} - -void inp_non_block(void) -{ - wtimeout(inp_win, 0); -} - -void inp_poll_char(int *ch, char command[], int *size) -{ - int inp_y = 0; - int inp_x = 0; - - // move cursor back to inp_win - getyx(inp_win, inp_y, inp_x); - wmove(inp_win, inp_y, inp_x); - - // echo off, and get some more input - noecho(); - *ch = wgetch(inp_win); - - // if delete pressed, go back and delete it - if (*ch == 127) { - if (*size > 0) { - getyx(inp_win, inp_y, inp_x); - wmove(inp_win, inp_y, inp_x-1); - wdelch(inp_win); - (*size)--; - } - } - - // else if not error or newline, show it and store it - else if (*ch != ERR && - *ch != '\n' && - *ch != KEY_F(1) && - *ch != KEY_F(2) && - *ch != KEY_F(3) && - *ch != KEY_F(4) && - *ch != KEY_F(5) && - *ch != KEY_F(6) && - *ch != KEY_F(7) && - *ch != KEY_F(8) && - *ch != KEY_F(9) && - *ch != KEY_F(10)) { - waddch(inp_win, *ch); - command[(*size)++] = *ch; - } - - echo(); -} - -void inp_get_password(char *passwd) -{ - wclear(inp_win); - noecho(); - mvwgetstr(inp_win, 0, 0, passwd); - echo(); -} - -void bar_print_message(char *msg) -{ - mvwprintw(inp_bar, 0, 0, msg); - wrefresh(inp_bar); -} - void cons_help(void) { waddstr(wins[9].win, "Help\n"); @@ -249,36 +152,6 @@ void cons_bad_command(char *cmd) } } -static void create_title_bar(void) -{ - char *title = "Profanity"; - - int rows, cols; - getmaxyx(stdscr, rows, cols); - - title_bar = newwin(1, cols, 0, 0); - wbkgd(title_bar, COLOR_PAIR(3)); - mvwprintw(title_bar, 0, 0, title); -} - -static void create_input_bar(void) -{ - int rows, cols; - getmaxyx(stdscr, rows, cols); - - inp_bar = newwin(1, cols, rows-2, 0); - wbkgd(inp_bar, COLOR_PAIR(3)); -} - -static void create_input_window(void) -{ - int rows, cols; - getmaxyx(stdscr, rows, cols); - - inp_win = newwin(1, cols, rows-1, 0); - keypad(inp_win, TRUE); -} - static void create_windows(void) { int rows, cols; diff --git a/windows.h b/windows.h index 3e2918fb..4f832c4b 100644 --- a/windows.h +++ b/windows.h @@ -1,7 +1,6 @@ #ifndef WINDOWS_H #define WINDOWS_h -#include #include struct prof_win { @@ -9,6 +8,23 @@ struct prof_win { WINDOW *win; }; +// create windows +void create_title_bar(void); +void create_input_bar(void); +void create_input_window(void); + +// input bar actions +void inp_bar_inactive(int win); +void inp_bar_active(int win); + +// input window actions +void inp_get_command_str(char *cmd); +void inp_poll_char(int *ch, char command[], int *size); +void inp_clear(void); +void inp_non_block(void); +void inp_get_password(char *passwd); +void inp_bar_print_message(char *msg); + void gui_init(void); void gui_close(void); void switch_to(int i); @@ -17,12 +33,6 @@ int in_chat(void); void get_recipient(char *recipient); void show_incomming_msg(char *from, char *message); void show_outgoing_msg(char *from, char *message); -void inp_get_command_str(char *cmd); -void inp_poll_char(int *ch, char command[], int *size); -void inp_clear(void); -void inp_non_block(void); -void inp_get_password(char *passwd); -void bar_print_message(char *msg); void cons_help(void); void cons_bad_command(char *cmd); #endif