gtranslator r3633 - in trunk/src: . dialogs



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

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

	* dialogs/preferences-dialog.c (response_filechooser_cb),
	(on_search_button_pulsed), (add_to_database), (destroy_idle_data),
	(on_add_database_button_pulsed),
	(gtranslator_preferences_dialog_init):
	* dialogs/preferences-dialog.glade:
	Added progress bar to show the status of adding a directory to the database.

Modified:
   trunk/src/ChangeLog
   trunk/src/dialogs/preferences-dialog.c
   trunk/src/dialogs/preferences-dialog.glade

Modified: trunk/src/dialogs/preferences-dialog.c
==============================================================================
--- trunk/src/dialogs/preferences-dialog.c	(original)
+++ trunk/src/dialogs/preferences-dialog.c	Mon Sep 22 09:40:07 2008
@@ -82,6 +82,7 @@
         GtkWidget *directory_entry;
         GtkWidget *search_button;
         GtkWidget *add_database_button;
+	GtkWidget *add_database_progressbar;
 
         GtkWidget *show_tm_options_checkbutton;
         GtkWidget *missing_words_spinbutton;
@@ -564,7 +565,7 @@
   if (response_id == GTK_RESPONSE_YES) {
     gtk_entry_set_text (GTK_ENTRY (dlg->priv->directory_entry),
 			gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)));
-    gtranslator_prefs_manager_set_tm_dir (gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog)));
+    gtranslator_prefs_manager_set_tm_dir (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)));
     gtk_widget_destroy (GTK_WIDGET (dialog));
   } else {
     gtk_widget_destroy (GTK_WIDGET (dialog));
@@ -581,7 +582,7 @@
   dlg = (GtranslatorPreferencesDialog *)data;
   
   filechooser = gtk_file_chooser_dialog_new ("Select PO directory",
-					     NULL,
+					     GTK_WINDOW (dlg),
 					     GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
 					     GTK_STOCK_CANCEL,
 					     GTK_RESPONSE_CANCEL,
@@ -596,6 +597,7 @@
   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,
@@ -652,70 +654,114 @@
 	}
 }
 
+typedef struct _IdleData
+{
+	GList *list;
+	GtkProgressBar *progress;
+	GtranslatorTranslationMemory *tm;
+}IdleData;
+
+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 = l2->next) {
+			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
+	{
+		gtk_progress_bar_set_fraction (data->progress,
+					       1.0);
+		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;
+	
+	g_list_foreach (d->list, (GFunc)g_free, NULL);
+	g_list_free (d->list);
+	
+	g_free (d);
+}
 
 static void
 on_add_database_button_pulsed (GtkButton *button,
 			       GtranslatorPreferencesDialog *dlg)
 {
-  GList *files_list = NULL;
-  GList *l = NULL;
   GFile *dir;
   const gchar *dir_name;
-  GtranslatorPo *po;
-  GtranslatorTranslationMemory *tm;
-  GtkWidget *dialog;
-  
-  tm = GTR_TRANSLATION_MEMORY (gtranslator_application_get_translation_memory (GTR_APP));
+  IdleData *data;
+	
+  data = g_new0 (IdleData, 1);
+  data->list = NULL;
 
   dir_name = gtranslator_prefs_manager_get_tm_dir ();
 
-  dir = g_file_new_for_uri (dir_name);
-
-  gtranslator_project_utils_scan_dir (dir, &files_list, NULL);
+  dir = g_file_new_for_path (dir_name);
 
-  for (l = files_list; l; l = l->next) {
-    GList *msg_list = NULL;
-    GList *l2 = NULL;
-    const gchar *file_uri;
-    GError *error = NULL;
-
-    po = gtranslator_po_new ();
-    file_uri = (const gchar*)l->data;
-    
-    gtranslator_po_parse (po, file_uri, &error);
-    if (error)
-      continue;
-    
-    msg_list = gtranslator_po_get_messages (po);
-       
-    for (l2 = msg_list; l2; l2 = l2->next) {
-      GtranslatorMsg *msg;
-      msg = GTR_MSG (l2->data);
-      if (gtranslator_msg_is_translated (msg))
-	gtranslator_translation_memory_store (tm,
-					      gtranslator_msg_get_msgid (msg),
-					      gtranslator_msg_get_msgstr (msg));
-    }
-    
-    g_object_unref (po);
-  }
-  g_list_foreach (files_list, (GFunc)g_free, NULL);
-  g_list_free (files_list); 
+  gtranslator_project_utils_scan_dir (dir, &data->list, NULL);
 
-  dialog = gtk_message_dialog_new (GTK_WINDOW (dlg),
-				   GTK_DIALOG_MODAL,
-				   GTK_MESSAGE_INFO,
-				   GTK_BUTTONS_CLOSE,
-				   NULL);
+  data->tm = GTR_TRANSLATION_MEMORY (gtranslator_application_get_translation_memory (GTR_APP));
+  data->progress = GTK_PROGRESS_BAR (dlg->priv->add_database_progressbar);
 
-  gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog),
-				 _("<span weight=\"bold\" size=\"large\">Strings added to database</span>"));
+  g_idle_add_full (G_PRIORITY_HIGH_IDLE + 30,
+		   (GSourceFunc)add_to_database,
+		   data,
+		   (GDestroyNotify)destroy_idle_data);
   
