[anjuta] snippets-manager: added export dialog



commit cd05a50a1f5c1736756945beaf5c048fa32f3125
Author: Mihai Bivol <mm bivol gmail com>
Date:   Sat Mar 19 02:27:45 2011 -0700

    snippets-manager: added export dialog

 plugins/snippets-manager/Makefile.am               |    3 +-
 plugins/snippets-manager/snippet.c                 |    2 +-
 plugins/snippets-manager/snippets-export-dialog.ui |  133 ++++++++
 plugins/snippets-manager/snippets-import-export.c  |  330 +++++++++++++-------
 4 files changed, 345 insertions(+), 123 deletions(-)
---
diff --git a/plugins/snippets-manager/Makefile.am b/plugins/snippets-manager/Makefile.am
index 810b389..a85b579 100644
--- a/plugins/snippets-manager/Makefile.am
+++ b/plugins/snippets-manager/Makefile.am
@@ -3,7 +3,8 @@
 snippets_manager_gladedir = $(anjuta_glade_dir)
 snippets_manager_glade_DATA = snippets-manager-preferences.ui \
                               snippets-browser.ui \
-                              snippets-editor.ui
+                              snippets-editor.ui \
+                              snippets-export-dialog.ui
 
 
 # Plugin default data
diff --git a/plugins/snippets-manager/snippet.c b/plugins/snippets-manager/snippet.c
index 20b3cfc..5a7caa1 100644
--- a/plugins/snippets-manager/snippet.c
+++ b/plugins/snippets-manager/snippet.c
@@ -86,7 +86,7 @@ snippet_dispose (GObject* snippet)
 	GList* iter = NULL;
 	gpointer p;
 	AnjutaSnippetVariable* cur_snippet_var;
-
+	
 	/* Delete the trigger_key, snippet_language, snippet_name and snippet_content fields */
 	g_free (anjuta_snippet->priv->trigger_key);
 	anjuta_snippet->priv->trigger_key = NULL;
diff --git a/plugins/snippets-manager/snippets-export-dialog.ui b/plugins/snippets-manager/snippets-export-dialog.ui
new file mode 100644
index 0000000..e1bafeb
--- /dev/null
+++ b/plugins/snippets-manager/snippets-export-dialog.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkDialog" id="export_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Export snippets</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox">
+        <property name="visible">True</property>
+        <property name="resize_mode">queue</property>
+        <child>
+          <object class="GtkFixed" id="fixed1">
+            <property name="visible">True</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="width_request">60</property>
+                <property name="height_request">40</property>
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Name:</property>
+              </object>
+              <packing>
+                <property name="x">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="width_request">100</property>
+                <property name="height_request">40</property>
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Save in folder:</property>
+              </object>
+              <packing>
+                <property name="x">5</property>
+                <property name="y">40</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFileChooserButton" id="folder_selector">
+                <property name="width_request">430</property>
+                <property name="height_request">30</property>
+                <property name="visible">True</property>
+                <property name="action">select-folder</property>
+              </object>
+              <packing>
+                <property name="x">105</property>
+                <property name="y">43</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="name_entry">
+                <property name="width_request">430</property>
+                <property name="height_request">25</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="invisible_char">â</property>
+              </object>
+              <packing>
+                <property name="x">105</property>
+                <property name="y">7</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkExpander" id="expander">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <child>
+              <object class="GtkScrolledWindow" id="tree_view_window">
+                <property name="width_request">600</property>
+                <property name="height_request">500</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="border_width">5</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="expander_label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Select snippets</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="save_button">
+                <property name="label">gtk-save</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-3">save_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/plugins/snippets-manager/snippets-import-export.c b/plugins/snippets-manager/snippets-import-export.c
index 1ea67a9..dfb3a6c 100644
--- a/plugins/snippets-manager/snippets-import-export.c
+++ b/plugins/snippets-manager/snippets-import-export.c
@@ -27,6 +27,8 @@
 #include <gtk/gtk.h>
 #include <libanjuta/anjuta-utils.h>
 
+#define EXPORT_UI PACKAGE_DATA_DIR"/glade/snippets-export-dialog.ui"
+
 enum
 {
 	SNIPPETS_STORE_COL_SNIPPET_OBJECT = 0,
@@ -277,11 +279,99 @@ snippets_view_name_data_func (GtkTreeViewColumn *column,
 	}
 }
 
