SimpleText DAY 10 - テキストを保存する
今日はテキストを保存する機能を付け加えましょう。
なお、このプログラムで大切なデータを消してしまったとしても、責任はとれません。
callbacks.cのon_button_save_clickedを見てください。
callbacks.cvoid
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に設定するようにしています。