6

I'm writing on Ubuntu 12.04 in Anjuta with C and GTK a program. It's a graphical interface for the nbc (Lego NXT Compiler). I have a GTKTextView. Now I want to save the content of the textview to a file, which could be chosen by a GTKFileChooser. Now I don't know how to get the text from the TextView and write it to the file. How do i do this?

sigjuice
  • 28,661
  • 12
  • 68
  • 93
user1464420
  • 89
  • 1
  • 4

2 Answers2

6

First, get the GtkTextBuffer from the GtkTextView using gtk_text_view_get_buffer(). Then get the start and end GtkTextIters from the buffer to use to get the text of the buffer. Finally, write that text to the file using the API of your choice, however, I would recommend Gio. Here's a snippet from my old tutorial:

gtk_widget_set_sensitive (text_view, FALSE);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->text_view));
gtk_text_buffer_get_start_iter (buffer, &start);
gtk_text_buffer_get_end_iter (buffer, &end);
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);       
gtk_text_buffer_set_modified (buffer, FALSE);
gtk_widget_set_sensitive (editor->text_view, TRUE);

/* set the contents of the file to the text from the buffer */
if (filename != NULL)        
    result = g_file_set_contents (filename, text, -1, &err);
else
    result = g_file_set_contents (editor->filename, text, -1, &err);

if (result == FALSE)
{
    /* error saving file, show message to user */
    error_message (err->message);
    g_error_free (err);
}        

g_free (text); 

Check out the following API documentation:

  1. http://developer.gnome.org/gtk3/stable/GtkTextBuffer.html
  2. http://developer.gnome.org/glib/stable/glib-File-Utilities.html
gpoo
  • 8,408
  • 3
  • 38
  • 53
Micah Carrick
  • 9,967
  • 3
  • 31
  • 43
2
void on_toolbutton3_clicked(GtkToolButton *toolbutton, gpointer data)
{   


    GtkWidget *dialog;
    dialog = gtk_file_chooser_dialog_new ("Abspeichern...",
                      NULL,
                      GTK_FILE_CHOOSER_ACTION_SAVE,
                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                      NULL);
    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
    {
    char *filename;
    char *text;
    GtkTextIter *start;
    GtkTextIter *end;
    gboolean result;
    GError *err;
    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
    gtk_widget_set_sensitive (data, FALSE);
    savebuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (data));
gtk_text_buffer_get_start_iter (savebuffer, &start);
gtk_text_buffer_get_end_iter (savebuffer, &end);
text = gtk_text_buffer_get_text (savebuffer, &start, &end, FALSE);       
gtk_text_buffer_set_modified (savebuffer, FALSE);
gtk_widget_set_sensitive (data, TRUE);

/* set the contents of the file to the text from the buffer */
if (filename != NULL)        
    result = g_file_set_contents (filename, text, -1, &err);
else
    result = g_file_set_contents (filename, text, -1, &err);

if (result == FALSE)
{
    /* error saving file, show message to user */

}        

g_free (text); 
    }
    gtk_widget_destroy (dialog);

}

data points on textview1.

user1464420
  • 89
  • 1
  • 4