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

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

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

revision 1.2 by flashcode, Sun Oct 12 22:29:28 2003 UTC revision 1.3 by flashcode, Mon Oct 13 21:51:36 2003 UTC
# Line 63  char *nicks_colors[COLOR_WIN_NICK_NUMBER Line 63  char *nicks_colors[COLOR_WIN_NICK_NUMBER
63  int color_attr[NUM_COLORS];  int color_attr[NUM_COLORS];
64    
65  GtkWidget *gtk_main_window;  GtkWidget *gtk_main_window;
66    GtkWidget *vbox1;
67    GtkWidget *entry_topic;
68    GtkWidget *notebook1;
69    GtkWidget *vbox2;
70    GtkWidget *hbox1;
71    GtkWidget *scrolledwindow_chat;
72    GtkWidget *scrolledwindow_nick;
73    GtkWidget *entry_input;
74    GtkWidget *label1;
75    
76    
77  /*  /*
# Line 277  gui_redraw_window_chat (t_gui_window *wi Line 286  gui_redraw_window_chat (t_gui_window *wi
286  void  void
287  gui_draw_window_nick (t_gui_window *window)  gui_draw_window_nick (t_gui_window *window)
288  {  {
     int i, x, y, column, max_length;  
     char format[32];  
     t_irc_nick *ptr_nick;  
       
289      /* TODO: manage splitted windows! */      /* TODO: manage splitted windows! */
290      if (window != gui_current_window)      if (window != gui_current_window)
291          return;          return;
292            
293      if (CHANNEL(window) && CHANNEL(window)->nicks)      /* TODO: display nicklist for Gtk GUI */
     {  
         max_length = nick_get_max_length (CHANNEL(window));  
         if ((window == gui_current_window) &&  
             ((max_length + 2) != window->win_nick_width))  
         {  
             /* TODO: auto resize nicklist and chat windows */  
         }  
         sprintf (format, "%%-%ds", max_length);  
               
         switch (cfg_look_nicklist_position)  
         {  
             case CFG_LOOK_NICKLIST_LEFT:  
                 /* TODO: init nicklist (left) */  
                 break;  
             case CFG_LOOK_NICKLIST_RIGHT:  
                 /* TODO: init nicklist (right) */  
                 break;  
             case CFG_LOOK_NICKLIST_TOP:  
                 /* TODO: init nicklist (top) */  
                 break;  
             case CFG_LOOK_NICKLIST_BOTTOM:  
                 /* TODO: init nicklist (bottom) */  
                 break;  
         }  
         /* TODO: draw nicklist! */  
         (void) i;  
         (void) x;  
         (void) y;  
         (void) column;  
         (void) ptr_nick;  
     }  
294  }  }
295    
296  /*  /*
# Line 405  gui_redraw_window (t_gui_window *window) Line 379  gui_redraw_window (t_gui_window *window)
379            
380      gui_redraw_window_title (window);      gui_redraw_window_title (window);
381      gui_redraw_window_chat (window);      gui_redraw_window_chat (window);
382      if (window->win_nick)      if (WIN_HAS_NICKLIST(window))
383          gui_redraw_window_nick (window);          gui_redraw_window_nick (window);
384      gui_redraw_window_status (window);      gui_redraw_window_status (window);
385      gui_redraw_window_input (window);      gui_redraw_window_input (window);
# Line 418  gui_redraw_window (t_gui_window *window) Line 392  gui_redraw_window (t_gui_window *window)
392  void  void
393  gui_switch_to_window (t_gui_window *window)  gui_switch_to_window (t_gui_window *window)
394  {  {
     int another_window;  
395      t_gui_window *ptr_win;      t_gui_window *ptr_win;
396        GtkTextIter start, end;
397            
     another_window = 0;  
398      for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)      for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
399      {      {
400          if (ptr_win->win_title)          if (ptr_win->is_displayed)
401          {          {
402              /* TODO: manage splitted windows */              /* TODO: manage splitted windows */
403              another_window = 1;              ptr_win->is_displayed = 0;
             window->win_title = ptr_win->win_title;  
             window->win_chat = ptr_win->win_chat;  
             window->win_nick = ptr_win->win_nick;  
             window->win_status = ptr_win->win_status;  
             window->win_input = ptr_win->win_input;  
             ptr_win->win_title = NULL;  
             ptr_win->win_chat = NULL;  
             ptr_win->win_nick = NULL;  
             ptr_win->win_status = NULL;  
             ptr_win->win_input = NULL;  
