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);