IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Recuperation de données [FAQ]


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 10
    Par défaut Recuperation de données
    Bonsoir a tous!

    ça fait 3 jours (depuis que j'ai commencé GTK) que je me prends le choux sur un probleme qui m'a l'air bidon et j'ai besoin de votre aide s'il vous plait.

    Tout dabord je tien a dire que j'ai pas mal cherché sur le net notemment sur GTK+ Reference Manual ICI et je n'ai pas trouvé de solution.

    Je suis entrain de coder une interface pour un projet de compression arithmetique. Mon soucis se trouve lors du listage des fichier à compresser. Je m'explique:
    - J'ai creer une liste qui contiendra le nom_fichier.file et le chemin du dossier où il se trouve. Cette liste est parfaitement remplie et correctement
    - J'ai un boutton "Compresser" et comme son nom l'indique on va applique l'algorithme de compression pour obtenir un seul fichier.

    Le soucis (et c'est la que je galere), c'est que je n'arrive pas a recuperer TOUS les noms de fichiers leurs emplacements.

    J'ai tester pas mal de choses, et le moyen le plus efficace me donne UN nom du fichier UN emplacement QUE lorsque je selectionne UNE ligne dans la liste au moyen d'une "selection".

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
        GtkTreeModel *model;
        GtkTreeSelection *selection;
     
        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
        gtk_tree_selection_get_selection (selection, &model, &iter);
     
        // j'utilise le label juste pour verifier que j'ai bien recuperé les données
        label = lookup_widget(GTK_WIDGET(button), "label49");
     
        gtk_tree_model_get (model, &iter,
                            ID,         &id,
                            FILE_NAME,  &file_name,
                            FILE_PATH,  &file_path,
                            -1);
     
        save_name_size=strlen(file_name);
        path_size=strlen(file_path);
     
        output = (char *)malloc( ( 10  + save_name_size + path_size) * sizeof (char) );
     
        strcpy(output,"\nfichier : ");
        strcat(output,file_name);
        strcat(output,"\ndossier : ");
        strcat(output,file_path);
    J'ai essayé de le tourner ... mais bon rien du tou :'(

    Merci d'avance pour votre aide. SeaX

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonsoir,

    Citation Envoyé par SeaX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        gtk_tree_model_get (model, &iter,
                            ID,         &id,
                            FILE_NAME,  &file_name,
                            FILE_PATH,  &file_path,
                            -1);
    C'est normal, c'est ce que tu demande à GTK+ !

    Voici une fonction que j'utilise pour récupérer une selection multiple (c'est une boîte de dialogue pour supprimer des fichiers d'un projet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    gchar **gide_remove_file_dialog_get_file_path (GideRemoveFileDialog *this)
    {
      gint i = 0;
      gint nb_file = 0;
      gchar **path = NULL;
      GList *files = NULL;
      GtkTreeModel *p_tree_model = NULL;
      GideRemoveFileDialogPrivate *priv = NULL;
     
      g_return_val_if_fail (this != NULL, path);
     
      priv = GIDE_REMOVE_FILE_DIALOG_GET_PRIVATE (this);
      nb_file = gtk_tree_selection_count_selected_rows (priv->p_selection);
      path = sma_malloc (sizeof (*path) * (nb_file + 1));
      files = gtk_tree_selection_get_selected_rows (priv->p_selection,
                                                    &p_tree_model);
      for (; files != NULL; files = g_list_next (files))
      {
        GtkTreeIter iter;
     
        gtk_tree_model_get_iter (p_tree_model, &iter, files->data);
        gtk_tree_model_get (p_tree_model, &iter, FILE_PATH, &path[i], -1);
        sma_register (path[i]);
        i++;
      }
      path[i] = NULL;
      g_list_foreach (files, (GFunc)gtk_tree_path_free, NULL);
      g_list_free (files), files = NULL;
      if (nb_file == 0)
      {
        g_warning (_("No file selected"));
      }
      return path;
    }
    Et un peu de lecture quand à l'utlisation de malloc : Bien utiliser malloc() (g_malloc ne retourne jamais NULL, elle met fin au programme en cas de manque de mémoire).


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 10
    Par défaut
    Merci pour le code, ja vais le tester.

    Le seul petit truc qu'il manque c'est que moi je ne veux pas faire de selection.
    J'ai envie qu'il parcours la liste tout seul et qu'il me renvoie soit
    - un char *path[] : un tableau de path (se terminant par NULL si possible).
    - soit recuperer les donnée ligne par ligne et c'est moi qui traite derriere la creation du char *path[]

    et que dans cette variable j'ai tout les données qu'il me faut pour compresser derriere !

    Merci encore de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [vbexcel]recuperation de données
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/10/2005, 13h01
  2. Mysql LongBlob: recuperer les données
    Par froz dans le forum SGBD
    Réponses: 1
    Dernier message: 24/08/2005, 14h41
  3. PB de recuperation de données en asynchrone !!
    Par Stopher dans le forum C++
    Réponses: 8
    Dernier message: 01/02/2005, 23h20
  4. Recuperer des données d'access
    Par Lucier dans le forum MFC
    Réponses: 18
    Dernier message: 25/11/2004, 10h29
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo