Récupérer et afficher donnée d'un ss-programe

cap'tain sheeps -  
 cap'tain sheeps -
Bonjour et merci de votre aide ou de votre simple intention de m'aider.

Mon problème est le suivant: J'aimerais mettre à jour un champ de texte
(Entry en GTK) dans ma fenêtre principale pour qu'il affiche le chemin du fichier que l'utilisateur est allé cherché dans une fenêtre secondaire au programme (un gtk_chooser_dialog).
Le problème est que je ne sais pas comment faire pour mettre à jour la fenêtre principale et plus particulièrerment ce champ de texte.
Existe-t'il un moyen simple de faire résoudre ce problème.

Si ma question n'est pas assez claire, voyez par vous même avec mon code:
.
.
.
#include <stdlib.h>
#include <gtk/gtk.h>
// site pour les widgets:
//http://developer.gnome.org/gtk/2.24/ch02.html
// pour les dialog:
//http://www.gtk-fr.org/wakka.php?wiki=GtkDialog

//Créé la boîte de dialogue qui va nous demander de sélectionner un fichier pour récupérer son chemin
void TraitementBoutonFil(GtkWidget* pWidget, gpointer data);
void TraitementBoutonPrf(GtkWidget* pWidget, gpointer data);
    //à trier
    gchar* cheminFichier;

