/[weechat]/weechat/src/gui/curses/gui-display.c
ViewVC logotype

Diff of /weechat/src/gui/curses/gui-display.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by flashcode, Sun Oct 12 00:05:29 2003 UTC revision 1.10 by flashcode, Sun Oct 12 14:13:48 2003 UTC
# Line 37  Line 37 
37  #include "../../irc/irc.h"  #include "../../irc/irc.h"
38    
39    
 int gui_ready;                              /* = 1 if GUI is initialized    */  
   
 t_gui_window *gui_windows = NULL;           /* pointer to first window      */  
 t_gui_window *last_gui_window = NULL;       /* pointer to last window       */  
 t_gui_window *gui_current_window = NULL;    /* pointer to current window    */  
   
40  t_gui_color gui_colors[] =  t_gui_color gui_colors[] =
41  { { "default", -1 | A_NORMAL },  { { "default", -1 | A_NORMAL },
42    { "black", COLOR_BLACK | A_NORMAL },    { "black", COLOR_BLACK | A_NORMAL },
# Line 594  gui_redraw_window_chat (t_gui_window *wi Line 588  gui_redraw_window_chat (t_gui_window *wi
588      if (window != gui_current_window)      if (window != gui_current_window)
589          return;          return;
590            
591      //gui_curses_window_clear (window->win_chat);      gui_curses_window_clear (window->win_chat);
592      gui_draw_window_chat (window);      gui_draw_window_chat (window);
593  }  }
594    
# Line 1036  gui_redraw_window (t_gui_window *window) Line 1030  gui_redraw_window (t_gui_window *window)
1030  }  }
1031    
1032  /*  /*
  * gui_window_clear: clear window content  
  */  
   
 void  
 gui_window_clear (t_gui_window *window)  
 {  
     t_gui_line *ptr_line;  
     t_gui_message *ptr_message;  
       
     while (window->lines)  
     {  
         ptr_line = window->lines->next_line;  
         while (window->lines->messages)  
         {  
             ptr_message = window->lines->messages->next_message;  
             if (window->lines->messages->message)  
                 free (window->lines->messages->message);  
             free (window->lines->messages);  
             window->lines->messages = ptr_message;  
         }  
         free (window->lines);  
         window->lines = ptr_line;  
     }  
       
     window->lines = NULL;  
     window->last_line = NULL;  
     window->first_line_displayed = 1;  
     window->sub_lines = 0;  
     window->line_complete = 1;  
     window->unread_data = 0;  
       
     if (window == gui_current_window)  
         gui_redraw_window_chat (window);  
 }  
   
 /*  
  * gui_window_clear_all: clear all windows content  
  */  
   
 void  
 gui_window_clear_all ()  
 {  
     t_gui_window *ptr_win;  
       
     for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)  
         gui_window_clear (ptr_win);  
 }  
   
 /*  
1033   * gui_switch_to_window: switch to another window   * gui_switch_to_window: switch to another window
1034   */   */
1035    
# Line 1245  gui_move_page_down () Line 1190  gui_move_page_down ()
1190  }  }
1191    
1192  /*  /*
1193   * gui_window_new: create a new window   * gui_curses_resize_handler: called when term size is modified
  *                 (TODO: add coordinates and size, for splited windows)  
  */  
   
 t_gui_window *  
 gui_window_new (void *server, void *channel  
                 /*int x, int y, int width, int height*/)  
 {  
     t_gui_window *new_window;  
       
     if (gui_windows)  
     {  
         if (!SERVER(gui_windows))  
         {  
             if (server)  
                 ((t_irc_server *)(server))->window = gui_windows;  
             if (channel)  
                 ((t_irc_channel *)(channel))->window = gui_windows;  
             SERVER(gui_windows) = server;  
             CHANNEL(gui_windows) = channel;  
             return gui_windows;  
         }  
     }  
       
     if ((new_window = (t_gui_window *)(malloc (sizeof (t_gui_window)))))  
     {  
         /* assign server and channel to window */  
         SERVER(new_window) = server;  
         CHANNEL(new_window) = channel;  
         /* assign window to server and channel */  
         if (server && !channel)  
             SERVER(new_window)->window = new_window;  
         if (channel)  
             CHANNEL(new_window)->window = new_window;  
           
         gui_calculate_pos_size (new_window);  
           
         /* init windows */  
         new_window->win_title = NULL;  
         new_window->win_chat = NULL;  
         new_window->win_nick = NULL;  
         new_window->win_status = NULL;  
         new_window->win_input = NULL;  
           
         /* init lines */  
         new_window->lines = NULL;  
         new_window->last_line = NULL;  
         new_window->first_line_displayed = 1;  
         new_window->sub_lines = 0;  
         new_window->line_complete = 1;  
         new_window->unread_data = 0;  
           
         /* init input buffer */  
         new_window->input_buffer_alloc = INPUT_BUFFER_BLOCK_SIZE;  
         new_window->input_buffer = (char *) malloc (INPUT_BUFFER_BLOCK_SIZE);  
         new_window->input_buffer[0] = '\0';  
         new_window->input_buffer_size = 0;  
         new_window->input_buffer_pos = 0;  
         new_window->input_buffer_1st_display = 0;  
           
         /* init completion */  
         completion_init (&(new_window->completion));  
           
         /* init history */  
         new_window->history = NULL;  
         new_window->ptr_history = NULL;  
           
         /* switch to new window */  
         gui_switch_to_window (new_window);  
           
         /* add window to windows queue */  
         new_window->prev_window = last_gui_window;  
         if (gui_windows)  
             last_gui_window->next_window = new_window;  
         else  
             gui_windows = new_window;  
         last_gui_window = new_window;  
         new_window->next_window = NULL;  
           
         /* redraw whole screen */  
         gui_redraw_window (new_window);  
     }  
     else  
         return NULL;  
       
     return new_window;  
 }  
   
 /*  
  * gui_window_free: delete a window  
1194   */   */
1195    
1196  void  void
1197  gui_window_free (t_gui_window *window)  gui_curses_resize_handler ()
 {  
     t_gui_line *ptr_line;  
     t_gui_message *ptr_message;  
     int create_new;  
       
     create_new = (window->server || window->channel);  
       
     /* TODO: manage splitted windows! */  
     if ((window == gui_current_window) &&  
         ((window->next_window) || (window->prev_window)))  
         gui_switch_to_previous_window ();  
       
     /* free lines and messages */  
     while (window->lines)  
     {  
         ptr_line = window->lines->next_line;  
         while (window->lines->messages)  
         {  
             ptr_message = window->lines->messages->next_message;  
             if (window->lines->messages->message)  
                 free (window->lines->messages->message);  
             free (window->lines->messages);  
             window->lines->messages = ptr_message;  
         }  
         free (window->lines);  
         window->lines = ptr_line;  
     }  
     if (window->input_buffer)  
         free (window->input_buffer);  
       
     /* TODO: free completion struct */  
     /* there... */  
       
     /* remove window from windows list */  
     if (window->prev_window)  
         window->prev_window->next_window = window->next_window;  
     if (window->next_window)  
         window->next_window->prev_window = window->prev_window;  
     if (gui_windows == window)  
         gui_windows = window->next_window;  
     if (last_gui_window == window)  
         last_gui_window = window->prev_window;  
       
     free (window);  
       
     /* always at least one window */  
     if (!gui_windows && create_new)  
         gui_window_new (NULL, NULL);  
 }  
   
 /*  
  * gui_resize_term_handler: called when term size is modified  
  */  
   
 void  
 gui_resize_term_handler ()  
