Bon voila , j'ai un mini projet en langage C dont le but est de réaliser un codeur\décodeur du code MORSE avec interface graphique en utilisant GTK+ comme bibliothèque graphique,le seul problème que j'ai c qd je saisi du texte a coder ou a décoder dans le gtk_text_entry ,la fonction qui s'exécute pour le codage ou le decodage ne code( ou decode) que le dernier caractère du texte saisi.pour étre trés clair voici la partie du code de mon application ou figure le problème.j'attend votre aide et merci d'avance.
*******************************************************
#include <stdlib.h>
#include <gtk/gtk.h>
typedef struct
{
GtkWidget *pWindow;
GtkWidget *pVBox;
GtkWidget *pHBox;
GtkWidget *pEntry;
GtkWidget *pEntryRO;
GtkWidget *pButtonAff;
GtkWidget *pButtonQuit;
GtkWidget *pLabel;
GtkWidget *pMenuBar;
GtkWidget *pMenu;
GtkWidget *pMenuItem;
} MainWindow;
void MAJ_Message(GtkWidget*, GdkEvent*, gpointer);
void Click(GtkWidget*, gpointer);
void ClickQuit(GtkWidget *pBoutton, gpointer pApp);
int main(int argc, char **argv)
{
MainWindow *pApp;
gtk_init(&argc, &argv);
pApp = g_malloc(sizeof *pApp);
pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Exemple deCours E2I1");
gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 300, 200);
g_signal_connect(G_OBJECT(pApp->pWindow), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
pApp->pMenuBar = gtk_menu_bar_new();
pApp->pMenu = gtk_menu_new();
pApp->pMenuItem = gtk_menu_item_new_with_label("Afficher");
g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(Click),
(gpointer) pApp);
gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem);
pApp->pMenuItem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem);
pApp->pMenuItem = gtk_menu_item_new_with_label("Quitter");
g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(ClickQuit),
(gpointer) pApp);
gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem);
pApp->pMenuItem = gtk_menu_item_new_with_label("Action");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->pMenuItem), pApp->pMenu);
gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenuBar), pApp->pMenuItem);
pApp->pVBox = gtk_vbox_new(TRUE, 0);
gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox);
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pMenuBar, FALSE, FALSE, 0);
pApp->pLabel = gtk_label_new("Saisissez votre Message ici :");
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pLabel, TRUE, FALSE, 0);
pApp->pEntry = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(pApp->pEntry), 256);
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pEntry, TRUE, FALSE, 0);
pApp->pLabel = gtk_label_new("Vous avez saisi :");
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pLabel, TRUE, FALSE, 0);
pApp->pEntryRO = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(pApp->pEntryRO), 256);
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pEntryRO, TRUE, FALSE, 0);
gtk_editable_set_editable(pApp->pEntryRO, FALSE);
pApp->pHBox = gtk_hbox_new(TRUE, 0);
pApp->pButtonAff = gtk_button_new_with_label("Afficher");
pApp->pButtonQuit = gtk_button_new_from_stock (GTK_STOCK_QUIT);
gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pHBox, TRUE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(pApp->pHBox), pApp->pButtonAff, TRUE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(pApp->pHBox), pApp->pButtonQuit, TRUE, FALSE, 0);
g_signal_connect(G_OBJECT(pApp->pEntry), "key_release_event", G_CALLBACK(MAJ_Message),(gpointer) pApp->pEntryRO);
g_signal_connect(G_OBJECT(pApp->pButtonAff), "clicked", G_CALLBACK(Click), (gpointer) pApp);
g_signal_connect(G_OBJECT(pApp->pButtonQuit), "clicked", G_CALLBACK(ClickQuit), (gpointer)
pApp);
gtk_widget_show_all(pApp->pWindow);
gtk_main();
g_free(pApp);
return EXIT_SUCCESS;
}
void MAJ_Message(GtkWidget *pEntry, GdkEvent *event, gpointer pEntryRO)
{
const gchar *sText;
char t[37]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r',
's','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0',' '},
m[37][6]={{".-"},{"-..."},{"-.-."},{"-.."},{"."},{"..-."},{"--."},{"...."},{".."},
{".---"},{"-.-"},{".-.."},{"--"},{"-."},{"---"},{".--."},{"--.-"},{".-."},
{"..."},{"-"},{"..-"},{"...-"},{".--"},{"-..-"},{"-.--"},{"--.."},{".----"},
{"..---"},{"...--"},{"....-"},{"....."},{"-...."},{"--..."},{"---.."},{"---."},
{"-----"},{"//"}};
gchar *temp;
int i,j,b=0;
sText = gtk_entry_get_text(GTK_ENTRY(pEntry));
for(i=0;i<strlen(sText);i++)
for(j=0;j<37;j++)
{
if(sText[i]==t[j])
{
if(sText[i]==' '){sprintf(temp," ");}
if(j!=36){b++;}
if(b==12){sprintf(temp,"\n\n");}
sprintf(temp,"%s",m[j]);
if((sText[i+1]!='\0')&&(sText[i+1]!=' ')&&(sText[i]!=' '))
{sprintf(temp," / ");}
}
}
gtk_entry_set_text(GTK_ENTRY(pEntryRO), temp);
}
void Click(GtkWidget *pBoutton, gpointer pApp) {
gchar *temp;
GtkWidget *pEntryRO = ((MainWindow*)pApp)->pEntryRO,*pWindow = ((MainWindow*)pApp)->pWindow,*dialogue = NULL;
temp = gtk_entry_get_text(GTK_ENTRY(pEntryRO));
dialogue = gtk_message_dialog_new(pWindow, GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK, temp);
gtk_window_set_title(GTK_WINDOW(dialogue), "Votre Message");
gtk_dialog_run(GTK_DIALOG(dialogue));
gtk_widget_destroy(dialogue);
}
void ClickQuit(GtkWidget *pBoutton, gpointer pApp)
{
GtkWidget *confirmation;
confirmation = gtk_message_dialog_new (GTK_WINDOW(((MainWindow*)pApp)->pWindow), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO, "Voulez-vous quitter ?");
gtk_window_set_title(GTK_WINDOW(confirmation), "Confirmation pour quitter");
switch(gtk_dialog_run(GTK_DIALOG(confirmation)))
{
case GTK_RESPONSE_YES:
gtk_main_quit();
break;
case GTK_RESPONSE_NO:
gtk_widget_destroy(confirmation);
break;
}
}
**********************************************************************