/*
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);
}