[gnumeric] Add underline button to formatted text dialog for sheet objects, commemts, etc.



commit 2ca70cfe8391ea0148b6ff8c09e6f3ea8064881e
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Tue May 15 13:28:49 2012 -0600

    Add underline button to formatted text dialog for sheet objects, commemts, etc.
    
    2012-05-15  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* gnumeric-text-view.c (_GnmTextView): add field
    	(gtv_remove_underline_tags): new
    	(gtv_underline_button_activated): new
    	(gtv_build_button_underline): new
    	(gtv_init): call gtv_build_button_underline

 NEWS                             |    3 +-
 src/widgets/ChangeLog            |    8 +++
 src/widgets/gnumeric-text-view.c |  112 +++++++++++++++++++++++++++++++-------
 3 files changed, 103 insertions(+), 20 deletions(-)
---
diff --git a/NEWS b/NEWS
index 5de5f3c..1b04c48 100644
--- a/NEWS
+++ b/NEWS
@@ -10,7 +10,8 @@ Andreas:
 	* Correctly read & write rich-text chart titles to/from ODF. [#675821]
 	* Read and write the graph titles to/from ODF. [#675820]
 	* Fix loading of ellipse objects defined in ODF's shape section. [#676064]
-	* Fix loading of line objects defined in ODF's shape section. [#676063 ]
+	* Fix loading of line objects defined in ODF's shape section. [#676063]
+	* Add underline button to formatted text dialog for sheet objects, commemts, etc.
 
 Jean:
 	* Fix graph series headers when a multiple selection is used. [#675913]
diff --git a/src/widgets/ChangeLog b/src/widgets/ChangeLog
index b1a5e32..8eeef57 100644
--- a/src/widgets/ChangeLog
+++ b/src/widgets/ChangeLog
@@ -1,3 +1,11 @@
+2012-05-15  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* gnumeric-text-view.c (_GnmTextView): add field
+	(gtv_remove_underline_tags): new
+	(gtv_underline_button_activated): new
+	(gtv_build_button_underline): new
+	(gtv_init): call gtv_build_button_underline
+
 2012-05-11  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* gnumeric-expr-entry.c (gee_create_tooltip): use
diff --git a/src/widgets/gnumeric-text-view.c b/src/widgets/gnumeric-text-view.c
index a4fc012..813742e 100644
--- a/src/widgets/gnumeric-text-view.c
+++ b/src/widgets/gnumeric-text-view.c
@@ -38,6 +38,7 @@ struct _GnmTextView {
 	GtkToggleToolButton *italic;
 	GtkToggleToolButton *strikethrough;
 	GtkToolButton *bold;
+	GtkToolButton *underline;
 };
 
 typedef struct _GnmTextViewClass {
@@ -84,10 +85,10 @@ gnm_toggle_tool_button_set_active_no_signal (GtkToggleToolButton *button,
 }
 
 static void
-cb_gtv_mark_set (GtkTextBuffer *buffer,
-					  G_GNUC_UNUSED GtkTextIter   *location,
-					  G_GNUC_UNUSED GtkTextMark   *mark,
-					  GnmTextView *gtv)
+cb_gtv_mark_set (G_GNUC_UNUSED GtkTextBuffer *buffer,
+		 G_GNUC_UNUSED GtkTextIter   *location,
+		 G_GNUC_UNUSED GtkTextMark   *mark,
+		 GnmTextView *gtv)
 {
 	GtkTextIter start, end;
 	gtk_text_buffer_get_selection_bounds (gtv->buffer, &start, &end);
@@ -115,7 +116,7 @@ cb_gtv_mark_set (GtkTextBuffer *buffer,
 }
 
 static void
-cb_gtv_set_italic (GtkToggleToolButton *toolbutton, GnmTextView *gtv)
+cb_gtv_set_italic (G_GNUC_UNUSED GtkToggleToolButton *toolbutton, GnmTextView *gtv)
 {
 	GtkTextIter start, end;
 
@@ -143,7 +144,7 @@ cb_gtv_set_italic (GtkToggleToolButton *toolbutton, GnmTextView *gtv)
 }
 
 static void
-cb_gtv_set_strikethrough (GtkToggleToolButton *toolbutton, GnmTextView *gtv)
+cb_gtv_set_strikethrough (G_GNUC_UNUSED GtkToggleToolButton *toolbutton, GnmTextView *gtv)
 {
 	GtkTextIter start, end;
 
@@ -205,6 +206,40 @@ gtv_remove_weight_tags (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *
 		gtk_text_buffer_remove_tag_by_name (buffer, *tag_names_ptr, start, end);
 }
 
+static void
+gtv_remove_underline_tags (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end)
+{
+	static char const *tag_names[] = {
+		"PANGO_UNDERLINE_NONE",
+		"PANGO_UNDERLINE_SINGLE",
+		"PANGO_UNDERLINE_DOUBLE",
+		"PANGO_UNDERLINE_LOW",
+		"PANGO_UNDERLINE_ERROR",
+		NULL
+	};
+	char const **tag_names_ptr;
+
+	for (tag_names_ptr = tag_names; *tag_names_ptr != NULL; tag_names_ptr++)
+		gtk_text_buffer_remove_tag_by_name (buffer, *tag_names_ptr, start, end);
+}
+
+
+static void
+gtv_underline_button_activated (GtkMenuItem *menuitem, GnmTextView *gtv)
+{
+	char const *val = g_object_get_data (G_OBJECT (menuitem), "underlinevalue");
+	if (val != NULL) {
+		GtkTextIter start, end;
+		if (gtk_text_buffer_get_selection_bounds (gtv->buffer, &start, &end)) {
+			GtkTextTag *tag = gtk_text_tag_table_lookup
+				(gtk_text_buffer_get_tag_table (gtv->buffer), val);
+			gtv_remove_underline_tags (gtv->buffer, &start, &end);
+			gtk_text_buffer_apply_tag (gtv->buffer, tag, &start, &end);
+			cb_gtv_emit_changed (NULL, gtv);
+		}
+		g_object_set_data (G_OBJECT (gtv->bold), "underlinevalue", (char *) val);
+	}
+}
 
 static void
 gtv_bold_button_activated (GtkMenuItem *menuitem, GnmTextView *gtv)
@@ -223,7 +258,46 @@ gtv_bold_button_activated (GtkMenuItem *menuitem, GnmTextView *gtv)
 	}
 }
 
-#define SETUPBPLDMENUITEM(string, value)                                       \
+#define SETUPUNDERLINEMENUITEM(string, value)                                  \
+	child = gtk_menu_item_new_with_label (string);                         \
+        gtk_widget_show (child);					       \
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), child);                  \
+	g_signal_connect (G_OBJECT (child), "activate",                        \
+			  G_CALLBACK (gtv_underline_button_activated),         \
+                          gtv);                                                \
+	g_object_set_data (G_OBJECT (child), "underlinevalue",                 \
+			   (char *) value);
+
+
+static GtkToolButton *
+gtv_build_button_underline (GtkWidget *tb, GnmTextView *gtv)
+{
+	GtkToolItem * tb_button;
+	GtkWidget *menu;
+	GtkWidget *child;
+
+	menu = gtk_menu_new ();
+
+	SETUPUNDERLINEMENUITEM(_("None"), "PANGO_UNDERLINE_NONE")
+	SETUPUNDERLINEMENUITEM(_("Single"), "PANGO_UNDERLINE_SINGLE")
+	SETUPUNDERLINEMENUITEM(_("Double"), "PANGO_UNDERLINE_DOUBLE")
+	SETUPUNDERLINEMENUITEM(_("Wavy"), "PANGO_UNDERLINE_ERROR")
+	SETUPUNDERLINEMENUITEM(_("Low Single"), "PANGO_UNDERLINE_LOW")
+
+	tb_button = gtk_menu_tool_button_new_from_stock (GTK_STOCK_UNDERLINE);
+	gtk_toolbar_insert(GTK_TOOLBAR(tb), tb_button, -1);
+	gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (tb_button), menu);
+	g_object_set_data (G_OBJECT (tb_button), "underlinevalue",
+                           (char *) "PANGO_UNDERLINE_SINGLE");
+	g_signal_connect (G_OBJECT (tb_button), "clicked",
+			  G_CALLBACK (gtv_underline_button_activated),
+                          gtv);
+	return GTK_TOOL_BUTTON (tb_button);
+}
+
+#undef SETUPUNDERLINEMENUITEM
+
+#define SETUPBOLDMENUITEM(string, value)                                       \
 	child = gtk_menu_item_new_with_label (string);                         \
         gtk_widget_show (child);					       \
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), child);                  \
@@ -243,16 +317,16 @@ gtv_build_button_bold (GtkWidget *tb, GnmTextView *gtv)
 
 	menu = gtk_menu_new ();
 
-	SETUPBPLDMENUITEM(_("Thin"), "PANGO_WEIGHT_THIN")
-	SETUPBPLDMENUITEM(_("Ultralight"), "PANGO_WEIGHT_ULTRALIGHT")
-	SETUPBPLDMENUITEM(_("Light"), "PANGO_WEIGHT_LIGHT")
-	SETUPBPLDMENUITEM(_("Normal"), "PANGO_WEIGHT_NORMAL")
-	SETUPBPLDMENUITEM(_("Medium"), "PANGO_WEIGHT_MEDIUM")
-	SETUPBPLDMENUITEM(_("Semibold"), "PANGO_WEIGHT_SEMIBOLD")
-	SETUPBPLDMENUITEM(_("Bold"), "PANGO_WEIGHT_BOLD")
-	SETUPBPLDMENUITEM(_("Ultrabold"), "PANGO_WEIGHT_ULTRABOLD")
-	SETUPBPLDMENUITEM(_("Heavy"), "PANGO_WEIGHT_HEAVY")
-	SETUPBPLDMENUITEM(_("Ultraheavy"), "PANGO_WEIGHT_ULTRAHEAVY")
+	SETUPBOLDMENUITEM(_("Thin"), "PANGO_WEIGHT_THIN")
+	SETUPBOLDMENUITEM(_("Ultralight"), "PANGO_WEIGHT_ULTRALIGHT")
+	SETUPBOLDMENUITEM(_("Light"), "PANGO_WEIGHT_LIGHT")
+	SETUPBOLDMENUITEM(_("Normal"), "PANGO_WEIGHT_NORMAL")
+	SETUPBOLDMENUITEM(_("Medium"), "PANGO_WEIGHT_MEDIUM")
+	SETUPBOLDMENUITEM(_("Semibold"), "PANGO_WEIGHT_SEMIBOLD")
+	SETUPBOLDMENUITEM(_("Bold"), "PANGO_WEIGHT_BOLD")
+	SETUPBOLDMENUITEM(_("Ultrabold"), "PANGO_WEIGHT_ULTRABOLD")
+	SETUPBOLDMENUITEM(_("Heavy"), "PANGO_WEIGHT_HEAVY")
+	SETUPBOLDMENUITEM(_("Ultraheavy"), "PANGO_WEIGHT_ULTRAHEAVY")
 
 	tb_button = gtk_menu_tool_button_new_from_stock (GTK_STOCK_BOLD);
 	gtk_toolbar_insert(GTK_TOOLBAR(tb), tb_button, -1);
@@ -265,8 +339,7 @@ gtv_build_button_bold (GtkWidget *tb, GnmTextView *gtv)
 	return GTK_TOOL_BUTTON (tb_button);
 }
 
-#undef SETUPBPLDMENUITEM
-
+#undef SETUPBOLDMENUITEM
 
 /* Object routines */
 
@@ -356,6 +429,7 @@ gtv_init (GnmTextView *gtv)
 						      (cb_gtv_set_strikethrough));
 	gtk_toolbar_insert(GTK_TOOLBAR(tb), gtk_separator_tool_item_new (), -1);
 	gtv->bold = gtv_build_button_bold (tb, gtv);
+	gtv->underline = gtv_build_button_underline (tb, gtv);
 
 	gtk_container_set_border_width (GTK_CONTAINER (gtv->view), 5);
 	gtk_text_view_set_wrap_mode (gtv->view, GTK_WRAP_WORD_CHAR);



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