[Goodies-commits] r4127 - xfbib/trunk/src

Jesper Karlsson zarper at xfce.org
Sat Mar 29 20:40:18 CET 2008


Author: zarper
Date: 2008-03-29 19:40:18 +0000 (Sat, 29 Mar 2008)
New Revision: 4127

Modified:
   xfbib/trunk/src/entry_edit_dialog.c
   xfbib/trunk/src/open.c
   xfbib/trunk/src/treeview.c
Log:
Xfbib: Statusbar show path of the opened file.
Code cleanup and improved memory management.

Modified: xfbib/trunk/src/entry_edit_dialog.c
===================================================================
--- xfbib/trunk/src/entry_edit_dialog.c	2008-03-28 07:28:45 UTC (rev 4126)
+++ xfbib/trunk/src/entry_edit_dialog.c	2008-03-29 19:40:18 UTC (rev 4127)
@@ -51,7 +51,6 @@
 	return name;
 }		
 
-
 static void generate_keys(GtkListStore *completion_model, GtkTreeModel *author_model)
 {
 	_DEBUG(("generate_keys"));
@@ -70,8 +69,6 @@
 	}
 }
 
-
-
 static gboolean cb_focus_in_event (GtkWidget *widget, GdkEventFocus *event, struct edit_entry *edit_entry)
 {
 	_DEBUG(("cb_in_focus_event"));
@@ -82,7 +79,6 @@
 	return FALSE;
 }
 
-
 static void set_color_base(GtkWidget *entry, int selected_color)
 {
 	_DEBUG(("set_color"));
@@ -373,17 +369,42 @@
 	}
 }
 
