mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-23 01:33:02 +01:00
made statusmessages resize dynamically according to window size
This commit is contained in:
parent
863121273e
commit
b7375fb2a1
49
src/chat.c
49
src/chat.c
@ -44,7 +44,7 @@ static void chat_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *msg, uint1
|
|||||||
if (self->friendnum != num)
|
if (self->friendnum != num)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ChatContext *ctx = (ChatContext *) self->x;
|
ChatContext *ctx = (ChatContext *) self->chatwin;
|
||||||
|
|
||||||
struct tm *timeinfo = get_time();
|
struct tm *timeinfo = get_time();
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ void chat_onConnectionChange(ToxWindow *self, Tox *m, int num, uint8_t status)
|
|||||||
if (self->friendnum != num)
|
if (self->friendnum != num)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
statusbar->is_online = status == 1 ? true : false;
|
statusbar->is_online = status == 1 ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ static void chat_onAction(ToxWindow *self, Tox *m, int num, uint8_t *action, uin
|
|||||||
if (self->friendnum != num)
|
if (self->friendnum != num)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ChatContext *ctx = (ChatContext *) self->x;
|
ChatContext *ctx = (ChatContext *) self->chatwin;
|
||||||
struct tm *timeinfo = get_time();
|
struct tm *timeinfo = get_time();
|
||||||
|
|
||||||
uint8_t nick[TOX_MAX_NAME_LENGTH] = {'\0'};
|
uint8_t nick[TOX_MAX_NAME_LENGTH] = {'\0'};
|
||||||
@ -108,7 +108,7 @@ static void chat_onStatusChange(ToxWindow *self, Tox *m, int num, TOX_USERSTATUS
|
|||||||
if (self->friendnum != num)
|
if (self->friendnum != num)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
statusbar->status = status;
|
statusbar->status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ static void chat_onStatusMessageChange(ToxWindow *self, int num, uint8_t *status
|
|||||||
if (self->friendnum != num)
|
if (self->friendnum != num)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
statusbar->statusmsg_len = len;
|
statusbar->statusmsg_len = len;
|
||||||
snprintf(statusbar->statusmsg, len, "%s", status);
|
snprintf(statusbar->statusmsg, len, "%s", status);
|
||||||
}
|
}
|
||||||
@ -349,8 +349,8 @@ static void execute(ToxWindow *self, ChatContext *ctx, StatusBar *statusbar, Tox
|
|||||||
|
|
||||||
static void chat_onKey(ToxWindow *self, Tox *m, wint_t key)
|
static void chat_onKey(ToxWindow *self, Tox *m, wint_t key)
|
||||||
{
|
{
|
||||||
ChatContext *ctx = (ChatContext *) self->x;
|
ChatContext *ctx = (ChatContext *) self->chatwin;
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
|
|
||||||
struct tm *timeinfo = get_time();
|
struct tm *timeinfo = get_time();
|
||||||
|
|
||||||
@ -442,10 +442,10 @@ static void chat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
int x, y;
|
int x, y;
|
||||||
getmaxyx(self->window, y, x);
|
getmaxyx(self->window, y, x);
|
||||||
|
|
||||||
ChatContext *ctx = (ChatContext *) self->x;
|
ChatContext *ctx = (ChatContext *) self->chatwin;
|
||||||
|
|
||||||
/* Draw status bar */
|
/* Draw status bar */
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
mvwhline(statusbar->topline, 1, 0, '-', x);
|
mvwhline(statusbar->topline, 1, 0, '-', x);
|
||||||
wmove(statusbar->topline, 0, 0);
|
wmove(statusbar->topline, 0, 0);
|
||||||
|
|
||||||
@ -477,7 +477,6 @@ static void chat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
wattron(statusbar->topline, COLOR_PAIR(colour) | A_BOLD);
|
wattron(statusbar->topline, COLOR_PAIR(colour) | A_BOLD);
|
||||||
wprintw(statusbar->topline, "[%s]", status_text);
|
wprintw(statusbar->topline, "[%s]", status_text);
|
||||||
wattroff(statusbar->topline, COLOR_PAIR(colour) | A_BOLD);
|
wattroff(statusbar->topline, COLOR_PAIR(colour) | A_BOLD);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
wattron(statusbar->topline, A_BOLD);
|
wattron(statusbar->topline, A_BOLD);
|
||||||
wprintw(statusbar->topline, " %s ", self->name);
|
wprintw(statusbar->topline, " %s ", self->name);
|
||||||
@ -485,19 +484,30 @@ static void chat_onDraw(ToxWindow *self, Tox *m)
|
|||||||
wprintw(statusbar->topline, "[Offline]");
|
wprintw(statusbar->topline, "[Offline]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reset statusbar->statusmsg on window resize */
|
||||||
|
if (x != self->x) {
|
||||||
|
uint8_t statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH] = {'\0'};
|
||||||
|
tox_copy_statusmessage(m, self->friendnum, statusmsg, TOX_MAX_STATUSMESSAGE_LENGTH);
|
||||||
|
snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg);
|
||||||
|
statusbar->statusmsg_len = tox_get_statusmessage_size(m, self->friendnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
self->x = x;
|
||||||
|
|
||||||
/* Truncate note if it doesn't fit in statusbar */
|
/* Truncate note if it doesn't fit in statusbar */
|
||||||
uint16_t maxlen = x - getcurx(statusbar->topline) - 5;
|
uint16_t maxlen = x - getcurx(statusbar->topline) - 6;
|
||||||
if (statusbar->statusmsg_len > maxlen) {
|
if (statusbar->statusmsg_len > maxlen) {
|
||||||
statusbar->statusmsg[maxlen] = '\0';
|
statusbar->statusmsg[maxlen] = '\0';
|
||||||
statusbar->statusmsg_len = maxlen;
|
statusbar->statusmsg_len = maxlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (statusbar->statusmsg[0]) {
|
||||||
wattron(statusbar->topline, A_BOLD);
|
wattron(statusbar->topline, A_BOLD);
|
||||||
wprintw(statusbar->topline, " | %s | ", statusbar->statusmsg);
|
wprintw(statusbar->topline, " | %s | ", statusbar->statusmsg);
|
||||||
wattroff(statusbar->topline, A_BOLD);
|
wattroff(statusbar->topline, A_BOLD);
|
||||||
|
}
|
||||||
|
|
||||||
wprintw(statusbar->topline, "\n");
|
wprintw(statusbar->topline, "\n");
|
||||||
|
|
||||||
mvwhline(ctx->linewin, 0, 0, '_', x);
|
mvwhline(ctx->linewin, 0, 0, '_', x);
|
||||||
wrefresh(self->window);
|
wrefresh(self->window);
|
||||||
}
|
}
|
||||||
@ -506,9 +516,10 @@ static void chat_onInit(ToxWindow *self, Tox *m)
|
|||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
getmaxyx(self->window, y, x);
|
getmaxyx(self->window, y, x);
|
||||||
|
self->x = x;
|
||||||
|
|
||||||
/* Init statusbar info */
|
/* Init statusbar info */
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
statusbar->status = tox_get_userstatus(m, self->friendnum);
|
statusbar->status = tox_get_userstatus(m, self->friendnum);
|
||||||
statusbar->is_online = tox_get_friend_connectionstatus(m, self->friendnum) == 1;
|
statusbar->is_online = tox_get_friend_connectionstatus(m, self->friendnum) == 1;
|
||||||
|
|
||||||
@ -518,7 +529,7 @@ static void chat_onInit(ToxWindow *self, Tox *m)
|
|||||||
statusbar->statusmsg_len = tox_get_statusmessage_size(m, self->friendnum);
|
statusbar->statusmsg_len = tox_get_statusmessage_size(m, self->friendnum);
|
||||||
|
|
||||||
/* Init subwindows */
|
/* Init subwindows */
|
||||||
ChatContext *ctx = (ChatContext *) self->x;
|
ChatContext *ctx = (ChatContext *) self->chatwin;
|
||||||
statusbar->topline = subwin(self->window, 2, x, 0, 0);
|
statusbar->topline = subwin(self->window, 2, x, 0, 0);
|
||||||
ctx->history = subwin(self->window, y-3, x, 0, 0);
|
ctx->history = subwin(self->window, y-3, x, 0, 0);
|
||||||
scrollok(ctx->history, 1);
|
scrollok(ctx->history, 1);
|
||||||
@ -547,12 +558,12 @@ ToxWindow new_chat(Tox *m, ToxWindow *prompt, int friendnum)
|
|||||||
tox_getname(m, friendnum, name);
|
tox_getname(m, friendnum, name);
|
||||||
snprintf(ret.name, sizeof(ret.name), "%s", name);
|
snprintf(ret.name, sizeof(ret.name), "%s", name);
|
||||||
|
|
||||||
ChatContext *x = calloc(1, sizeof(ChatContext));
|
ChatContext *chatwin = calloc(1, sizeof(ChatContext));
|
||||||
StatusBar *s = calloc(1, sizeof(StatusBar));
|
StatusBar *stb = calloc(1, sizeof(StatusBar));
|
||||||
|
|
||||||
if (s != NULL && x != NULL) {
|
if (stb != NULL && chatwin != NULL) {
|
||||||
ret.x = x;
|
ret.chatwin = chatwin;
|
||||||
ret.s = s;
|
ret.stb = stb;
|
||||||
} else {
|
} else {
|
||||||
endwin();
|
endwin();
|
||||||
fprintf(stderr, "calloc() failed. Aborting...\n");
|
fprintf(stderr, "calloc() failed. Aborting...\n");
|
||||||
|
@ -219,11 +219,21 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
|
|||||||
wattroff(self->window, COLOR_PAIR(colour) | A_BOLD);
|
wattroff(self->window, COLOR_PAIR(colour) | A_BOLD);
|
||||||
wprintw(self->window, "]%s (", friends[i].name);
|
wprintw(self->window, "]%s (", friends[i].name);
|
||||||
|
|
||||||
/* Truncate note if it doesn't fit on one line */
|
|
||||||
int x, y;
|
int x, y;
|
||||||
getmaxyx(self->window, y, x);
|
getmaxyx(self->window, y, x);
|
||||||
uint16_t maxlen = x - getcurx(self->window) - 2;
|
|
||||||
|
|
||||||
|
/* Reset friends[i].statusmsg on window resize */
|
||||||
|
if (x != self->x) {
|
||||||
|
uint8_t statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH] = {'\0'};
|
||||||
|
tox_copy_statusmessage(m, friends[i].num, statusmsg, TOX_MAX_STATUSMESSAGE_LENGTH);
|
||||||
|
snprintf(friends[i].statusmsg, sizeof(friends[i].statusmsg), "%s", statusmsg);
|
||||||
|
friends[i].statusmsg_len = tox_get_statusmessage_size(m, self->friendnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
self->x = x;
|
||||||
|
|
||||||
|
/* Truncate note if it doesn't fit on one line */
|
||||||
|
uint16_t maxlen = x - getcurx(self->window) - 2;
|
||||||
if (friends[i].statusmsg_len > maxlen) {
|
if (friends[i].statusmsg_len > maxlen) {
|
||||||
friends[i].statusmsg[maxlen] = '\0';
|
friends[i].statusmsg[maxlen] = '\0';
|
||||||
friends[i].statusmsg_len = maxlen;
|
friends[i].statusmsg_len = maxlen;
|
||||||
|
@ -359,7 +359,7 @@ void exit_toxic(Tox *m)
|
|||||||
store_data(m, DATA_FILE);
|
store_data(m, DATA_FILE);
|
||||||
free(DATA_FILE);
|
free(DATA_FILE);
|
||||||
free(SRVLIST_FILE);
|
free(SRVLIST_FILE);
|
||||||
free(prompt->s);
|
free(prompt->stb);
|
||||||
tox_kill(m);
|
tox_kill(m);
|
||||||
endwin();
|
endwin();
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
|
18
src/prompt.c
18
src/prompt.c
@ -57,28 +57,28 @@ static struct {
|
|||||||
/* Updates own nick in prompt statusbar */
|
/* Updates own nick in prompt statusbar */
|
||||||
void prompt_update_nick(ToxWindow *prompt, uint8_t *nick)
|
void prompt_update_nick(ToxWindow *prompt, uint8_t *nick)
|
||||||
{
|
{
|
||||||
StatusBar *statusbar = (StatusBar *) prompt->s;
|
StatusBar *statusbar = (StatusBar *) prompt->stb;
|
||||||
snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick);
|
snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Updates own statusmessage in prompt statusbar */
|
/* Updates own statusmessage in prompt statusbar */
|
||||||
void prompt_update_statusmessage(ToxWindow *prompt, uint8_t *statusmsg)
|
void prompt_update_statusmessage(ToxWindow *prompt, uint8_t *statusmsg)
|
||||||
{
|
{
|
||||||
StatusBar *statusbar = (StatusBar *) prompt->s;
|
StatusBar *statusbar = (StatusBar *) prompt->stb;
|
||||||
snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg);
|
snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Updates own status in prompt statusbar */
|
/* Updates own status in prompt statusbar */
|
||||||
void prompt_update_status(ToxWindow *prompt, TOX_USERSTATUS status)
|
void prompt_update_status(ToxWindow *prompt, TOX_USERSTATUS status)
|
||||||
{
|
{
|
||||||
StatusBar *statusbar = (StatusBar *) prompt->s;
|
StatusBar *statusbar = (StatusBar *) prompt->stb;
|
||||||
statusbar->status = status;
|
statusbar->status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Updates own connection status in prompt statusbar */
|
/* Updates own connection status in prompt statusbar */
|
||||||
void prompt_update_connectionstatus(ToxWindow *prompt, bool is_connected)
|
void prompt_update_connectionstatus(ToxWindow *prompt, bool is_connected)
|
||||||
{
|
{
|
||||||
StatusBar *statusbar = (StatusBar *) prompt->s;
|
StatusBar *statusbar = (StatusBar *) prompt->stb;
|
||||||
statusbar->is_online = is_connected;
|
statusbar->is_online = is_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -612,7 +612,7 @@ static void prompt_onDraw(ToxWindow *self, Tox *m)
|
|||||||
--y;
|
--y;
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
|
|
||||||
werase(statusbar->topline);
|
werase(statusbar->topline);
|
||||||
|
|
||||||
@ -676,7 +676,7 @@ void prompt_init_statusbar(ToxWindow *self, Tox *m)
|
|||||||
getmaxyx(self->window, y, x);
|
getmaxyx(self->window, y, x);
|
||||||
|
|
||||||
/* Init statusbar info */
|
/* Init statusbar info */
|
||||||
StatusBar *statusbar = (StatusBar *) self->s;
|
StatusBar *statusbar = (StatusBar *) self->stb;
|
||||||
statusbar->status = TOX_USERSTATUS_NONE;
|
statusbar->status = TOX_USERSTATUS_NONE;
|
||||||
statusbar->is_online = false;
|
statusbar->is_online = false;
|
||||||
|
|
||||||
@ -703,10 +703,10 @@ ToxWindow new_prompt()
|
|||||||
ret.onFriendRequest = &prompt_onFriendRequest;
|
ret.onFriendRequest = &prompt_onFriendRequest;
|
||||||
strcpy(ret.name, "prompt");
|
strcpy(ret.name, "prompt");
|
||||||
|
|
||||||
StatusBar *s = calloc(1, sizeof(StatusBar));
|
StatusBar *stb = calloc(1, sizeof(StatusBar));
|
||||||
|
|
||||||
if (s != NULL)
|
if (stb != NULL)
|
||||||
ret.s = s;
|
ret.stb = stb;
|
||||||
else {
|
else {
|
||||||
endwin();
|
endwin();
|
||||||
fprintf(stderr, "calloc() failed. Aborting...\n");
|
fprintf(stderr, "calloc() failed. Aborting...\n");
|
||||||
|
@ -52,9 +52,10 @@ struct ToxWindow_ {
|
|||||||
|
|
||||||
char name[TOX_MAX_NAME_LENGTH];
|
char name[TOX_MAX_NAME_LENGTH];
|
||||||
int friendnum;
|
int friendnum;
|
||||||
|
int x;
|
||||||
|
|
||||||
void *x;
|
void *chatwin;
|
||||||
void *s;
|
void *stb;
|
||||||
void *prompt;
|
void *prompt;
|
||||||
|
|
||||||
bool blink;
|
bool blink;
|
||||||
|
Loading…
Reference in New Issue
Block a user