Strumenti Utente

Strumenti Sito


programmazione:gtk:catturare_output_di_una_pipe

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

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>​

programmazione/gtk/catturare_output_di_una_pipe.txt · Ultima modifica: 05/05/2023 - 11:10 da Fabio Di Matteo