Mercurial > ~mikael > mcabber > hg
comparison mcabber/screen.c @ 2:63acb2dcaeea
[/trunk] Changeset 17 by mikael
* Quite a lot of change: the input bar is now usable.
Can use /quit command and send messages.
author | mikael |
---|---|
date | Thu, 17 Mar 2005 21:30:14 +0000 |
parents | da1fb510081e |
children | 582ef676a320 |
comparison
equal
deleted
inserted
replaced
1:da1fb510081e | 2:63acb2dcaeea |
---|---|
31 | 31 |
32 /* Variables globales a SCREEN.C */ | 32 /* Variables globales a SCREEN.C */ |
33 WINDOW *rosterWnd, *chatWnd, *inputWnd; | 33 WINDOW *rosterWnd, *chatWnd, *inputWnd; |
34 WINDOW *logWnd, *logWnd_border; | 34 WINDOW *logWnd, *logWnd_border; |
35 PANEL *rosterPanel, *chatPanel, *inputPanel; | 35 PANEL *rosterPanel, *chatPanel, *inputPanel; |
36 PANEL *logPanel, *logPanel_border; | 36 static PANEL *logPanel, *logPanel_border; |
37 int maxY, maxX; | 37 int maxY, maxX; |
38 window_entry_t *ventanaActual; | 38 window_entry_t *ventanaActual; |
39 | 39 |
40 char inputLine[INPUTLINE_LENGTH]; | 40 char inputLine[INPUTLINE_LENGTH]; |
41 char *ptr_inputline; | 41 char *ptr_inputline; |
299 del_panel(popupPanel); | 299 del_panel(popupPanel); |
300 delwin(popupWin); | 300 delwin(popupWin); |
301 update_panels(); | 301 update_panels(); |
302 doupdate(); | 302 doupdate(); |
303 free(instr); | 303 free(instr); |
304 keypad(rosterWnd, TRUE); | 304 keypad(inputWnd, TRUE); |
305 } | 305 } |
306 | 306 |
307 | 307 |
308 | 308 |
309 void scr_RoolWindow(void) | 309 void scr_RoolWindow(void) |
420 void scr_InitCurses(void) | 420 void scr_InitCurses(void) |
421 { | 421 { |
422 initscr(); | 422 initscr(); |
423 noecho(); | 423 noecho(); |
424 raw(); | 424 raw(); |
425 //cbreak(); | |
425 start_color(); | 426 start_color(); |
426 use_default_colors(); | 427 use_default_colors(); |
427 | 428 |
428 ParseColors(); | 429 ParseColors(); |
429 | 430 |
506 free(submsgs[i]); | 507 free(submsgs[i]); |
507 | 508 |
508 free(submsgs); | 509 free(submsgs); |
509 free(buffer); | 510 free(buffer); |
510 | 511 |
512 top_panel(inputPanel); | |
513 //wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine); | |
514 update_panels(); | |
515 doupdate(); | |
511 } | 516 } |
512 | 517 |
513 void scr_WriteMessage(int sock) | 518 void scr_WriteMessage(int sock) |
514 { | 519 { |
515 char **submsgs; | 520 char **submsgs; |
552 } | 557 } |
553 | 558 |
554 int scr_Getch(void) | 559 int scr_Getch(void) |
555 { | 560 { |
556 int ch; | 561 int ch; |
557 keypad(rosterWnd, TRUE); | 562 // keypad(inputWnd, TRUE); |
558 ch = wgetch(rosterWnd); | 563 ch = wgetch(inputWnd); |
559 return ch; | 564 return ch; |
560 } | 565 } |
561 | 566 |
562 WINDOW *scr_GetRosterWindow(void) | 567 WINDOW *scr_GetRosterWindow(void) |
563 { | 568 { |
567 WINDOW *scr_GetStatusWindow(void) | 572 WINDOW *scr_GetStatusWindow(void) |
568 { | 573 { |
569 return chatWnd; | 574 return chatWnd; |
570 } | 575 } |
571 | 576 |
572 int process_key(int key) | 577 WINDOW *scr_GetInputWindow(void) |
578 { | |
579 return inputWnd; | |
580 } | |
581 | |
582 void send_message(int sock, char *msg) | |
583 { | |
584 char **submsgs; | |
585 char *buffer = (char *) calloc(1, 24+strlen(msg)); | |
586 char *buffer2 = (char *) calloc(1, 1024); | |
587 int n, i; | |
588 buddy_entry_t *tmp = bud_SelectedInfo(); | |
589 | |
590 scr_ShowWindow(tmp->jid); | |
591 | |
592 sprintf(buffer, ">>> %s", msg); | |
593 | |
594 submsgs = | |
595 ut_SplitMessage(buffer, &n, | |
596 maxX - scr_WindowHeight(rosterWnd) - 20); | |
597 for (i = 0; i < n; i++) { | |
598 if (i == 0) | |
599 scr_WriteInWindow(tmp->jid, submsgs[i], TRUE); | |
600 else | |
601 scr_WriteInWindow(tmp->jid, submsgs[i], FALSE); | |
602 } | |
603 | |
604 for (i = 0; i < n; i++) | |
605 free(submsgs[i]); | |
606 free(submsgs); | |
607 | |
608 //move(CHAT_WIN_HEIGHT - 1, maxX - 1); | |
609 refresh(); | |
610 sprintf(buffer2, "%s@%s/%s", cfg_read("username"), | |
611 cfg_read("server"), cfg_read("resource")); | |
612 srv_sendtext(sock, tmp->jid, buffer, buffer2); | |
613 free(buffer); | |
614 free(buffer2); | |
615 | |
616 top_panel(inputPanel); | |
617 } | |
618 | |
619 int process_line(char *line, int sock) | |
620 { | |
621 if (*line == 0) // XXX Simple checks should maybe be in process_key() | |
622 return 0; | |
623 if (*line != '/') { | |
624 send_message(sock, line); | |
625 return 0; | |
626 } | |
627 if (!strcasecmp(line, "/quit")) { | |
628 return 255; | |
629 } | |
630 // Commands handling | |
631 // TODO | |
632 // say... | |
633 wprintw(logWnd, "\nUnrecognised command, sorry."); | |
634 return 0; | |
635 } | |
636 | |
637 int process_key(int key, int sock) | |
573 { | 638 { |
574 if (isprint(key)) { | 639 if (isprint(key)) { |
575 char tmpLine[INPUTLINE_LENGTH]; | 640 char tmpLine[INPUTLINE_LENGTH]; |
576 strcpy(tmpLine, ptr_inputline); | 641 strcpy(tmpLine, ptr_inputline); |
577 *ptr_inputline++ = key; | 642 *ptr_inputline++ = key; |
581 case KEY_BACKSPACE: | 646 case KEY_BACKSPACE: |
582 if (ptr_inputline != (char*)&inputLine) { | 647 if (ptr_inputline != (char*)&inputLine) { |
583 *--ptr_inputline = 0; | 648 *--ptr_inputline = 0; |
584 } | 649 } |
585 break; | 650 break; |
651 case KEY_DC: | |
652 if (*ptr_inputline) | |
653 strcpy(ptr_inputline, ptr_inputline+1); | |
654 break; | |
586 case KEY_LEFT: | 655 case KEY_LEFT: |
587 if (ptr_inputline != (char*)&inputLine) { | 656 if (ptr_inputline != (char*)&inputLine) { |
588 ptr_inputline--; | 657 ptr_inputline--; |
589 } | 658 } |
590 break; | 659 break; |
595 case 9: // Tab | 664 case 9: // Tab |
596 wprintw(logWnd, "\nI'm unable to complete yet"); | 665 wprintw(logWnd, "\nI'm unable to complete yet"); |
597 break; | 666 break; |
598 case '\n': // Enter | 667 case '\n': // Enter |
599 // XXX Test: | 668 // XXX Test: |
600 if (!strcasecmp(inputLine, "/quit")) { | 669 if (process_line(inputLine, sock)) |
601 return 255; | 670 return 255; |
602 } | |
603 // TODO processing | |
604 ptr_inputline = inputLine; | 671 ptr_inputline = inputLine; |
605 *ptr_inputline = 0; | 672 *ptr_inputline = 0; |
606 break; | 673 break; |
607 case KEY_UP: | 674 case KEY_UP: |
608 bud_RosterUp(); | 675 bud_RosterUp(); |
676 scr_ShowBuddyWindow(); | |
609 break; | 677 break; |
610 case KEY_DOWN: | 678 case KEY_DOWN: |
611 bud_RosterDown(); | 679 bud_RosterDown(); |
612 break; | 680 scr_ShowBuddyWindow(); |
681 break; | |
682 case KEY_PPAGE: | |
683 wprintw(logWnd, "\nPageUp??"); | |
684 break; | |
685 case KEY_NPAGE: | |
686 wprintw(logWnd, "\nPageDown??"); | |
687 break; | |
688 case KEY_HOME: | |
689 case 1: | |
690 ptr_inputline = inputLine; | |
691 break; | |
692 case KEY_END: | |
693 case 5: | |
694 for (; *ptr_inputline; ptr_inputline++) ; | |
695 break; | |
696 case 21: // Ctrl-u | |
697 strcpy(inputLine, ptr_inputline); | |
698 ptr_inputline = inputLine; | |
699 break; | |
700 case KEY_EOL: | |
701 case 11: // Ctrl-k | |
702 *ptr_inputline = 0; | |
703 break; | |
704 default: | |
705 wprintw(logWnd, "\nUnkown key=%o", key); | |
613 } | 706 } |
707 //wprintw(logWnd, "\n[%02x]", key); | |
614 } | 708 } |
615 mvwprintw(inputWnd, 0,0, "%s", inputLine); | 709 mvwprintw(inputWnd, 0,0, "%s", inputLine); |
616 wclrtoeol(inputWnd); | 710 wclrtoeol(inputWnd); |
617 if (*ptr_inputline) { | 711 if (*ptr_inputline) { |
618 wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine); | 712 wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine); |