/*
  Zone de texte multiligne
  http://www.gtk-fr.org/wakka.php?wiki=LesZonesDeTexte
  gcc `pkg-config --cflags --libs gtk+-2.0` -o 14b 14b.c &&./14b
*/

#include <stdlib.h>
#include <gtk/gtk.h>

void OnShow(GtkWidget *pWidget, gpointer *data);

int main(int argc, char* argv[])
{
	GtkWidget* pWindow;
	GtkWidget* pBox;
	GtkWidget* pTextView;
	GtkWidget* pButton;

	gtk_init(&argc, &argv);
	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
	gtk_window_set_title(GTK_WINDOW(pWindow), "GtkTextView");
	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

	pBox = gtk_vbox_new(FALSE, 5);
	gtk_container_add(GTK_CONTAINER(pWindow), pBox);

	pTextView = gtk_text_view_new();
	gtk_box_pack_start(GTK_BOX(pBox), pTextView, TRUE, TRUE, 0);

	pButton=gtk_button_new_with_label("Afficher");
	gtk_box_pack_start(GTK_BOX(pBox),pButton,FALSE,FALSE,0);
	g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(OnShow), (gpointer) pTextView);

	gtk_widget_show_all(pWindow);

	gtk_main();

	return EXIT_SUCCESS;
}

void OnShow(GtkWidget *pWidget, gpointer *data)
{
	GtkWidget *pDialog;
	GtkWidget *pTextView;
	GtkTextBuffer* pTextBuffer;
	GtkTextIter iStart;
	GtkTextIter iEnd;
	gchar* sBuffer;

	pTextView = GTK_WIDGET(data);

	/* recupere le buffer */
	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
	/* recupere l'origine du buffer */
	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
	/* recupere la fin du buffer */
	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);

	/* copie le contenu du buffer dans une variable */
	sBuffer = gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE);

	/* affiche le texte dans une boite de dialogue. */
	pDialog = gtk_message_dialog_new(NULL,
		GTK_DIALOG_MODAL,
		GTK_MESSAGE_INFO,
		GTK_BUTTONS_OK,
		"Votre texte :\n%s", sBuffer);

	gtk_dialog_run(GTK_DIALOG(pDialog));
	gtk_widget_destroy(pDialog);

	/* libere la memoire */
	g_free(sBuffer);
}