+static void set_list_text (GtkListStore *list, char *str)
+{
+	_DEBUG(("set_list_text"));
+	GtkTreeIter iter;
+	int n, max, len;
+	char *prev, *tmp;
+	
+	max = strlen(str);
+	for(n = 0, prev = str; n < max; n++) {
+		if (str[n] == ' ' && str[n+1] == '\\' && str[n+2] == 'a' && str[n+3] == 'n' && str[n+4] == 'd' && str[n+5] == ' ') {
+			len = &str[n] - prev;
+			tmp = malloc(sizeof(char) * (len+1));
+			strncpy(tmp, prev, len);
+			tmp[len] = '\0';
+			gtk_list_store_append(list, &iter);
+			gtk_list_store_set(list, &iter, 0, tmp, -1);
+			prev = &str[n+6];
+		}
+	}
+	len = &str[n] - prev;
+	tmp = malloc(sizeof(char) * (len+1));
+	strncpy(tmp, prev, len);
+	tmp[len] = '\0';
+	gtk_list_store_append(list, &iter);
+	gtk_list_store_set(list, &iter, 0, tmp, -1);
+}
+
 void show_entry_edit_dialog(struct xfbib *xfbib, struct entry *selected)
 {
 	_DEBUG(("show_entry_edit_dialog"));
 	
-	GtkWidget *dialog, *notebook, *hbox, *key_entry, *combobox, *vbox[5];
-	GtkWidget *vboxes[2], *hboxes, *adds[2], *removes[2], *buttonboxes[2];
+	GtkWidget *dialog, *notebook, *hbox, *key_entry, *combobox, *vbox[5], *vboxes[2], *hboxes, *adds[2], *removes[2], *buttonboxes[2];
 	struct edit_entry edit_entry[N_ENTRIES];
 	int i, pos, n;
 	struct tag *tags;
-	char *type;
-	const gchar *value, *key;
+	char *type, *value, *key;
 	const char *tooltips[] = {_("Address of publisher"),
 	_("Annotation for annotated bibliography styles"), 
 	_("Name(s) of the author(s), separated by 'and' if more than one"), 
@@ -413,7 +434,8 @@
 	
 	xfce_textdomain (PACKAGE, LOCALEDIR, "ISO-8859-1");
 
-	dialog = xfce_titled_dialog_new_with_buttons ((selected == NULL) ? _("Add entry") : _("Edit entry"), NULL,
+	dialog = xfce_titled_dialog_new_with_buttons ((selected == NULL) ? _("Add entry") : _("Edit entry"),
+						NULL,
 						GTK_DIALOG_MODAL,
 						GTK_STOCK_OK, GTK_RESPONSE_OK,
 						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -430,47 +452,41 @@
 	hboxes = gtk_hbox_new(FALSE, 10);
 
 	for (i = 0; i < N_ENTRIES; i++)  {
+		edit_entry[i].label = gtk_label_new(i == HOWPUBLISHED ? N_("How Published") : label_entry[i]);
+		edit_entry[i].toggle = gtk_toggle_button_new_with_label ("aA");
+		gtk_widget_set_tooltip_text (edit_entry[i].toggle, _("Toggle case sensitivity."));
 		if (i != AUTHOR && i != EDITOR) {
-			edit_entry[i].label = gtk_label_new(i == HOWPUBLISHED ? N_("How Published") : label_entry[i]);
 			edit_entry[i].entry = gtk_entry_new();
 			gtk_entry_set_width_chars(GTK_ENTRY (edit_entry[i].entry), 30);
 			gtk_widget_set_tooltip_text (edit_entry[i].entry, tooltips[i]);
 			edit_entry[i].hbox = gtk_hbox_new(FALSE, 10);
-			edit_entry[i].toggle = gtk_toggle_button_new_with_label ("aA");
-			gtk_widget_set_tooltip_text (edit_entry[i].toggle, _("Toggle case sensitivity."));
 			gtk_box_pack_start(GTK_BOX(edit_entry[i].hbox), edit_entry[i].label, FALSE, FALSE, 10);
 			gtk_box_pack_end(GTK_BOX(edit_entry[i].hbox), edit_entry[i].toggle, FALSE, TRUE, 10);
 			gtk_box_pack_end(GTK_BOX(edit_entry[i].hbox), edit_entry[i].entry, FALSE, TRUE, 10);
-			g_signal_connect (G_OBJECT (GTK_ENTRY(edit_entry[i].entry)), "changed",
-	                      G_CALLBACK (entry_changed_event), combobox);
+			g_signal_connect (G_OBJECT (edit_entry[i].entry), "changed", G_CALLBACK (entry_changed_event), combobox);
 		
-		if (i == INSTITUTION || i == ORGANIZATION || i == SCHOOL || i == TITLE || i == TYPE)
-			gtk_box_pack_start (GTK_BOX (vbox[0]), edit_entry[i].hbox, FALSE, FALSE, 2);
-		//else if (i == AUTHOR || i == EDITOR)
-			//gtk_box_pack_start (GTK_BOX (vbox[1]), edit_entry[i].hbox, FALSE, FALSE, 2);
-		else if (i == BOOKTITLE || i == CHAPTER || i == EDITION || i == MONTH || i == NUMBER || i == PAGES || i == VOLUME || i == YEAR)
-			gtk_box_pack_start (GTK_BOX (vbox[2]), edit_entry[i].hbox, FALSE, FALSE, 2);
-		else if (i == ADDRESS || i == HOWPUBLISHED || i == JOURNAL || i == PUBLISHER || i == SERIES)
-			gtk_box_pack_start (GTK_BOX (vbox[3]), edit_entry[i].hbox, FALSE, FALSE, 2);
-		else
-			gtk_box_pack_start (GTK_BOX (vbox[4]), edit_entry[i].hbox, FALSE, FALSE, 2);
+			if (i == INSTITUTION || i == ORGANIZATION || i == SCHOOL || i == TITLE || i == TYPE)
+				gtk_box_pack_start (GTK_BOX (vbox[0]), edit_entry[i].hbox, FALSE, FALSE, 2);
+			else if (i == BOOKTITLE || i == CHAPTER || i == EDITION || i == MONTH || i == NUMBER || i == PAGES || i == VOLUME || i == YEAR)
+				gtk_box_pack_start (GTK_BOX (vbox[2]), edit_entry[i].hbox, FALSE, FALSE, 2);
+			else if (i == ADDRESS || i == HOWPUBLISHED || i == JOURNAL || i == PUBLISHER || i == SERIES)
+				gtk_box_pack_start (GTK_BOX (vbox[3]), edit_entry[i].hbox, FALSE, FALSE, 2);
+			else
+				gtk_box_pack_start (GTK_BOX (vbox[4]), edit_entry[i].hbox, FALSE, FALSE, 2);
 		} else {
 			_DEBUG(("Author/Editor"));
 			n = (i == EDITOR);
-			edit_entry[i].label = gtk_label_new(label_entry[i]);
 			edit_entry[i].entry = create_author_editor_treeview(xfbib, (char*) label_entry[i]);
 			adds[n] = gtk_button_new_from_stock(GTK_STOCK_ADD);
 			removes[n] = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
-			edit_entry[i].toggle = gtk_toggle_button_new_with_label ("aA");
-			gtk_widget_set_tooltip_text (edit_entry[i].toggle, _("Toggle case sensitivity."));
 			vboxes[n] = gtk_vbox_new(FALSE, 10);
 			buttonboxes[n] = gtk_hbox_new(FALSE, 10);
 			gtk_box_pack_start(GTK_BOX(vboxes[n]), edit_entry[i].entry, TRUE, TRUE, 10);
-			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), adds[n], FALSE, FALSE, 10);
-			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), removes[n], FALSE, FALSE, 10);
+			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), adds[n], TRUE, FALSE, 1);
+			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), removes[n], TRUE, FALSE, 1);
 			g_signal_connect_swapped(G_OBJECT(adds[n]), "clicked", G_CALLBACK(add_event_handler), &edit_entry[i]);
 			g_signal_connect_swapped(G_OBJECT(removes[n]), "clicked", G_CALLBACK(remove_event_handler), &edit_entry[i]);
