From e2665944cbd86b4f7516d9bb4f95f581b699923c Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 7 Feb 2012 22:59:47 +0000 Subject: [PATCH] SImple window switching for message and console --- app.c | 44 +++++++++++++--- windows.c | 149 ++++++++++++++++++++++++++++++++++-------------------- windows.h | 15 +++--- 3 files changed, 142 insertions(+), 66 deletions(-) diff --git a/app.c b/app.c index e7cf7589..7830c3b2 100644 --- a/app.c +++ b/app.c @@ -7,37 +7,49 @@ #include "windows.h" #include "jabber.h" +#define CHAT 0 +#define CONS 1 + static void main_event_loop(void); void start_profanity(void) { char cmd[50]; while (TRUE) { - cmd_get_command_str(cmd); + inp_get_command_str(cmd); if (strcmp(cmd, "/quit") == 0) { break; + } else if (strncmp(cmd, "/help", 5) == 0) { + cons_help(); + cons_show(); + inp_clear(); } else if (strncmp(cmd, "/connect ", 9) == 0) { char *user; user = strndup(cmd+9, strlen(cmd)-9); bar_print_message("Enter password:"); char passwd[20]; - cmd_get_password(passwd); + inp_get_password(passwd); bar_print_message(user); jabber_connect(user, passwd); + chat_show(); main_event_loop(); break; } else { - cmd_clear(); + cons_bad_command(cmd); + cons_show(); + inp_clear(); } } } static void main_event_loop(void) { - cmd_non_block(); + int showing = CHAT; + + inp_non_block(); while(TRUE) { int ch = ERR; @@ -50,9 +62,20 @@ static void main_event_loop(void) // handle incoming messages jabber_process_events(); + if (showing == CHAT) { + chat_show(); + } + // determine if they changed windows + if (ch == KEY_F(1)) { + cons_show(); + showing = CONS; + } else if (ch == KEY_F(2)) { + chat_show(); + showing = CHAT; + } // get another character from the command box - cmd_poll_char(&ch, command, &size); + inp_poll_char(&ch, command, &size); } // null terminate the input @@ -61,10 +84,19 @@ static void main_event_loop(void) // newline was hit, check if /quit command issued if (strcmp(command, "/quit") == 0) { break; + } else if (strncmp(command, "/help", 5) == 0) { + cons_help(); + if (showing == CONS) { + cons_show(); + } + inp_clear(); } else { jabber_send(command); show_outgoing_msg("me", command); - cmd_clear(); + if (showing == CHAT) { + chat_show(); + } + inp_clear(); } } diff --git a/windows.c b/windows.c index 2b6148c5..86108de6 100644 --- a/windows.c +++ b/windows.c @@ -2,16 +2,21 @@ #include "windows.h" -// window references +// common window references static WINDOW *title_bar; -static WINDOW *cmd_bar; -static WINDOW *cmd_win; -static WINDOW *main_win; +static WINDOW *inp_bar; +static WINDOW *inp_win; + +// main windows +static WINDOW *chat_win; +static WINDOW *cons_win; static void create_title_bar(void); -static void create_command_bar(void); -static void create_command_window(void); -static void create_main_window(void); +static void create_input_bar(void); +static void create_input_window(void); + +static void create_chat_window(void); +static void create_console_window(void); void gui_init(void) { @@ -34,14 +39,15 @@ void gui_init(void) create_title_bar(); wrefresh(title_bar); - create_command_bar(); - wrefresh(cmd_bar); - create_command_window(); - wrefresh(cmd_win); - create_main_window(); - wrefresh(main_win); + create_input_bar(); + wrefresh(inp_bar); + create_input_window(); + wrefresh(inp_win); - wmove(cmd_win, 0, 0); + create_chat_window(); + create_console_window(); + + wmove(inp_win, 0, 0); } void gui_close(void) @@ -54,8 +60,7 @@ void show_incomming_msg(char *from, char *message) char line[100]; sprintf(line, "%s: %s\n", from, message); - wprintw(main_win, line); - wrefresh(main_win); + wprintw(chat_win, line); } void show_outgoing_msg(char *from, char* message) @@ -63,73 +68,96 @@ void show_outgoing_msg(char *from, char* message) char line[100]; sprintf(line, "%s: %s\n", from, message); - wprintw(main_win, line); - wrefresh(main_win); + wprintw(chat_win, line); } -void cmd_get_command_str(char *cmd) +void inp_get_command_str(char *cmd) { - wmove(cmd_win, 0, 0); - wgetstr(cmd_win, cmd); + wmove(inp_win, 0, 0); + wgetstr(inp_win, cmd); } -void cmd_clear(void) +void inp_clear(void) { - wclear(cmd_win); - wmove(cmd_win, 0, 0); - wrefresh(cmd_win); + wclear(inp_win); + wmove(inp_win, 0, 0); + wrefresh(inp_win); } -void cmd_non_block(void) +void inp_non_block(void) { - wtimeout(cmd_win, 0); + wtimeout(inp_win, 0); } -void cmd_poll_char(int *ch, char command[], int *size) +void inp_poll_char(int *ch, char command[], int *size) { - int cmd_y = 0; - int cmd_x = 0; + int inp_y = 0; + int inp_x = 0; - // move cursor back to cmd_win - getyx(cmd_win, cmd_y, cmd_x); - wmove(cmd_win, cmd_y, cmd_x); + // 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(cmd_win); + *ch = wgetch(inp_win); // if delete pressed, go back and delete it if (*ch == 127) { if (*size > 0) { - getyx(cmd_win, cmd_y, cmd_x); - wmove(cmd_win, cmd_y, cmd_x-1); - wdelch(cmd_win); + 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') { - waddch(cmd_win, *ch); + waddch(inp_win, *ch); command[(*size)++] = *ch; } echo(); - - } -void cmd_get_password(char *passwd) +void inp_get_password(char *passwd) { - wclear(cmd_win); + wclear(inp_win); noecho(); - mvwgetstr(cmd_win, 0, 0, passwd); + mvwgetstr(inp_win, 0, 0, passwd); echo(); } void bar_print_message(char *msg) { - mvwprintw(cmd_bar, 0, 0, msg); - wrefresh(cmd_bar); + mvwprintw(inp_bar, 0, 0, msg); + wrefresh(inp_bar); +} + +void cons_help(void) +{ + waddstr(cons_win, "Help\n"); + waddstr(cons_win, "----\n"); + waddstr(cons_win, "/quit - Quits Profanity.\n"); + waddstr(cons_win, "/connect - Login to jabber.\n"); +} + +void cons_bad_command(char *cmd) +{ + wprintw(cons_win, "Unknown command: %s\n", cmd); +} + +void cons_show(void) +{ + touchwin(cons_win); + wrefresh(cons_win); +} + +void chat_show(void) +{ + touchwin(chat_win); + wrefresh(chat_win); } static void create_title_bar(void) @@ -144,30 +172,43 @@ static void create_title_bar(void) mvwprintw(title_bar, 0, 0, title); } -static void create_command_bar(void) +static void create_input_bar(void) { int rows, cols; getmaxyx(stdscr, rows, cols); - cmd_bar = newwin(1, cols, rows-2, 0); - wbkgd(cmd_bar, COLOR_PAIR(3)); + inp_bar = newwin(1, cols, rows-2, 0); + wbkgd(inp_bar, COLOR_PAIR(3)); } -static void create_command_window(void) +static void create_input_window(void) { int rows, cols; getmaxyx(stdscr, rows, cols); - cmd_win = newwin(1, cols, rows-1, 0); - keypad(cmd_win, TRUE); + inp_win = newwin(1, cols, rows-1, 0); + keypad(inp_win, TRUE); } -static void create_main_window(void) +static void create_chat_window(void) { int rows, cols; getmaxyx(stdscr, rows, cols); - main_win = newwin(rows-3, cols, 1, 0); - scrollok(main_win, TRUE); + chat_win = newwin(rows-3, cols, 1, 0); + scrollok(chat_win, TRUE); } +static void create_console_window(void) +{ + int rows, cols; + getmaxyx(stdscr, rows, cols); + + cons_win = newwin(rows-3, cols, 1, 0); + scrollok(cons_win, TRUE); + + waddstr(cons_win, "Welcome to Profanity.\n"); + touchwin(cons_win); + wrefresh(cons_win); + +} diff --git a/windows.h b/windows.h index 5f411cf9..34203873 100644 --- a/windows.h +++ b/windows.h @@ -8,11 +8,14 @@ void gui_init(void); void gui_close(void); void show_incomming_msg(char *from, char *message); void show_outgoing_msg(char *from, char *message); -void cmd_get_command_str(char *cmd); -void cmd_poll_char(int *ch, char command[], int *size); -void cmd_clear(void); -void cmd_non_block(void); -void cmd_get_password(char *passwd); +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_show(void); +void chat_show(void); +void cons_bad_command(char *cmd); #endif