Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente | |||
programmazione:gtk:catturare_output_di_una_pipe [29/12/2018 - 18:53] Fabio Di Matteo |
programmazione:gtk:catturare_output_di_una_pipe [05/05/2023 - 11:10] (versione attuale) Fabio Di Matteo |
||
---|---|---|---|
Linea 1: | Linea 1: | ||
====== Catturare l'output di una pipe e stamparlo dentro una textview ====== | ====== Catturare l'output di una pipe e stamparlo dentro una textview ====== | ||
- | Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//24/02/2018 - 19:24//** \\ \\ | + | Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 05/05/2023 - 11:09 //** // // |
{{:programmazione:gtk:glib_get_output.png?500|}} | {{:programmazione:gtk:glib_get_output.png?500|}} | ||
Linea 10: | Linea 10: | ||
#include <gtk/gtk.h> | #include <gtk/gtk.h> | ||
- | GObject *myEntry, *myButton, *myTextView, *myProgressBar; | + | GObject *myEntry, *myButton, *myTextView, *myProgressBar, *myScrolledWindow; |
GtkTextBuffer *buffer; | GtkTextBuffer *buffer; | ||
- | GtkTextMark *mark; | + | GtkBuilder *xml; |
void on_mainWindow_delete_event(GtkWidget *widget, gpointer data) | void on_mainWindow_delete_event(GtkWidget *widget, gpointer data) | ||
Linea 21: | Linea 21: | ||
- | void scrollToEnd() | + | void scrollToEnd(GtkWidget *widget, gpointer data) |
{ | { | ||
- | //Per lo scrolling automatico della textView | + | GtkAdjustment * adj=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(myScrolledWindow)); |
- | GtkTextIter iter; | + | gdouble upper=gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)); |
- | GtkTextMark *mark; | + | gtk_adjustment_set_value (GTK_ADJUSTMENT(adj), upper); |
- | gtk_text_buffer_get_end_iter (buffer, &iter); //ricava la posizione finale del testo | + | |
- | gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE); //la salva sul marcatore | + | |
- | mark = gtk_text_buffer_get_mark (buffer, "end"); //riprendo il marcatore "end" | + | |
- | gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark); | + | |
- | gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(myTextView), mark);//scorro la finestra fino al marcatore | + | |
} | } | ||
- | //Semplice funzine che aggiorna la textview | + | //Semplice funzione che aggiorna la textview |
gboolean appendTextView(gchar* out) | gboolean appendTextView(gchar* out) | ||
{ | { | ||
gtk_text_buffer_insert_at_cursor (buffer,out, -1); | gtk_text_buffer_insert_at_cursor (buffer,out, -1); | ||
gtk_text_view_set_buffer (GTK_TEXT_VIEW(myTextView),buffer); | gtk_text_view_set_buffer (GTK_TEXT_VIEW(myTextView),buffer); | ||
- | |||
- | //Scorre la textView alla fine | ||
- | scrollToEnd(); | ||
return FALSE; | return FALSE; | ||
Linea 135: | Linea 126: | ||
printf("Errore nella pipe\n"); | printf("Errore nella pipe\n"); | ||
} | } | ||
+ | |||
} | } | ||
Linea 156: | Linea 148: | ||
{ | { | ||
GError* error = NULL; | GError* error = NULL; | ||
- | gchar* glade_file = g_build_filename("gui.glade", NULL); | + | gchar* glade_file = g_build_filename("gui.ui", NULL); |
- | GtkBuilder *xml; | + | |
GObject *mainWindow ; | GObject *mainWindow ; | ||
buffer=gtk_text_buffer_new (NULL); | buffer=gtk_text_buffer_new (NULL); | ||
Linea 169: | Linea 161: | ||
mainWindow=gtk_builder_get_object (xml,"mainWindow" ); | mainWindow=gtk_builder_get_object (xml,"mainWindow" ); | ||
+ | myScrolledWindow=gtk_builder_get_object (xml,"myScrolledWindow" ); | ||
+ | g_signal_connect (myScrolledWindow, "size-allocate", G_CALLBACK (scrollToEnd), NULL); | ||
myButton=gtk_builder_get_object (xml,"myButton" ); | myButton=gtk_builder_get_object (xml,"myButton" ); | ||
myEntry=gtk_builder_get_object(xml,"myEntry"); | myEntry=gtk_builder_get_object(xml,"myEntry"); | ||
Linea 194: | Linea 188: | ||
return 0; | return 0; | ||
} | } | ||
- | |||
</code> | </code> |
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.