changeset 344:2434adbb8703

[gaim-migrate @ 354] HTML-tag buttons in chat committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 07 Jun 2000 09:22:20 +0000
parents 0c6301184801
children f8ddc51fc5fb
files ChangeLog src/buddy_chat.c src/conversation.c src/gaim.h
diffstat 4 files changed, 168 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Jun 07 04:27:08 2000 +0000
+++ b/ChangeLog	Wed Jun 07 09:22:20 2000 +0000
@@ -7,6 +7,7 @@
 	* Applet sounds not necessarily through GNOME
 	* Compile-time options affect Preferences dialog
 	* Whispering works (does anyone even use this?)
+	* HTML-tag buttons in chat
 
 version 0.9.18 (06/02/2000):
 	* Logging in works better for oscar
--- a/src/buddy_chat.c	Wed Jun 07 04:27:08 2000 +0000
+++ b/src/buddy_chat.c	Wed Jun 07 09:22:20 2000 +0000
@@ -29,11 +29,29 @@
 #include "gtkhtml.h"
 #include <gdk/gdkkeysyms.h>
 
+#include "pixmaps/underline.xpm"
+#include "pixmaps/bold.xpm"
+#include "pixmaps/italic.xpm"
+#include "pixmaps/small.xpm"
+#include "pixmaps/normal.xpm"
+#include "pixmaps/big.xpm"
+/*
+#include "pixmaps/fontface.xpm"
+#include "pixmaps/palette.xpm"
+*/
+#include "pixmaps/link.xpm"
+#include "pixmaps/strike.xpm"
+
+#include "pixmaps/smile_happy.xpm"
+#include "pixmaps/smile_sad.xpm"
+#include "pixmaps/smile_wink.xpm"
+
 static GtkWidget *joinchat;
 static GtkWidget *entry;
 static GtkWidget *invite;
 static GtkWidget *inviteentry;
 static GtkWidget *invitemess;
+extern int state_lock;
 
 static void destroy_join_chat()
 {
@@ -326,12 +344,12 @@
 }
 
 
-static gboolean chat_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct buddy_chat *b)
+static gboolean chat_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct buddy_chat *c)
 {
 	int pos;
 	if (event->keyval == GDK_Return) {
 		if (!(event->state & GDK_SHIFT_MASK)) {
-			gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", b);
+			gtk_signal_emit_by_name(GTK_OBJECT(entry), "activate", c);
 			gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
 		} else {
 			gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "keypress_event");
@@ -340,6 +358,42 @@
 		}
 	}
 
+	/* now we see if we need to unset any buttons */
+
+	if (invert_tags(c->entry, "<B>", "</B>", 0))
+		quiet_set(c->bold, TRUE);
+	else if (count_tag(c->entry, "<B>", "</B>")) 
+		quiet_set(c->bold, TRUE);
+	else
+		quiet_set(c->bold,FALSE);
+
+	if (invert_tags(c->entry, "<I>", "</I>", 0))
+		quiet_set(c->italic, TRUE);
+	else if (count_tag(c->entry, "<I>", "</I>"))  
+		quiet_set(c->italic, TRUE);
+	else
+		quiet_set(c->italic, FALSE);
+
+	if (invert_tags(c->entry, "<A HREF", "</A>", 0))
+		quiet_set(c->link, TRUE);
+	else if (count_tag(c->entry, "<A HREF", "</A>"))
+		quiet_set(c->link, TRUE);
+	else
+		quiet_set(c->link, FALSE);
+
+ 	if (invert_tags(entry, "<U>", "</U>", 0))
+		quiet_set(c->underline, TRUE);
+	else if (count_tag(entry, "<U>", "</U>"))
+		quiet_set(c->underline, TRUE);
+	else
+		quiet_set(c->underline, FALSE);  
+
+	if (invert_tags(entry, "<STRIKE>", "</STRIKE>", 0))
+		quiet_set(c->strike, TRUE);
+	else if (count_tag(entry, "<STRIKE>", "</STRIKE>"))
+		quiet_set(c->strike, TRUE);
+	else
+
 	return TRUE;
 
 }
@@ -462,6 +516,7 @@
 
 
 