+static gboolean
+snippets_store_unref_foreach_func (GtkTreeModel *model,
+                                   GtkTreePath *path,
+                                   GtkTreeIter *iter,
+                                   gpointer data)
+{
+	GObject *obj = NULL;
+	gtk_tree_model_get (model, iter,
+	                    SNIPPETS_STORE_COL_SNIPPET_OBJECT, &obj,
+	                    -1);
+	g_object_unref (obj);
+	return FALSE;
+}
+
+static gboolean 
+save_snippets_to_path (GtkTreeStore *snippets_tree_store,
+                       gchar *path,
+                       gboolean overwrite)
+{
+	AnjutaSnippet           *snippet = NULL;
+	AnjutaSnippetsGroup     *snippets_group = NULL;
+	GObject                 *object = NULL;
+	GtkTreeIter             iter, child_iter; 
+	GList                   *snippets_group_list = NULL, *element = NULL;
+	gboolean                active;
+	
+	/* Assertions */
+	g_return_val_if_fail (GTK_IS_TREE_STORE (snippets_tree_store), TRUE);
+	
+	if (g_file_test (path, G_FILE_TEST_EXISTS) &&
+		!overwrite)
+		return FALSE;
+
+	/* Save snippets */
+	/* Get the first iter from snippets_tree_store */
+	if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (snippets_tree_store), 
+		                               &iter) == FALSE)
+		return TRUE;
+	/* Select the snippets for exporting */	
+	do
+	{	
+		/* Get current group */
+		gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &iter,
+		                    SNIPPETS_STORE_COL_ACTIVE, &active,
+		                    SNIPPETS_STORE_COL_SNIPPET_OBJECT, &object,
+		                    -1);
+		g_object_ref (object);
+
+		if (ANJUTA_IS_SNIPPETS_GROUP (object) && active)
+		{
+			snippets_group = snippets_group_new (snippets_group_get_name (ANJUTA_SNIPPETS_GROUP (object)));
+			g_object_unref (object);
+
+			if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippets_tree_store),
+	                                  &child_iter, &iter))
+			{
+				/* Iterate through snippets from current group */
+				do
+				{
+					gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &child_iter,
+					                    SNIPPETS_STORE_COL_ACTIVE, &active,
+					                    SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
+					                    -1);
+					if (active)
+					{
+						snippets_group_add_snippet (snippets_group, snippet);
+					}
+				} 
+				while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store),
+				                                 &child_iter));
+			}
+
+			snippets_group_list = g_list_append (snippets_group_list, snippets_group);
+		}
+
+	} 
+	while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store), &iter));
+	
+	snippets_manager_save_snippets_xml_file (NATIVE_FORMAT,
+	                                         snippets_group_list,
+	                                         path);
+	/* Destroy created snippets groups */
+	for (element = g_list_first (snippets_group_list); element; element = g_list_next (element))
+		g_object_unref (element->data);
+	g_list_free (snippets_group_list);
+	return TRUE;
+}
+
 
 static void 
 handle_toggle (GtkCellRendererToggle *cell_renderer,
                gchar                 *path,
-               gpointer               snippet_tree_store)
+               gpointer               snippets_tree_store)
 {
 	gboolean active;
 	GtkTreeIter iter, child_iter, parent_iter;
@@ -289,12 +379,12 @@ handle_toggle (GtkCellRendererToggle *cell_renderer,
 
 	/* Assertions */
 	g_return_if_fail (GTK_IS_CELL_RENDERER_TOGGLE (cell_renderer));
-	g_return_if_fail (GTK_IS_TREE_STORE (snippet_tree_store));
+	g_return_if_fail (GTK_IS_TREE_STORE (snippets_tree_store));
 
 	/* Get the toggled object*/
-	gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (snippet_tree_store),
+	gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (snippets_tree_store),
 	                                     &iter, path);
-	gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &iter,
+	gtk_tree_model_get (GTK_TREE_MODEL (snippets_tree_store), &iter,
 	                    SNIPPETS_STORE_COL_ACTIVE, &active,
 						SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
 						-1);
@@ -306,36 +396,35 @@ handle_toggle (GtkCellRendererToggle *cell_renderer,
 	/* If group toggled, toggle all the snippets */
 	if (ANJUTA_IS_SNIPPETS_GROUP (snippet))
 	{
-		if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippet_tree_store), 
+		if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippets_tree_store), 
 		                                  &child_iter, &iter))
 			{
 				do
 				{
-					gtk_tree_store_set (snippet_tree_store, &child_iter,
+					gtk_tree_store_set (snippets_tree_store, &child_iter,
 					                    SNIPPETS_STORE_COL_ACTIVE, active,
-						            -1);
+						                -1);
 				} 
-				while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store),
+				while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippets_tree_store),
 				                                 &child_iter));
 			}
 	}