int main(int argc,char **argv)
{
    //Ouverture de la librairie graphique GTK+
    gtk_init(&argc,&argv);

    //Glossaire des widgets graphiques
    GtkWidget* FenetrePrincipale = NULL;    //Fenêtre principale
    GtkWidget* frame = NULL;                //Frame principale(faisant toute la fenêtre
    GtkWidget* table = NULL;                //Tableau graphique pour placer les éléments

    GtkWidget* LabelBienvenue = NULL;       //Label de présentation
        gchar* TexteBienvenue = NULL;       //Texte associé au label de présentation
    GtkWidget* boxBienvenue = NULL;         //Box contenant l'alignement du label de bienvenue
    GtkWidget* alignementBienvenue = NULL;  //Alignement du label de bienvenue

    GtkWidget* LabelFil = NULL;             //Label de renseignement du fichier de connections
        gchar* TexteFil = NULL;             //Texte associé au label de connections

    GtkWidget* EntryFil = NULL;             //Entry du chemin du fichier de connections

    GtkWidget* BoutonFil = NULL;            //Bouton pour sélectionner le fichier de connections
    GtkWidget* boxFil = NULL;               //Box pour contenir l'alignement du bouton de connections
    GtkWidget* alignementFil = NULL;        //Alignement du bouton des connections

    GtkWidget* LabelPrf = NULL;             //Label de renseignement de la description des connecteurs
        gchar* TextePrf = NULL;             //Texte associé au label de description

    GtkWidget* EntryPrf = NULL;             //Entry du chemin du fichier de définition connecteurs

    GtkWidget* BoutonPrf = NULL;            //Bouton pour sélectionner le fichier de description
    GtkWidget* boxPrf = NULL;               //Box pour contenir l'alignement du bouton de description
    GtkWidget* alignementPrf = NULL;        //Alignement du bouton de description

    //******************************************************************************************
    // Création de la fenêtre
    //******************************************************************************************
        FenetrePrincipale = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(FenetrePrincipale), "delete-event", G_CALLBACK(gtk_main_quit), NULL);

        //Titre de la fenêtre
        gtk_window_set_title(GTK_WINDOW(FenetrePrincipale), "Generateur de code Winapass5000");

        //Taille de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(FenetrePrincipale), 700, 500);

        //Positionnement de la fenêtre
        gtk_window_set_position(GTK_WINDOW(FenetrePrincipale),GTK_WIN_POS_CENTER);

    //******************************************************************************************
    // Création de la hiérarchie graphique de la fenêtre
    //******************************************************************************************
        frame = gtk_frame_new ("");
        table = gtk_table_new(8, 4, TRUE);
        gtk_container_add (GTK_CONTAINER (frame), table);

        //***************************************************
        //Label de bienvenue
        //***************************************************
            //Formalisation du texte
            TexteBienvenue = g_locale_to_utf8( "<span size=\"xx-large\"><b>Générateur Winapass5000</b></span>",
                                              -1, NULL, NULL, NULL);
            //Création du label
            LabelBienvenue = gtk_label_new(TexteBienvenue);

            //Libération de la mémoire
            g_free(TexteBienvenue);

            //Formalisation grâce aux balises pango
            gtk_label_set_use_markup(GTK_LABEL(LabelBienvenue), TRUE);

            //Création de la box pour contenir l'alignement du label
            boxBienvenue = gtk_vbox_new(TRUE, 1);

            //Création de l'alignement du label
            alignementBienvenue = gtk_alignment_new(0.5, 0, 0, 0);

            //Hiérarchie des composants graphiques pour le label de bienvenue
            gtk_container_add (GTK_CONTAINER(alignementBienvenue), LabelBienvenue);
            gtk_container_add (GTK_CONTAINER (boxBienvenue), alignementBienvenue);
            gtk_table_attach_defaults(GTK_TABLE(table), boxBienvenue, 0, 4, 0, 1 );

        //***************************************************
        //Label de renseignement du fichier de connections
        //***************************************************
            //Formalisation du texte
            TexteFil = g_locale_to_utf8( "Veuillez renseigner le fichier de connections (fichier.FIL) :",
                                        -1, NULL, NULL, NULL);
            //Création du label
            LabelFil = gtk_label_new(TexteFil);

            //Libération de la mémoire
            g_free(TexteFil);

            //Placement du label dans le tableau
            gtk_table_attach_defaults(GTK_TABLE(table), LabelFil, 0, 3, 1, 2);

        //***************************************************
        //Bouton de renseignement du fichier de connections
        //***************************************************
            //Création du bouton
            BoutonFil = gtk_button_new_with_mnemonic("Parcourir");

            //Création de la box pour contenir l'alignement du bouton
            boxFil = gtk_vbox_new(TRUE, 1);

            //Création de l'alignement du bouton
            alignementFil = gtk_alignment_new(0, 0.5, 0, 0);

            //Hiérarchie des composants graphiques
            gtk_container_add (GTK_CONTAINER(alignementFil), BoutonFil);
            gtk_container_add (GTK_CONTAINER (boxFil), alignementFil);
            gtk_table_attach_defaults(GTK_TABLE(table), boxFil, 3, 4, 1, 2);

            //Ecoute du bouton
            g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
            g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBoutonFil), NULL);

        //***************************************************
        //Entry du chemin du fichier de connections
        //***************************************************
            //Création de l'entry
            EntryFil = gtk_entry_new();

            //Placement du label dans le tableau
            gtk_table_attach_defaults(GTK_TABLE(table), EntryFil, 1, 3, 2, 3);

        //************************************************************
        //Label de renseignement du fichier de définition connecteurs
        //************************************************************
            //Formalisation du texte
            TextePrf = g_locale_to_utf8("Veuillez renseigner le fichier de définition des connecteurs (fichier.PRF) :",
                                        -1, NULL, NULL, NULL);
            //Création du label
            LabelPrf = gtk_label_new(TextePrf);

            //Libération de la mémoire
            g_free(TextePrf);

            //Placement du label dans le tableau
            gtk_table_attach_defaults(GTK_TABLE(table), LabelPrf, 0, 3, 3, 4);

        //*************************************************************
        //Bouton de renseignement du fichier de définition connecteurs
        //*************************************************************
            //Création du bouton
            BoutonPrf = gtk_button_new_with_mnemonic("Parcourir");

            //Création de la box pour contenir l'alignement du bouton
            boxPrf = gtk_vbox_new(TRUE, 1);

            //Création de l'alignement du bouton
            alignementPrf = gtk_alignment_new(0, 0.5, 0, 0);

            //Hiérarchie des composants graphiques
            gtk_container_add (GTK_CONTAINER(alignementPrf), BoutonPrf);
            gtk_container_add (GTK_CONTAINER (boxPrf), alignementPrf);
            gtk_table_attach_defaults(GTK_TABLE(table), boxPrf, 3, 4, 3, 4);

            //Ecoute du bouton
            g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL);
            g_signal_connect(G_OBJECT(BoutonPrf), "clicked", G_CALLBACK(TraitementBoutonPrf), NULL);

        //*************************************************************
        //Entry du chemin du fichier de définition connecteurs
        //*************************************************************
            //Création de l'entry
            EntryPrf = gtk_entry_new();

            //Placement du label dans le tableau
            gtk_table_attach_defaults(GTK_TABLE(table), EntryPrf, 1, 3, 4, 5);

        //***************************************************
        //Ajout des composants dans la fenêtre et affichage
        //***************************************************
            gtk_container_add(GTK_CONTAINER(FenetrePrincipale),frame);
            gtk_widget_show_all(FenetrePrincipale);

    gtk_main();

    return EXIT_SUCCESS;
}

