Bonjour!
Afin de lire les données que m'envoie un programme, j'ai plagier le premier exemple donné là: http://www.gtkmm.org/docs/gtkmm-2.4/...-examples.html.
Les données sont donc affichées grace à un Gtk::TreeModel - Liststore.
Mon seul souci est que le rafraichissement n'est pas automatique et qu'il me faut passer la souris au dessus de la fenêtre pour que celle-ci se mette à jour.
D'où l'intitulé de cette discussion....
Voici le .cc de la fenêtre en question:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "CIncubateur_GUI.h"
#include "CTableConnect.h"
 
/*****************************************************
**  Declaration des membres static                  **
******************************************************/
 
void CIncubateur_GUI::_th_tableconect(CIncubateur_GUI* p){
    p->_initiate();
}
 
/******************************************************
**  Fonctions public                                 **
*******************************************************/
 
CIncubateur_GUI::CIncubateur_GUI()
:m_Sval(0),m_Ival(0),m_Qval(0),m_quit("quit"),m_initiate("Initiate"),m_restart("Re-start"){
 
    /*  Mise en place du contexte de thread */
    if(!g_thread_supported())g_thread_init(NULL);
 
    /* Mise en page */
    set_title("Incubateur version I");
    set_border_width(10);
    set_default_size(500,350);
 
    /*  Ajout des box   */
    add(m_vbox1);
 
    /* Ajout de m_treeview dans m_scrolledwindow
       et parametrage de la vue automatique  */
    m_scrolledwindow.add(m_treeview);
    m_scrolledwindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
 
    /*  Rempli les box  */
    m_vbox1.pack_start(m_scrolledwindow);
    m_vbox1.pack_start(m_buttonbox,Gtk::PACK_SHRINK);
 
    /*  Rempli les buttonbox    */
    m_buttonbox.pack_start(m_initiate,Gtk::PACK_SHRINK);
    m_buttonbox.pack_start(m_restart,Gtk::PACK_SHRINK);
    m_buttonbox.pack_start(m_quit,Gtk::PACK_SHRINK);
 
    /*  creation des treemodel  */
    m_reftreemodel=Gtk::ListStore::create(m_columns);
    m_treeview.set_model(m_reftreemodel);
 
    /*  Rempli les treemodel    */
    Gtk::TreeModel::Row row=*(m_reftreemodel->append());
    m_rowS=row;
    m_rowS[m_columns.m_signal]="S";
    m_rowS[m_columns.m_count_signal]=m_Sval;
    m_rowS[m_columns.m_percentage]=0;
 
    row=*(m_reftreemodel->append());
    m_rowI=row;
    m_rowI[m_columns.m_signal]="I";
    m_rowI[m_columns.m_count_signal]=m_Ival;
    m_rowI[m_columns.m_percentage]=0;
 
    row=*(m_reftreemodel->append());
    m_rowQ=row;
    m_rowQ[m_columns.m_signal]="Q";
    m_rowQ[m_columns.m_count_signal]=m_Qval;
    m_rowQ[m_columns.m_percentage]=0;
 
    /*  Mise en page des treemodel  */
    m_treeview.append_column("O?",m_columns.m_signal);
    m_treeview.append_column("nbr",m_columns.m_count_signal);
    /*  Affiche une barre de progression au lieu de la simple valeur    */
    //!!!!!!!!!!!CF DOC pour un fonctionement normal!!!!!!!!!!!!!!!!!
    Gtk::CellRendererProgress* cell=Gtk::manage(new Gtk::CellRendererProgress);
    int col_count=m_treeview.append_column("percentage",*cell);
    Gtk::TreeViewColumn* pcol=m_treeview.get_column(col_count-1);
    if(pcol){
        #ifdef GLIBMM_PROPERTIES_ENABLED
        pcol->add_attribute(cell->property_value(),m_columns.m_percentage);
        #else
        pcol->add_attribute(*cell, "value",m_columns.m_percentage);
        #endif
    }
 
    /*  Connection des boutton  */
    m_quit.signal_clicked().connect(sigc::mem_fun(*this,&CIncubateur_GUI::_on_quit));
    m_initiate.signal_clicked().connect(sigc::mem_fun(*this,&CIncubateur_GUI::_on_initiate));
    m_restart.signal_clicked().connect(sigc::mem_fun(*this,&CIncubateur_GUI::_on_restart));
 
    /*  Affiche le tout  */
    show_all_children();
 
}
CIncubateur_GUI::~CIncubateur_GUI(){
    delete m_ptableconnect;
}
 
void CIncubateur_GUI::_write(const int& sig,const bool& inc){
 
    switch(sig){
        case S:m_Sval++;
        m_rowS[m_columns.m_count_signal]=m_Sval;break;
 
        case I:m_Ival++;
        m_rowI[m_columns.m_count_signal]=m_Ival;break;
 
        case Q:m_Qval++;
        m_rowQ[m_columns.m_count_signal]=m_Qval;break;
 
        default:std::cout<<"Erreur majeure levée dans CIncubateur_GUI::_write()\n";
        break;
    }
}
 
/***************************************************
**  Fonction protected                            **
****************************************************/
 
void CIncubateur_GUI::_on_quit(){
    hide();
}
void CIncubateur_GUI::_on_initiate(){
    m_pth_tableconnect=g_thread_create(GThreadFunc(_th_tableconect),this,true,NULL);
}
void CIncubateur_GUI::_on_restart(){
    delete m_ptableconnect;
    //g_thread_join(m_pth_tableconnect);
 
    m_pth_tableconnect=g_thread_create(GThreadFunc(_th_tableconect),this,true,NULL);
}
 
/*  Demarrage de CTableConnect  */
void CIncubateur_GUI::_initiate(){
    m_ptableconnect=new CTableConnect(this);
    m_ptableconnect->_initiate();
}