-			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), edit_entry[i].toggle, FALSE, FALSE, 10);
+			gtk_box_pack_start(GTK_BOX(buttonboxes[n]), edit_entry[i].toggle, TRUE, FALSE, 1);
 			gtk_box_pack_start(GTK_BOX(vboxes[n]), buttonboxes[n], FALSE, FALSE, 10);
 			gtk_box_pack_start(GTK_BOX(hboxes), vboxes[n], FALSE, FALSE, 10);
 		}
@@ -490,63 +506,41 @@
 
 	gtk_widget_show_all(dialog);
 
-	GtkListStore *list;
-	GtkTreeIter iter;
 	GtkTreeModel *model;
-	int x, max, len;
-	char *prev, *tmp, *str;
 
 	if (selected != NULL) {
 		_DEBUG(("Entry selected"));
-		if ((pos = get_type_pos(selected->type)) != -1) {
-			/* Adding predefined values */
+		pos = get_type_pos(selected->type);
+		if (pos == -1)
+			_DEBUG(("Type equals -1"));
+		else {
 			gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), pos);
 			set_entry_text(GTK_ENTRY(key_entry), selected->key);
 			for (tags = selected->tags; tags != NULL; tags = tags->next) {
 				pos = get_entry_pos(tags->name);
-				if (pos != -1) {
-					if (pos == AUTHOR || pos == EDITOR) {
-						_DEBUG(("read in author or editor"));
-						list = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(edit_entry[pos].entry)));
-						
-						str = tags->value;
-						max = strlen(str);
-						for(x = 0, prev = str; x < max; x++) {
-							if (str[x] == ' ' && str[x+1] == '\\' && str[x+2] == 'a' && str[x+3] == 'n' && str[x+4] == 'd' && str[x+5] == ' ') {
-								len = &str[x] - prev;
-								tmp = malloc(sizeof(char) * (len+1));
-								strncpy(tmp, prev, len);
-								tmp[len+1] = '\0';
-								gtk_list_store_append(list, &iter);
-								gtk_list_store_set(list, &iter, 0, tmp, -1);
-								prev = &str[x+6];
-							}
-						}
-						len = &str[x] - prev;
-						tmp = malloc(sizeof(char) * (len+1));
-						strncpy(tmp, prev, len);
-						tmp[len+1] = '\0';
-						gtk_list_store_append(list, &iter);
-						gtk_list_store_set(list, &iter, 0, tmp, -1);
-					} else {
+				if (pos == -1) {
+					_DEBUG(("Tag equals -1: Name: %s Value: %s", tags->name, tags->value));
+				} else {
+					if (pos == AUTHOR || pos == EDITOR)
+						set_list_text(GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(edit_entry[pos].entry))), strdup(tags->value));					
+					else 
 						set_entry_text(GTK_ENTRY(edit_entry[pos].entry), tags->value);
-					}
 					if (tags->sense)
 						gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (edit_entry[pos].toggle), TRUE);
 					else
 						gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (edit_entry[pos].toggle), FALSE);
 				}
-				else
-					_DEBUG(("Tag equals -1: Name: %s Value: %s", tags->name, tags->value));
 			}
-		} else
-			_DEBUG(("Type equals -1"));
+		}
 	}
