00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00031 #include "stdinc.h"
00032
00033 #include "gui.h"
00034 #include "gui_internal.h"
00035
00039 static int message_prio = 0;
00043 static GString *message;
00047 static WINDOW *win_msgbar;
00048
00049 void
00050 gui_msgbar_init(void)
00051 {
00052 win_msgbar = newwin(1, 0, GUI_SIZE_MSGBAR_TOP, 0);
00053 clearok(win_msgbar, TRUE);
00054 if (gui_draw_colors)
00055 wbkgdset(win_msgbar, COLOR_PAIR(GUI_COLOR_BAR));
00056 else
00057 wbkgdset(win_msgbar, A_REVERSE);
00058
00059 message = g_string_sized_new(32);
00060
00061
00062 curs_set(0);
00063
00064 gui_msgbar_refresh();
00065 }
00066
00067 void
00068 gui_msgbar_destroy(void)
00069 {
00070 g_string_free(message, TRUE);
00071 delwin(win_msgbar);
00072 win_msgbar = NULL;
00073 }
00074
00075 void
00076 gui_msgbar_resize(void)
00077 {
00078 gui_lock();
00079 wresize(win_msgbar, 1, COLS);
00080 mvwin(win_msgbar, GUI_SIZE_MSGBAR_TOP, 0);
00081 clearok(win_msgbar, TRUE);
00082 gui_unlock();
00083
00084 gui_msgbar_refresh();
00085 }
00086
00087 void
00088 gui_msgbar_refresh(void)
00089 {
00090 gui_lock();
00091 if (win_msgbar != NULL) {
00092 werase(win_msgbar);
00093 mvwaddstr(win_msgbar, 0, 1, message->str);
00094 wnoutrefresh(win_msgbar);
00095 }
00096 gui_unlock();
00097 }
00098
00099 void
00100 gui_msgbar_flush(void)
00101 {
00102 gui_lock();
00103 g_string_assign(message, "");
00104 message_prio = -1;
00105 curs_set(0);
00106 gui_unlock();
00107
00108 gui_msgbar_refresh();
00109 }
00110
00114 static void
00115 gui_msgbar_update(const char *msg, int prio, int cursor)
00116 {
00117 gui_lock();
00118
00119
00120
00121
00122
00123 if (prio < message_prio) {
00124 gui_unlock();
00125 return;
00126 }
00127
00128 g_string_assign(message, msg);
00129 message_prio = prio;
00130 gui_unlock();
00131
00132 curs_set(cursor);
00133 gui_msgbar_refresh();
00134 gui_draw_done();
00135 }
00136
00137 void
00138 gui_msgbar_warn(const char *msg)
00139 {
00140 gui_msgbar_update(msg, 0, 0);
00141 }
00142
00143 void
00144 gui_msgbar_ask(const char *msg)
00145 {
00146 gui_msgbar_update(msg, 1, 1);
00147 }