gtranslator r3694 - in trunk/src: . dialogs



Author: icq
Date: Mon Sep 22 09:43:25 2008
New Revision: 3694
URL: http://svn.gnome.org/viewvc/gtranslator?rev=3694&view=rev

Log:
2008-08-18  Ignacio Casal Quinteiro  <nacho resa gmail com>

	* dialogs/assistant.c (on_assistant_close), (add_to_database),
	(destroy_idle_data), (on_assistant_apply),
(on_assistant_prepare),
	(on_profile1_entry_changed), (on_profile2_entry_changed),
	(create_database_page), (create_finish_page),
	(gtranslator_assistant_class_init):
	* dialogs/preferences-dialog.c (on_add_database_button_pulsed):
	* utils.c (gtranslator_utils_scan_dir):
	* utils.h:
	Moved _scan_dir func to utils.
	Added add to database implementation in assistant.

Modified:
   trunk/src/ChangeLog
   trunk/src/dialogs/assistant.c
   trunk/src/dialogs/preferences-dialog.c
   trunk/src/utils.c
   trunk/src/utils.h

Modified: trunk/src/dialogs/assistant.c
==============================================================================
--- trunk/src/dialogs/assistant.c	(original)
+++ trunk/src/dialogs/assistant.c	Mon Sep 22 09:43:25 2008
@@ -20,7 +20,10 @@
 #include <config.h>
 #endif
 
+#include "application.h"
 #include "assistant.h"
+#include "../translation-memory/translation-memory.h"
+#include "utils.h"
 #include "window.h"
 
 #include <glib.h>
@@ -29,6 +32,7 @@
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <string.h>
+#include <gio/gio.h>
 
 #define GTR_ASSISTANT_GET_PRIVATE(object)	(G_TYPE_INSTANCE_GET_PRIVATE ( \
 						 (object),	\
@@ -56,11 +60,161 @@
 	/* Database Page */
 	GtkWidget *path;
 	GtkWidget *search_button;
+	GtkWidget *po_name;
 	
 	/* Confirmation Page */
+	GtkWidget *finish_box;
 	GtkWidget *confirm_label;
+	GtkWidget *add_db_progressbar;
 };
 