404              break;              break;
405          }          }
406      }      }
407            
408      gui_calculate_pos_size (window);      gui_calculate_pos_size (window);
409            
410      /* first time creation for windows */      if (!window->textview_chat)
     if (!another_window)  
411      {      {
412          /* create new windows */          window->textview_chat = gtk_text_view_new ();
413          /* TODO: create title, chat, nick, status and input windows */          gtk_widget_show (window->textview_chat);
414            gtk_container_add (GTK_CONTAINER (scrolledwindow_chat), window->textview_chat);
415            gtk_widget_set_size_request (window->textview_chat, 300, -1);
416            gtk_text_view_set_editable (GTK_TEXT_VIEW (window->textview_chat), FALSE);
417            gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (window->textview_chat), FALSE);
418            
419            window->textbuffer_chat = gtk_text_buffer_new (NULL);
420            gtk_text_view_set_buffer (GTK_TEXT_VIEW (window->textview_chat), window->textbuffer_chat);
421            
422            window->texttag_chat = gtk_text_buffer_create_tag(window->textbuffer_chat, "courier", "font_family", "lucida");
423            gtk_text_buffer_get_bounds (window->textbuffer_chat, &start, &end);
424            gtk_text_buffer_apply_tag (window->textbuffer_chat, window->texttag_chat, &start, &end);
425      }      }
426      else      if (WIN_IS_CHANNEL (window) && !window->textbuffer_nicklist)
427      {      {
428          /* create chat & nick windows */          
429          if (WIN_IS_CHANNEL(window))          window->textview_nicklist = gtk_text_view_new ();
430          {          gtk_widget_show (window->textview_nicklist);
431              /* (re)create nicklist window */          gtk_container_add (GTK_CONTAINER (scrolledwindow_nick), window->textview_nicklist);
432              /* TODO: delete nick/chat windows and create them */          gtk_text_view_set_editable (GTK_TEXT_VIEW (window->textview_nicklist), FALSE);
433          }          gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (window->textview_nicklist), FALSE);
434          if (!(WIN_IS_CHANNEL(window)))          
435          {          window->textbuffer_nicklist = gtk_text_buffer_new (NULL);
436              /* remove nick list window */          gtk_text_view_set_buffer (GTK_TEXT_VIEW (window->textview_nicklist), window->textbuffer_nicklist);
             /* TODO: remove nicklist window and create full chat window */  
         }  
437      }      }
438            
439      /* change current window to the new window */      /* change current window to the new window */
440      gui_current_window = window;      gui_current_window = window;
441            
442        window->is_displayed = 1;
443      window->unread_data = 0;      window->unread_data = 0;
444  }  }
445    
# Line 552  gui_gtk_resize_handler () Line 524  gui_gtk_resize_handler ()
524  }  }
525    
526  /*  /*
527     * gui_window_init_subwindows: init subwindows for a WeeChat window
528     */
529    
530    void
531    gui_window_init_subwindows (t_gui_window *window)
532    {
533        window->textview_chat = NULL;
534        window->textbuffer_chat = NULL;
535        window->texttag_chat = NULL;
536        window->textview_nicklist = NULL;
537        window->textbuffer_nicklist = NULL;
538    }
539    
540    /*
541   * gui_init_colors: init GUI colors   * gui_init_colors: init GUI colors
542   */   */
543    
# Line 568  gui_init_colors () Line 554  gui_init_colors ()
554  void  void
555  gui_init ()  gui_init ()
556  {  {
     GtkWidget *vbox1;  
     GtkWidget *entry_topic;  
     GtkWidget *notebook1;  
     GtkWidget *vbox2;  
     GtkWidget *hbox1;  
     GtkWidget *scrolledwindow_chat;  
     GtkWidget *textview_chat;  
     GtkWidget *scrolledwindow_nick;  
     GtkWidget *textview_nick;  
     GtkWidget *entry_input;  
     GtkWidget *label1;  
       
557      gtk_main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);      gtk_main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
558      gtk_window_set_title (GTK_WINDOW (gtk_main_window), WEECHAT_NAME_AND_VERSION);      gtk_window_set_title (GTK_WINDOW (gtk_main_window), WEECHAT_NAME_AND_VERSION);
559            
# Line 609  gui_init () Line 583  gui_init ()
583      gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow_chat, TRUE, TRUE, 0);      gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow_chat, TRUE, TRUE, 0);
584      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_chat), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_chat), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
585            
     textview_chat = gtk_text_view_new ();  
     gtk_widget_show (textview_chat);  
     gtk_container_add (GTK_CONTAINER (scrolledwindow_chat), textview_chat);  
     gtk_widget_set_size_request (textview_chat, 300, -1);  
     gtk_text_view_set_editable (GTK_TEXT_VIEW (textview_chat), FALSE);  
     gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview_chat), FALSE);  
       
