Problème header
Résolu/Fermé34 réponses
Vicking54
Messages postés
89
Date d'inscription
lundi 11 octobre 2010
Statut
Membre
Dernière intervention
17 mai 2011
26
17 mai 2011 à 15:30
17 mai 2011 à 15:30
bonjour,
Pourrais tu mettre ton .h et ton .c car peut être que tu as un autre soucis, surtout le .h car je me pose des questions il faudrait que je vois le code
Pourrais tu mettre ton .h et ton .c car peut être que tu as un autre soucis, surtout le .h car je me pose des questions il faudrait que je vois le code
C'est un peu long je te préviens, surtout pour le .c:
Le generateur.h:
Le generateur.c:
et enfin le main.cpp:
Le generateur.h:
#include <stdlib.h> #include <gtk/gtk.h> #include <stdio.h> #include <string.h> #define TAILLE_MAX 1000 #define TAILLE_MAX_PETIT 20 extern char chaine[TAILLE_MAX]; //******************************************************************************** //Partie interface //******************************************************************************** //paramètres d'isolement typedef struct { const gchar* Iso1; const gchar* Iso2; const gchar* Iso3; const gchar* Iso4; const gchar* Iso5; } Isolement; Isolement isolement; //paramètres de continuité typedef struct { const gchar* Conti1; const gchar* Conti2; const gchar* Conti3; const gchar* Conti4; const gchar* Conti5; } Continuite; Continuite continuite; //Génère le code du programme winpass void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf, Continuite continuite, Isolement isolement); //******************************************************************************** //partie générateur //******************************************************************************** //retourne le nombre de lignes d'un fichier int tailleLignesFichier (FILE* fichier); //enregistrement d'une connection typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char contact[TAILLE_MAX_PETIT]; } connection; //création du type qui savegardera les connections typedef connection typeTableauConnection [TAILLE_MAX]; //enregistrement d'une définition de connecteur typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char typeConnecteur[TAILLE_MAX_PETIT]; } defConnection; //création du type qui savegardera les définition des connecteurs typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX]; //traitement d'un fichier des connections de type fichier.FIL int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection); //traitement d'un fichier des définition de connecteurs de type fichier.PRF int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur);
Le generateur.c:
#include "generateur.h" int traitementFichierDesConnections(char * cheminFichierFil, typeTableauConnection tableauConnections); void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf, Continuite continuite, Isolement isolement) { FILE* fichierTest = fopen("test", "w+"); cheminFichierFil = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.FIL", -1, NULL, NULL, NULL); cheminFichierPrf = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.PRF", -1, NULL, NULL, NULL); //*********************************************************************************************************** //fichier FIL //*********************************************************************************************************** int nb_connections; typeTableauConnection tableauConnections; nb_connections = traitementFichierDesConnections(cheminFichierFil, tableauConnections); int i; for(i = 0; i < nb_connections; i++) { fprintf(fichierTest,"\n%s : %s",tableauConnections[i].nomConnecteur, tableauConnections[i].contact); } //*********************************************************************************************************** //fichier PRF //*********************************************************************************************************** typeTableauDefinitionConnecteur tableauDefinitionConnecteur; int ligneligne = traitementFichierDefinitionConnecteurs(cheminFichierPrf, tableauDefinitionConnecteur); int it; fprintf(fichierTest,"\n\ndescription des connecteurs : \n"); for(it = 0; it < ligneligne; it++) { fprintf(fichierTest,"\n%s : %s",tableauDefinitionConnecteur[it].nomConnecteur, tableauDefinitionConnecteur[it].typeConnecteur); } int fclose(FILE* fichierTest); //**************************************************************** //Affichage du message de succès de la génération du fichier //**************************************************************** GtkWidget* FenetreGeneration = NULL; GtkWidget* tableGen = NULL; GtkWidget* LabelSucces = NULL; gchar* TexteSucces = NULL; GtkWidget* BoutonOK = NULL; FenetreGeneration = gtk_dialog_new(); tableGen = gtk_table_new(2, 6, TRUE); gtk_window_set_title(GTK_WINDOW(FenetreGeneration), "Generation accomplie"); TexteSucces =g_locale_to_utf8( "Génération du fichier accomplie avec succès", -1, NULL, NULL, NULL); LabelSucces = gtk_label_new (TexteSucces); gtk_table_attach_defaults(GTK_TABLE(tableGen), LabelSucces, 1, 5, 0, 1); BoutonOK = gtk_button_new_with_label("OK"); gtk_signal_connect_object (GTK_OBJECT (BoutonOK), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), FenetreGeneration); gtk_table_attach_defaults(GTK_TABLE(tableGen), BoutonOK, 2, 4, 1, 2); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(FenetreGeneration)->vbox), tableGen); gtk_widget_show_all (FenetreGeneration); } //************************************************************************************************************** int tailleLignesFichier (FILE* fichier) { int taille = 0; while( fgets (chaine, TAILLE_MAX, fichier) != NULL) { taille++; } //remise du curseur au début du fichier fseek(fichier, 0, SEEK_SET); return taille; } //************************************************************************************************************** int tailleLigneDescConnecteur (FILE* fichier) { int ligne=0; int trouve=0; char buffer[TAILLE_MAX]; while(fgets(buffer, sizeof buffer, fichier)) { ligne++; if(strstr(buffer,"EQUIPEMENT DE BASE")) { trouve=1; break; } } if(trouve) { //remise du curseur au début du fichier fseek(fichier, 0, SEEK_SET); return ligne - 1; } else { return 0; } } //************************************************************************************************************** int traitementFichierDesConnections (char * cheminFichierFil, typeTableauConnection tableauConnections) { int iLigne = 0; //itérateur pour les lignes (vérifier le 1 peut-etre 0) int i = 0; //itérateur pour les diférentes connections dans le tableau int j = 0; //itérateur pour le nombre de caractère des données récupérées int iSaut; //itérateur pour sauter les caractères indésirés int testPremiereBoucle; //booléen pour savoir si l'on doit sauter le premier caractère ou non char carac; //caractère renvoyé par les fputc //ouverture du fichier en lecture FILE* fichierFil = fopen(cheminFichierFil, "r"); if(fichierFil != NULL) { //test du nombre de lignes const int NB_LIGNES = tailleLignesFichier (fichierFil); while(iLigne < NB_LIGNES) { //******************************************* //traitement d'une ligne //******************************************* iSaut = 0; testPremiereBoucle = 1; //tant que l'on ne trouvons pas le marqueur de fin de ligne on continue le traitement while((carac=fgetc (fichierFil)) != 10)//10 étant l'entier associé au caractère "retour à la ligne" { j = 0; //on saute les renseignements qui ne nous interresent pas while(iSaut < 10) { carac = fgetc (fichierFil); //on ne valide le saut d'une colonne que lorsque l'on rencontre le caractère "|" if(carac == 124)//124 étant l'entier associé au caractère "|" { iSaut++; } } //si il s'agit de la première boucle de la ligne, on doit sauter un dernier caractère if(testPremiereBoucle == 1) { carac = fgetc (fichierFil); testPremiereBoucle = 0; } //on stocke dans le tableau le nom du connecteur while(carac != 47)//47 étant l'entier associé au caractère "/" { tableauConnections[i].nomConnecteur[j]=carac; j++; carac = fgetc (fichierFil); } carac = fgetc (fichierFil); j = 0 ; //on stocke dans le tableau le contact while(carac != 124) { tableauConnections[i].contact[j]=carac; j++; carac = fgetc (fichierFil); } i++; } iLigne++; } } else { printf("\nerreur \x85 l'ouverture du fichier %s", cheminFichierFil); } //fermeture du fichier int fclose(FILE* fichierFil); //on retourne le nombre de connections return i; } //************************************************************************************************************** int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur) { long iLigne = 0; //itérateur pour les lignes int i = 0; //itérateur pour les connections int j; //itérateur pour le nombre de caractère des données récupérées char carac; //caractère renvoyé par les fputc //ouverture du fichier en lecture FILE* fichierPrf = fopen(nomFichierPrf, "r"); if(fichierPrf != NULL) { //test du nombre de lignes const int NB_LIGNES = tailleLigneDescConnecteur(fichierPrf); while(iLigne < NB_LIGNES) { //******************************************* //traitement d'une ligne //******************************************* if (fgetc (fichierPrf) != 179) { while((fgetc (fichierPrf)) != 10); } else { int iterator; //on saute les caractères intiles for (iterator = 0; iterator < 7; iterator++) { carac = fgetc(fichierPrf); } if(carac == 32) { //ligne vide donc aucun traitement } else { j = 0; while(carac != 32) { //on stocke dans le tableau le nom du connecteur tableauDefinitionConnecteur[i].nomConnecteur[j] = carac; j++; carac = fgetc (fichierPrf); } for (iterator = 0; iterator < 3; iterator++) { //on saute les caractères intiles carac = fgetc (fichierPrf); } j = 0; while(carac != 32) { //on stocke dans le tableau le nom du types du connecteur tableauDefinitionConnecteur[i].typeConnecteur[j] = carac; j++; carac = fgetc (fichierPrf); } i++; } while((fgetc (fichierPrf)) != 10); } iLigne++; } } else { printf("\nerreur \x85 l'ouverture du fichier %s", nomFichierPrf); } //fermeture du fichier int fclose(FILE* fichierPrf); //on retourne le nombre de définitions de connecteurs return i; }
et enfin le main.cpp:
#include "generateur.c" //ATTENTION ! ! ! //chemin du fichier des connections //gchar* cheminFichierFil = NULL; //chemin du fichier des définitions de connecteurs gchar* cheminFichierFil = NULL; gchar* cheminFichierPrf = NULL; //Créé la boîte de dialogue nous permettant de sélectionner un fichier.FIL pour récupérer son chemin void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil); GtkWidget* EntryFil = NULL; //Entry du chemin du fichier des connections //Créé la boîte de dialogue nous permettant de sélectionner un fichier.PRF pour récupérer son chemin void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf); GtkWidget* EntryPrf = NULL; //Entry du chemin du fichier des définitions de connecteurs //Créé la boîte de dialogue nous permettant de modifier les paramètres de continuité void TraitementBoutonConti(GtkWidget* pWidget, gpointer data); //entrys des paramètres de continuité GtkWidget* EntryConti1= NULL; GtkWidget* EntryConti2= NULL; GtkWidget* EntryConti3= NULL; GtkWidget* EntryConti4= NULL; GtkWidget* EntryConti5= NULL; //Créé la boîte de dialogue nous permettant de modifier les paramètres d'isolement void TraitementBoutonIso(GtkWidget* pWidget, gpointer data); //entrys des paramètres d'isolement GtkWidget* EntryIso1= NULL; GtkWidget* EntryIso2= NULL; GtkWidget* EntryIso3= NULL; GtkWidget* EntryIso4= NULL; GtkWidget* EntryIso5= NULL; //Ferme le programme void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale); 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* 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* 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 GtkWidget* BoutonConti = NULL; //Bouton pour modifier les paramètres de continuité gchar* TexteConti = NULL; //Texte associé au bouton de continuité GtkWidget* boxConti = NULL; //Box pour contenir l'alignement du bouton de continuité GtkWidget* alignementConti = NULL; //Alignement du bouton de continuité GtkWidget* BoutonIso = NULL; //Bouton pour modifier les paramètres d'isolement gchar* TexteIso = NULL; //Texte associé au bouton d'isolement GtkWidget* boxIso = NULL; //Box pour contenir l'alignement du bouton d'isolement GtkWidget* alignementIso = NULL; //Alignement du bouton d'isolement GtkWidget* BoutonGen = NULL; //Bouton pour générer le code winpass gchar* TexteGen = NULL; //Texte associé au bouton de génération GtkWidget* boxGen = NULL; //Box pour contenir l'alignement du bouton de génération GtkWidget* alignementGen = NULL; //Alignement du bouton de génération GtkWidget* BoutonClose = NULL; //Bouton pour fermer le programme GtkWidget* boxClose = NULL; //Box pour contenir l'alignement du bouton de fermeture GtkWidget* alignementClose = NULL; //Alignement du bouton de fermeture //initialisation des paramètres de continuité continuite.Conti1 = "default"; continuite.Conti2 = "default"; continuite.Conti3 = "default"; continuite.Conti4 = "default"; continuite.Conti5 = "default"; //initialisation des paramètres d'isolement isolement.Iso1 = "default"; isolement.Iso2 = "default"; isolement.Iso3 = "default"; isolement.Iso4 = "default"; isolement.Iso5 = "default"; //initialisation du chemin des fichiers gchar* InitChemin =g_locale_to_utf8( "Chemin du fichier...", -1, NULL, NULL, NULL); cheminFichierFil = InitChemin; cheminFichierPrf = InitChemin; //****************************************************************************************** // 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 Winapss5000"); //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, 6, 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, 6, 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, 4, 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, 4, 5, 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(); //initialisation du texte de l'entry gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil); //Placement de l'entry dans le tableau gtk_table_attach_defaults(GTK_TABLE(table), EntryFil, 1, 5, 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, 4, 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, 4, 5, 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(); //initialisation du texte de l'entry gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf); //Placement de l'entry dans le tableau gtk_table_attach_defaults(GTK_TABLE(table), EntryPrf, 1, 5, 4, 5); //************************************************************* //Bouton de paramètre de continuité //************************************************************* //Création du bouton TexteConti = g_locale_to_utf8("Paramètres de continuité",-1, NULL, NULL, NULL); BoutonConti = gtk_button_new_with_label(TexteConti); //Création de la box pour contenir l'alignement du bouton boxConti = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementConti = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementConti), BoutonConti); gtk_container_add (GTK_CONTAINER (boxConti), alignementConti); gtk_table_attach_defaults(GTK_TABLE(table), boxConti, 2, 5, 5, 6); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonConti), "clicked", G_CALLBACK(TraitementBoutonConti), NULL); //************************************************************* //Bouton de paramètre d'isolement //************************************************************* //Création du bouton TexteIso = g_locale_to_utf8("Paramètres d'isolement",-1, NULL, NULL, NULL); BoutonIso = gtk_button_new_with_label(TexteIso); //Création de la box pour contenir l'alignement du bouton boxIso = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementIso = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementIso), BoutonIso); gtk_container_add (GTK_CONTAINER (boxIso), alignementIso); gtk_table_attach_defaults(GTK_TABLE(table), boxIso, 2, 5, 6, 7); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonIso), "clicked", G_CALLBACK(TraitementBoutonIso), NULL); //************************************************************* //Bouton de génération du code winpass //************************************************************* //Création du bouton TexteGen = g_locale_to_utf8("Générer",-1, NULL, NULL, NULL); BoutonGen = gtk_button_new_with_label(TexteGen); //Création de la box pour contenir l'alignement du bouton boxGen = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementGen = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementGen), BoutonGen); gtk_container_add (GTK_CONTAINER (boxGen), alignementGen); gtk_table_attach_defaults(GTK_TABLE(table), boxGen, 4, 5, 7, 8); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL); //************************************************************* //Bouton de fermeture du programme //************************************************************* //Création du bouton BoutonClose = gtk_button_new_with_label("Fermer"); //Création de la box pour contenir l'alignement du bouton boxClose = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementClose = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementClose), BoutonClose); gtk_container_add (GTK_CONTAINER (boxClose), alignementClose); gtk_table_attach_defaults(GTK_TABLE(table), boxClose, 5, 6, 7, 8); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonClose), "clicked", G_CALLBACK(TraitementBoutonClose), FenetrePrincipale); //*************************************************** //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; } //**************************************************************************** //Traitement du bouton "Parcourir" du fichier de connections //**************************************************************************** void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil) { //Glossaire des widgets graphiques de TraitementBoutonFil GtkWidget* FenetreSelection; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN, "Ouvrir", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, 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 cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection)); gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil); break; default: //[aucune instruction] break; } gtk_widget_destroy(FenetreSelection); } //**************************************************************************** //Traitement du bouton "Parcourir" du fichier de définition des connecteurs //**************************************************************************** void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf) { //Glossaire des widgets graphiques de TraitementBoutonPrf GtkWidget* FenetreSelection; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN, "Ouvrir", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL,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 cheminFichierPrf = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection)); gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf); break; default: //[aucune instruction] break; } gtk_widget_destroy(FenetreSelection); } //**************************************************************************** //Traitement du bouton des paramètres de continuité //**************************************************************************** void TraitementBoutonConti(GtkWidget* pWidget, gpointer data) { //Glossaire des widgets graphiques de TraitementBoutonConti GtkWidget* FenetreConti; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreConti = gtk_dialog_new_with_buttons( "Parametres de continuite", GTK_WINDOW(FenetreParent), GTK_DIALOG_DESTROY_WITH_PARENT, "OK", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, NULL); //********************************************************* //interface de la denêtre des paramètres de continuité //********************************************************* //Glossaire GtkWidget* frameConti = NULL; GtkWidget* tableConti = NULL; GtkWidget* LabelConti1= NULL; GtkWidget* LabelConti2= NULL; GtkWidget* LabelConti3= NULL; GtkWidget* LabelConti4= NULL; GtkWidget* LabelConti5= NULL; //mise en page des widgets //Formalisation du texte frameConti = gtk_frame_new (""); tableConti = gtk_table_new(6, 3, TRUE); //labels LabelConti1 = gtk_label_new("Resistance min :"); LabelConti2 = gtk_label_new("Resistance max :"); LabelConti3 = gtk_label_new("Courant de mesure :"); LabelConti4 = gtk_label_new("Tension max :"); LabelConti5 = gtk_label_new("Temps d'application :"); //entrys EntryConti1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti1), continuite.Conti1); EntryConti2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti2), continuite.Conti2); EntryConti3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti3), continuite.Conti3); EntryConti4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti4), continuite.Conti4); EntryConti5 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti5), continuite.Conti5); //Placement des éléments dans le tableau gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti1, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti1, 2, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti2, 0, 2, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti2, 2, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti3, 0, 2, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti3, 2, 3, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti4, 0, 2, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti4, 2, 3, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti5, 0, 2, 4, 5); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti5, 2, 3, 4, 5); //Hiérarchie des composants graphiques gtk_container_add(GTK_CONTAINER (frameConti), tableConti); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreConti)->vbox),frameConti); gtk_widget_show_all(FenetreConti); //Affichage de la fenetre switch(gtk_dialog_run(GTK_DIALOG(FenetreConti))) { case GTK_RESPONSE_OK: continuite.Conti1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti1)),-1, NULL, NULL, NULL); continuite.Conti2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti2)),-1, NULL, NULL, NULL); continuite.Conti3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti3)),-1, NULL, NULL, NULL); continuite.Conti4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti4)),-1, NULL, NULL, NULL); continuite.Conti5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti5)),-1, NULL, NULL, NULL); break; default: continuite.Conti1 = "default"; continuite.Conti2 = "default"; continuite.Conti3 = "default"; continuite.Conti4 = "default"; continuite.Conti5 = "default"; break; } gtk_widget_destroy(FenetreConti); } //**************************************************************************** //Traitement du bouton des paramètres d'isolement //**************************************************************************** void TraitementBoutonIso(GtkWidget* pWidget, gpointer data) { //Glossaire des widgets graphiques de TraitementBoutonIso GtkWidget* FenetreIso; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreIso = gtk_dialog_new_with_buttons( "Parametres d'isolement", GTK_WINDOW(FenetreParent), GTK_DIALOG_DESTROY_WITH_PARENT, "OK", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, NULL); //********************************************************* //interface de la denêtre des paramètres d'isolement //********************************************************* //Glossaire GtkWidget* frameIso = NULL; GtkWidget* tableIso = NULL; GtkWidget* LabelIso1= NULL; GtkWidget* LabelIso2= NULL; GtkWidget* LabelIso3= NULL; GtkWidget* LabelIso4= NULL; GtkWidget* LabelIso5= NULL; //mise en page des widgets //Formalisation du texte frameIso = gtk_frame_new (""); tableIso = gtk_table_new(6, 3, TRUE); //labels LabelIso1 = gtk_label_new("Resistance min :"); LabelIso2 = gtk_label_new("Tension d'isolement :"); LabelIso3 = gtk_label_new("Courant de claquage :"); LabelIso4 = gtk_label_new("Temps de montee :"); LabelIso5 = gtk_label_new("Temps d'application :"); //entrys EntryIso1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso1), isolement.Iso1); EntryIso2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso2), isolement.Iso2); EntryIso3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso3), isolement.Iso3); EntryIso4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso4), isolement.Iso4); EntryIso5 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso5), isolement.Iso5); //Placement des éléments dans le tableau gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso1, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso1, 2, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso2, 0, 2, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso2, 2, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso3, 0, 2, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso3, 2, 3, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso4, 0, 2, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso4, 2, 3, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso5, 0, 2, 4, 5); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso5, 2, 3, 4, 5); //Hiérarchie des composants graphiques gtk_container_add(GTK_CONTAINER (frameIso), tableIso); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreIso)->vbox),frameIso); gtk_widget_show_all(FenetreIso); //Affichage de la fenetre switch(gtk_dialog_run(GTK_DIALOG(FenetreIso))) { case GTK_RESPONSE_OK: isolement.Iso1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso1)),-1, NULL, NULL, NULL); isolement.Iso2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso2)),-1, NULL, NULL, NULL); isolement.Iso3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso3)),-1, NULL, NULL, NULL); isolement.Iso4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso4)),-1, NULL, NULL, NULL); isolement.Iso5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso5)),-1, NULL, NULL, NULL); break; default: isolement.Iso1 = "default"; isolement.Iso2 = "default"; isolement.Iso3 = "default"; isolement.Iso4 = "default"; isolement.Iso5 = "default"; break; } gtk_widget_destroy(FenetreIso); } void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale) { gtk_widget_destroy(FenetrePrincipale); }
Vicking54
Messages postés
89
Date d'inscription
lundi 11 octobre 2010
Statut
Membre
Dernière intervention
17 mai 2011
26
17 mai 2011 à 15:52
17 mai 2011 à 15:52
ok faut que tu protège déjà ton .h
#ifndef NOMDETONHEADER
#define NOMDETONHEADER
// tous ton .h
#endif
voila déjà
Puis dans ton .h il y a pas de extern gchar* cheminFichierFil;
#ifndef NOMDETONHEADER
#define NOMDETONHEADER
// tous ton .h
#endif
voila déjà
Puis dans ton .h il y a pas de extern gchar* cheminFichierFil;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui excusez-moi j'ai du le changer pour pouvoir montrer le programme au boss, donc j'ai du faire en sorte qu'il compile. Je fais ces modifications et vous tiens au courant.
Merci de vous interresser à mon cas.
Merci de vous interresser à mon cas.
J'ai protégé mon .h comme tu me l'as dis (les 2 lignes au début et le endif à la fin si j'ai bien compris)
Et j'ai enlevé le
de mon main.c pour mettre
dans mon generateur.h (en gros j'ai remis ce qui pose problème =) Si vous voulez que je vous post le code complet, n'hésitez pas.
Malgré la protection le problème persiste, cheminFichierFil n'est pas "declared in this scoop" selon mon compilateur.
Autre interrogation: pourquoi cette erreur est-elle détectée à la ligne 379 du main, c'est à dire une ligne n'ayant aucun rapport? (cette ligne étant un simple break;)
Et j'ai enlevé le
gchar* cheminFichierFil = NULL;
de mon main.c pour mettre
extern gchar* cheminFichierFil;
dans mon generateur.h (en gros j'ai remis ce qui pose problème =) Si vous voulez que je vous post le code complet, n'hésitez pas.
Malgré la protection le problème persiste, cheminFichierFil n'est pas "declared in this scoop" selon mon compilateur.
Autre interrogation: pourquoi cette erreur est-elle détectée à la ligne 379 du main, c'est à dire une ligne n'ayant aucun rapport? (cette ligne étant un simple break;)
La ligne 379, c'est parce qu'il compte aussi les lignes du generateur.c
On tombe bien sur "cheminFichierFil = InitChemin;"
Normalement, le include ne sert qu'à inclure les fichiers .h. Les .c sont compilés séparément et c'est l'édition de lien qui les rassemble ensuite.
Mais ça devrait marcher quand même. À quel endroit de ton .h as-tu mis extern gchar* cheminFichierFil; ?
On tombe bien sur "cheminFichierFil = InitChemin;"
Normalement, le include ne sert qu'à inclure les fichiers .h. Les .c sont compilés séparément et c'est l'édition de lien qui les rassemble ensuite.
Mais ça devrait marcher quand même. À quel endroit de ton .h as-tu mis extern gchar* cheminFichierFil; ?
Un bon copier/coller vaut mieux qu'un long discours =).Voici le début de mon .h:
Après il y aura la "partie interface etc.
#ifndef generateur.h #define generateur.h #include <stdlib.h> #include <gtk/gtk.h> #include <stdio.h> #include <string.h> #define TAILLE_MAX 1000 #define TAILLE_MAX_PETIT 20 extern char chaine[TAILLE_MAX]; extern gchar* cheminFichierFil;
Après il y aura la "partie interface etc.
Bonjour
Je pense (pas sûr de moi) que ce qui est défini dans le generateur.h n'est connu que de generateur.c parce que l'include est dans generateur.c
Au début de ton main.c, juste avant le include generateur.c, ajoute un include generateur.h, si j'ai raison ça devrait mieux marcher (du moins pour cette erreur-là, car j'ai bien peur que le linker te dise que cette variable n'est pas définie).
Mais je continue à ne pas comprendre ta façon de procéder : normalement, dans les .c tu ne fais d'include que de.h, pas d'autres .c.
Je pense (pas sûr de moi) que ce qui est défini dans le generateur.h n'est connu que de generateur.c parce que l'include est dans generateur.c
Au début de ton main.c, juste avant le include generateur.c, ajoute un include generateur.h, si j'ai raison ça devrait mieux marcher (du moins pour cette erreur-là, car j'ai bien peur que le linker te dise que cette variable n'est pas définie).
Mais je continue à ne pas comprendre ta façon de procéder : normalement, dans les .c tu ne fais d'include que de.h, pas d'autres .c.
OkOk, bon ... ca va déjà beaucoup mieux.
En fait, lorsque je faisais de la manière usuelle (c'est à dire include le .h et non le .c) il me mettait des multiples declarations partout. Le fait d'include le .c était ce que j'ai décris comme étant "faire à l'arrache" lors du premier post.
Mais on dirait qu'après protection du fichier, il n'y a plus ces multiples déclarations lorsque je procède normalement.
Par contre, il n'y a toujours pas de reconnaissance de cheminFichierFil.
Pour ne pas vous perdre, je copie tout le nécessaire sur l'état actuel de mes fichiers:
dans main.cpp:
dans generateur.c:
et le generateur.h au complet:
En fait, lorsque je faisais de la manière usuelle (c'est à dire include le .h et non le .c) il me mettait des multiples declarations partout. Le fait d'include le .c était ce que j'ai décris comme étant "faire à l'arrache" lors du premier post.
Mais on dirait qu'après protection du fichier, il n'y a plus ces multiples déclarations lorsque je procède normalement.
Par contre, il n'y a toujours pas de reconnaissance de cheminFichierFil.
Pour ne pas vous perdre, je copie tout le nécessaire sur l'état actuel de mes fichiers:
dans main.cpp:
#include "generateur.h"
dans generateur.c:
#include "generateur.h"
et le generateur.h au complet:
#ifndef generateur.h #define generateur.h #include <stdlib.h> #include <gtk/gtk.h> #include <stdio.h> #include <string.h> #define TAILLE_MAX 1000 #define TAILLE_MAX_PETIT 20 extern char chaine[TAILLE_MAX]; extern gchar* cheminFichierFil; //******************************************************************************** //Partie interface //******************************************************************************** //paramètres d'isolement typedef struct { const gchar* Iso1; const gchar* Iso2; const gchar* Iso3; const gchar* Iso4; const gchar* Iso5; } Isolement; Isolement isolement; //paramètres de continuité typedef struct { const gchar* Conti1; const gchar* Conti2; const gchar* Conti3; const gchar* Conti4; const gchar* Conti5; } Continuite; Continuite continuite; //Génère le code du programme winpass void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf, Continuite continuite, Isolement isolement); //******************************************************************************** //partie générateur //******************************************************************************** //retourne le nombre de lignes d'un fichier int tailleLignesFichier (FILE* fichier); //enregistrement d'une connection typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char contact[TAILLE_MAX_PETIT]; } connection; //création du type qui savegardera les connections typedef connection typeTableauConnection [TAILLE_MAX]; //enregistrement d'une définition de connecteur typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char typeConnecteur[TAILLE_MAX_PETIT]; } defConnection; //création du type qui savegardera les définition des connecteurs typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX]; //traitement d'un fichier des connections de type fichier.FIL int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection); //traitement d'un fichier des définition de connecteurs de type fichier.PRF int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur); #endif
Bonjour
J'ai essayé 10 fois hier, ça me disait ok, mais ensuite le message n'apparaissait pas dans le forum.
J'ai essayé 10 fois hier, ça me disait ok, mais ensuite le message n'apparaissait pas dans le forum.
Bonjour
Il doit y avoir des mots refusés dans mon message. alors j'insère des espaces en espérant échapper à la censure (si c'est ça le problème)
As-tu toujours vraiment le même message d'erreur ? Venant du compilateur ou du l i n k e r ? peux-tu en faire un copier-coller complet ?
Il doit y avoir des mots refusés dans mon message. alors j'insère des espaces en espérant échapper à la censure (si c'est ça le problème)
As-tu toujours vraiment le même message d'erreur ? Venant du compilateur ou du l i n k e r ? peux-tu en faire un copier-coller complet ?
Oui, j'ai toujours le message d'erreur. Par contre, j'ai vu que si je déclarais mon cheminFichierFil dans mon main.c, il ne me trouvais pas ma déclaration de TraitementBoutonGen. Donc si je compile avec la configuration du message du 18 à 10h49, ca me donne ce message:
Et si je rajoute
Je me demandais: Est-ce que le fait que j'ai un main.cpp et le generateur sous l'extension *.c pourrait être la cause du problème?
En tout cas merci beaucoup de t'interresser à mon cas.
C:\Documents a... In function 'int main(int, char**)': C:\Documents a... 109 error: 'cheminFichierFil' was not declared in this scope === Build finished: 1 errors, 0 warnings ===
Et si je rajoute
gchar* cheminFichierFil = NULL;dans mon main.cpp, il me donne:
C:\Debug\main.o In function 'main': C:\Documents a... 320 undefined reference to 'TraitementBoutonGen(GtkWidget*, char*, char*, Continuite, Iso... === Build finished: 1 errors, 0 warnings ===
Je me demandais: Est-ce que le fait que j'ai un main.cpp et le generateur sous l'extension *.c pourrait être la cause du problème?
En tout cas merci beaucoup de t'interresser à mon cas.
Je viens enfin de remarquer... tu as défini gchar* cheminFichierFil = NULL; dans generateur.c, mais tu ne l'as pas déclaré dans generateur.h ! Normal qu'il ne le connaisse plus si tu n'inclus pas generateur.c
idem pour TraitementBoutonGen.
Mais as-tu une conscience bien précise de ce que sont la définition et la déclaration ? C'est peut-être pour ça que tu as des problèmes avec les headers et que tu fais des include (excuse-moi) au hasard au lieu de les faire logiquement.
idem pour TraitementBoutonGen.
Mais as-tu une conscience bien précise de ce que sont la définition et la déclaration ? C'est peut-être pour ça que tu as des problèmes avec les headers et que tu fais des include (excuse-moi) au hasard au lieu de les faire logiquement.
Désolé, je ne te suis pas vraiment là... Je ne vois pas de déclaration de gchar* cheminFichierFil = NULL; dans generateur.c.
Et j'ai changé mon generateur.h en rajoutant la ligne extern gchar* cheminFichierFil; (enfin si c'est ca que tu veux dire) c'est bien une déclaration? ou je je trompe?
Pour TraitementBoutonGen, le prototype de cette fonction ne suffit pas dans le generateur.h?
En fait, tu as raison, je ne sais pas vraiment ce qu'est la définition et la déclaration visiblement... désolé ...
Et j'ai changé mon generateur.h en rajoutant la ligne extern gchar* cheminFichierFil; (enfin si c'est ca que tu veux dire) c'est bien une déclaration? ou je je trompe?
Pour TraitementBoutonGen, le prototype de cette fonction ne suffit pas dans le generateur.h?
En fait, tu as raison, je ne sais pas vraiment ce qu'est la définition et la déclaration visiblement... désolé ...
J'avais mélangé tes fichiers en les recopiant, c'est pour ça que je ne retrouvais pas des définitions et les déclarations aux bons endroits. Donc ce que j'ai dit dans mon dernier message ne tient pas la route.
D'ailleurs je n'arrive plus à suivre, je ne connais plus l'état actuel de tes fichiers.
Actuellement, qu'est devenu le generateur.c ? S'il n'est plus inclus dans main.cpp, il faudrait le rebaptiser en .cpp et le mettre dans le projet.
Par ailleurs, gchar* cheminFichierFil = NULL; dans generateur.c. est une définition de variable et non pas une déclaration : cette ligne crée bien une zone mémoire pour stocker la variable.
D'ailleurs je n'arrive plus à suivre, je ne connais plus l'état actuel de tes fichiers.
Actuellement, qu'est devenu le generateur.c ? S'il n'est plus inclus dans main.cpp, il faudrait le rebaptiser en .cpp et le mettre dans le projet.
Par ailleurs, gchar* cheminFichierFil = NULL; dans generateur.c. est une définition de variable et non pas une déclaration : cette ligne crée bien une zone mémoire pour stocker la variable.
Bon je vais te faire un copier coller des 3 fichiers en 3 post, ce sera plus clair. (j'ai changé le generateur.c en generateur.cpp, et on dirait que les problèmes sont différents. (des multiples définitions maintenant.)
Et on reprend à partir de là si tu veux bien =)
Je commence tout de suite avec mon generateur.h:
Et on reprend à partir de là si tu veux bien =)
Je commence tout de suite avec mon generateur.h:
#ifndef generateur.h #define generateur.h #include <stdlib.h> #include <gtk/gtk.h> #include <stdio.h> #include <string.h> #define TAILLE_MAX 1000 #define TAILLE_MAX_PETIT 20 extern char chaine[TAILLE_MAX]; extern gchar* cheminFichierFil; //******************************************************************************** //Partie interface //******************************************************************************** //paramètres d'isolement typedef struct { const gchar* Iso1; const gchar* Iso2; const gchar* Iso3; const gchar* Iso4; const gchar* Iso5; } Isolement; Isolement isolement; //paramètres de continuité typedef struct { const gchar* Conti1; const gchar* Conti2; const gchar* Conti3; const gchar* Conti4; const gchar* Conti5; } Continuite; Continuite continuite; //Génère le code du programme winpass void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf, Continuite continuite, Isolement isolement); //******************************************************************************** //partie générateur //******************************************************************************** //retourne le nombre de lignes d'un fichier int tailleLignesFichier (FILE* fichier); //enregistrement d'une connection typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char contact[TAILLE_MAX_PETIT]; } connection; //création du type qui savegardera les connections typedef connection typeTableauConnection [TAILLE_MAX]; //enregistrement d'une définition de connecteur typedef struct { char nomConnecteur[TAILLE_MAX_PETIT]; char typeConnecteur[TAILLE_MAX_PETIT]; } defConnection; //création du type qui savegardera les définition des connecteurs typedef defConnection typeTableauDefinitionConnecteur [TAILLE_MAX]; //traitement d'un fichier des connections de type fichier.FIL int traitementFichierDesConnections (char * nomFichierFil, typeTableauConnection tableauConnection); //traitement d'un fichier des définition de connecteurs de type fichier.PRF int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur); #endif
generateur.cpp:
#include "generateur.h" int traitementFichierDesConnections(char * cheminFichierFil, typeTableauConnection tableauConnections); void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPrf, Continuite continuite, Isolement isolement) { FILE* fichierTest = fopen("test", "w+"); cheminFichierFil = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.FIL", -1, NULL, NULL, NULL); cheminFichierPrf = g_locale_to_utf8( "C:\\Documents and Settings\\jfaure\\Bureau\\stage1\\GenerateurCodeWinpass5000\\exemple.PRF", -1, NULL, NULL, NULL); //*********************************************************************************************************** //fichier FIL //*********************************************************************************************************** int nb_connections; typeTableauConnection tableauConnections; nb_connections = traitementFichierDesConnections(cheminFichierFil, tableauConnections); int i; for(i = 0; i < nb_connections; i++) { fprintf(fichierTest,"\n%s : %s",tableauConnections[i].nomConnecteur, tableauConnections[i].contact); } //*********************************************************************************************************** //fichier PRF //*********************************************************************************************************** typeTableauDefinitionConnecteur tableauDefinitionConnecteur; int ligneligne = traitementFichierDefinitionConnecteurs(cheminFichierPrf, tableauDefinitionConnecteur); int it; fprintf(fichierTest,"\n\ndescription des connecteurs : \n"); for(it = 0; it < ligneligne; it++) { fprintf(fichierTest,"\n%s : %s",tableauDefinitionConnecteur[it].nomConnecteur, tableauDefinitionConnecteur[it].typeConnecteur); } int fclose(FILE* fichierTest); //**************************************************************** //Affichage du message de succès de la génération du fichier //**************************************************************** GtkWidget* FenetreGeneration = NULL; GtkWidget* tableGen = NULL; GtkWidget* LabelSucces = NULL; gchar* TexteSucces = NULL; GtkWidget* BoutonOK = NULL; FenetreGeneration = gtk_dialog_new(); tableGen = gtk_table_new(2, 6, TRUE); gtk_window_set_title(GTK_WINDOW(FenetreGeneration), "Generation accomplie"); TexteSucces =g_locale_to_utf8( "Génération du fichier accomplie avec succès", -1, NULL, NULL, NULL); LabelSucces = gtk_label_new (TexteSucces); gtk_table_attach_defaults(GTK_TABLE(tableGen), LabelSucces, 1, 5, 0, 1); BoutonOK = gtk_button_new_with_label("OK"); gtk_signal_connect_object (GTK_OBJECT (BoutonOK), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), FenetreGeneration); gtk_table_attach_defaults(GTK_TABLE(tableGen), BoutonOK, 2, 4, 1, 2); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(FenetreGeneration)->vbox), tableGen); gtk_widget_show_all (FenetreGeneration); } //************************************************************************************************************** int tailleLignesFichier (FILE* fichier) { int taille = 0; while( fgets (chaine, TAILLE_MAX, fichier) != NULL) { taille++; } //remise du curseur au début du fichier fseek(fichier, 0, SEEK_SET); return taille; } //************************************************************************************************************** int tailleLigneDescConnecteur (FILE* fichier) { int ligne=0; int trouve=0; char buffer[TAILLE_MAX]; while(fgets(buffer, sizeof buffer, fichier)) { ligne++; if(strstr(buffer,"EQUIPEMENT DE BASE")) { trouve=1; break; } } if(trouve) { //remise du curseur au début du fichier fseek(fichier, 0, SEEK_SET); return ligne - 1; } else { return 0; } } //************************************************************************************************************** int traitementFichierDesConnections (char * cheminFichierFil, typeTableauConnection tableauConnections) { int iLigne = 0; //itérateur pour les lignes (vérifier le 1 peut-etre 0) int i = 0; //itérateur pour les diférentes connections dans le tableau int j = 0; //itérateur pour le nombre de caractère des données récupérées int iSaut; //itérateur pour sauter les caractères indésirés int testPremiereBoucle; //booléen pour savoir si l'on doit sauter le premier caractère ou non char carac; //caractère renvoyé par les fputc //ouverture du fichier en lecture FILE* fichierFil = fopen(cheminFichierFil, "r"); if(fichierFil != NULL) { //test du nombre de lignes const int NB_LIGNES = tailleLignesFichier (fichierFil); while(iLigne < NB_LIGNES) { //******************************************* //traitement d'une ligne //******************************************* iSaut = 0; testPremiereBoucle = 1; //tant que l'on ne trouvons pas le marqueur de fin de ligne on continue le traitement while((carac=fgetc (fichierFil)) != 10)//10 étant l'entier associé au caractère "retour à la ligne" { j = 0; //on saute les renseignements qui ne nous interresent pas while(iSaut < 10) { carac = fgetc (fichierFil); //on ne valide le saut d'une colonne que lorsque l'on rencontre le caractère "|" if(carac == 124)//124 étant l'entier associé au caractère "|" { iSaut++; } } //si il s'agit de la première boucle de la ligne, on doit sauter un dernier caractère if(testPremiereBoucle == 1) { carac = fgetc (fichierFil); testPremiereBoucle = 0; } //on stocke dans le tableau le nom du connecteur while(carac != 47)//47 étant l'entier associé au caractère "/" { tableauConnections[i].nomConnecteur[j]=carac; j++; carac = fgetc (fichierFil); } carac = fgetc (fichierFil); j = 0 ; //on stocke dans le tableau le contact while(carac != 124) { tableauConnections[i].contact[j]=carac; j++; carac = fgetc (fichierFil); } i++; } iLigne++; } } else { printf("\nerreur \x85 l'ouverture du fichier %s", cheminFichierFil); } //fermeture du fichier int fclose(FILE* fichierFil); //on retourne le nombre de connections return i; } //************************************************************************************************************** int traitementFichierDefinitionConnecteurs (char * nomFichierPrf, typeTableauDefinitionConnecteur tableauDefinitionConnecteur) { long iLigne = 0; //itérateur pour les lignes int i = 0; //itérateur pour les connections int j; //itérateur pour le nombre de caractère des données récupérées char carac; //caractère renvoyé par les fputc //ouverture du fichier en lecture FILE* fichierPrf = fopen(nomFichierPrf, "r"); if(fichierPrf != NULL) { //test du nombre de lignes const int NB_LIGNES = tailleLigneDescConnecteur(fichierPrf); while(iLigne < NB_LIGNES) { //******************************************* //traitement d'une ligne //******************************************* if (fgetc (fichierPrf) != 179) { while((fgetc (fichierPrf)) != 10); } else { int iterator; //on saute les caractères intiles for (iterator = 0; iterator < 7; iterator++) { carac = fgetc(fichierPrf); } if(carac == 32) { //ligne vide donc aucun traitement } else { j = 0; while(carac != 32) { //on stocke dans le tableau le nom du connecteur tableauDefinitionConnecteur[i].nomConnecteur[j] = carac; j++; carac = fgetc (fichierPrf); } for (iterator = 0; iterator < 3; iterator++) { //on saute les caractères intiles carac = fgetc (fichierPrf); } j = 0; while(carac != 32) { //on stocke dans le tableau le nom du types du connecteur tableauDefinitionConnecteur[i].typeConnecteur[j] = carac; j++; carac = fgetc (fichierPrf); } i++; } while((fgetc (fichierPrf)) != 10); } iLigne++; } } else { printf("\nerreur \x85 l'ouverture du fichier %s", nomFichierPrf); } //fermeture du fichier int fclose(FILE* fichierPrf); //on retourne le nombre de définitions de connecteurs return i; }
et main.cpp:
#include "generateur.h" //ATTENTION ! ! ! //chemin du fichier des connections //la je l'ai mis en commentaire pour pouvoir compiler mais je compte le virer //gchar* cheminFichierFil = NULL; //chemin du fichier des définitions de connecteurs gchar* cheminFichierPrf = NULL; //Créé la boîte de dialogue nous permettant de sélectionner un fichier.FIL pour récupérer son chemin void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil); GtkWidget* EntryFil = NULL; //Entry du chemin du fichier des connections //Créé la boîte de dialogue nous permettant de sélectionner un fichier.PRF pour récupérer son chemin void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf); GtkWidget* EntryPrf = NULL; //Entry du chemin du fichier des définitions de connecteurs //Créé la boîte de dialogue nous permettant de modifier les paramètres de continuité void TraitementBoutonConti(GtkWidget* pWidget, gpointer data); //entrys des paramètres de continuité GtkWidget* EntryConti1= NULL; GtkWidget* EntryConti2= NULL; GtkWidget* EntryConti3= NULL; GtkWidget* EntryConti4= NULL; GtkWidget* EntryConti5= NULL; //Créé la boîte de dialogue nous permettant de modifier les paramètres d'isolement void TraitementBoutonIso(GtkWidget* pWidget, gpointer data); //entrys des paramètres d'isolement GtkWidget* EntryIso1= NULL; GtkWidget* EntryIso2= NULL; GtkWidget* EntryIso3= NULL; GtkWidget* EntryIso4= NULL; GtkWidget* EntryIso5= NULL; //Ferme le programme void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale); 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* 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* 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 GtkWidget* BoutonConti = NULL; //Bouton pour modifier les paramètres de continuité gchar* TexteConti = NULL; //Texte associé au bouton de continuité GtkWidget* boxConti = NULL; //Box pour contenir l'alignement du bouton de continuité GtkWidget* alignementConti = NULL; //Alignement du bouton de continuité GtkWidget* BoutonIso = NULL; //Bouton pour modifier les paramètres d'isolement gchar* TexteIso = NULL; //Texte associé au bouton d'isolement GtkWidget* boxIso = NULL; //Box pour contenir l'alignement du bouton d'isolement GtkWidget* alignementIso = NULL; //Alignement du bouton d'isolement GtkWidget* BoutonGen = NULL; //Bouton pour générer le code winpass gchar* TexteGen = NULL; //Texte associé au bouton de génération GtkWidget* boxGen = NULL; //Box pour contenir l'alignement du bouton de génération GtkWidget* alignementGen = NULL; //Alignement du bouton de génération GtkWidget* BoutonClose = NULL; //Bouton pour fermer le programme GtkWidget* boxClose = NULL; //Box pour contenir l'alignement du bouton de fermeture GtkWidget* alignementClose = NULL; //Alignement du bouton de fermeture //initialisation des paramètres de continuité continuite.Conti1 = "default"; continuite.Conti2 = "default"; continuite.Conti3 = "default"; continuite.Conti4 = "default"; continuite.Conti5 = "default"; //initialisation des paramètres d'isolement isolement.Iso1 = "default"; isolement.Iso2 = "default"; isolement.Iso3 = "default"; isolement.Iso4 = "default"; isolement.Iso5 = "default"; //initialisation du chemin des fichiers gchar* InitChemin =g_locale_to_utf8( "Chemin du fichier...", -1, NULL, NULL, NULL); cheminFichierFil = InitChemin; cheminFichierPrf = InitChemin; //****************************************************************************************** // 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 Winapss5000"); //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, 6, 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, 6, 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, 4, 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, 4, 5, 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(); //initialisation du texte de l'entry gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil); //Placement de l'entry dans le tableau gtk_table_attach_defaults(GTK_TABLE(table), EntryFil, 1, 5, 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.PRO) :", -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, 4, 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, 4, 5, 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(); //initialisation du texte de l'entry gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf); //Placement de l'entry dans le tableau gtk_table_attach_defaults(GTK_TABLE(table), EntryPrf, 1, 5, 4, 5); //************************************************************* //Bouton de paramètre de continuité //************************************************************* //Création du bouton TexteConti = g_locale_to_utf8("Paramètres de continuité",-1, NULL, NULL, NULL); BoutonConti = gtk_button_new_with_label(TexteConti); //Création de la box pour contenir l'alignement du bouton boxConti = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementConti = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementConti), BoutonConti); gtk_container_add (GTK_CONTAINER (boxConti), alignementConti); gtk_table_attach_defaults(GTK_TABLE(table), boxConti, 2, 5, 5, 6); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonConti), "clicked", G_CALLBACK(TraitementBoutonConti), NULL); //************************************************************* //Bouton de paramètre d'isolement //************************************************************* //Création du bouton TexteIso = g_locale_to_utf8("Paramètres d'isolement",-1, NULL, NULL, NULL); BoutonIso = gtk_button_new_with_label(TexteIso); //Création de la box pour contenir l'alignement du bouton boxIso = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementIso = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementIso), BoutonIso); gtk_container_add (GTK_CONTAINER (boxIso), alignementIso); gtk_table_attach_defaults(GTK_TABLE(table), boxIso, 2, 5, 6, 7); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonIso), "clicked", G_CALLBACK(TraitementBoutonIso), NULL); //************************************************************* //Bouton de génération du code winpass //************************************************************* //Création du bouton TexteGen = g_locale_to_utf8("Générer",-1, NULL, NULL, NULL); BoutonGen = gtk_button_new_with_label(TexteGen); //Création de la box pour contenir l'alignement du bouton boxGen = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementGen = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementGen), BoutonGen); gtk_container_add (GTK_CONTAINER (boxGen), alignementGen); gtk_table_attach_defaults(GTK_TABLE(table), boxGen, 4, 5, 7, 8); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL); //************************************************************* //Bouton de fermeture du programme //************************************************************* //Création du bouton BoutonClose = gtk_button_new_with_label("Fermer"); //Création de la box pour contenir l'alignement du bouton boxClose = gtk_vbox_new(TRUE, 1); //Création de l'alignement du bouton alignementClose = gtk_alignment_new(0, 0.5, 0.5, 0); //Hiérarchie des composants graphiques gtk_container_add (GTK_CONTAINER(alignementClose), BoutonClose); gtk_container_add (GTK_CONTAINER (boxClose), alignementClose); gtk_table_attach_defaults(GTK_TABLE(table), boxClose, 5, 6, 7, 8); //Ecoute du bouton g_signal_connect(G_OBJECT(FenetrePrincipale), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(BoutonClose), "clicked", G_CALLBACK(TraitementBoutonClose), FenetrePrincipale); //*************************************************** //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; } //**************************************************************************** //Traitement du bouton "Parcourir" du fichier de connections //**************************************************************************** void TraitementBoutonFil(GtkWidget* pWidget, gchar* cheminFichierFil) { //Glossaire des widgets graphiques de TraitementBoutonFil GtkWidget* FenetreSelection; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN, "Ouvrir", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, 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 cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection)); gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil); break; default: //[aucune instruction] break; } gtk_widget_destroy(FenetreSelection); } //**************************************************************************** //Traitement du bouton "Parcourir" du fichier de définition des connecteurs //**************************************************************************** void TraitementBoutonPrf(GtkWidget* pWidget, gchar* cheminFichierPrf) { //Glossaire des widgets graphiques de TraitementBoutonPrf GtkWidget* FenetreSelection; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreSelection = gtk_file_chooser_dialog_new("Ouvrir...", GTK_WINDOW(FenetreParent), GTK_FILE_CHOOSER_ACTION_OPEN, "Ouvrir", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL,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 cheminFichierPrf = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection)); gtk_entry_set_text(GTK_ENTRY(EntryPrf), cheminFichierPrf); break; default: //[aucune instruction] break; } gtk_widget_destroy(FenetreSelection); } //**************************************************************************** //Traitement du bouton des paramètres de continuité //**************************************************************************** void TraitementBoutonConti(GtkWidget* pWidget, gpointer data) { //Glossaire des widgets graphiques de TraitementBoutonConti GtkWidget* FenetreConti; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreConti = gtk_dialog_new_with_buttons( "Parametres de continuite", GTK_WINDOW(FenetreParent), GTK_DIALOG_DESTROY_WITH_PARENT, "OK", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, NULL); //********************************************************* //interface de la denêtre des paramètres de continuité //********************************************************* //Glossaire GtkWidget* frameConti = NULL; GtkWidget* tableConti = NULL; GtkWidget* LabelConti1= NULL; GtkWidget* LabelConti2= NULL; GtkWidget* LabelConti3= NULL; GtkWidget* LabelConti4= NULL; GtkWidget* LabelConti5= NULL; //mise en page des widgets //Formalisation du texte frameConti = gtk_frame_new (""); tableConti = gtk_table_new(6, 3, TRUE); //labels LabelConti1 = gtk_label_new("Resistance min :"); LabelConti2 = gtk_label_new("Resistance max :"); LabelConti3 = gtk_label_new("Courant de mesure :"); LabelConti4 = gtk_label_new("Tension max :"); LabelConti5 = gtk_label_new("Temps d'application :"); //entrys EntryConti1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti1), continuite.Conti1); EntryConti2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti2), continuite.Conti2); EntryConti3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti3), continuite.Conti3); EntryConti4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti4), continuite.Conti4); EntryConti5 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryConti5), continuite.Conti5); //Placement des éléments dans le tableau gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti1, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti1, 2, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti2, 0, 2, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti2, 2, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti3, 0, 2, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti3, 2, 3, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti4, 0, 2, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti4, 2, 3, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableConti), LabelConti5, 0, 2, 4, 5); gtk_table_attach_defaults(GTK_TABLE(tableConti), EntryConti5, 2, 3, 4, 5); //Hiérarchie des composants graphiques gtk_container_add(GTK_CONTAINER (frameConti), tableConti); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreConti)->vbox),frameConti); gtk_widget_show_all(FenetreConti); //Affichage de la fenetre switch(gtk_dialog_run(GTK_DIALOG(FenetreConti))) { case GTK_RESPONSE_OK: continuite.Conti1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti1)),-1, NULL, NULL, NULL); continuite.Conti2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti2)),-1, NULL, NULL, NULL); continuite.Conti3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti3)),-1, NULL, NULL, NULL); continuite.Conti4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti4)),-1, NULL, NULL, NULL); continuite.Conti5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryConti5)),-1, NULL, NULL, NULL); break; default: continuite.Conti1 = "default"; continuite.Conti2 = "default"; continuite.Conti3 = "default"; continuite.Conti4 = "default"; continuite.Conti5 = "default"; break; } gtk_widget_destroy(FenetreConti); } //**************************************************************************** //Traitement du bouton des paramètres d'isolement //**************************************************************************** void TraitementBoutonIso(GtkWidget* pWidget, gpointer data) { //Glossaire des widgets graphiques de TraitementBoutonIso GtkWidget* FenetreIso; GtkWidget* FenetreParent; //Creation de la fenetre de selection FenetreIso = gtk_dialog_new_with_buttons( "Parametres d'isolement", GTK_WINDOW(FenetreParent), GTK_DIALOG_DESTROY_WITH_PARENT, "OK", GTK_RESPONSE_OK, "Annuler", GTK_RESPONSE_CANCEL, NULL); //********************************************************* //interface de la denêtre des paramètres d'isolement //********************************************************* //Glossaire GtkWidget* frameIso = NULL; GtkWidget* tableIso = NULL; GtkWidget* LabelIso1= NULL; GtkWidget* LabelIso2= NULL; GtkWidget* LabelIso3= NULL; GtkWidget* LabelIso4= NULL; GtkWidget* LabelIso5= NULL; //mise en page des widgets //Formalisation du texte frameIso = gtk_frame_new (""); tableIso = gtk_table_new(6, 3, TRUE); //labels LabelIso1 = gtk_label_new("Resistance min :"); LabelIso2 = gtk_label_new("Tension d'isolement :"); LabelIso3 = gtk_label_new("Courant de claquage :"); LabelIso4 = gtk_label_new("Temps de montee :"); LabelIso5 = gtk_label_new("Temps d'application :"); //entrys EntryIso1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso1), isolement.Iso1); EntryIso2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso2), isolement.Iso2); EntryIso3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso3), isolement.Iso3); EntryIso4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso4), isolement.Iso4); EntryIso5 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(EntryIso5), isolement.Iso5); //Placement des éléments dans le tableau gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso1, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso1, 2, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso2, 0, 2, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso2, 2, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso3, 0, 2, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso3, 2, 3, 2, 3); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso4, 0, 2, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso4, 2, 3, 3, 4); gtk_table_attach_defaults(GTK_TABLE(tableIso), LabelIso5, 0, 2, 4, 5); gtk_table_attach_defaults(GTK_TABLE(tableIso), EntryIso5, 2, 3, 4, 5); //Hiérarchie des composants graphiques gtk_container_add(GTK_CONTAINER (frameIso), tableIso); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(FenetreIso)->vbox),frameIso); gtk_widget_show_all(FenetreIso); //Affichage de la fenetre switch(gtk_dialog_run(GTK_DIALOG(FenetreIso))) { case GTK_RESPONSE_OK: isolement.Iso1 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso1)),-1, NULL, NULL, NULL); isolement.Iso2 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso2)),-1, NULL, NULL, NULL); isolement.Iso3 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso3)),-1, NULL, NULL, NULL); isolement.Iso4 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso4)),-1, NULL, NULL, NULL); isolement.Iso5 = g_locale_to_utf8(gtk_entry_get_text(GTK_ENTRY(EntryIso5)),-1, NULL, NULL, NULL); break; default: isolement.Iso1 = "default"; isolement.Iso2 = "default"; isolement.Iso3 = "default"; isolement.Iso4 = "default"; isolement.Iso5 = "default"; break; } gtk_widget_destroy(FenetreIso); } void TraitementBoutonClose(GtkWidget* pWidget, GtkWidget* FenetrePrincipale) { gtk_widget_destroy(FenetrePrincipale); }