summaryrefslogtreecommitdiff
path: root/testing/toxic/friendlist.c
diff options
context:
space:
mode:
authorcharmlesscoin <charmlesscoin@gmail.com>2013-08-06 20:58:42 -0400
committercharmlesscoin <charmlesscoin@gmail.com>2013-08-06 20:58:42 -0400
commitc644ccd28782e9d74f5962a97a0973551fb7afe2 (patch)
tree42f892aea55a6394d5d6ff0dbace2214675cbd71 /testing/toxic/friendlist.c
parent95a3f69580749b8fcabf92cc2ace757d61fa34de (diff)
parentd04f2d0e51931db5fbd8c672c44bb1e59fc58b79 (diff)
Merge branch 'master' of git://github.com/irungentoo/ProjectTox-Core
Diffstat (limited to 'testing/toxic/friendlist.c')
-rw-r--r--testing/toxic/friendlist.c142
1 files changed, 80 insertions, 62 deletions
diff --git a/testing/toxic/friendlist.c b/testing/toxic/friendlist.c
index 05651b0e..f03914e6 100644
--- a/testing/toxic/friendlist.c
+++ b/testing/toxic/friendlist.c
@@ -12,54 +12,59 @@
12 12
13#include "windows.h" 13#include "windows.h"
14 14
15extern int add_window(ToxWindow w); 15extern char WINDOW_STATUS[TOXWINDOWS_MAX_NUM];
16extern int focus_window(int num); 16extern int add_window(ToxWindow w, int n);
17extern ToxWindow new_chat(int friendnum); 17extern ToxWindow new_chat(int friendnum);
18 18
19#define MAX_FRIENDS_NUM 100 19extern int active_window;
20 20
21typedef struct { 21typedef struct {
22 uint8_t name[MAX_NAME_LENGTH]; 22 uint8_t name[MAX_NAME_LENGTH];
23 uint8_t status[MAX_USERSTATUS_LENGTH]; 23 uint8_t status[MAX_USERSTATUS_LENGTH];
24 int num; 24 int num;
25 int chatwin; 25 int chatwin;
26} friend_t; 26} friend_t;
27 27
28static friend_t friends[MAX_FRIENDS_NUM]; 28static friend_t friends[MAX_FRIENDS_NUM];
29static int num_friends = 0; 29static int num_friends = 0;
30static int num_selected = 0; 30static int num_selected = 0;
31 31
32 32void fix_name(uint8_t *name)
33void fix_name(uint8_t* name) { 33{
34 34 /* Remove all non alphanumeric characters */
35 // Remove all non alphanumeric characters. 35 uint8_t *p = name;
36 uint8_t* p = name; 36 uint8_t *q = name;
37 uint8_t* q = name;
38
39 while(*p != 0) { 37 while(*p != 0) {
40 if(isprint(*p)) { 38 if (isprint(*p))
41 *q++ = *p; 39 *q++ = *p;
42 }
43
44 p++; 40 p++;
45 } 41 }
46
47 *q = 0; 42 *q = 0;
48} 43}
49 44
50void friendlist_onMessage(ToxWindow* self, int num, uint8_t* str, uint16_t len) { 45void friendlist_onMessage(ToxWindow *self, int num, uint8_t *str, uint16_t len)
51 46{
52 if(num >= num_friends) 47 if (num >= num_friends)
53 return; 48 return;
54 49
55 if(friends[num].chatwin == -1) { 50 if (friends[num].chatwin == -1) {
56 friends[num].chatwin = add_window(new_chat(num)); 51 friends[num].chatwin = num;
52 int i;
53 /* Find first open slot to hold chat window */
54 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) {
55 if (WINDOW_STATUS[i] == -1) {
56 WINDOW_STATUS[i] = num;
57 add_window(new_chat(num), i);
58 active_window = i;
59 break;
60 }
61 }
57 } 62 }
58} 63}
59 64
60void friendlist_onNickChange(ToxWindow* self, int num, uint8_t* str, uint16_t len) { 65void friendlist_onNickChange(ToxWindow *self, int num, uint8_t *str, uint16_t len)
61 66{
62 if(len >= MAX_NAME_LENGTH || num >= num_friends) 67 if (len >= MAX_NAME_LENGTH || num >= num_friends)
63 return; 68 return;
64 69
65 memcpy((char*) &friends[num].name, (char*) str, len); 70 memcpy((char*) &friends[num].name, (char*) str, len);
@@ -67,9 +72,9 @@ void friendlist_onNickChange(ToxWindow* self, int num, uint8_t* str, uint16_t le
67 fix_name(friends[num].name); 72 fix_name(friends[num].name);
68} 73}
69 74
70void friendlist_onStatusChange(ToxWindow* self, int num, uint8_t* str, uint16_t len) { 75void friendlist_onStatusChange(ToxWindow *self, int num, uint8_t *str, uint16_t len)
71 76{
72 if(len >= MAX_USERSTATUS_LENGTH || num >= num_friends) 77 if (len >= MAX_USERSTATUS_LENGTH || num >= num_friends)
73 return; 78 return;
74 79
75 memcpy((char*) &friends[num].status, (char*) str, len); 80 memcpy((char*) &friends[num].status, (char*) str, len);
@@ -77,48 +82,59 @@ void friendlist_onStatusChange(ToxWindow* self, int num, uint8_t* str, uint16_t
77 fix_name(friends[num].status); 82 fix_name(friends[num].status);
78} 83}
79 84
80int friendlist_onFriendAdded(int num) { 85int friendlist_onFriendAdded(int num)
81 86{
82 if(num_friends == MAX_FRIENDS_NUM) 87 if (num_friends == MAX_FRIENDS_NUM)
83 return -1; 88 return -1;
84 89
85 friends[num_friends].num = num; 90 friends[num_friends].num = num;
86 getname(num, friends[num_friends].name); 91 getname(num, friends[num_friends].name);
87 strcpy((char*) friends[num_friends].name, "unknown"); 92 strcpy((char*) friends[num_friends].name, "unknown");
88 strcpy((char*) friends[num_friends].status, "unknown"); 93 strcpy((char*) friends[num_friends].status, "unknown");
89 friends[num_friends].chatwin = -1; 94 friends[num_friends++].chatwin = -1;
90
91 num_friends++;
92 return 0; 95 return 0;
93} 96}
94 97
95static void friendlist_onKey(ToxWindow* self, int key) { 98static void friendlist_onKey(ToxWindow *self, int key)
96 99{
97 if(key == KEY_UP) { 100 if (key == KEY_UP) {
98 if(num_selected != 0) 101 if (--num_selected < 0)
99 num_selected--; 102 num_selected = num_friends-1;
100 } 103 }
101 else if(key == KEY_DOWN) { 104 else if (key == KEY_DOWN) {
102 if(num_friends != 0) 105 if (num_friends != 0)
103 num_selected = (num_selected+1) % num_friends; 106 num_selected = (num_selected+1) % num_friends;
104 } 107 }
105 else if(key == '\n') { 108 else if (key == '\n') {
106 109 /* Jump to chat window if already open */
107 if(friends[num_selected].chatwin != -1) 110 if (friends[num_selected].chatwin != -1) {
108 return; 111 int i;
109 112 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) {
110 friends[num_selected].chatwin = add_window(new_chat(num_selected)); 113 if (WINDOW_STATUS[i] == num_selected) {
111 focus_window(friends[num_selected].chatwin); 114 active_window = i;
115 break;
116 }
117 }
118 }else {
119 int i;
120 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) {
121 if (WINDOW_STATUS[i] == -1) {
122 WINDOW_STATUS[i] = num_selected;
123 friends[num_selected].chatwin = num_selected;
124 add_window(new_chat(num_selected), i);
125 active_window = i;
126 break;
127 }
128 }
129 }
112 } 130 }
113} 131}
114 132
115static void friendlist_onDraw(ToxWindow* self) { 133static void friendlist_onDraw(ToxWindow *self)
134{
116 curs_set(0); 135 curs_set(0);
117 size_t i;
118
119 werase(self->window); 136 werase(self->window);
120 137 if (num_friends == 0) {
121 if(num_friends == 0) {
122 wprintw(self->window, "Empty. Add some friends! :-)\n"); 138 wprintw(self->window, "Empty. Add some friends! :-)\n");
123 } 139 }
124 else { 140 else {
@@ -128,12 +144,11 @@ static void friendlist_onDraw(ToxWindow* self) {
128 } 144 }
129 145
130 wprintw(self->window, "\n"); 146 wprintw(self->window, "\n");
131 147 int i;
132 for(i=0; i<num_friends; i++) { 148 for (i = 0; i < num_friends; ++i) {
133 149 if (i == num_selected) wattron(self->window, COLOR_PAIR(3));
134 if(i == num_selected) wattron(self->window, COLOR_PAIR(3));
135 wprintw(self->window, " [#%d] ", friends[i].num); 150 wprintw(self->window, " [#%d] ", friends[i].num);
136 if(i == num_selected) wattroff(self->window, COLOR_PAIR(3)); 151 if (i == num_selected) wattroff(self->window, COLOR_PAIR(3));
137 152
138 attron(A_BOLD); 153 attron(A_BOLD);
139 wprintw(self->window, "%s ", friends[i].name); 154 wprintw(self->window, "%s ", friends[i].name);
@@ -141,18 +156,21 @@ static void friendlist_onDraw(ToxWindow* self) {
141 156
142 wprintw(self->window, "(%s)\n", friends[i].status); 157 wprintw(self->window, "(%s)\n", friends[i].status);
143 } 158 }
144
145 wrefresh(self->window); 159 wrefresh(self->window);
146} 160}
147 161
148static void friendlist_onInit(ToxWindow* self) { 162void disable_chatwin(int f_num)
149 163{
164 friends[f_num].chatwin = -1;
150} 165}
151 166
167static void friendlist_onInit(ToxWindow *self)
168{
169
170}
152 171
153ToxWindow new_friendlist() { 172ToxWindow new_friendlist() {
154 ToxWindow ret; 173 ToxWindow ret;
155
156 memset(&ret, 0, sizeof(ret)); 174 memset(&ret, 0, sizeof(ret));
157 175
158 ret.onKey = &friendlist_onKey; 176 ret.onKey = &friendlist_onKey;
@@ -161,7 +179,7 @@ ToxWindow new_friendlist() {
161 ret.onMessage = &friendlist_onMessage; 179 ret.onMessage = &friendlist_onMessage;
162 ret.onNickChange = &friendlist_onNickChange; 180 ret.onNickChange = &friendlist_onNickChange;
163 ret.onStatusChange = &friendlist_onStatusChange; 181 ret.onStatusChange = &friendlist_onStatusChange;
164 strcpy(ret.title, "[friends]");
165 182
183 strcpy(ret.title, "[friends]");
166 return ret; 184 return ret;
167} 185}