ayttm-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Ayttm-commits] CVS: ayttm/src chat_room.c,1.6,1.7 chat_room.h,1.2,1.3


From: Colin Leroy <address@hidden>
Subject: [Ayttm-commits] CVS: ayttm/src chat_room.c,1.6,1.7 chat_room.h,1.2,1.3
Date: Wed, 08 Jan 2003 15:50:11 -0500

Update of /cvsroot/ayttm/ayttm/src
In directory subversions:/tmp/cvs-serv31664/src

Modified Files:
        chat_room.c chat_room.h 
Log Message:
smiley selector


Index: chat_room.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/chat_room.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- chat_room.c 8 Jan 2003 19:10:22 -0000       1.6
+++ chat_room.c 8 Jan 2003 20:50:09 -0000       1.7
@@ -15,10 +15,12 @@
 #include "pixmaps/cancel.xpm"
 #include "pixmaps/ok.xpm"
 #include "pixmaps/tb_volume.xpm"
+#include "pixmaps/smiley_button.xpm"
 
 GList * chat_rooms = NULL;
 
 static GList * get_contacts( eb_chat_room * room );
+
 static void send_message( GtkWidget * widget, gpointer data )
 {
        eb_chat_room * ecr = (eb_chat_room *)data;
@@ -43,6 +45,123 @@
     cr->sound_enabled = FALSE;
 }
 
+static void insert_cr_smiley (GtkWidget * widget, eb_chat_room *cr) 
+{
+       gint pos=0;
+       if(GTK_EDITABLE(cr->entry) && GTK_EDITABLE(cr->entry)->current_pos)
+               pos=GTK_EDITABLE(cr->entry)->current_pos;
+        gtk_editable_insert_text(GTK_EDITABLE (cr->entry), 
+                               gtk_widget_get_name(widget),
+                               strlen(gtk_widget_get_name(widget)),
+                               &pos);
+       gtk_editable_set_position(GTK_EDITABLE(cr->entry),
+                               pos);
+       gtk_widget_destroy(cr->smiley_window);
+       cr->smiley_window = NULL;
+}
+
+static void show_cr_smileys_callback(GtkWidget *widget, gpointer d)
+{
+  eb_chat_room *data = (eb_chat_room*) d;
+  GList *smileys = NULL;
+  protocol_smiley * msmiley = NULL;
+  GtkWidget * smileys_table = NULL;
+  GtkWidget * button = NULL;
+  GtkWidget *iconwid;
+  GdkPixmap *icon;
+  GdkBitmap *mask;
+  GList     *done = NULL;
+  int len = 0, real_len = 0, x=-1, y=0;
+  int win_w=0, win_h=0, w, h;
+  gint win_x, win_y;
+  if(data->smiley_window != NULL) {
+    /* close popup */
+    gtk_widget_destroy(data->smiley_window);
+    data->smiley_window = NULL;
+    return;
+  }
+
+  if (data && data->chat_room_account && RUN_SERVICE(data->chat_room_account))
+    smileys = RUN_SERVICE(data->chat_room_account)->get_smileys();
+  else 
+    return;
+  len = g_list_length(smileys);
+  smileys_table = gtk_table_new(5,len/5 +((len%5==0)?1:2),TRUE);
+  for(;smileys;smileys=g_list_next(smileys)) {
+      GList * l;
+      gboolean already_done = FALSE;
+      smiley * dsmile = NULL;
+      msmiley = (smileys->data);
+      for(l=done; l; l=g_list_next(l)) {
+          if(!strcmp((char*)l->data, msmiley->name)) {
+            already_done = TRUE;
+            break;
+         }
+      }
+      
+      if(already_done)
+          continue;
+      
+      done = g_list_append(done, msmiley->name);
+      
+      dsmile = get_smiley_by_name(msmiley->name);
+      if(dsmile != NULL) {
+          icon = gdk_pixmap_create_from_xpm_d(data->window->window, &mask, 
NULL, dsmile->pixmap);
+          iconwid = gtk_pixmap_new(icon, mask);
+         sscanf (dsmile->pixmap [0], "%d %d", &w, &h);
+          if(x<5) {
+            x++;
+            if(y==0) win_h+=h+2;
+         }
+         if(x==5) {
+             y++;
+            x=0;
+            if(x==0) win_w+=w+2;
+         }
+          gtk_widget_show(iconwid);
+         button = gtk_button_new();
+         gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+          gtk_container_add(GTK_CONTAINER(button), iconwid);
+         gtk_widget_show(button);
+         gtk_widget_set_name(button,msmiley->text);
+         gtk_signal_connect (GTK_OBJECT (button), "clicked",
+                             GTK_SIGNAL_FUNC (insert_cr_smiley), data);
+         gtk_table_attach(GTK_TABLE(smileys_table),
+                          button,
+                          y,y+1,
+                          x,x+1,
+                          GTK_FILL, GTK_FILL, 0, 0);
+         real_len++;
+      }
+  }
+  
+  g_list_free(done);
+  done = NULL;
+  gtk_table_resize(GTK_TABLE(smileys_table), 5,real_len/5 
+((real_len%5==0)?0:1));
+  
+  data->smiley_window = gtk_window_new(GTK_WINDOW_DIALOG);
+  gtk_window_set_modal(GTK_WINDOW(data->smiley_window), FALSE);
+  gtk_window_set_wmclass(GTK_WINDOW(data->smiley_window), "yattm-chat", 
"Yattm");
+  gtk_window_set_title(GTK_WINDOW(data->smiley_window), "Smileys");
+  gtk_window_set_policy(GTK_WINDOW(data->smiley_window), FALSE, FALSE, FALSE);
+  gtk_widget_realize(data->smiley_window);
+
+  gtk_widget_show(data->smiley_window);
+
+  gtk_container_add(GTK_CONTAINER(data->smiley_window), smileys_table);
+  gtk_widget_show(smileys_table);
+  
+  /* move the window a bit after the cursor and in the screen */
+  gdk_window_get_pointer (NULL, &win_x, &win_y, NULL);
+  win_x += 5; win_y += 5;
+  while ((win_x)+win_w > gdk_screen_width() - 30)
+    win_x -= 20;
+  while ((win_y)+win_h > gdk_screen_height() - 30)
+    win_y -= 20;
+  gdk_window_move_resize(data->smiley_window->window, win_x, win_y, win_w, 
win_h);
+  
+}
+
 static GList * chat_service_list()
 {
        GList * list = NULL;
@@ -484,6 +603,11 @@
 static void destroy_chat_window(GtkWidget * widget, gpointer data)
 {
        eb_chat_room * ecr = data;
+       if(ecr->smiley_window != NULL && ecr->smiley_window->window != NULL) {
+               /* close smileys popup */
+               gtk_widget_destroy(ecr->smiley_window);
+               ecr->smiley_window = NULL;
+       }
        gtk_widget_destroy(ecr->window);
 }
 
@@ -590,6 +714,29 @@
        gtk_container_set_border_width(GTK_CONTAINER(toolbar), 0);
        gtk_toolbar_set_space_size(GTK_TOOLBAR(toolbar), 5);
        
+       /* smileys */
+       if(do_smiley == 1) {
+               icon = gdk_pixmap_create_from_xpm_d(chat_room->window->window, 
+                                               &mask, NULL, smiley_button_xpm);
+               iconwid = gtk_pixmap_new(icon, mask);
+               gtk_widget_show(iconwid);
+               chat_room->smiley_button = 
gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
+                                                           _("Smiley"),
+                                                           _("Insert Smiley"),
+                                                           _("Smiley"),
+                                                           iconwid,
+                                                           
GTK_SIGNAL_FUNC(show_cr_smileys_callback),
+                                                           chat_room);
+               /*Create the separator for the toolbar*/
+
+               gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+               separator = gtk_vseparator_new();
+               gtk_widget_set_usize(GTK_WIDGET(separator), 0, 20);
+               gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), separator, 
NULL, NULL);
+               gtk_widget_show(separator);
+               gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+       }
+
        icon = gdk_pixmap_create_from_xpm_d(chat_room->window->window, &mask, 
NULL, tb_volume_xpm);
        iconwid = gtk_pixmap_new(icon, mask);
        gtk_widget_show(iconwid);