+
 	/* If snippet toggled, select the snippets group */
 	if (ANJUTA_IS_SNIPPET (snippet))
 	{
-		if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (snippet_tree_store),
+		if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (snippets_tree_store),
 		                                &parent_iter, &iter) && active == TRUE)
 		{
-			gtk_tree_store_set (snippet_tree_store, &parent_iter,
+			gtk_tree_store_set (snippets_tree_store, &parent_iter,
 	                            SNIPPETS_STORE_COL_ACTIVE, TRUE,
 			                    -1);
 		}
 	}
 		
-	gtk_tree_store_set (snippet_tree_store, &iter,
+	gtk_tree_store_set (snippets_tree_store, &iter,
 	                    SNIPPETS_STORE_COL_ACTIVE, active,
 	                    -1);
-
-	g_print("%s\n", path);
 }
 
 static gboolean 
@@ -348,6 +437,7 @@ model_foreach_set_store_func (GtkTreeModel *model,
 	GtkTreeIter store_iter;
 	GtkTreeStore *tree_store = NULL;
 	static GtkTreeIter group_iter;
+	
 	/* Assertions */
 	g_return_val_if_fail (GTK_IS_TREE_STORE (store), TRUE);
 
@@ -357,6 +447,7 @@ model_foreach_set_store_func (GtkTreeModel *model,
 	                    SNIPPETS_DB_MODEL_COL_CUR_OBJECT, &obj,
 	                    -1);
 	
+	g_object_ref (obj);	
 	if (ANJUTA_IS_SNIPPETS_GROUP (obj))
 	{
 		gtk_tree_store_append (tree_store, &store_iter, NULL);
@@ -392,43 +483,30 @@ create_snippets_store (SnippetsDB *snippets_db)
 	return store;
 } 
 
-void snippets_manager_export_snippets (SnippetsDB *snippets_db,
-                                       AnjutaShell *anjuta_shell)
+static GtkWidget*
+create_snippets_tree_view (SnippetsDB *snippets_db,
+                           GtkTreeStore *snippets_tree_store)
 {
-	GtkWidget               *file_chooser = NULL;
-	GtkFileFilter           *filter = NULL;
-	GtkWidget               *snippets_chooser = NULL;
-	GtkWidget               *snippets_tree_view = NULL;
-	GtkWidget               *scrolled_box = NULL;
-	GtkCellRenderer         *text_renderer = NULL, *toggle_renderer = NULL;
-	GtkTreeViewColumn       *column = NULL;
-	GtkTreeStore            *snippet_tree_store = NULL;
-	GtkTreeIter             iter, child_iter; 
-	GList                   *snippets_group_list = NULL;
-	gboolean                active;
-	AnjutaSnippet           *snippet = NULL;
-	AnjutaSnippetsGroup     *snippets_group = NULL;
-	GObject                 *object = NULL;
+	GtkWidget *snippets_tree_view = NULL;
+	GtkTreeViewColumn *column = NULL;
+	GtkCellRenderer   *text_renderer = NULL, *toggle_renderer = NULL;
 
 	/* Assertions */
-	g_return_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db));
-	
+	g_return_val_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db), NULL);
 
 	/* Create view and set model */
 	snippets_tree_view = gtk_tree_view_new();
-	snippet_tree_store = create_snippets_store (snippets_db);
 	gtk_tree_view_set_model (GTK_TREE_VIEW (snippets_tree_view),
-							 GTK_TREE_MODEL (snippet_tree_store));
-	
+	                         GTK_TREE_MODEL (snippets_tree_store));
+
 	/* Column 1 -- Name */
 	column = gtk_tree_view_column_new ();
 	gtk_tree_view_column_set_title  (column, "Name");
 	gtk_tree_view_append_column     (GTK_TREE_VIEW (snippets_tree_view), 
 	                                 column);
-	
 	toggle_renderer = gtk_cell_renderer_toggle_new();
 