+typedef struct _IdleData
+{
+	GList *list;
+	GtkProgressBar *progress;
+	GtranslatorTranslationMemory *tm;
+	GtkWindow *parent;
+}IdleData;
+
+static void
+on_assistant_close (GtkAssistant* assistant)
+{
+	gtk_widget_destroy (GTK_WIDGET (assistant));
+}
+
+static gboolean
+add_to_database (gpointer data_pointer)
+{
+	IdleData *data = (IdleData *)data_pointer;
+	static GList *l = NULL;
+	gdouble percentage;
+	
+	if (l == NULL)
+		l = data->list;
+	else
+		l = g_list_next (l);
+
+	if (l)
+	{
+		GList *msg_list = NULL;
+		GList *l2 = NULL;
+		const gchar *file_uri;
+		GError *error = NULL;
+		GtranslatorPo *po;
+		
+		po = gtranslator_po_new ();
+		file_uri = (const gchar*)l->data;
+		
+		gtranslator_po_parse (po, file_uri, &error);
+		if (error)
+			return TRUE;
+		
+		msg_list = gtranslator_po_get_messages (po);
+		
+		for (l2 = msg_list; l2; l2 = g_list_next (l2))
+		{
+			GtranslatorMsg *msg;
+			
+			msg = GTR_MSG (l2->data);
+			if (gtranslator_msg_is_translated (msg))
+				gtranslator_translation_memory_store (data->tm,
+								      gtranslator_msg_get_msgid (msg),
+								      gtranslator_msg_get_msgstr (msg));
+		}
+		
+		g_object_unref (po);
+	}
+	else
+	{
+		GtkWidget *dialog;
+		
+		gtk_progress_bar_set_fraction (data->progress,
+					       1.0);
+		
+		dialog = gtk_message_dialog_new (data->parent,
+						 GTK_DIALOG_DESTROY_WITH_PARENT,
+						 GTK_MESSAGE_INFO,
+						 GTK_BUTTONS_CLOSE,
+						 NULL);
+		
+		gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog),
+					       _("<span weight=\"bold\" size=\"large\">Strings added to database</span>"));
+		
+		gtk_dialog_run (GTK_DIALOG (dialog));
+		gtk_widget_destroy (dialog);
+		
+		return FALSE;
+	}
+	
+	percentage = (gdouble)g_list_position (data->list, l) / (gdouble) g_list_length (data->list);
+
+	/*
+	 * Set the progress only if the values are reasonable.
+	 */
+	if(percentage > 0.0 || percentage < 1.0)
+	{
+		/*
+		 * Set the progressbar status.
+		 */
+		gtk_progress_bar_set_fraction (data->progress,
+					       percentage);
+	}
+	
+	return TRUE;
+}
+
+static void
+destroy_idle_data (gpointer data)
+{
+	IdleData *d = (IdleData *)data;
+	
+	gtk_widget_hide (GTK_WIDGET (d->progress));
+	
+	g_list_foreach (d->list, (GFunc)g_free, NULL);
+	g_list_free (d->list);
+	
+	gtk_widget_destroy (GTK_WIDGET (d->parent));
+	
+	g_free (d);
+}
+
+static void
+on_assistant_apply (GtkAssistant *assistant)
+{
+	GFile *dir;
+	const gchar *dir_name;
+	IdleData *data;
+	GtranslatorAssistant *as = GTR_ASSISTANT (assistant);
+	const gchar *po_name;
+	
+	dir_name = gtk_entry_get_text (GTK_ENTRY (as->priv->path));
+	if (strcmp (dir_name, "") == 0)
+		return;
+	
+	data = g_new0 (IdleData, 1);
+	data->list = NULL;
+	
+	dir = g_file_new_for_path (dir_name);
+	
+	po_name = gtk_entry_get_text (GTK_ENTRY (as->priv->po_name));
+	
+	gtranslator_utils_scan_dir (dir, &data->list, po_name);
+	
+	data->tm = GTR_TRANSLATION_MEMORY (gtranslator_application_get_translation_memory (GTR_APP));
+	data->progress = GTK_PROGRESS_BAR (as->priv->add_db_progressbar);
+	data->parent = GTK_WINDOW (as);
+	
+	gtk_widget_show (as->priv->add_db_progressbar);
+	
+	g_signal_handlers_block_by_func (assistant, on_assistant_close, NULL);
+	g_idle_add_full (G_PRIORITY_HIGH_IDLE + 30,
+			 (GSourceFunc)add_to_database,
+			 data,
+			 (GDestroyNotify)destroy_idle_data);
+	
+	g_object_unref (dir); 
+}
+
 static void
 on_assistant_prepare (GtkAssistant *assistant,
 		      GtkWidget *page)
@@ -69,7 +223,7 @@
 	gchar *string;
 	const gchar *database_path;
 	
-	if (page != as->priv->confirm_label)
+	if (page != as->priv->finish_box)
 		return;
 	
 	database_path = gtk_entry_get_text (GTK_ENTRY (as->priv->path));
@@ -94,7 +248,7 @@
 				  gtk_entry_get_text (GTK_ENTRY (as->priv->trans_enc)),
 				  gtk_entry_get_text (GTK_ENTRY (as->priv->plural_form)),
 				  (strcmp (database_path, "") != 0) ? database_path : _("None"));
-	
+
 	gtk_label_set_text (GTK_LABEL (as->priv->confirm_label), string);
 	g_free (string);
 }
@@ -142,7 +296,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Translator name */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->name));
@@ -150,7 +307,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Translator email */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->email));
@@ -158,7 +318,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Language */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->language));
@@ -166,7 +329,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Team email */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->team_email));
@@ -309,7 +475,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Charset */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->charset));
@@ -317,7 +486,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
+		return;
+	}
 	
 	/* Trans encoding */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->trans_enc));
@@ -325,8 +497,10 @@
 	if (text && *text)
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, TRUE);
 	else
+	{
 		gtk_assistant_set_page_complete (GTK_ASSISTANT (as), current_page, FALSE);
-	
+		return;
+	}
 	
 	/* Plural form */
 	text = gtk_entry_get_text (GTK_ENTRY (as->priv->plural_form));
@@ -502,6 +676,24 @@
 	g_signal_connect (priv->search_button, "clicked",
 			  G_CALLBACK (on_dir_find_button_clicked), as);
 	