1198  {  {
1199      t_gui_window *ptr_win;      t_gui_window *ptr_win;
1200      int width, height;      int width, height;
# Line 1552  gui_init () Line 1352  gui_init ()
1352      /* create windows */      /* create windows */
1353      gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);      gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
1354            
1355      signal (SIGWINCH, gui_resize_term_handler);      signal (SIGWINCH, gui_curses_resize_handler);
1356            
1357      #ifdef __linux__      #ifdef __linux__
1358      /* set title for term window, not for console */      /* set title for term window, not for console */
# Line 1594  gui_end () Line 1394  gui_end ()
1394  }  }
1395    
1396  /*  /*
  * gui_new_line: create new line for a window  
  */  
   
 t_gui_line *  
 gui_new_line (t_gui_window *window)  
 {  
     t_gui_line *new_line;  
       
     if ((new_line = (t_gui_line *) malloc (sizeof (struct t_gui_line))))  
     {  
         new_line->length = 0;  
         new_line->length_align = 0;  
         new_line->line_with_message = 0;  
         new_line->messages = NULL;  
         new_line->last_message = NULL;  
         if (!window->lines)  
             window->lines = new_line;  
         else  
             window->last_line->next_line = new_line;  
         new_line->prev_line = window->last_line;  
         new_line->next_line = NULL;  
         window->last_line = new_line;  
     }  
     else  
     {  
         wprintw (window->win_chat,  
                  _("%s not enough memory for new line!\n"),  
                  WEECHAT_ERROR);  
         return NULL;  
     }  
     return new_line;  
 }  
   
 /*  
  * gui_new_message: create a new message for last line of window  
  */  
   
 t_gui_message *  
 gui_new_message (t_gui_window *window)  
 {  
     t_gui_message *new_message;  
       
     if ((new_message = (t_gui_message *) malloc (sizeof (struct t_gui_message))))  
     {  
         if (!window->last_line->messages)  
             window->last_line->messages = new_message;  
         else  
             window->last_line->last_message->next_message = new_message;  
         new_message->prev_message = window->last_line->last_message;  
         new_message->next_message = NULL;  
         window->last_line->last_message = new_message;  
     }  
     else  
     {  
         log_printf (_("not enough memory!\n"));  
         return NULL;  
     }  
     return new_message;  
 }  
   
 /*  
1397   * gui_add_message: add a message to a window   * gui_add_message: add a message to a window
1398   */   */
1399    

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26