-
+	
+	GtkTreeIter iter;
+	char *name;
+	
 	while ( TRUE ) {
 		if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
 			_DEBUG(("Response OK"));
-			key = gtk_entry_get_text(GTK_ENTRY(key_entry));
+			key = (char *) gtk_entry_get_text(GTK_ENTRY(key_entry));
 			if ((type = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combobox))) == NULL) {
 				_DEBUG(("No type selected"));
 				xfce_warn(_("No type was selected"));
@@ -566,35 +560,30 @@
 					free_tags(selected->tags);
 				}
 				for (i = 0; i < N_ENTRIES; i++) {
-					if (i == AUTHOR || i == EDITOR) {
-						model = gtk_tree_view_get_model(GTK_TREE_VIEW(edit_entry[i].entry));
-						if (gtk_tree_model_get_iter_first(model, &iter)) {
-							_DEBUG(("Pasting together Author/Editor"));
-							value = "";
-							do {
+					if(GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(edit_entry[i].entry))) {
+						if (i == AUTHOR || i == EDITOR) {
+							model = gtk_tree_view_get_model(GTK_TREE_VIEW(edit_entry[i].entry));
+							value = NULL;
+							if (gtk_tree_model_get_iter_first(model, &iter)) {
 								_DEBUG(("Pasting together Author/Editor"));
-								gtk_tree_model_get (model, &iter, 0, &tmp, -1);
-								_DEBUG(("Pasting together Author/Editor"));
-								if (strcmp(value, "") == 0) {
-									_DEBUG(("IF"));
-									value = strdup(tmp);
-								} else {
-									_DEBUG(("ELSE"));
-									value = strcat(strcat((char *) value, " \\and "),tmp);
-								}
-									_DEBUG(("Pasting together Author/Editor"));
-							} while (gtk_tree_model_iter_next(model, &iter));
+								do {
+									gtk_tree_model_get (model, &iter, 0, &name, -1);
+									if (value == NULL)
+										value = strdup(name);
+									else  {
+										value = (char *) realloc(value, sizeof(char)*strlen(value) + sizeof(char)*strlen(" \\and ") + sizeof(char)*strlen(name) + sizeof(char));
+										strcat(strcat((char *) value, " \\and "), name);
+									}
+								} while (gtk_tree_model_iter_next(model, &iter));
+							}
+						} else
+							value = (char *) gtk_entry_get_text(GTK_ENTRY(edit_entry[i].entry));
+						if(strcmp(value, "") != 0) {
+							fprintf(stderr, "label = %s\tvalue = %s\n", gtk_label_get_text(GTK_LABEL(edit_entry[i].label)), value);
+							add_tag(selected,(char*) gtk_label_get_text(GTK_LABEL(edit_entry[i].label)), value,
+									gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (edit_entry[i].toggle)));
 						}
-					} else {
-						value = gtk_entry_get_text(GTK_ENTRY(edit_entry[i].entry));
 					}
-					if(GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(edit_entry[i].entry)) && (strcmp(value, "") != 0)) {
-						fprintf(stderr, "label = %s\tvalue = %s\n",
-								gtk_label_get_text(GTK_LABEL(edit_entry[i].label)), value);
-						/* Field was not empty and sensitive, so add value to a new entry */
-						add_tag(selected,(char*) gtk_label_get_text(GTK_LABEL(edit_entry[i].label)),(char*) value,
-								gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (edit_entry[i].toggle)));
-					}
 				}
 				update_treeview(xfbib);
 				break;

Modified: xfbib/trunk/src/open.c
===================================================================
--- xfbib/trunk/src/open.c	2008-03-28 07:28:45 UTC (rev 4126)
+++ xfbib/trunk/src/open.c	2008-03-29 19:40:18 UTC (rev 4127)
@@ -16,6 +16,8 @@
 
 #include <libxfcegui4/libxfcegui4.h>
 #include <config.h>
+#include <string.h>
+#include <stdlib.h>
 
 #include "xfbib.h"
 #include "parser_interface.h"
@@ -32,6 +34,7 @@
 	update_treeview(xfbib);
 	_DEBUG(("Opening: %s", xfbib->filename));
 	gtk_window_set_title(GTK_WINDOW(xfbib->window.window), create_title(xfbib));
-	statusbar_push((GtkStatusbar *) xfbib->window.statusbar, 0, /*strcat(filename,*/ _(" loaded...")/*)*/);	//TODO: Investigate why this fails sometimes.
+	filename = (char *) realloc(filename, sizeof(char)*strlen(filename) + sizeof(char)*strlen(" loaded..."));
+	statusbar_push((GtkStatusbar *) xfbib->window.statusbar, 0, strcat(filename, _(" loaded...")));
 	return 0;
 }

Modified: xfbib/trunk/src/treeview.c
===================================================================
--- xfbib/trunk/src/treeview.c	2008-03-28 07:28:45 UTC (rev 4126)
+++ xfbib/trunk/src/treeview.c	2008-03-29 19:40:18 UTC (rev 4127)
@@ -92,7 +92,7 @@
     gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(column), 100);
    	gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
 
-	list = gtk_list_store_new (VAR_N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
+	list = gtk_list_store_new (1, G_TYPE_STRING);
 
 	gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(list));
 	return treeview; 




More information about the Goodies-commits mailing list