gtranslator r3694 - in trunk/src: . dialogs
- From: icq svn gnome org
- To: svn-commits-list gnome org
- Subject: gtranslator r3694 - in trunk/src: . dialogs
- Date: Mon, 22 Sep 2008 09:43:25 +0000 (UTC)
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]