-	g_signal_connect (toggle_renderer, "toggled", G_CALLBACK (handle_toggle), snippet_tree_store);
+	g_signal_connect (toggle_renderer, "toggled", G_CALLBACK (handle_toggle), snippets_tree_store);
 
 	gtk_tree_view_column_pack_start (column,
 	                                 toggle_renderer,
@@ -446,10 +524,8 @@ void snippets_manager_export_snippets (SnippetsDB *snippets_db,
 	gtk_tree_view_column_set_cell_data_func (column, text_renderer,
 	                                         snippets_view_name_data_func,
 	                                         snippets_tree_view, NULL);
-
-
-	/* Column 2 -- Trigger */
 	
+	/* Column 2 -- Trigger */
 	column = gtk_tree_view_column_new ();
 	gtk_tree_view_column_set_title  (column, "Trigger");
 	gtk_tree_view_append_column     (GTK_TREE_VIEW (snippets_tree_view), 
@@ -476,102 +552,114 @@ void snippets_manager_export_snippets (SnippetsDB *snippets_db,
 	gtk_tree_view_column_set_cell_data_func (column, text_renderer,
 	                                         snippets_view_languages_data_func,
 	                                         snippets_tree_view, NULL);
+	return snippets_tree_view;
+}
 
-	/* Dialog for snippets chooser */
-	snippets_chooser = gtk_dialog_new_with_buttons ("Select Snippets",
-	                                                GTK_WINDOW (anjuta_shell),
-	                                                GTK_DIALOG_MODAL,
-	                                                NULL);
-	/* Add the tree-view to dialog */
-	
-	scrolled_box = gtk_scrolled_window_new (NULL, NULL);
-	gtk_container_set_border_width (GTK_CONTAINER(scrolled_box), 0);
-	gtk_widget_set_size_request (scrolled_box, 300, 600);
-	/* TODO make it resize with the main dialog */
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_box), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); 	
-	
-	gtk_container_add (GTK_CONTAINER (scrolled_box),
-					   snippets_tree_view);
-
-	gtk_container_add (GTK_CONTAINER ( gtk_dialog_get_content_area (GTK_DIALOG ( snippets_chooser))), 
-					   scrolled_box);
-	gtk_widget_show (snippets_tree_view);
-	gtk_widget_show (scrolled_box);
+void snippets_manager_export_snippets (SnippetsDB *snippets_db,
+                                       AnjutaShell *anjuta_shell)
+{
+	GtkWidget               *tree_view_window = NULL;
+	GtkDialog               *snippets_export_dialog = NULL;
+	GtkDialog               *file_conflict_dialog = NULL;
+	GtkWidget               *snippets_tree_view = NULL;
+	GtkTreeStore            *snippets_tree_store = NULL;
+	GtkBuilder              *dialog_builder = NULL;
+	GError                  *error = NULL;
+	gint					export_dialog_result;
+	GtkFileChooserButton    *folder_selector_button = NULL;
+	GtkEntry                *name_entry = NULL;
 
-	gtk_dialog_add_button (GTK_DIALOG (snippets_chooser), "OK", GTK_RESPONSE_DELETE_EVENT);
+	/* Assertions */
+	g_return_if_fail (ANJUTA_IS_SNIPPETS_DB (snippets_db));
 	
-	/* Wait for the dialog to be closed */
-	if (gtk_dialog_run (GTK_DIALOG (snippets_chooser)) == GTK_RESPONSE_DELETE_EVENT)
+	/* Set set snippets store and model */	
+	snippets_tree_store = create_snippets_store (snippets_db);
+	snippets_tree_view = create_snippets_tree_view (snippets_db, snippets_tree_store);
+
+	dialog_builder = gtk_builder_new ();
+	if (!gtk_builder_add_from_file (dialog_builder, EXPORT_UI, &error))
 	{
-		gtk_widget_destroy (snippets_chooser);
+		g_warning ("Couldn't load export ui file: %s", error->message);
+		g_error_free (error);
 	}
 
-	file_chooser = gtk_file_chooser_dialog_new (_("Export Snippets"),
-	                                            GTK_WINDOW (anjuta_shell),
-	                                            GTK_FILE_CHOOSER_ACTION_SAVE,
-	                                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-	                                            GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
-	                                            NULL);
-	/* Set up the filter */
-	filter = gtk_file_filter_new ();
-	gtk_file_filter_set_name (filter, "Native format");
-	gtk_file_filter_add_pattern (filter, "*.anjuta-snippets");
-	gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_chooser), filter);
+	snippets_export_dialog = GTK_DIALOG (gtk_builder_get_object (dialog_builder, "export_dialog"));
+	tree_view_window = GTK_WIDGET (gtk_builder_get_object (dialog_builder, "tree_view_window"));
+	
+	gtk_container_add (GTK_CONTAINER (tree_view_window), snippets_tree_view);
+	gtk_widget_show (snippets_tree_view);
+	
+	const gchar *name = NULL;
+	gchar *uri = NULL, *path = NULL;
+	folder_selector_button = GTK_FILE_CHOOSER_BUTTON (gtk_builder_get_object (dialog_builder, "folder_selector"));
+	name_entry = GTK_ENTRY (gtk_builder_get_object (dialog_builder, "name_entry"));
 