+	/* Po name label */
+	hbox = gtk_hbox_new (FALSE, 12);
+	gtk_widget_show (hbox);
+	gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0);
+	
+	label = gtk_label_new (NULL);
+	gtk_label_set_markup (GTK_LABEL (label),
+			      _("<b>Look for a specific PO filename:</b>"));
+	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+	gtk_widget_show (label);
+	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+	
+	/* Po name entry */
+	priv->po_name = gtk_entry_new ();
+	gtk_widget_show (priv->po_name);
+	gtk_box_pack_start (GTK_BOX (hbox), priv->po_name, TRUE, TRUE, 0);
+	gtk_widget_set_tooltip_text (priv->po_name, _("E.g.: gl.po"));
+	
 	gtk_assistant_append_page (GTK_ASSISTANT (as), box);
 	gtk_assistant_set_page_title (GTK_ASSISTANT (as), box, _("Generate Database"));
 	gtk_assistant_set_page_complete (GTK_ASSISTANT (as), box, TRUE);
@@ -510,14 +702,24 @@
 static void
 create_finish_page (GtranslatorAssistant *as)
 {
+	as->priv->finish_box = gtk_vbox_new (FALSE, 0);
+	gtk_widget_show (as->priv->finish_box);
+	
 	as->priv->confirm_label = gtk_label_new (NULL);
 	gtk_widget_show (as->priv->confirm_label);
+	gtk_box_pack_start (GTK_BOX (as->priv->finish_box), as->priv->confirm_label,
+			    TRUE, TRUE, 0);
+	
+	as->priv->add_db_progressbar = gtk_progress_bar_new ();
+	gtk_widget_show (as->priv->add_db_progressbar);
+	gtk_box_pack_start (GTK_BOX (as->priv->finish_box), as->priv->add_db_progressbar,
+			    FALSE, FALSE, 0);
 	
-	gtk_assistant_append_page (GTK_ASSISTANT (as), as->priv->confirm_label);
-	gtk_assistant_set_page_type (GTK_ASSISTANT (as), as->priv->confirm_label,
+	gtk_assistant_append_page (GTK_ASSISTANT (as), as->priv->finish_box);
+	gtk_assistant_set_page_type (GTK_ASSISTANT (as), as->priv->finish_box,
 				     GTK_ASSISTANT_PAGE_CONFIRM);
-	gtk_assistant_set_page_complete (GTK_ASSISTANT (as), as->priv->confirm_label, TRUE);
-	gtk_assistant_set_page_title (GTK_ASSISTANT (as), as->priv->confirm_label, _("Confirmation"));
+	gtk_assistant_set_page_complete (GTK_ASSISTANT (as), as->priv->finish_box, TRUE);
+	gtk_assistant_set_page_title (GTK_ASSISTANT (as), as->priv->finish_box, _("Confirmation"));
 }
 
 static void
@@ -552,9 +754,9 @@
 
 	object_class->finalize = gtranslator_assistant_finalize;
 	assistant_class->prepare = on_assistant_prepare;
-	/*assistant_class->apply = on_assistant_apply;*/
+	assistant_class->apply = on_assistant_apply;
 	assistant_class->cancel = on_assistant_cancel;
-	assistant_class->close = on_assistant_cancel;
+	//assistant_class->close = on_assistant_cancel;
 }
 
 void

Modified: trunk/src/dialogs/preferences-dialog.c
==============================================================================
--- trunk/src/dialogs/preferences-dialog.c	(original)
+++ trunk/src/dialogs/preferences-dialog.c	Mon Sep 22 09:43:25 2008
@@ -633,63 +633,6 @@
   gtk_dialog_run (GTK_DIALOG (filechooser));
 }
 
