SimpleText DAY 10 - テキストを保存する

今日はテキストを保存する機能を付け加えましょう。
なお、このプログラムで大切なデータを消してしまったとしても、責任はとれません。

callbacks.con_button_save_clickedを見てください。


callbacks.c

void
on_button_save_clicked( GtkButton *button, gpointer user_data)
{
GError *error = NULL;
gsize size;
GtkTextIter start, end;
GtkTextView *textview = (GtkTextView *) lookup_widget((GtkWidget *)button, (gchar *)"textview");
GtkEntry *entry = (GtkEntry *) lookup_widget((GtkWidget *)button, (gchar *)"entry");

gchar *filename = (gchar *)gtk_entry_get_text(entry);
if(!strlen(filename)) filename = "default.txt";

GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(textview);
gtk_text_buffer_get_start_iter(textbuffer, &start);
gtk_text_buffer_get_end_iter(textbuffer, &end);
gchar *text = gtk_text_buffer_get_text(textbuffer, &start, &end, TRUE);

GIOChannel *fp = g_io_channel_new_file(filename, "w", &error);
g_io_channel_write_chars(fp, text, strlen(text), &size, &error);
g_io_channel_close(fp);
}

ファイルオープンの時の逆なので、特に説明は必要ないと思います。

  • 必要なポインタを取得
  • entryに入力されている文字列(ファイル名)を取得
  • textbufferの文字列を取得
  • ファイルを開いて書き込む

ただ、entryが空欄のときはfilenameをdefault.txtに設定するようにしています。