Mercurial > hg > nnchat
annotate ui.h @ 576:414d11df07ce
Gracefully handle error situations when the main UI has not yet been
initialized properly.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 30 Dec 2012 08:12:38 +0200 |
parents | 3ae357fd34bb |
children | 97a49a6cc959 |
rev | line source |
---|---|
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Written by Matti 'ccr' Hämäläinen |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 * (C) Copyright 2008-2012 Tecnic Software productions (TNSP) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 */ |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 #ifndef LIBNNUI_H |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 #define LIBNNUI_H |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 |
468 | 9 #ifdef __WIN32 |
513 | 10 #define SET_DELAY (0) |
468 | 11 // Undefine because both windows.h and curses.h #define it |
12 #undef MOUSE_MOVED | |
513 | 13 #else |
14 #define SET_DELAY (5) | |
468 | 15 #endif |
513 | 16 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 #ifdef HAVE_NCURSES_H |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 #include <ncurses.h> |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 #else |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 #include <curses.h> |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 #endif |
554
13901e9be15b
Implement daily logs for room logs.
Matti Hamalainen <ccr@tnsp.org>
parents:
541
diff
changeset
|
22 #include <time.h> |
468 | 23 #include "th_types.h" |
24 #include "th_string.h" | |
513 | 25 #include "network.h" |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
27 #define SET_MAX_WINDOWS (32) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
28 #define NN_BACKBUF_LEN (512) // Backbuffer size (in lines) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
30 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
31 typedef struct |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
32 { |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
33 int *buf; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
34 size_t len, bufsize; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
35 } nn_line_t; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
36 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
37 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 typedef struct |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 qringbuf_t *data; // "Backbuffer" data for this window |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 int pos; // Current position in the window, 0 = real time |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 BOOL dirty; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
44 int num; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 char *id; // Chatter ID, NULL = main window |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
47 nn_line_t *line; |
541
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
48 |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
49 // Logging |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
50 char *logFilename; |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
51 FILE *logFile; |
554
13901e9be15b
Implement daily logs for room logs.
Matti Hamalainen <ccr@tnsp.org>
parents:
541
diff
changeset
|
52 time_t logPrevMsgTime; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 } nn_window_t; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 |
513 | 56 typedef struct |
57 { | |
58 time_t prevKeepAlive; | |
571
3ae357fd34bb
Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
554
diff
changeset
|
59 BOOL insertMode, isError, update, mask, done; |
513 | 60 nn_conn_t *conn; |
61 void (*debugMsg)(const char *fmt, ...); | |
62 } nn_editstate_t; | |
63 | |
64 | |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 extern nn_window_t *currWin; |
571
3ae357fd34bb
Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
554
diff
changeset
|
66 extern BOOL appCursesInit, appQuitFlag; |
509
942eea564b15
Fix backbuffer offset manipulation, prevents a segfault.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
67 extern int scrHeight, scrWidth; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
68 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
69 BOOL nnwin_init(int delay); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
70 void nnwin_shutdown(); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
71 void nnwin_reset(void); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
72 |
513 | 73 void nnwin_update(BOOL force, BOOL mask, nn_editbuf_t *ebuf, char *optUserName, int optUserColor); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
74 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
75 nn_window_t * nnwin_main_window(); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
76 nn_window_t * nnwin_get(const int index); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
77 nn_window_t * nnwin_find(const char *id); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
78 void nnwin_set_current(nn_window_t *); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
80 BOOL nnwin_open(const char *name, BOOL curwin); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
81 void nnwin_close(nn_window_t *win); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
82 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
493
diff
changeset
|
83 int nnwin_print(nn_window_t *win, const char *fmt); |
513 | 84 |
85 void nnwin_input_process(nn_editbuf_t *editBuf, nn_editstate_t *editState, | |
86 BOOL (*callback)(int, nn_editbuf_t *, nn_editstate_t *)); | |
87 | |
88 char * nnwin_prompt_requester(BOOL allowEmpty, nn_editstate_t *, | |
89 BOOL (*callback)(int, nn_editbuf_t *, nn_editstate_t *), | |
90 void (*update)(nn_editbuf_t *, nn_editstate_t *)); | |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
91 |
541
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
92 |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
93 BOOL nn_log_open(nn_window_t *win); |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
94 void nn_log_close(nn_window_t *win); |
44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents:
513
diff
changeset
|
95 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
96 #endif |