-	if (gtk_dialog_run (GTK_DIALOG (file_chooser)) == GTK_RESPONSE_ACCEPT)
+	while (TRUE)
 	{
-		gchar *uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_chooser)),
-		      *path = anjuta_util_get_local_path_from_uri (uri);
-		
-		/* Get the first iter from snippet_tree_store */
-		gtk_tree_model_get_iter_first (GTK_TREE_MODEL (snippet_tree_store), 
-		                               &iter);	
-
-		/* Select the snippets for exporting */	
-		do
+		/* Run the dialog until cancel or export */
+		export_dialog_result = gtk_dialog_run (GTK_DIALOG (snippets_export_dialog));
+		if (export_dialog_result == GTK_RESPONSE_ACCEPT)
 		{
-			gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &iter,
-			                    SNIPPETS_STORE_COL_ACTIVE, &active,
-			                    SNIPPETS_STORE_COL_SNIPPET_OBJECT, &object,
-							    -1);
+			g_free (uri);
+			g_free (path);
+			/* Save button was pressed, export snippets */
+			name = gtk_entry_get_text (name_entry);
+			uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (folder_selector_button));
+			
+			if (!g_strcmp0 (name, ""))
+				/* Void name, re-run the export dialog */
+				continue;
+
+			if (g_strrstr (name, "."))
+				uri = g_strconcat (uri,  "/", name, NULL);
+			else
+				uri = g_strconcat (uri, "/", name, ".anjuta-snippets", NULL);
 
-			if (ANJUTA_IS_SNIPPETS_GROUP (object) && active)
+			path = anjuta_util_get_local_path_from_uri (uri);
+	
+			if (!save_snippets_to_path (snippets_tree_store, path, FALSE))
 			{
-				snippets_group = snippets_group_new (snippets_group_get_name (ANJUTA_SNIPPETS_GROUP (object)));
-				
-				if (gtk_tree_model_iter_children (GTK_TREE_MODEL (snippet_tree_store),
-		                                  &child_iter, &iter))
+				/* Filename is conflicting */
+				file_conflict_dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (snippets_export_dialog),
+				                                                           GTK_DIALOG_MODAL,
+				                                                           GTK_MESSAGE_ERROR,
+				                                                           GTK_BUTTONS_YES_NO,
+				                                                           "Path %s exists. Overwrite?", path));
+
+				if (gtk_dialog_run (file_conflict_dialog) == GTK_RESPONSE_YES)
 				{
-					/* Iterate through snippets from current group */
-					do
-					{
-						gtk_tree_model_get (GTK_TREE_MODEL (snippet_tree_store), &child_iter,
-						                    SNIPPETS_STORE_COL_ACTIVE, &active,
-						                    SNIPPETS_STORE_COL_SNIPPET_OBJECT, &snippet,
-						                    -1);
-						if (active)
-						{
-							snippets_group_add_snippet (snippets_group, snippet);
-						}
-					} 
-					while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store),
-					                                 &child_iter));
+					/* Overwrite file */
+					save_snippets_to_path (snippets_tree_store, path, TRUE);
+					gtk_widget_destroy (GTK_WIDGET (file_conflict_dialog));
+					break;
 				}
-
-				snippets_group_list = g_list_append (snippets_group_list, snippets_group);
+				else
+				{
+					/* Re-run the export dialog */
+					gtk_widget_destroy (GTK_WIDGET (file_conflict_dialog));
+					continue;
+				}
+	
 			}
-
-		} 
-		while (gtk_tree_model_iter_next (GTK_TREE_MODEL (snippet_tree_store), &iter));
-
-		/* Save the snippets */
-		snippets_manager_save_snippets_xml_file (NATIVE_FORMAT,
-		                                         snippets_group_list,
-		                                         path);
-		g_free (path);
-		g_free (uri);
+			else
+			{
+				/* Snippets were saved */
+				break;
+			}
+		}
+		else
+		{
+			/* Save cancelled */
+			break;
+		}
 	}
-	g_object_unref (snippet_tree_store);	
-	gtk_widget_destroy (file_chooser);
 
+	gtk_widget_destroy (GTK_WIDGET (snippets_export_dialog));
+	g_free (path);
+	g_free (uri);
+	gtk_tree_model_foreach (GTK_TREE_MODEL (snippets_tree_store),
+	                        snippets_store_unref_foreach_func,
+	                        NULL);
+	g_object_unref (dialog_builder);
+	g_object_unref (snippets_tree_store);	
 }



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