@@ -669,6 +816,23 @@
        chat_room->connected = 1;
        
        /* actually call the callback :P .... */
+       if (!chat_room) {
+               eb_debug(DBG_CORE,"!chat_room\n");
+               return;
+       }
+       if (!chat_room->chat_room_account) {
+               eb_debug(DBG_CORE,"!chat_room->account\n");
+               return;
+       }
+       if (RUN_SERVICE(chat_room->chat_room_account) == NULL) {
+               
eb_debug(DBG_CORE,"!RUN_SERVICE(chat_room->chat_room_account)\n");
+               return;
+       }
+       if (RUN_SERVICE(chat_room->chat_room_account)->join_chat_room == NULL) {
+               
eb_debug(DBG_CORE,"!RUN_SERVICE(chat_room->chat_room_account)->join_chat_room\n");
+               return;
+       }
+       
        RUN_SERVICE(chat_room->chat_room_account)->join_chat_room(chat_room);
 
 }

Index: chat_room.h
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/chat_room.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- chat_room.h 8 Jan 2003 01:55:19 -0000       1.2
+++ chat_room.h 8 Jan 2003 20:50:09 -0000       1.3
@@ -41,6 +41,8 @@
        GtkWidget * conversation;
        GtkWidget * entry;
        GtkWidget * online;  // CList of online folks
+       GtkWidget *smiley_button;
+       GtkWidget *smiley_window;
 
        GList * fellows;   //who is in the chat room
        eb_local_account * chat_room_account; //who are we talking as?





reply via email to

[Prev in Thread] Current Thread [Next in Thread]