annotate mcabber/src/screen.c @ 147:7571de4aed73

[/trunk] Changeset 159 by mikael * Fix a bug in buddylist_build() * We now lock the current buddy even not when being in chat mode. For example, if we're writing to s.o. and he leaves just before we press enter, we won't write to the wrong buddy... If the current_buddy is a group, we lock it too. * Remove MCABBER_TESTUNIT ifdef in roster.h (test program isn't up-to-date anymore...)
author mikael
date Fri, 29 Apr 2005 19:56:28 +0000
parents 300bb88f631f
children c3624b2a7059
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
2 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
3 #include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
4 #include <ncurses.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
5 #include <panel.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
6 #include <time.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
7 #include <ctype.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
8 #include <locale.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
9
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
10 #include "screen.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
11 #include "hbuf.h"
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
12 #include "commands.h"
95
9e6b7897ec37 [/trunk] Changeset 109 by mikael
mikael
parents: 84
diff changeset
13 #include "compl.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
14 #include "roster.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
15 #include "parsecfg.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
16 #include "utils.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
17 #include "list.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
18
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
19 #define window_entry(n) list_entry(n, window_entry_t, list)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
20
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
21 LIST_HEAD(window_list);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
22
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
23 typedef struct _window_entry_t {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
24 WINDOW *win;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
25 PANEL *panel;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
26 char *name;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
27 GList *hbuf;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
28 GList *top; // If top is not specified (NULL), we'll display the last lines
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
29 char cleared; // For ex, user has issued a /clear command...
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
30 struct list_head list;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
31 } window_entry_t;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
32
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
33
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
34 static WINDOW *rosterWnd, *chatWnd, *inputWnd;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
35 static WINDOW *logWnd, *logWnd_border;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
36 static PANEL *rosterPanel, *chatPanel, *inputPanel;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
37 static PANEL *logPanel, *logPanel_border;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
38 static int maxY, maxX;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
39 static window_entry_t *currentWindow;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
40
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
41 static int chatmode;
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
42 int update_roster;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
43
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
44 static char inputLine[INPUTLINE_LENGTH+1];
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
45 static char *ptr_inputline;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
46 static short int inputline_offset;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
47 static int completion_started;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
48
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
49
99
7fffb8a6b229 [/trunk] Changeset 113 by mikael
mikael
parents: 98
diff changeset
50 /* Functions */
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
51
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
52 int scr_WindowWidth(WINDOW * win)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
53 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
54 int x, y;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
55 getmaxyx(win, y, x);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
56 return x;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
57 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
58
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
59 void scr_clear_box(WINDOW *win, int y, int x, int height, int width, int Color)
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
60 {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
61 int i, j;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
62
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
63 wattrset(win, COLOR_PAIR(Color));
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
64 for (i = 0; i < height; i++) {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
65 wmove(win, y + i, x);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
66 for (j = 0; j < width; j++)
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
67 wprintw(win, " ");
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
68 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
69 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
70
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
71 void scr_draw_box(WINDOW * win, int y, int x, int height, int width,
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
72 int Color, chtype box, chtype border)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
73 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
74 int i, j;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
75
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
76 wattrset(win, COLOR_PAIR(Color));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
77 for (i = 0; i < height; i++) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
78 wmove(win, y + i, x);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
79 for (j = 0; j < width; j++)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
80 if (!i && !j)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
81 waddch(win, border | ACS_ULCORNER);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
82 else if (i == height - 1 && !j)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
83 waddch(win, border | ACS_LLCORNER);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
84 else if (!i && j == width - 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
85 waddch(win, box | ACS_URCORNER);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
86 else if (i == height - 1 && j == width - 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
87 waddch(win, box | ACS_LRCORNER);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
88 else if (!i)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
89 waddch(win, border | ACS_HLINE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
90 else if (i == height - 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
91 waddch(win, box | ACS_HLINE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
92 else if (!j)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
93 waddch(win, border | ACS_VLINE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
94 else if (j == width - 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
95 waddch(win, box | ACS_VLINE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
96 else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
97 waddch(win, box | ' ');
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
98 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
99 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
100
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
101 int FindColor(char *name)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
102 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
103 if (!strcmp(name, "default"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
104 return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
105 if (!strcmp(name, "black"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
106 return COLOR_BLACK;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
107 if (!strcmp(name, "red"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
108 return COLOR_RED;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
109 if (!strcmp(name, "green"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
110 return COLOR_GREEN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
111 if (!strcmp(name, "yellow"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
112 return COLOR_YELLOW;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
113 if (!strcmp(name, "blue"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
114 return COLOR_BLUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
115 if (!strcmp(name, "magenta"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
116 return COLOR_MAGENTA;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
117 if (!strcmp(name, "cyan"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
118 return COLOR_CYAN;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
119 if (!strcmp(name, "white"))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
120 return COLOR_WHITE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
121
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
122 return -1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
123 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
124
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
125 void ParseColors(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
126 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
127 char *colors[11] = {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
128 "", "",
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
129 "borderlines",
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
130 "jidonline",
139
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
131 "newmsg",
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
132 "jidofflineselected",
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
133 "jidoffline",
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
134 "text",
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
135 NULL
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
136 };
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
137
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
138 char *tmp = malloc(1024);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
139 char *color1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
140 char *background = cfg_read("color_background");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
141 char *backselected = cfg_read("color_backselected");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
142 int i = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
143
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
144 while (colors[i]) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
145 sprintf(tmp, "color_%s", colors[i]);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
146 color1 = cfg_read(tmp);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
147
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
148 switch (i + 1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
149 case 1:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
150 init_pair(1, COLOR_BLACK, COLOR_WHITE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
151 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
152 case 2:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
153 init_pair(2, COLOR_WHITE, COLOR_BLACK);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
154 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
155 case 3:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
156 init_pair(3, FindColor(color1), FindColor(background));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
157 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
158 case 4:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
159 init_pair(4, FindColor(color1), FindColor(backselected));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
160 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
161 case 5:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
162 init_pair(5, FindColor(color1), FindColor(background));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
163 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
164 case 6:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
165 init_pair(6, FindColor(color1), FindColor(backselected));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
166 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
167 case 7:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
168 init_pair(7, FindColor(color1), FindColor(background));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
169 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
170 case 8:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
171 init_pair(8, FindColor(color1), FindColor(background));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
172 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
173 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
174 i++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
175 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
176 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
177
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
178
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
179 window_entry_t *scr_CreatePanel(const char *title, int x, int y,
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
180 int lines, int cols, int dont_show)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
181 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
182 window_entry_t *tmp = calloc(1, sizeof(window_entry_t));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
183
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
184 tmp->win = newwin(lines, cols, y, x);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
185 tmp->panel = new_panel(tmp->win);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
186 tmp->name = (char *) calloc(1, 1024);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
187 strncpy(tmp->name, title, 1024);
76
a8f8492abd44 [/trunk] Changeset 90 by mikael
mikael
parents: 75
diff changeset
188 scr_clear_box(tmp->win, 0, 0, lines, cols, COLOR_GENERAL);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
189
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
190 if (!dont_show) {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
191 currentWindow = tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
192 } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
193 if (currentWindow)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
194 top_panel(currentWindow->panel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
195 else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
196 top_panel(chatPanel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
197 }
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
198 update_panels();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
199
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
200 list_add_tail(&tmp->list, &window_list);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
201
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
202 return tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
203 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
204
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
205 window_entry_t *scr_SearchWindow(const char *winId)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
206 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
207 struct list_head *pos, *n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
208 window_entry_t *search_entry = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
209
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
210 list_for_each_safe(pos, n, &window_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
211 search_entry = window_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
212 if (search_entry->name) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
213 if (!strcasecmp(search_entry->name, winId)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
214 return search_entry;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
215 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
216 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
217 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
218 return NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
219 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
220
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
221 // scr_UpdateWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
222 // (Re-)Display the given chat window.
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
223 void scr_UpdateWindow(window_entry_t *win_entry)
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
224 {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
225 int n;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
226 int width;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
227 char **lines;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
228 GList *hbuf_head;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
229
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
230 width = scr_WindowWidth(win_entry->win);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
231
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
232 // Should the window be empty?
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
233 if (win_entry->cleared) {
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
234 scr_clear_box(win_entry->win, 0, 0, CHAT_WIN_HEIGHT, width, COLOR_GENERAL);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
235 return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
236 }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
237
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
238 // win_entry->top is the top message of the screen. If it set to NULL, we
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
239 // are displaying the last messages.
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
240
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
241 // We will show the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
242 // Let's find out where it begins.
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
243 if (!win_entry->top ||
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
244 (g_list_position(g_list_first(win_entry->hbuf), win_entry->top) == -1)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
245 // Move up CHAT_WIN_HEIGHT lines
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
246 win_entry->hbuf = g_list_last(win_entry->hbuf);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
247 hbuf_head = win_entry->hbuf;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
248 win_entry->top = NULL; // (Just to make sure)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
249 n = 0;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
250 while (hbuf_head && (n < CHAT_WIN_HEIGHT-1) && g_list_previous(hbuf_head)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
251 hbuf_head = g_list_previous(hbuf_head);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
252 n++;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
253 }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
254 } else
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
255 hbuf_head = win_entry->top;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
256
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
257 // Get the last CHAT_WIN_HEIGHT lines.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
258 lines = hbuf_get_lines(hbuf_head, CHAT_WIN_HEIGHT);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
259
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
260 // Display these lines
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
261 wmove(win_entry->win, 0, 0);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
262 for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
263 int r = width;
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
264 if (*(lines+2*n)) {
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
265 if (**(lines+2*n))
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
266 wprintw(win_entry->win, "%s", *(lines+2*n)); // prefix
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
267 else {
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
268 wprintw(win_entry->win, " ");
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
269 r -= 12;
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
270 }
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
271 wprintw(win_entry->win, "%s", *(lines+2*n+1)); // line
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
272 // Calculate the number of blank characters to empty the line
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
273 r -= strlen(*(lines+2*n)) + strlen(*(lines+2*n+1));
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
274 }
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
275 for ( ; r>0 ; r--) {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
276 wprintw(win_entry->win, " ");
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
277 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
278 //// wclrtoeol(win_entry->win); does not work :(
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
279 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
280 g_free(lines);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
281 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
282
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
283 // scr_ShowWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
284 // Display the chat window with the given identifier.
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
285 void scr_ShowWindow(const char *winId)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
286 {
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
287 window_entry_t *win_entry = scr_SearchWindow(winId);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
288
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
289 if (win_entry != NULL) {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
290 top_panel(win_entry->panel);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
291 currentWindow = win_entry;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
292 chatmode = TRUE;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
293 roster_setflags(winId, ROSTER_FLAG_MSG, FALSE);
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
294 roster_setflags(winId, ROSTER_FLAG_LOCK, TRUE);
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
295 update_roster = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
296
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
297 // Refresh the window
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
298 scr_UpdateWindow(win_entry);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
299
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
300 // Finished :)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
301 update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
302 doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
303 } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
304 top_panel(chatPanel);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
305 currentWindow = win_entry; // == NULL (current window empty)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
306 }
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
307
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
308 top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
309 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
310
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
311 // scr_ShowBuddyWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
312 // Display the chat window buffer for the current buddy.
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
313 void scr_ShowBuddyWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
314 {
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
315 const gchar *jid;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
316
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
317 if (!current_buddy)
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
318 jid = NULL;
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
319 else
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
320 jid = CURRENT_JID;
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
321
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
322 if (!jid) {
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
323 top_panel(chatPanel);
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
324 top_panel(inputPanel);
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
325 currentWindow = NULL;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
326 return;
140
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
327 }
3b480b73df19 [/trunk] Changeset 152 by mikael
mikael
parents: 139
diff changeset
328
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
329 scr_ShowWindow(jid);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
330 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
331
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
332
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
333 // scr_WriteInWindow()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
334 // Write some text in the winId window (this usually is a jid).
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
335 // Lines are splitted when they are too long to fit in the chat window.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
336 // If this window doesn't exist, it is created.
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
337 void scr_WriteInWindow(const char *winId, const char *text, int TimeStamp,
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
338 const char *prefix, int force_show)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
339 {
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
340 char *fullprefix = NULL;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
341 window_entry_t *win_entry;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
342 int dont_show = FALSE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
343
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
344 // Prepare the prefix
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
345 if (prefix || TimeStamp) {
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
346 if (!prefix) prefix = "";
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
347 fullprefix = calloc(1, strlen(prefix)+16);
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
348 if (TimeStamp) {
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
349 time_t now = time(NULL);
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
350 strftime(fullprefix, 12, "[%H:%M] ", localtime(&now));
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
351 } else {
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
352 strcpy(fullprefix, " ");
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
353 }
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
354 strcat(fullprefix, prefix);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
355 }
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
356
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
357 // Look for the window entry.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
358 win_entry = scr_SearchWindow(winId);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
359
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
360 // Do we have to really show the window?
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
361 if (!chatmode)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
362 dont_show = TRUE;
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
363 else if ((!force_show) && ((!currentWindow || (currentWindow != win_entry))))
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
364 dont_show = TRUE;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
365
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
366 // If the window entry doesn't exist yet, let's create it.
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
367 if (win_entry == NULL) {
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
368 win_entry = scr_CreatePanel(winId, ROSTER_WIDTH, 0, CHAT_WIN_HEIGHT,
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
369 maxX - ROSTER_WIDTH, dont_show);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
370 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
371
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
372 hbuf_add_line(&win_entry->hbuf, text, fullprefix,
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
373 maxX - scr_WindowWidth(rosterWnd) - 14);
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
374 free(fullprefix);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
375
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
376 if (win_entry->cleared) {
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
377 win_entry->cleared = 0; // The message must be displayed
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
378 win_entry->top = g_list_last(win_entry->hbuf);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
379 }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
380
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
381 if (!dont_show) {
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
382 // Show and refresh the window
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
383 top_panel(win_entry->panel);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
384 scr_UpdateWindow(win_entry);
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
385 top_panel(inputPanel);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
386 update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
387 doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
388 } else {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
389 roster_setflags(winId, ROSTER_FLAG_MSG, TRUE);
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 29
diff changeset
390 update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
391 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
392 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
393
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
394 void scr_InitCurses(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
395 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
396 initscr();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
397 noecho();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
398 raw();
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
399 halfdelay(5);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
400 start_color();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
401 use_default_colors();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
402
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
403 ParseColors();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
404
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
405 getmaxyx(stdscr, maxY, maxX);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
406 inputLine[0] = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
407 ptr_inputline = inputLine;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
408
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
409 setlocale(LC_CTYPE, "");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
410
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
411 return;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
412 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
413
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
414 void scr_TerminateCurses(void)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
415 {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
416 clear();
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
417 refresh();
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
418 endwin();
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
419 return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
420 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
421
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
422 void scr_DrawMainWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
423 {
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
424 int l;
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
425
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
426 /* Draw main panels */
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
427 rosterWnd = newwin(CHAT_WIN_HEIGHT, ROSTER_WIDTH, 0, 0);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
428 rosterPanel = new_panel(rosterWnd);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
429 scr_clear_box(rosterWnd, 0, 0, CHAT_WIN_HEIGHT, ROSTER_WIDTH,
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
430 COLOR_GENERAL);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
431 for (l=0 ; l < CHAT_WIN_HEIGHT ; l++)
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
432 mvwaddch(rosterWnd, l, ROSTER_WIDTH-1, ACS_VLINE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
433
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
434 chatWnd = newwin(CHAT_WIN_HEIGHT, maxX - ROSTER_WIDTH, 0, ROSTER_WIDTH);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
435 chatPanel = new_panel(chatWnd);
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
436 scr_clear_box(chatWnd, 0, 0, CHAT_WIN_HEIGHT, maxX - ROSTER_WIDTH,
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
437 COLOR_GENERAL);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
438 scrollok(chatWnd, TRUE);
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
439 mvwprintw(chatWnd, 0, 0, "This is the status window");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
440
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
441 logWnd_border = newwin(LOG_WIN_HEIGHT, maxX, CHAT_WIN_HEIGHT, 0);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
442 logPanel_border = new_panel(logWnd_border);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
443 scr_draw_box(logWnd_border, 0, 0, LOG_WIN_HEIGHT, maxX, COLOR_GENERAL, 0, 0);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
444 logWnd = derwin(logWnd_border, LOG_WIN_HEIGHT-2, maxX-2, 1, 1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
445 logPanel = new_panel(logWnd);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
446 wbkgd(logWnd, COLOR_PAIR(COLOR_GENERAL));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
447
74
b392112ab995 [/trunk] Changeset 88 by mikael
mikael
parents: 65
diff changeset
448 scrollok(logWnd, TRUE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
449
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
450 inputWnd = newwin(1, maxX, maxY-1, 0);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
451 inputPanel = new_panel(inputWnd);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
452
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
453 scr_DrawRoster();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
454 return;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
455 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
456
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
457 // scr_DrawRoster()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
458 // Actually, display the buddylist on the screen.
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
459 void scr_DrawRoster(void)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
460 {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
461 static guint offset = 0;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
462 char name[ROSTER_WIDTH];
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
463 int maxx, maxy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
464 GList *buddy;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
465 int i, n;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
466 int rOffset;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
467
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
468 // We can reset update_roster
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
469 update_roster = FALSE;
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
470
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
471 getmaxyx(rosterWnd, maxy, maxx);
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
472 maxx --; // last char is for vertical border
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
473 name[ROSTER_WIDTH-7] = 0;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
474
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
475 // cleanup of roster window
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
476 wattrset(rosterWnd, COLOR_PAIR(COLOR_GENERAL));
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
477 for (i = 0; i < maxy; i++) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
478 mvwprintw(rosterWnd, i, 0, "");
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
479 for (n = 0; n < maxx; n++)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
480 waddch(rosterWnd, ' ');
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
481 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
482
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
483 // Leave now if buddylist is empty
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
484 if (!buddylist) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
485 offset = 0;
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
486 update_panels();
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
487 doupdate();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
488 return;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
489 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
490
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
491 // Update offset if necessary
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
492 i = g_list_position(buddylist, current_buddy);
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
493 if (i == -1) { // This is bad
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
494 scr_LogPrint("Doh! Can't find current selected buddy!!");
123
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
495 update_panels();
1bdf882bed98 [/trunk] Changeset 136 by mikael
mikael
parents: 121
diff changeset
496 doupdate();
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
497 return;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
498 } else if (i < offset) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
499 offset = i;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
500 } else if (i+1 > offset + maxy) {
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
501 offset = i + 1 - maxy;
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
502 }
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
503
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
504 buddy = buddylist;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
505 rOffset = offset;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
506
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
507 for (i=0; i<maxy && buddy; buddy = g_list_next(buddy)) {
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
508
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
509 char status = '?';
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
510 char pending = ' ';
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
511 enum imstatus budstate;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
512
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
513 if (rOffset > 0) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
514 rOffset--;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
515 continue;
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
516 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
517
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
518 if (buddy_getflags(BUDDATA(buddy)) & ROSTER_FLAG_MSG) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
519 pending = '#';
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
520 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
521
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
522 budstate = buddy_getstatus(BUDDATA(buddy));
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
523 if (budstate >= 0 && budstate < imstatus_size)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
524 status = imstatus2char[budstate];
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
525 if (buddy == current_buddy) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
526 wattrset(rosterWnd, COLOR_PAIR(COLOR_BD_DESSEL));
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
527 // The 3 following lines aim to color the whole line
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
528 wmove(rosterWnd, i, 0);
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
529 for (n = 0; n < maxx; n++)
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
530 waddch(rosterWnd, ' ');
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
531 } else {
139
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
532 if (buddy_getflags(BUDDATA(buddy)) & ROSTER_FLAG_MSG)
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
533 wattrset(rosterWnd, COLOR_PAIR(COLOR_NMSG));
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
534 else
8d7e31d37bec [/trunk] Changeset 151 by mikael
mikael
parents: 135
diff changeset
535 wattrset(rosterWnd, COLOR_PAIR(COLOR_BD_DES));
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
536 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
537
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
538 strncpy(name, buddy_getname(BUDDATA(buddy)), ROSTER_WIDTH-7);
133
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
539 if (buddy_gettype(BUDDATA(buddy)) & ROSTER_TYPE_GROUP) {
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
540 char *sep;
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
541 if (buddy_getflags(BUDDATA(buddy)) & ROSTER_FLAG_HIDE)
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
542 sep = "+++";
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
543 else
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
544 sep = "---";
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
545 mvwprintw(rosterWnd, i, 0, " %c%s %s", pending, sep, name);
a27b22e3b3a1 [/trunk] Changeset 146 by mikael
mikael
parents: 129
diff changeset
546 }
126
d3ee9abe9ca6 [/trunk] Changeset 139 by mikael
mikael
parents: 123
diff changeset
547 else
d3ee9abe9ca6 [/trunk] Changeset 139 by mikael
mikael
parents: 123
diff changeset
548 mvwprintw(rosterWnd, i, 0, " %c[%c] %s", pending, status, name);
84
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
549
134fe2567f07 [/trunk] Changeset 98 by mikael
mikael
parents: 81
diff changeset
550 i++;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
551 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
552
142
bb6fe91589b9 [/trunk] Changeset 154 by mikael
mikael
parents: 140
diff changeset
553 top_panel(inputPanel);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
554 update_panels();
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
555 doupdate();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
556 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
557
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
558 void scr_WriteMessage(const char *jid, const char *text, char *prefix)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
559 {
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
560 scr_WriteInWindow(jid, text, TRUE, prefix, FALSE);
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
561 }
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
562
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
563 void scr_WriteIncomingMessage(const char *jidfrom, const char *text)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
564 {
75
ff119bb11563 [/trunk] Changeset 89 by mikael
mikael
parents: 74
diff changeset
565 // FIXME expand tabs / filter out special chars...
115
33bff2c57293 [/trunk] Changeset 129 by mikael
mikael
parents: 109
diff changeset
566 scr_WriteMessage(jidfrom, text, "<== ");
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
567 update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
568 doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
569 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
570
50
5425ee13dce6 [/trunk] Changeset 66 by mikael
mikael
parents: 47
diff changeset
571 void scr_WriteOutgoingMessage(const char *jidto, const char *text)
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
572 {
65
a8689087db5c [/trunk] Changeset 80 by mikael
mikael
parents: 50
diff changeset
573 scr_WriteMessage(jidto, text, "--> ");
47
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
574 scr_ShowWindow(jidto);
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
575 }
7259a61e1a4b [/trunk] Changeset 63 by mikael
mikael
parents: 44
diff changeset
576
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
577 int scr_Getch(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
578 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
579 int ch;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
580 ch = wgetch(inputWnd);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
581 return ch;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
582 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
583
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
584 WINDOW *scr_GetRosterWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
585 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
586 return rosterWnd;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
587 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
588
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
589 WINDOW *scr_GetStatusWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
590 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
591 return chatWnd;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
592 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
593
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
594 WINDOW *scr_GetInputWindow(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
595 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
596 return inputWnd;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
597 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
598
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
599 // scr_RosterTop()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
600 // Go to the first buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
601 void scr_RosterTop(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
602 {
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
603 enum imstatus prev_st = imstatus_size; // undef
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
604
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
605 if (current_buddy) {
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
606 prev_st = buddy_getstatus(BUDDATA(current_buddy));
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
607 if (chatmode)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
608 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
609 }
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
610 current_buddy = buddylist;
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
611 if (chatmode && current_buddy)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
612 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, TRUE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
613
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
614 // We should rebuild the buddylist but not everytime
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
615 // Here we check if we were locking a buddy who is actually offline,
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
616 // and hide_offline_buddies is TRUE. In which case we need to rebuild.
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
617 if (current_buddy && prev_st == offline &&
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
618 buddylist_get_hide_offline_buddies())
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
619 buddylist_build();
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
620 if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
621 scr_ShowBuddyWindow();
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
622 update_roster = TRUE;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
623 }
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
624
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
625 // scr_RosterBottom()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
626 // Go to the last buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
627 void scr_RosterBottom(void)
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
628 {
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
629 enum imstatus prev_st = imstatus_size; // undef
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
630
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
631 if (current_buddy) {
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
632 prev_st = buddy_getstatus(BUDDATA(current_buddy));
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
633 if (chatmode)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
634 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
635 }
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
636 current_buddy = g_list_last(buddylist);
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
637 // Lock the buddy in the buddylist if we're in chat mode
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
638 if (chatmode && current_buddy)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
639 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, TRUE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
640
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
641 // We should rebuild the buddylist but not everytime
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
642 // Here we check if we were locking a buddy who is actually offline,
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
643 // and hide_offline_buddies is TRUE. In which case we need to rebuild.
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
644 if (current_buddy && prev_st == offline &&
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
645 buddylist_get_hide_offline_buddies())
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
646 buddylist_build();
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
647
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
648 if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
649 scr_ShowBuddyWindow();
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
650 update_roster = TRUE;
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
651 }
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
652
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
653 // scr_RosterUp()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
654 // Go to the previous buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
655 void scr_RosterUp(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
656 {
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
657 enum imstatus prev_st = imstatus_size; // undef
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
658
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
659 if (current_buddy) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
660 if (g_list_previous(current_buddy)) {
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
661 prev_st = buddy_getstatus(BUDDATA(current_buddy));
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
662 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
663 current_buddy = g_list_previous(current_buddy);
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
664 // Lock the buddy in the buddylist if we're in chat mode
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
665 if (chatmode)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
666 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, TRUE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
667 // We should rebuild the buddylist but not everytime
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
668 // Here we check if we were locking a buddy who is actually offline,
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
669 // and hide_offline_buddies is TRUE. In which case we need to rebuild.
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
670 if (prev_st == offline && buddylist_get_hide_offline_buddies())
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
671 buddylist_build();
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
672 update_roster = TRUE;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
673 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
674 }
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
675
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
676 if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
677 scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
678 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
679
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
680 // scr_RosterDown()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
681 // Go to the next buddy in the buddylist
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
682 void scr_RosterDown(void)
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
683 {
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
684 enum imstatus prev_st = imstatus_size; // undef
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
685
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
686 if (current_buddy) {
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
687 if (g_list_next(current_buddy)) {
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
688 prev_st = buddy_getstatus(BUDDATA(current_buddy));
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
689 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
690 current_buddy = g_list_next(current_buddy);
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
691 if (chatmode)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
692 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, TRUE);
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
693 // We should rebuild the buddylist but not everytime
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
694 // Here we check if we were locking a buddy who is actually offline,
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
695 // and hide_offline_buddies is TRUE. In which case we need to rebuild.
120
cfd3df636d5f [/trunk] Changeset 133 by mikael
mikael
parents: 119
diff changeset
696 if (prev_st == offline && buddylist_get_hide_offline_buddies())
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
697 buddylist_build();
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
698 update_roster = TRUE;
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
699 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
700 }
104
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
701
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
702 if (chatmode)
fe7257d251ac [/trunk] Changeset 118 by mikael
mikael
parents: 103
diff changeset
703 scr_ShowBuddyWindow();
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
704 }
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
705
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
706 // scr_ScrollUp()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
707 // Scroll up the current buddy window, half a screen.
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
708 void scr_ScrollUp(void)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
709 {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
710 const gchar *jid;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
711 window_entry_t *win_entry;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
712 int n, nblines;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
713 GList *hbuf_top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
714
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
715 // Get win_entry
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
716 if (!current_buddy)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
717 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
718 jid = CURRENT_JID;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
719 if (!jid)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
720 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
721 win_entry = scr_SearchWindow(jid);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
722 if (!win_entry)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
723 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
724
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
725 // Scroll up half a screen (or less)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
726 nblines = CHAT_WIN_HEIGHT/2-1;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
727 hbuf_top = win_entry->top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
728 if (!hbuf_top) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
729 hbuf_top = g_list_last(win_entry->hbuf);
109
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
730 if (!win_entry->cleared)
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
731 nblines *= 3;
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
732 else
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
733 win_entry->cleared = FALSE;
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
734 }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
735
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
736 n = 0;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
737 while (hbuf_top && n < nblines && g_list_previous(hbuf_top)) {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
738 hbuf_top = g_list_previous(hbuf_top);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
739 n++;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
740 }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
741 win_entry->top = hbuf_top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
742
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
743 // Refresh the window
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
744 scr_UpdateWindow(win_entry);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
745
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
746 // Finished :)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
747 update_panels();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
748 doupdate();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
749 }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
750
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
751 // scr_ScrollDown()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
752 // Scroll down the current buddy window, half a screen.
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
753 void scr_ScrollDown(void)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
754 {
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
755 const gchar *jid;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
756 window_entry_t *win_entry;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
757 int n, nblines;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
758 GList *hbuf_top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
759
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
760 // Get win_entry
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
761 if (!current_buddy)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
762 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
763 jid = CURRENT_JID;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
764 if (!jid)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
765 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
766 win_entry = scr_SearchWindow(jid);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
767 if (!win_entry)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
768 return;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
769
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
770 // Scroll down half a screen (or less)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
771 nblines = CHAT_WIN_HEIGHT/2-1;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
772 hbuf_top = win_entry->top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
773
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
774 for (n=0 ; hbuf_top && n < nblines ; n++)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
775 hbuf_top = g_list_next(hbuf_top);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
776 win_entry->top = hbuf_top;
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
777 // Check if we are at the bottom
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
778 for (n=0 ; hbuf_top && n < CHAT_WIN_HEIGHT-1 ; n++)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
779 hbuf_top = g_list_next(hbuf_top);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
780 if (!hbuf_top)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
781 win_entry->top = NULL; // End reached
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
782
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
783 // Refresh the window
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
784 scr_UpdateWindow(win_entry);
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
785
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
786 // Finished :)
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
787 update_panels();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
788 doupdate();
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
789 }
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
790
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
791 // scr_Clear()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
792 // Clear the current buddy window (used for the /clear command)
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
793 void scr_Clear(void)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
794 {
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
795 const gchar *jid;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
796 window_entry_t *win_entry;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
797
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
798 // Get win_entry
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
799 if (!current_buddy)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
800 return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
801 jid = CURRENT_JID;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
802 if (!jid)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
803 return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
804 win_entry = scr_SearchWindow(jid);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
805 if (!win_entry)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
806 return;
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
807
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
808 win_entry->cleared = TRUE;
109
96d239239c7a [/trunk] Changeset 123 by mikael
mikael
parents: 108
diff changeset
809 win_entry->top = NULL;
108
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
810
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
811 // Refresh the window
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
812 scr_UpdateWindow(win_entry);
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
813
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
814 // Finished :)
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
815 update_panels();
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
816 doupdate();
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
817 }
7fb72bc13732 [/trunk] Changeset 122 by mikael
mikael
parents: 105
diff changeset
818
44
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
819 // scr_LogPrint(...)
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
820 // Display a message in the log window.
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
821 void scr_LogPrint(const char *fmt, ...)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
822 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
823 time_t timestamp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
824 char *buffer;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
825 va_list ap;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
826
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
827 buffer = (char *) calloc(1, 4096);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
828
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
829 timestamp = time(NULL);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
830 strftime(buffer, 64, "[%H:%M:%S] ", localtime(&timestamp));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
831 wprintw(logWnd, "\n%s", buffer);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
832
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
833 va_start(ap, fmt);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
834 vsnprintf(buffer, 4096, fmt, ap);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
835 va_end(ap);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
836
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
837 wprintw(logWnd, "%s", buffer);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
838 free(buffer);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
839
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
840 update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
841 doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
842 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
843
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
844 // scr_set_chatmode()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
845 // Public fonction to (un)set chatmode...
129
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
846 inline void scr_set_chatmode(int enable)
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
847 {
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
848 chatmode = enable;
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
849 }
03be1cc94560 [/trunk] Changeset 142 by mikael
mikael
parents: 126
diff changeset
850
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
851 // which_row()
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
852 // Tells which row our cursor is in, in the command line.
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
853 // -1 -> normal text
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
854 // 0 -> command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
855 // 1 -> parameter 1 (etc.)
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
856 // If > 0, then *p_row is set to the beginning of the row
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
857 int which_row(char **p_row)
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
858 {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
859 int row = -1;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
860 char *p;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
861 int quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
862
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
863 // Not a command?
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
864 if ((ptr_inputline == inputLine) || (inputLine[0] != '/'))
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
865 return -1;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
866
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
867 // This is a command
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
868 row = 0;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
869 for (p = inputLine ; p < ptr_inputline ; p++) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
870 if (quote) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
871 if (*p == '"' && *(p-1) != '\\')
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
872 quote = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
873 continue;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
874 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
875 if (*p == '"' && *(p-1) != '\\') {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
876 quote = TRUE;
121
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
877 } else if (*p == ' ') {
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
878 if (*(p-1) != ' ')
94b251102069 [/trunk] Changeset 134 by mikael
mikael
parents: 120
diff changeset
879 row++;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
880 *p_row = p+1;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
881 }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
882 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
883 return row;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
884 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
885
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
886 // scr_insert_text()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
887 // Insert the given text at the current cursor position.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
888 // The cursor is moved. We don't check if the cursor still is in the screen
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
889 // after, the caller should do that.
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
890 void scr_insert_text(const char *text)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
891 {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
892 char tmpLine[INPUTLINE_LENGTH+1];
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
893 int len = strlen(text);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
894 // Check the line isn't too long
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
895 if (strlen(inputLine) + len >= INPUTLINE_LENGTH) {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
896 scr_LogPrint("Cannot insert text, line too long.");
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
897 return;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
898 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
899
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
900 strcpy(tmpLine, ptr_inputline);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
901 strcpy(ptr_inputline, text); ptr_inputline += len;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
902 strcpy(ptr_inputline, tmpLine);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
903 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
904
143
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
905 // scr_handle_tab()
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
906 // Function called when tab is pressed.
300bb88f631f [/trunk] Changeset 155 by mikael
mikael
parents: 142
diff changeset
907 // Initiate or continue a completion...
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
908 void scr_handle_tab(void)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
909 {
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
910 int nrow;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
911 char *row;
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
912 const char *cchar;
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
913 guint compl_categ;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
914
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
915 nrow = which_row(&row);
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
916
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
917 // a) No completion if no leading slash ('cause not a command)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
918 // b) We can't have more than 2 parameters (we use 2 flags)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
919 if (nrow < 0 || nrow > 2) return;
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
920
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
921 if (nrow == 0) { // Command completion
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
922 row = &inputLine[1];
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
923 compl_categ = COMPL_CMD;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
924 } else { // Other completion, depending on the command
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
925 cmd *com = cmd_get(inputLine);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
926 if (!com || !row) {
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
927 scr_LogPrint("I cannot complete that...");
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
928 return;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
929 }
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
930 compl_categ = com->completion_flags[nrow-1];
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
931 }
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
932
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
933 if (!completion_started) {
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
934 GSList *list = compl_get_category_list(compl_categ);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
935 if (list) {
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
936 char *prefix = g_strndup(row, ptr_inputline-row);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
937 // Init completion
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
938 new_completion(prefix, list);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
939 g_free(prefix);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
940 // Now complete
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
941 cchar = complete();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
942 if (cchar)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
943 scr_insert_text(cchar);
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
944 completion_started = TRUE;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
945 }
103
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
946 } else { // Completion already initialized
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
947 char *c;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
948 guint back = cancel_completion();
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
949 // Remove $back chars
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
950 ptr_inputline -= back;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
951 c = ptr_inputline;
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
952 for ( ; *c ; c++)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
953 *c = *(c+back);
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
954 // Now complete again
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
955 cchar = complete();
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
956 if (cchar)
93dcc4e15d4a [/trunk] Changeset 117 by mikael
mikael
parents: 102
diff changeset
957 scr_insert_text(cchar);
102
2b4cc6bc5bf2 [/trunk] Changeset 116 by mikael
mikael
parents: 101
diff changeset
958 }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
959 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
960
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
961 void scr_cancel_current_completion(void)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
962 {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
963 char *c;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
964 guint back = cancel_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
965 // Remove $back chars
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
966 ptr_inputline -= back;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
967 c = ptr_inputline;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
968 for ( ; *c ; c++)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
969 *c = *(c+back);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
970 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
971
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
972 void scr_end_current_completion(void)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
973 {
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
974 done_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
975 completion_started = FALSE;
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
976 }
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
977
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
978 // check_offset(int direction)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
979 // Check inputline_offset value, and make sure the cursor is inside the
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
980 // screen.
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
981 inline void check_offset(int direction)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
982 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
983 // Left side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
984 if (inputline_offset && direction <= 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
985 while (ptr_inputline <= (char*)&inputLine + inputline_offset) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
986 if (inputline_offset) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
987 inputline_offset -= 5;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
988 if (inputline_offset < 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
989 inputline_offset = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
990 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
991 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
992 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
993 // Right side
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
994 if (direction >= 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
995 while (ptr_inputline >= inputline_offset + (char*)&inputLine + maxX)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
996 inputline_offset += 5;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
997 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
998 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
999
44
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
1000 // process_key(key)
c10f95f959d0 [/trunk] Changeset 60 by mikael
mikael
parents: 42
diff changeset
1001 // Handle the pressed key, in the command line (bottom).
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
1002 int process_key(int key)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1003 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1004 if (isprint(key)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1005 char tmpLine[INPUTLINE_LENGTH+1];
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1006
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1007 // Check the line isn't too long
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1008 if (strlen(inputLine) >= INPUTLINE_LENGTH)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1009 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1010
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1011 // Insert char
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1012 strcpy(tmpLine, ptr_inputline);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1013 *ptr_inputline++ = key;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1014 strcpy(ptr_inputline, tmpLine);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1015 check_offset(1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1016 } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1017 switch(key) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1018 case KEY_BACKSPACE:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1019 if (ptr_inputline != (char*)&inputLine) {
42
82247685b14b [/trunk] Changeset 58 by mikael
mikael
parents: 39
diff changeset
1020 char *c = --ptr_inputline;
82247685b14b [/trunk] Changeset 58 by mikael
mikael
parents: 39
diff changeset
1021 for ( ; *c ; c++)
82247685b14b [/trunk] Changeset 58 by mikael
mikael
parents: 39
diff changeset
1022 *c = *(c+1);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1023 check_offset(-1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1024 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1025 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1026 case KEY_DC:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1027 if (*ptr_inputline)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1028 strcpy(ptr_inputline, ptr_inputline+1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1029 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1030 case KEY_LEFT:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1031 if (ptr_inputline != (char*)&inputLine) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1032 ptr_inputline--;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1033 check_offset(-1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1034 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1035 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1036 case KEY_RIGHT:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1037 if (*ptr_inputline)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1038 ptr_inputline++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1039 check_offset(1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1040 break;
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1041 case 7: // Ctrl-g
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1042 scr_cancel_current_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1043 scr_end_current_completion();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1044 check_offset(-1);
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1045 break;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1046 case 9: // Tab
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1047 scr_handle_tab();
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1048 check_offset(0);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1049 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1050 case '\n': // Enter
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents: 28
diff changeset
1051 if (process_line(inputLine))
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1052 return 255;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1053 ptr_inputline = inputLine;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1054 *ptr_inputline = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1055 inputline_offset = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1056 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1057 case KEY_UP:
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
1058 scr_RosterUp();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1059 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1060 case KEY_DOWN:
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 76
diff changeset
1061 scr_RosterDown();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1062 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1063 case KEY_PPAGE:
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
1064 scr_ScrollUp();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1065 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1066 case KEY_NPAGE:
105
91d3ec21c24e [/trunk] Changeset 119 by mikael
mikael
parents: 104
diff changeset
1067 scr_ScrollDown();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1068 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1069 case KEY_HOME:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1070 case 1:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1071 ptr_inputline = inputLine;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1072 inputline_offset = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1073 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1074 case KEY_END:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1075 case 5:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1076 for (; *ptr_inputline; ptr_inputline++) ;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1077 check_offset(1);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1078 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1079 case 21: // Ctrl-u
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1080 strcpy(inputLine, ptr_inputline);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1081 ptr_inputline = inputLine;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1082 inputline_offset = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1083 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1084 case KEY_EOL:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1085 case 11: // Ctrl-k
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1086 *ptr_inputline = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1087 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1088 case 16: // Ctrl-p
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1089 scr_LogPrint("Ctrl-p not yet implemented");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1090 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1091 case 14: // Ctrl-n
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1092 scr_LogPrint("Ctrl-n not yet implemented");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1093 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1094 case 27: // ESC
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1095 currentWindow = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1096 chatmode = FALSE;
119
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
1097 if (current_buddy)
d7fbd5293385 [/trunk] Changeset 132 by mikael
mikael
parents: 115
diff changeset
1098 buddy_setflags(BUDDATA(current_buddy), ROSTER_FLAG_LOCK, FALSE);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1099 top_panel(chatPanel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1100 top_panel(inputPanel);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1101 break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1102 default:
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1103 scr_LogPrint("Unkown key=%d", key);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1104 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1105 }
98
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1106 if (completion_started && key != 9)
f20831f7d349 [/trunk] Changeset 112 by mikael
mikael
parents: 95
diff changeset
1107 scr_end_current_completion();
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1108 mvwprintw(inputWnd, 0,0, "%s", inputLine + inputline_offset);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1109 wclrtoeol(inputWnd);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1110 if (*ptr_inputline) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1111 wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine - inputline_offset);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1112 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1113 update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1114 doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1115 return 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1116 }