Pages

Identification (ID + MDP) : Pb récupération saisie avec une GList sujet

samedi 1 février 2014




Bonjour tout le monde :)

J'ai un problème au niveau de la récupération de saisie avec GTK+ : je souhaite faire une fenêtre d'identification sauf que j'ai du mal a récupérer 2 saisie dans une fenêtre... Je ne sais pas si j'ai été assez clair mais dans tout les cas je vous mets le code ;) (tout du moins le contenu du fichier idetification.c ^^ :

Code:


#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include "initializing.h"
#include "error.h"
#include "defines.h"
#include "identification.h"

int identification()
{
    GtkWidget *id_window;                                                                                                        printf("identification\n");
    GtkWidget *table;
    GtkWidget *win_label;
    GtkWidget *ID_label;
    GtkWidget *PWD_label;
    GtkWidget *id_entry;
    GtkWidget *pwd_entry;
    GtkWidget *ok_button;
    gchar *id_win_icon;

/* Identification window initialization */                                                                                        printf("\tIdentification window initialization\n");
    id_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(id_window), GTK_WIN_POS_CENTER_ON_PARENT);
    gtk_window_set_title(GTK_WINDOW(id_window), "Identification");
    id_win_icon = "img/id_win_icon.png";
    if(!gtk_window_set_icon_from_file(GTK_WINDOW(id_window), id_win_icon, NULL))
        error_returned(id_win_icon, TRIVIAL, id_window);
/* Text initialization */                                                                                                        printf("\tText initialization\n");
    win_label = gtk_label_new("Please log in :");
    ID_label = gtk_label_new("ID :");
    PWD_label = gtk_label_new("Password :");
/* Identification entries initialization */                                                                                        printf("\tIdentification entry initialization\n");
    id_entry = gtk_entry_new_with_max_length(7);
    pwd_entry = gtk_entry_new_with_max_length(10);
    gtk_entry_set_visibility(GTK_ENTRY(pwd_entry), FALSE);
    gtk_entry_set_invisible_char(GTK_ENTRY(pwd_entry), '$');
/* Ok button initialization */                                                                                                    printf("\tOk button initialization\n");
    ok_button = gtk_button_new_with_label("Ok");
/* Table initialization */                                                                                                        printf("\tTable initialization\n");
    table = gtk_table_new(4, 10, TRUE);
    gtk_container_add(GTK_CONTAINER(id_window), table);
/* Widgets arranging */                                                                                                          printf("\tWidgets arranging\n");
    gtk_table_attach(GTK_TABLE(table), win_label, 3, 7, 0, 1, 0, 0, 0, 0);
    gtk_table_attach(GTK_TABLE(table), ID_label, 0, 1, 1, 2, 0, 0, 2, 0);
    gtk_table_attach(GTK_TABLE(table), PWD_label, 0, 1, 2, 3, 0, 0, 3, 0);
    gtk_table_attach(GTK_TABLE(table), id_entry, 1, 10, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 0);
    gtk_table_attach(GTK_TABLE(table), pwd_entry, 1, 10, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 0);
    gtk_table_attach(GTK_TABLE(table), ok_button, 4, 6, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 0);
/*/ Widgets displaying */                                                                                                        printf("\tWidgets displaying\n");
    gtk_widget_show_all(id_window);
/*  Verifications */
    g_signal_connect(G_OBJECT(id_entry), "activate", G_CALLBACK(verification_on_activate_id_entry), G_OBJECT((GtkWidget*) table));
    g_signal_connect(G_OBJECT(pwd_entry), "activate", G_CALLBACK(verification_on_activate_pwd_entry), G_OBJECT((GtkWidget*) table));
    g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(verification_on_ok_button), G_OBJECT((GtkWidget*) table));
    gtk_main();
    gtk_widget_destroy(id_window);
    return 1;
}