+
 void show_new_buddy_chat(struct buddy_chat *b)
 {
 	GtkWidget *win;
@@ -481,6 +536,11 @@
 	GtkWidget *vbox;
 	GtkWidget *vpaned;
 	GtkWidget *hpaned;
+	GtkWidget *toolbar;
+	GdkPixmap *strike_i, *small_i, *normal_i, *big_i, *bold_i, *italic_i, *underline_i, *link_i;
+	GtkWidget *strike_p, *small_p, *normal_p, *big_p, *bold_p, *italic_p, *underline_p, *link_p;
+	GtkWidget *strike, *small, *normal, *big, *bold, *italic, *underline, *link;
+	GdkBitmap *mask;
 	
 	win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	b->window = win;
@@ -517,6 +577,81 @@
 
 	gtk_widget_realize(win);
 
+	toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+
+	link_i = gdk_pixmap_create_from_xpm_d(win->window, &mask,
+			&win->style->white, link_xpm );
+	link_p = gtk_pixmap_new(link_i, mask);
+	gtk_widget_show(link_p);
+
+	strike_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, strike_xpm );
+	strike_p = gtk_pixmap_new(strike_i, mask);
+	gtk_widget_show(strike_p);
+
+	bold_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, bold_xpm );
+	bold_p = gtk_pixmap_new(bold_i, mask);
+	gtk_widget_show(bold_p);
+
+	italic_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, italic_xpm );
+	italic_p = gtk_pixmap_new(italic_i, mask);
+	gtk_widget_show(italic_p);
+
+	underline_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, underline_xpm );
+	underline_p = gtk_pixmap_new(underline_i, mask);
+	gtk_widget_show(underline_p);
+
+	small_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, small_xpm );
+	small_p = gtk_pixmap_new(small_i, mask);
+	gtk_widget_show(small_p);
+
+	normal_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, normal_xpm );
+	normal_p = gtk_pixmap_new(normal_i, mask);
+	gtk_widget_show(normal_p);
+
+	big_i = gdk_pixmap_create_from_xpm_d ( win->window, &mask,
+			&win->style->white, big_xpm );
+	big_p = gtk_pixmap_new(big_i, mask);
+	gtk_widget_show(big_p);
+
+	bold = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+	                                  GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL,
+					  "Bold", "Bold Text", "Bold", bold_p,
+					  GTK_SIGNAL_FUNC(do_bold), chatentry);
+	italic = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), 
+		                            GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
+					    NULL, "Italics", "Italics Text",
+					    "Italics", italic_p, GTK_SIGNAL_FUNC(do_italic), chatentry);
+	underline = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+					    GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
+					    NULL, "Underline", "Underline Text",
+					    "Underline", underline_p, GTK_SIGNAL_FUNC(do_underline), chatentry);
+	strike = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+					    GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
+					    NULL, "Strike", "Strike through Text",
+					    "Strike", strike_p, GTK_SIGNAL_FUNC(do_strike), chatentry);
+	gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+	small = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "Small", "Decrease font size", "Small", small_p, GTK_SIGNAL_FUNC(do_small), chatentry);
+	normal = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "Normal", "Normal font size", "Normal", normal_p, GTK_SIGNAL_FUNC(do_normal), chatentry);
+	big = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), "Big", "Increase font size", "Big", big_p, GTK_SIGNAL_FUNC(do_big), chatentry);
+
+	gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
+	link = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
+                                            GTK_TOOLBAR_CHILD_TOGGLEBUTTON,                                                 NULL, "Link", "Insert Link",
+                                            "Link", link_p, GTK_SIGNAL_FUNC(do_link), chatentry);                 
+
+	gtk_widget_show(toolbar);
+
+	b->bold = bold;
+	b->strike = strike;
+	b->italic = italic;
+	b->underline = underline;
+	b->link = link;
 
 	b->makesound=1;
 
@@ -587,6 +722,7 @@
 	
 	
 	gtk_paned_pack1(GTK_PANED(vpaned), hpaned, TRUE, FALSE);
+	gtk_box_pack_start(GTK_BOX(vbox), toolbar, TRUE, TRUE, 5);
 	gtk_box_pack_start(GTK_BOX(vbox), chatentry, TRUE, TRUE, 5);
 	gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 5);
 	gtk_paned_pack2(GTK_PANED(vpaned), vbox, TRUE, FALSE);
--- a/src/conversation.c	Wed Jun 07 04:27:08 2000 +0000
+++ b/src/conversation.c	Wed Jun 07 09:22:20 2000 +0000
@@ -656,7 +656,7 @@
 	gtk_widget_grab_focus(entry);
 }
 