586      scrolledwindow_nick = gtk_scrolled_window_new (NULL, NULL);      scrolledwindow_nick = gtk_scrolled_window_new (NULL, NULL);
587      gtk_widget_show (scrolledwindow_nick);      gtk_widget_show (scrolledwindow_nick);
588      gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow_nick, TRUE, TRUE, 0);      gtk_box_pack_start (GTK_BOX (hbox1), scrolledwindow_nick, TRUE, TRUE, 0);
589      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_nick), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_nick), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
590            
     textview_nick = gtk_text_view_new ();  
     gtk_widget_show (textview_nick);  
     gtk_container_add (GTK_CONTAINER (scrolledwindow_nick), textview_nick);  
     gtk_text_view_set_editable (GTK_TEXT_VIEW (textview_nick), FALSE);  
     gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview_nick), FALSE);  
       
591      entry_input = gtk_entry_new ();      entry_input = gtk_entry_new ();
592      gtk_widget_show (entry_input);      gtk_widget_show (entry_input);
593      gtk_box_pack_start (GTK_BOX (vbox2), entry_input, FALSE, FALSE, 0);      gtk_box_pack_start (GTK_BOX (vbox2), entry_input, FALSE, FALSE, 0);
# Line 638  gui_init () Line 599  gui_init ()
599            
600      gtk_widget_show_all (gtk_main_window);      gtk_widget_show_all (gtk_main_window);
601            
602        /* create a new window */
603        gui_current_window = gui_window_new (NULL, NULL /*0, 0, COLS, LINES*/);
604        
605      /* TODO: set gui_ready to 1 when Gtk display functions will be ok */      /* TODO: set gui_ready to 1 when Gtk display functions will be ok */
606      gui_ready = 0;      gui_ready = 1;
607  }  }
608    
609  /*  /*
# Line 668  gui_add_message (t_gui_window *window, i Line 632  gui_add_message (t_gui_window *window, i
632  {  {
633      char *pos;      char *pos;
634      int length;      int length;
635        GtkTextIter start, end;
636            
637      /* create new line if previous was ending by '\n' (or if 1st line) */      /* create new line if previous was ending by '\n' (or if 1st line) */
638      if (window->line_complete)      if (window->line_complete)
639      {      {
640            gtk_text_buffer_insert_at_cursor (window->textbuffer_chat, "\n", -1);
641          window->line_complete = 0;          window->line_complete = 0;
         if (!gui_new_line (window))  
             return;  
642      }      }
     if (!gui_new_message (window))  
         return;  
643            
     window->last_line->last_message->type = type;  
     window->last_line->last_message->color = color;  
