comparison mcabber/src/screen.c @ 972:11b632d824f6

Add option 'log_win_on_top'
author Mikael Berthe <mikael@lilotux.net>
date Sat, 30 Sep 2006 19:05:07 +0200
parents 303408ef5e5d
children e693cbe33802
comparison
equal deleted inserted replaced
971:7c119669968c 972:11b632d824f6
81 static char *multiline, *multimode_subj; 81 static char *multiline, *multimode_subj;
82 int update_roster; 82 int update_roster;
83 int utf8_mode = 0; 83 int utf8_mode = 0;
84 static bool Autoaway; 84 static bool Autoaway;
85 static bool Curses; 85 static bool Curses;
86 static bool log_win_on_top;
86 static time_t LastActivity; 87 static time_t LastActivity;
87 88
88 static char inputLine[INPUTLINE_LENGTH+1]; 89 static char inputLine[INPUTLINE_LENGTH+1];
89 static char *ptr_inputline; 90 static char *ptr_inputline;
90 static short int inputline_offset; 91 static short int inputline_offset;
421 422
422 tmp = g_new0(winbuf, 1); 423 tmp = g_new0(winbuf, 1);
423 424
424 // Dimensions 425 // Dimensions
425 x = Roster_Width; 426 x = Roster_Width;
426 y = 0; 427 if (log_win_on_top)
428 y = Log_Win_Height-1;
429 else
430 y = 0;
427 lines = CHAT_WIN_HEIGHT; 431 lines = CHAT_WIN_HEIGHT;
428 cols = maxX - Roster_Width; 432 cols = maxX - Roster_Width;
429 if (cols < 1) cols = 1; 433 if (cols < 1) cols = 1;
430 434
431 tmp->win = newwin(lines, cols, y, x); 435 tmp->win = newwin(lines, cols, y, x);
768 // 772 //
769 void scr_DrawMainWindow(unsigned int fullinit) 773 void scr_DrawMainWindow(unsigned int fullinit)
770 { 774 {
771 int requested_size; 775 int requested_size;
772 gchar *ver, *message; 776 gchar *ver, *message;
777 int chat_y_pos, chatstatus_y_pos, log_y_pos;
773 778
774 Log_Win_Height = DEFAULT_LOG_WIN_HEIGHT; 779 Log_Win_Height = DEFAULT_LOG_WIN_HEIGHT;
775 requested_size = settings_opt_get_int("log_win_height"); 780 requested_size = settings_opt_get_int("log_win_height");
776 if (requested_size > 0) { 781 if (requested_size > 0) {
777 if (maxY > requested_size + 3) 782 if (maxY > requested_size + 3)
801 Roster_Width = 2; 806 Roster_Width = 2;
802 else 807 else
803 Roster_Width = DEFAULT_ROSTER_WIDTH; 808 Roster_Width = DEFAULT_ROSTER_WIDTH;
804 } 809 }
805 810
811 log_win_on_top = (settings_opt_get_int("log_win_on_top") == 1);
812
813 if (log_win_on_top) {
814 chat_y_pos = Log_Win_Height-1;
815 log_y_pos = 0;
816 chatstatus_y_pos = Log_Win_Height-2;
817 } else {
818 chat_y_pos = 0;
819 log_y_pos = CHAT_WIN_HEIGHT+1;
820 chatstatus_y_pos = CHAT_WIN_HEIGHT;
821 }
822
806 if (fullinit) { 823 if (fullinit) {
807 /* Create windows */ 824 /* Create windows */
808 rosterWnd = newwin(CHAT_WIN_HEIGHT, Roster_Width, 0, 0); 825 rosterWnd = newwin(CHAT_WIN_HEIGHT, Roster_Width, chat_y_pos, 0);
809 chatWnd = newwin(CHAT_WIN_HEIGHT, maxX - Roster_Width, 0, Roster_Width); 826 chatWnd = newwin(CHAT_WIN_HEIGHT, maxX - Roster_Width, chat_y_pos,
810 logWnd = newwin(Log_Win_Height-2, maxX, CHAT_WIN_HEIGHT+1, 0); 827 Roster_Width);
811 chatstatusWnd = newwin(1, maxX, CHAT_WIN_HEIGHT, 0); 828 logWnd = newwin(Log_Win_Height-2, maxX, log_y_pos, 0);
829 chatstatusWnd = newwin(1, maxX, chatstatus_y_pos, 0);
812 mainstatusWnd = newwin(1, maxX, maxY-2, 0); 830 mainstatusWnd = newwin(1, maxX, maxY-2, 0);
813 inputWnd = newwin(1, maxX, maxY-1, 0); 831 inputWnd = newwin(1, maxX, maxY-1, 0);
814 if (!rosterWnd || !chatWnd || !logWnd || !inputWnd) { 832 if (!rosterWnd || !chatWnd || !logWnd || !inputWnd) {
815 scr_TerminateCurses(); 833 scr_TerminateCurses();
816 fprintf(stderr, "Cannot create windows!\n"); 834 fprintf(stderr, "Cannot create windows!\n");
823 wbkgd(mainstatusWnd, get_color(COLOR_STATUS)); 841 wbkgd(mainstatusWnd, get_color(COLOR_STATUS));
824 } else { 842 } else {
825 /* Resize/move windows */ 843 /* Resize/move windows */
826 wresize(rosterWnd, CHAT_WIN_HEIGHT, Roster_Width); 844 wresize(rosterWnd, CHAT_WIN_HEIGHT, Roster_Width);
827 wresize(chatWnd, CHAT_WIN_HEIGHT, maxX - Roster_Width); 845 wresize(chatWnd, CHAT_WIN_HEIGHT, maxX - Roster_Width);
828 mvwin(chatWnd, 0, Roster_Width);
829
830 wresize(logWnd, Log_Win_Height-2, maxX); 846 wresize(logWnd, Log_Win_Height-2, maxX);
831 mvwin(logWnd, CHAT_WIN_HEIGHT+1, 0); 847
848 mvwin(chatWnd, chat_y_pos, Roster_Width);
849 mvwin(rosterWnd, chat_y_pos, 0);
850 mvwin(logWnd, log_y_pos, 0);
832 851
833 // Resize & move chat status window 852 // Resize & move chat status window
834 wresize(chatstatusWnd, 1, maxX); 853 wresize(chatstatusWnd, 1, maxX);
835 mvwin(chatstatusWnd, CHAT_WIN_HEIGHT, 0); 854 mvwin(chatstatusWnd, chatstatus_y_pos, 0);
836 // Resize & move main status window 855 // Resize & move main status window
837 wresize(mainstatusWnd, 1, maxX); 856 wresize(mainstatusWnd, 1, maxX);
838 mvwin(mainstatusWnd, maxY-2, 0); 857 mvwin(mainstatusWnd, maxY-2, 0);
839 // Resize & move input line window 858 // Resize & move input line window
840 wresize(inputWnd, 1, maxX); 859 wresize(inputWnd, 1, maxX);
896 } 915 }
897 916
898 static inline void resize_win_buffer(winbuf *wbp, int x, int y, 917 static inline void resize_win_buffer(winbuf *wbp, int x, int y,
899 int lines, int cols) 918 int lines, int cols)
900 { 919 {
920 int chat_y_pos;
921
922 if (log_win_on_top)
923 chat_y_pos = Log_Win_Height-1;
924 else
925 chat_y_pos = 0;
926
901 // Resize/move buddy window 927 // Resize/move buddy window
902 wresize(wbp->win, lines, cols); 928 wresize(wbp->win, lines, cols);
903 mvwin(wbp->win, 0, Roster_Width); 929 mvwin(wbp->win, chat_y_pos, Roster_Width);
904 werase(wbp->win); 930 werase(wbp->win);
905 // If a panel exists, replace the old window with the new 931 // If a panel exists, replace the old window with the new
906 if (wbp->panel) 932 if (wbp->panel)
907 replace_panel(wbp->panel, wbp->win); 933 replace_panel(wbp->panel, wbp->win);
908 // Redo line wrapping 934 // Redo line wrapping