-static void advance_past(GtkWidget *entry, char *pre, char *post)
+void advance_past(GtkWidget *entry, char *pre, char *post)
 {
 	char *s, *s2;
 	int pos;
@@ -699,7 +699,7 @@
 	return;
 }
 
-static void do_link(GtkWidget *linky, GtkWidget *entry)
+void do_link(GtkWidget *linky, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
@@ -709,7 +709,7 @@
 		advance_past(entry, "<A HREF>", "</A>"	);
 }
 
-static void do_strike(GtkWidget *strike, GtkWidget *entry)
+void do_strike(GtkWidget *strike, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
@@ -719,7 +719,7 @@
 		advance_past(entry, "<STRIKE>", "</STRIKE>");
 }
 
-static void do_bold(GtkWidget *bold, GtkWidget *entry)
+void do_bold(GtkWidget *bold, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
@@ -729,7 +729,7 @@
 		advance_past(entry, "<B>", "</B>");
 }
 
-static void do_underline(GtkWidget *underline, GtkWidget *entry)
+void do_underline(GtkWidget *underline, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
@@ -739,7 +739,7 @@
 		advance_past(entry, "<U>", "</U>");
 }
 
-static void do_italic(GtkWidget *italic, GtkWidget *entry)
+void do_italic(GtkWidget *italic, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
@@ -752,21 +752,21 @@
 /* html code to modify font sizes must all be the same length, */
 /* currently set to 15 chars */
 
-static void do_small(GtkWidget *small, GtkWidget *entry)
+void do_small(GtkWidget *small, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
 	surround(entry, "<FONT SIZE=\"1\">","</FONT>");
 }
 
-static void do_normal(GtkWidget *normal, GtkWidget *entry)
+void do_normal(GtkWidget *normal, GtkWidget *entry)
 {
 	if (state_lock)
                  return;
 	surround(entry, "<FONT SIZE=\"3\">","</FONT>");
 }
 
-static void do_big(GtkWidget *big, GtkWidget *entry)
+void do_big(GtkWidget *big, GtkWidget *entry)
 {
 	if (state_lock)
 		return;
--- a/src/gaim.h	Wed Jun 07 04:27:08 2000 +0000
+++ b/src/gaim.h	Wed Jun 07 09:22:20 2000 +0000
@@ -199,6 +199,15 @@
 	GtkWidget *text;
 	GtkWidget *list;
         GtkWidget *entry;
+	GtkWidget *italic;
+	GtkWidget *bold;
+	GtkWidget *underline;
+	GtkWidget *palette;
+	GtkWidget *link;
+	GtkWidget *strike;
+	GtkWidget *font;
+	GtkWidget *color_dialog;
+	GtkWidget *font_dialog;
         GList *in_room;
         GList *ignored;
 	int makesound;
@@ -235,8 +244,8 @@
 	GtkWidget *underline;
 	GtkWidget *palette;
 	GtkWidget *link;
-    GtkWidget *add_button;
-    GtkWidget *log_button;
+	GtkWidget *add_button;
+	GtkWidget *log_button;
 	GtkWidget *strike;
 	GtkWidget *font;
 	GtkWidget *color_dialog;
@@ -348,7 +357,7 @@
 #define TYPE_SIGNOFF   4
 #define TYPE_KEEPALIVE 5
 
-#define REVISION "gaim:$Revision: 350 $"
+#define REVISION "gaim:$Revision: 354 $"
 #define FLAPON "FLAPON\r\n\r\n"
 
 #define ROAST "Tic/Toc"
@@ -567,6 +576,14 @@
 extern void update_transparency();
 extern void update_font_buttons();
 extern void toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle);
+extern void do_bold(GtkWidget *, GtkWidget *);
+extern void do_italic(GtkWidget *, GtkWidget *);
+extern void do_underline(GtkWidget *, GtkWidget *);
+extern void do_strike(GtkWidget *, GtkWidget *);
+extern void do_small(GtkWidget *, GtkWidget *);
+extern void do_normal(GtkWidget *, GtkWidget *);
+extern void do_big(GtkWidget *, GtkWidget *);
+extern void do_link(GtkWidget *, GtkWidget *);
 
 /* Functions in network.c */
 extern unsigned int *get_address(char *);