644      pos = strchr (message, '\n');      pos = strchr (message, '\n');
645      if (pos)      if (pos)
646      {      {
647          pos[0] = '\0';          pos[0] = '\0';
648          window->line_complete = 1;          window->line_complete = 1;
649      }      }
650      window->last_line->last_message->message = strdup (message);      
651      length = strlen (message);      gtk_text_buffer_insert_at_cursor (window->textbuffer_chat, message, -1);
652      window->last_line->length += length;      gtk_text_buffer_get_bounds (window->textbuffer_chat, &start, &end);
653      if (type == MSG_TYPE_MSG)      gtk_text_buffer_apply_tag (window->textbuffer_chat, window->texttag_chat, &start, &end);
654          window->last_line->line_with_message = 1;      
     if ((type == MSG_TYPE_TIME) || (type == MSG_TYPE_NICK))  
         window->last_line->length_align += length;  
655      if (pos)      if (pos)
     {  
656          pos[0] = '\n';          pos[0] = '\n';
         if ((window == gui_current_window) && (window->sub_lines == 0))  
         {  
             if ((window->win_chat_cursor_y  
                 + gui_get_line_num_splits (window, window->last_line)) >  
                 (window->win_chat_height - 1))  
                 gui_draw_window_chat (window);  
             else  
                 gui_display_line (window, window->last_line, 1);  
         }  
         if ((window != gui_current_window) || (window->sub_lines > 0))  
         {  
             window->unread_data = 1 + window->last_line->line_with_message;  
             gui_redraw_window_status (gui_current_window);  
         }  
     }  
657  }  }
658    
659  /*  /*
# Line 727  gui_printf_color_type (t_gui_window *win Line 669  gui_printf_color_type (t_gui_window *win
669      va_list argptr;      va_list argptr;
670      static time_t seconds;      static time_t seconds;
671      struct tm *date_tmp;      struct tm *date_tmp;
672        
673      /* make gcc hapy */      if (gui_ready)
674      (void) window;      {
675      (void) type;          if (color == -1)
676      (void) color;              color = COLOR_WIN_CHAT;
677      (void) message;      
678            if (window == NULL)
679            {
680                if (SERVER(gui_current_window))
681                    window = SERVER(gui_current_window)->window;
682                else
683                    window = gui_current_window;
684            }
685        
686            if (window == NULL)
687            {
688                log_printf ("gui_printf without window! this is a bug, please send to developers - thanks\n");
689                return;
690            }
691        }
692            
693      va_start (argptr, message);      va_start (argptr, message);
694      vsnprintf (buffer, sizeof (buffer) - 1, message, argptr);      vsnprintf (buffer, sizeof (buffer) - 1, message, argptr);
# Line 747  gui_printf_color_type (t_gui_window *win Line 703  gui_printf_color_type (t_gui_window *win
703          while (pos)          while (pos)
704          {          {
705              /* TODO: read timestamp format from config! */              /* TODO: read timestamp format from config! */
706              if ((!window->last_line) || (window->line_complete))              if (window->line_complete)
707              {              {
708                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "[");                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "[");
709                  sprintf (timestamp, "%02d", date_tmp->tm_hour);                  sprintf (timestamp, "%02d", date_tmp->tm_hour);
# Line 760  gui_printf_color_type (t_gui_window *win Line 716  gui_printf_color_type (t_gui_window *win
716                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_TIME, timestamp);
717                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "] ");                  gui_add_message (window, MSG_TYPE_TIME, COLOR_WIN_CHAT_DARK, "] ");
718              }              }
719              gui_add_message (window, type, color, pos+1);              gui_add_message (window, type, color, pos + 1);
720              pos = strchr (pos+1, '\n');              pos = strchr (pos + 1, '\n');
721              if (pos)              if (pos && !pos[1])
722                  if (pos[1] == '\0')                  pos = NULL;
                     pos = NULL;  
723          }          }
724      }      }
725      else      else

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

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