-/* FIXME: We have to remove this when we move it to utils.ch */
-static void
-gtranslator_project_utils_scan_dir (GFile *dir,
-				    GList **list,
-				    const gchar *po_name)
-{
-	GFileInfo *info;
-	GError *error;
-	GFile *file;
-	GFileEnumerator *enumerator;
-
-	error = NULL;
-	enumerator = g_file_enumerate_children (dir,
-						G_FILE_ATTRIBUTE_STANDARD_NAME,
-						G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
-						NULL,
-						&error);
-	if (enumerator) 
-	{
-		error = NULL;
-		
-		while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)) != NULL) 
-		{
-			const gchar *name;
-			gchar *filename;
-			
-			name = g_file_info_get_name (info);
-			file = g_file_get_child (dir, name);
-
-			if (po_name != NULL)
-			{
-				if (g_str_has_suffix (po_name, ".po"))
-					filename = g_strdup (po_name);
-				else 
-					filename = g_strconcat (po_name, ".po", NULL);
-			}
-			else
-				filename = g_strdup (".po");
-			
-			if (g_str_has_suffix (name, filename))
-				*list = g_list_prepend (*list, g_file_get_path (file));
-			g_free (filename);
-
-			gtranslator_project_utils_scan_dir (file, list, po_name);
-			g_object_unref (file);
-			g_object_unref (info);
-		}
-		g_file_enumerator_close (enumerator, NULL, NULL);
-		g_object_unref (enumerator);
-		
-		if (error)
-		{
-			g_warning (error->message);
-		}
-	}
-}
-
 typedef struct _IdleData
 {
 	GList *list;
@@ -805,9 +748,9 @@
   dir = g_file_new_for_path (dir_name);
 
   if (gtranslator_prefs_manager_get_use_lang_profile ()) {
-    gtranslator_project_utils_scan_dir (dir, &data->list, gtranslator_prefs_manager_get_tm_lang_entry());
+    gtranslator_utils_scan_dir (dir, &data->list, gtranslator_prefs_manager_get_tm_lang_entry());
   } else {
-    gtranslator_project_utils_scan_dir (dir, &data->list, NULL);
+    gtranslator_utils_scan_dir (dir, &data->list, NULL);
   }
   data->tm = GTR_TRANSLATION_MEMORY (gtranslator_application_get_translation_memory (GTR_APP));
   data->progress = GTK_PROGRESS_BAR (dlg->priv->add_database_progressbar);

Modified: trunk/src/utils.c
==============================================================================
--- trunk/src/utils.c	(original)
+++ trunk/src/utils.c	Mon Sep 22 09:43:25 2008
@@ -859,3 +859,68 @@
 
   return year;
 }
+
+/**
+ * gtranslator_utils_scan_dir:
+ * @dir: the dir to parse
+ * @list: the list where to store the filenames
+ * @po_name: the name of the specific po file to search or NULL.
+ *
+ * Scans the directory and subdirectories of @dir looking for filenames remained
+ * wiht .po or files that matches @po_name.
+ */
+void
+gtranslator_utils_scan_dir (GFile *dir,
+			    GList **list,
+			    const gchar *po_name)
+{
+	GFileInfo *info;
+	GError *error;
+	GFile *file;
+	GFileEnumerator *enumerator;
+
+	error = NULL;
+	enumerator = g_file_enumerate_children (dir,
+						G_FILE_ATTRIBUTE_STANDARD_NAME,
+						G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+						NULL,
+						&error);
+	if (enumerator) 
+	{
+		error = NULL;
+		
+		while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)) != NULL) 
+		{
+			const gchar *name;
+			gchar *filename;
+			
+			name = g_file_info_get_name (info);
+			file = g_file_get_child (dir, name);
+
+			if (po_name != NULL)
+			{
+				if (g_str_has_suffix (po_name, ".po"))
+					filename = g_strdup (po_name);
+				else 
+					filename = g_strconcat (po_name, ".po", NULL);
+			}
+			else
+				filename = g_strdup (".po");
+			
+			if (g_str_has_suffix (name, filename))
+				*list = g_list_prepend (*list, g_file_get_path (file));
+			g_free (filename);
+
+			gtranslator_utils_scan_dir (file, list, po_name);
+			g_object_unref (file);
+			g_object_unref (info);
+		}
+		g_file_enumerator_close (enumerator, NULL, NULL);
+		g_object_unref (enumerator);
+		
+		if (error)
+		{
+			g_warning (error->message);
+		}
+	}
+}
\ No newline at end of file

Modified: trunk/src/utils.h
==============================================================================
--- trunk/src/utils.h	(original)
+++ trunk/src/utils.h	Mon Sep 22 09:43:25 2008
@@ -25,6 +25,7 @@
 #include <gtk/gtkaboutdialog.h>
 #include <gtk/gtkwindow.h>
 #include <libxml/tree.h>
+#include <gio/gio.h>
 
 gchar **       gtranslator_utils_split_string_in_words (const gchar *string);
 
@@ -84,4 +85,8 @@
 
 gchar         *gtranslator_utils_get_current_year (void);
 
+void           gtranslator_utils_scan_dir              (GFile *dir,
+							GList **list,
+							const gchar *po_name);
+
 #endif



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