Thanks for your reply.
The scrolled windows is placed in main of application and file dialog chooser is "pop up" dialog:
Code:
/* Go through each row and add its data to the xmlDocPtr */
static gboolean save_to_file_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, xmlNodePtr root, gpointer user_data)
{
gchar *name, *number, *position;
xmlNodePtr current;
gtk_tree_model_get(model, iter, 0, &name, 1, &number, -1);
path_str = gtk_tree_path_to_string(path);
current = xmlNewChild(root, NULL, (guchar*)"colour", NULL);
xmlSetProp(current, (guchar*)"name", (guchar*name);
xmlSetProp(current, (guchar*)"number", (guchar*)number);
xmlSetProp(current, (guchar*)"position", (guchar*)positon);
g_free(title);
g_free(number);
g_free(path_str);
return FALSE;
}
static void save_to_file(gchar *filename)
{
GtkTreeModel *model;
xmlDocPtr doc;
xmlNodePtr root;
doc = xmlNewDoc((guchar*)"1.0");
root = xmlNewDocNode(doc, NULL, (guchar*)"colour", NULL);
xmlDocSetRootElement(doc, root);
model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
gtk_tree_model_foreach(model, (GtkTreeModelForeachFunc)save_to_file_foreach, (gpointer)root);
xmlSaveFile(filename, doc);
xmlFreeDoc(doc);
}
static void save_to_file_cb(GtkWidget *button, gpointer data)
{
GtkWidget *dialog;
GtkFileFilter *file_filter_all;
GtkFileFilter *file_filter_xml;
gchar *filename;
dialog = gtk_file_chooser_dialog_new("Select file name...", NULL,
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL, NULL);
file_filter_all = gtk_file_filter_new();
gtk_file_filter_set_name(file_filter_all, _("All Files"));
gtk_file_filter_add_pattern(file_filter_all, "*.*");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_all);
file_filter_xml = gtk_file_filter_new();
gtk_file_filter_set_name(file_filter_xml, _("XML Files (*.xml)"));
gtk_file_filter_add_pattern(file_filter_xml, "*.xml");
gtk_file_filter_add_pattern(file_filter_xml, "*.XML");
gtk_file_filter_add_mime_type(file_filter_xml, "text/xml");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), file_filter_xml);
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "colour.xml");
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
/* Check if .xml extension is added, if not add */
if (strstr(filename, ".xml") == NULL) {
char *tmp_file;
/* create copy of filename to release it and create a new one, using old name */
tmp_file = g_strdup(filename);
g_free(filename);
filename = g_strdup_printf("%s.xml", tmp_file);
g_free(tmp_file);
}
save_to_file(filename);
g_free(filename);
}
gtk_widget_destroy(dialog);
}