void verification_on_activate_id_entry(GtkWidget *id_entry, gpointer data)
{
    GtkWidget *pwd_entry;                                                                                                          printf("verification_on_activate_id_entry\n");
    GList *list;
    const gchar *id_entered;
    const gchar *pwd_entered;
    gchar *ID_0;
    gchar *PWD_0;

    list = gtk_container_get_children(GTK_CONTAINER((GtkWidget*) data));
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    pwd_entry = GTK_WIDGET(list->data);

    id_entered = gtk_entry_get_text(GTK_ENTRY(id_entry));
    pwd_entered = gtk_entry_get_text(GTK_ENTRY(pwd_entry));

    ID_0 = "admin";
    PWD_0 = "admin";
    if(!strcmp(id_entered, ID_0))
    {
        printf("\t%s -> correct ID\n", id_entered);
        if(!strcmp(pwd_entered, PWD_0))
        {
            printf("\t%s -> correct PWD\n", id_entered);
            gtk_main_quit();
        }
        else
        {
            printf("\t%s -> erroneous PWD\n", id_entered);
        }
    }
    else
    {
        printf("\t%s -> erroneous ID\n", id_entered);
    }
}

void verification_on_activate_pwd_entry(GtkWidget *pwd_entry, gpointer data)
{
    GtkWidget *id_entry;                                                                                                          printf("verification_on_activate_pwd_entry\n");
    GList *list;
    const gchar *id_entered;
    const gchar *pwd_entered;
    gchar *ID_0;
    gchar *PWD_0;

    list = gtk_container_get_children(GTK_CONTAINER((GtkWidget*) data));
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    id_entry = GTK_WIDGET(list->data);

    id_entered = gtk_entry_get_text(GTK_ENTRY(id_entry));
    pwd_entered = gtk_entry_get_text(GTK_ENTRY(pwd_entry));

    ID_0 = "admin";
    PWD_0 = "admin";
    if(!strcmp(id_entered, ID_0))
    {
        printf("\t%s -> correct ID\n", id_entered);
        if(!strcmp(pwd_entered, PWD_0))
        {
            printf("\t%s -> correct PWD\n", id_entered);
            gtk_main_quit();
        }
        else
        {
            printf("\t%s -> erroneous PWD\n", id_entered);
        }
    }
    else
    {
        printf("\t%s -> erroneous ID\n", id_entered);
    }
}

void verification_on_ok_button(GtkWidget *ok_button, gpointer data)
{
    GtkWidget *id_entry;                                                                                                        printf("verification_on_ok_button\n");
    GtkWidget *pwd_entry;
    GList *list;
    const gchar *id_entered;
    const gchar *pwd_entered;
    gchar *ID_0;
    gchar *PWD_0;

    list = gtk_container_get_children(GTK_CONTAINER((GtkWidget*) data));
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    list = g_list_next(list);
    id_entry = GTK_WIDGET(list->data);
    id_entered = gtk_entry_get_text(GTK_ENTRY(id_entry));

    list = g_list_next(list);
    pwd_entry = GTK_WIDGET(list->data);
    pwd_entered = gtk_entry_get_text(GTK_ENTRY(pwd_entry));

    ID_0 = "admin";
    PWD_0 = "admin";
    if(!strcmp(id_entered, ID_0))
    {
        printf("\t%s -> correct ID\n", id_entered);
        if(!strcmp(pwd_entered, PWD_0))
        {
            printf("\t%s -> correct PWD\n", id_entered);
            gtk_main_quit();
        }
        printf("\t%s -> erroneous PWD\n", id_entered);
    }
    else
    {
        printf("\t%s -> erroneous ID\n", id_entered);
    }
}


Voili voilou et dans les trois cas je n'obtiens pas d'erreur dans le build log ou le build message (je travaille avec Code::Blocks). Le programme cesse simplement de fonctionner après que j'ai appuyer sur Entrée ou clicker sur le bouton Ok. Je vais aussi faire une petite vidéo YT pour vous montrer explicitement le problème. Le lien va suivre ;)

www.youtube.com/watch?v=0FlDvJkBUs0

Merci pour votre aide future qui j'espère va m'aider à résoudre ce problème ^^

Coordialement, Mona Lisa ;-P




Aucun commentaire:

Enregistrer un commentaire