//là faudrait faire un tableau de char* pour récupérer le nom des fichiers (mouais bof)
void TraitementBoutonFil(GtkWidget* pWidget, gpointer donnee)
{
    //Glossaire des widgets graphiques de TraitementBoutonFil
        GtkWidget* FenetreSelection;
        GtkWidget* FenTestChemin;
        GtkWidget* FenetreParent;

    FenetreParent = GTK_WIDGET(donnee);

    //Creation de la fenetre de selection
    FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN,
                                                    GTK_RESPONSE_OK, NULL);
    //On limite les actions a cette fenetre
    gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);

    //Affichage de la fenetre
    switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
    {
        case GTK_RESPONSE_OK:
            //Recuperation du chemin
            cheminFichier = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));
            gtk_editable_insert_text("")//mouais non hein!

            //après ca osef un peu... de toute facon ca va changer
            FenTestChemin = gtk_message_dialog_new(GTK_WINDOW(FenetreSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,
                                             GTK_BUTTONS_OK, "Chemin du fichier :\n%s", cheminFichier);
            gtk_dialog_run(GTK_DIALOG(FenTestChemin));
            gtk_widget_destroy(FenTestChemin);
        break;
        default:
            //[aucune instruction]
        break;
    }
    gtk_widget_destroy(FenetreSelection);
}

void TraitementBoutonPrf(GtkWidget* pWidget, gpointer donnee)
{
    //Glossaire des widgets graphiques de TraitementBoutonPrf
        GtkWidget* FenetreSelection;
        GtkWidget* FenTestChemin;
        GtkWidget* FenetreParent;
        gchar* cheminFichier;

    FenetreParent = GTK_WIDGET(donnee);

    //Creation de la fenetre de selection
    FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN,
                                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN,
                                                    GTK_RESPONSE_OK, NULL);
    //On limite les actions a cette fenetre
    gtk_window_set_modal(GTK_WINDOW(FenetreSelection), TRUE);

    //Affichage de la fenetre
    switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))
    {
        case GTK_RESPONSE_OK:
            //Recuperation du chemin
            cheminFichier = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));

            //après ca osef un peu... de toute facon ca va changer
            FenTestChemin = gtk_message_dialog_new(GTK_WINDOW(FenetreSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO,
                                             GTK_BUTTONS_OK, "Chemin du fichier :\n%s", cheminFichier);
            gtk_dialog_run(GTK_DIALOG(FenTestChemin));
            gtk_widget_destroy(FenTestChemin);
            g_free(cheminFichier);
        break;
        default:
            //[aucune instruction]
        break;
    }

    gtk_widget_destroy(FenetreSelection);
}



2 réponses

cap'tain sheeps
 
up, s'il vous plait =)
0
cap'tain sheeps
 
Bah tout simplement en mettant le chemin du fichier en paramètre dans l'écouteur en fait. J'aurais du y penser avant.
0