summaryrefslogtreecommitdiff
path: root/testing/toxic/friendlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'testing/toxic/friendlist.c')
-rw-r--r--testing/toxic/friendlist.c60
1 files changed, 43 insertions, 17 deletions
diff --git a/testing/toxic/friendlist.c b/testing/toxic/friendlist.c
index 05651b0e..94e8fb47 100644
--- a/testing/toxic/friendlist.c
+++ b/testing/toxic/friendlist.c
@@ -12,11 +12,10 @@
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 18extern int w_active;
19#define MAX_FRIENDS_NUM 100
20 19
21typedef struct { 20typedef struct {
22 uint8_t name[MAX_NAME_LENGTH]; 21 uint8_t name[MAX_NAME_LENGTH];
@@ -53,7 +52,17 @@ void friendlist_onMessage(ToxWindow* self, int num, uint8_t* str, uint16_t len)
53 return; 52 return;
54 53
55 if(friends[num].chatwin == -1) { 54 if(friends[num].chatwin == -1) {
56 friends[num].chatwin = add_window(new_chat(num)); 55 friends[num].chatwin = num;
56 int i;
57 /* Find first open slot to hold chat window */
58 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) {
59 if (WINDOW_STATUS[i] == -1) {
60 WINDOW_STATUS[i] = num;
61 add_window(new_chat(num), i);
62 w_active = i;
63 break;
64 }
65 }
57 } 66 }
58} 67}
59 68
@@ -86,29 +95,42 @@ int friendlist_onFriendAdded(int num) {
86 getname(num, friends[num_friends].name); 95 getname(num, friends[num_friends].name);
87 strcpy((char*) friends[num_friends].name, "unknown"); 96 strcpy((char*) friends[num_friends].name, "unknown");
88 strcpy((char*) friends[num_friends].status, "unknown"); 97 strcpy((char*) friends[num_friends].status, "unknown");
89 friends[num_friends].chatwin = -1; 98 friends[num_friends++].chatwin = -1;
90
91 num_friends++;
92 return 0; 99 return 0;
93} 100}
94 101
95static void friendlist_onKey(ToxWindow* self, int key) { 102static void friendlist_onKey(ToxWindow* self, int key) {
96
97 if(key == KEY_UP) { 103 if(key == KEY_UP) {
98 if(num_selected != 0) 104 num_selected--;
99 num_selected--; 105 if (num_selected < 0)
106 num_selected = num_friends-1;
100 } 107 }
101 else if(key == KEY_DOWN) { 108 else if(key == KEY_DOWN) {
102 if(num_friends != 0) 109 if(num_friends != 0)
103 num_selected = (num_selected+1) % num_friends; 110 num_selected = (num_selected+1) % num_friends;
104 } 111 }
105 else if(key == '\n') { 112 else if(key == '\n') {
106 113 /* Jump to chat window if already open */
107 if(friends[num_selected].chatwin != -1) 114 if (friends[num_selected].chatwin != -1) {
108 return; 115 int i;
109 116 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) {
110 friends[num_selected].chatwin = add_window(new_chat(num_selected)); 117 if (WINDOW_STATUS[i] == num_selected) {
111 focus_window(friends[num_selected].chatwin); 118 w_active = i;
119 break;
120 }
121 }
122 }else {
123 int i;
124 for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) {
125 if (WINDOW_STATUS[i] == -1) {
126 WINDOW_STATUS[i] = num_selected;
127 friends[num_selected].chatwin = num_selected;
128 add_window(new_chat(num_selected), i);
129 w_active = i;
130 break;
131 }
132 }
133 }
112 } 134 }
113} 135}
114 136
@@ -145,6 +167,10 @@ static void friendlist_onDraw(ToxWindow* self) {
145 wrefresh(self->window); 167 wrefresh(self->window);
146} 168}
147 169
170void disable_chatwin(int f_num) {
171 friends[f_num].chatwin = -1;
172}
173
148static void friendlist_onInit(ToxWindow* self) { 174static void friendlist_onInit(ToxWindow* self) {
149 175
150} 176}