Bonjour,
Je fais appel � vous apr�s des heures de recherche infructueuses!!
J'ai une application GTK dans laquelle est lanc� un timer appelant toutes les 500 ms une fonction qui �crit dans un GtkTextView.
Si je n'essaye pas de scroller automatiquement � la fin, pas de soucis le TextView se rempli. Si j'ajoute les fonctions de scroll (je les ai toutes essay�es!!!!), le timer semble s'arr�ter apr�s la 1ere it�ration
Voici les extrait de code (une partie g�n�r�e par glade) :
D�claration des widgets :
Main avec les timers :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow1); gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow1); GTK_WIDGET_UNSET_FLAGS (scrolledwindow1, GTK_CAN_FOCUS); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); textviewarincout = gtk_text_view_new (); gtk_widget_show (textviewarincout); gtk_container_add (GTK_CONTAINER (scrolledwindow1), textviewarincout); gtk_container_set_border_width (GTK_CONTAINER (textviewarincout), 5); gtk_text_view_set_editable (GTK_TEXT_VIEW (textviewarincout), FALSE);
Callbacks :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 int main(int argc, char *argv[]) { int num; GtkWidget *mainwindow; #ifdef ENABLE_NLS bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif gtk_set_locale(); gtk_init(&argc, &argv); add_pixmap_directory(PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ mainwindow = create_mainwindow(); gtk_widget_show(mainwindow); /* Initialisation des fichiers mmap */ printf("Depart de la simulation\n"); TH_VM_MmapInit(); /* Rafraichissement des discrets de sorties */ g_timeout_add(10, (GSourceFunc) TH_EIUIHM_RefreshOutputDiscretes, NULL); /* Rafraichissement des sorties ARINC */ g_timeout_add(500, (GSourceFunc) TH_EIUIHM_RefreshOutputARINC, NULL); /* Demarrage de la boucle principale */ gtk_main(); return 0; }
Fonction TH_EIUIHM_IOWriteOutputARINC :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 void TH_EIUIHM_RefreshOutputARINC() { int numARINC; for (numARINC = 1; numARINC <= OUT_ARINC_NUMINTS; numARINC++) { TH_EIUIHM_IOWriteOutputARINC(numARINC, rand()); } }
t_ARINCMessage est un unsigned int
g_outputARINC est un GtkTextView*
Merci d'avance pour votre aide.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void TH_EIUIHM_IOWriteOutputARINC(int numARINC, t_ARINCMessage value) { char tmp_str[STRING_REPR_MAX_VALUE]; char tmp_strToAdd[STRING_REPR_MAX_VALUE]; GtkTextIter tmp_textIter; GtkTextBuffer *tmp_textBuffer = NULL; GtkTextMark *tmp_textMark = NULL; /* Preparation de la chaine a ajouter */ TH_EIUIHM_IOARINCMessageToString(value, tmp_str); sprintf(tmp_strToAdd, "BUS %d : %s\n", numARINC, tmp_str); /* Ajout de la nouvelle ligne */ tmp_textBuffer = gtk_text_view_get_buffer(g_outputARINC); gtk_text_buffer_get_end_iter(tmp_textBuffer, &tmp_textIter); gtk_text_buffer_insert(tmp_textBuffer, &tmp_textIter, (gchar *) tmp_strToAdd, -1); gtk_text_view_set_buffer(g_outputARINC, tmp_textBuffer); /* Defile jusqu'a la fin de la zone de texte */ /* TODO defilement automatique a la fin de la zone de texte */ tmp_textMark = gtk_text_buffer_create_mark(tmp_textBuffer, NULL, &tmp_textIter, FALSE); gtk_text_view_scroll_to_mark(g_outputARINC, tmp_textMark, 0, FALSE, 0, 0); }
Partager