-  g_signal_connect_swapped (dialog,
-			    "response",
-			    G_CALLBACK (gtk_widget_destroy),
-			    dialog);
-  gtk_dialog_run (GTK_DIALOG (dialog));
+  g_object_unref (dir); 
 }
 
 static void
@@ -1044,6 +1090,7 @@
 		"directory_entry", &dlg->priv->directory_entry,
  		"search_button", &dlg->priv->search_button,
  		"add_database_button", &dlg->priv->add_database_button,
+		"add_database_progressbar", &dlg->priv->add_database_progressbar,
  						  
  		"show_tm_options_checkbutton", &dlg->priv->show_tm_options_checkbutton,				  
  		"missing_words_spinbutton", &dlg->priv->missing_words_spinbutton,

Modified: trunk/src/dialogs/preferences-dialog.glade
==============================================================================
--- trunk/src/dialogs/preferences-dialog.glade	(original)
+++ trunk/src/dialogs/preferences-dialog.glade	Mon Sep 22 09:40:07 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Thu Jul 31 11:13:45 2008 -->
+<!--Generated with glade3 3.4.5 on Fri Aug  1 10:29:05 2008 -->
 <glade-interface>
   <widget class="GtkDialog" id="preferences_dialog">
     <property name="border_width">5</property>
@@ -718,6 +718,15 @@
                                     <property name="position">2</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <widget class="GtkProgressBar" id="add_database_progressbar">
+                                    <property name="visible">True</property>
+                                    <property name="text" translatable="yes"></property>
+                                  </widget>
+                                  <packing>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
                               </widget>
                               <packing>
                                 <property name="position">1</property>
@@ -781,23 +790,28 @@
                                   <placeholder/>
                                 </child>
                                 <child>
-                                  <widget class="GtkCheckButton" id="show_tm_options_checkbutton">
+                                  <widget class="GtkSpinButton" id="sentence_length_spinbutton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="label" translatable="yes">Show options in translated messages</property>
-                                    <property name="response_id">0</property>
-                                    <property name="draw_indicator">True</property>
+                                    <property name="adjustment">2 0 100 1 10 10</property>
                                   </widget>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="right_attach">2</property>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
+                                    <property name="x_options">GTK_FILL</property>
+                                  </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkLabel" id="label23">
+                                  <widget class="GtkLabel" id="label24">
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Max. # of missing words:</property>
+                                    <property name="label" translatable="yes">Max. difference in sentence length:</property>
                                   </widget>
                                   <packing>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
+                                    <property name="top_attach">2</property>
+                                    <property name="bottom_attach">3</property>
                                     <property name="x_options">GTK_FILL</property>
                                   </packing>
                                 </child>
@@ -815,30 +829,25 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkLabel" id="label24">
+                                  <widget class="GtkLabel" id="label23">
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">Max. difference in sentence length:</property>
+                                    <property name="label" translatable="yes">Max. # of missing words:</property>
                                   </widget>
                                   <packing>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
+                                    <property name="top_attach">1</property>
+                                    <property name="bottom_attach">2</property>
                                     <property name="x_options">GTK_FILL</property>
                                   </packing>
                                 </child>
                                 <child>
-                                  <widget class="GtkSpinButton" id="sentence_length_spinbutton">
+                                  <widget class="GtkCheckButton" id="show_tm_options_checkbutton">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="adjustment">2 0 100 1 10 10</property>
+                                    <property name="label" translatable="yes">Show options in translated messages</property>
+                                    <property name="response_id">0</property>
+                                    <property name="draw_indicator">True</property>
                                   </widget>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                  </packing>
                                 </child>
                               </widget>
                               <packing>



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