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 :

Comment récupérer le fichier sélectionné avec gtk_recent_chooser_dialog_new widget


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut Comment récupérer le fichier sélectionné avec gtk_recent_chooser_dialog_new widget
    Comment récupérer le fichier sélectionné avec un widget gtk_recent_chooser_dialog_new
    Ci-dessous voici mon code de demo

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <gtk/gtk.h>
        //recentchooserdialog.c
        /*
        gcc -std=c11 -Wall -fmax-errors=10 -Wextra recentchooserdialog.c -o recentchooserdialog `pkg-config --cflags --libs gtk+-3.0 `
        */
     
        int main(int argc, char *argv[])
        {    
            gtk_init(&argc, &argv);
            gboolean multiple = FALSE;
            //GList * files;
            GtkRecentInfo *info;
            gchar *chemin = NULL;
     
            GtkWidget *recentchooserdialog = gtk_recent_chooser_dialog_new("RecentChooserDialog", NULL, 
        							("_Cancel"), GTK_RESPONSE_CANCEL, 
        							("_Open"), GTK_RESPONSE_OK, NULL);
     
        	gtk_recent_chooser_set_limit(GTK_RECENT_CHOOSER(recentchooserdialog),-1);
        	gtk_recent_chooser_set_show_tips(GTK_RECENT_CHOOSER(recentchooserdialog),TRUE);
        	gtk_recent_chooser_set_select_multiple(GTK_RECENT_CHOOSER(recentchooserdialog), multiple);
     
            if (gtk_dialog_run(GTK_DIALOG(recentchooserdialog)) == GTK_RESPONSE_OK)
        	{
        		info = gtk_recent_chooser_get_current_item (GTK_RECENT_CHOOSER (recentchooserdialog));
        		if (multiple==TRUE)
        		{
        			/** how to get file names selected here **/
     
        		}
        		else
        		{
        			/** how to get one single filename selected here **/
        			// GtkRecentInfo *info;
        			info = gtk_recent_chooser_get_current_item (GTK_RECENT_CHOOSER (recentchooserdialog));
        			if (info)
        				g_print("structur info exists\n ");
        			/* below is not the good casting */
                    chemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(recentchooserdialog));
                    g_print("selected path %s\n",chemin);
        		}
        		gtk_recent_info_unref (info);
        	}
        	gtk_widget_destroy (recentchooserdialog);
            return 0;
        }
    Après de multiples recherches infructueuses je n'ai rien trouvé d'inspirant
    Alors que pour un widget gtk_file_chooser_dialog_new on trouve la commande qui va bien avec

    gtk_file_chooser_get_filename ou gtk_file_chooser_get_filenames action
    j'ai du raté quelques peu le lien d'héritage et le bon niveau commun entre un gtk_file_chooser_dialog et un gtk_recent_chooser_dialog


    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
    void cb_open (GtkWidget *widget, gpointer user_data)
        {
          GtkWidget *dialog = NULL;
          GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
     
          dialog = gtk_file_chooser_dialog_new ("Ouvrir un fichier", NULL,
                                                  action,
                                                  ("_Cancel"),
                                                  GTK_RESPONSE_CANCEL,
                                                  ("_Open"),
                                                  GTK_RESPONSE_ACCEPT,
                                                  NULL);
     
          if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
          {
            gchar *file_name = NULL;
     
            file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
            g_print("fichier ouvert : %s \n",file_name);
     
            g_free (file_name), file_name = NULL;
          }
          gtk_widget_destroy (dialog);
        }
    Quel serait l'action à passer pour récupérer une sélection multiple et surtout un chemin de fichier valide

    Merci d'avance de l'aide apportée

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut
    J'ai trouvé une partie de la solution pour les sélections d'un seul fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    text_info = gtk_recent_info_get_uri (info);
    mais en même temps que je poste je me rends compte
    que je n'ai pas géré l'entrée et la conversion unicode pour un chemin avec des caractères accentués

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <gtk/gtk.h>
    //recentchooserdialog.c
    /*
    gcc -std=c11 -Wall -fmax-errors=10 -Wextra recentchooserdialog.c -o recentchooserdialog `pkg-config --cflags --libs gtk+-3.0 `
    */
     
    int main(int argc, char *argv[])
    {    
        gtk_init(&argc, &argv);
        gboolean multiple = FALSE;
        //GList * files;
        GtkRecentInfo *info;
        const gchar *text_info = NULL;
     
        GtkWidget *recentchooserdialog = gtk_recent_chooser_dialog_new("RecentChooserDialog", NULL, 
                                ("_Cancel"), GTK_RESPONSE_CANCEL, 
                                ("_Open"), GTK_RESPONSE_OK, NULL);
     
        gtk_recent_chooser_set_limit(GTK_RECENT_CHOOSER(recentchooserdialog),-1);
        gtk_recent_chooser_set_show_tips(GTK_RECENT_CHOOSER(recentchooserdialog),TRUE);
        gtk_recent_chooser_set_select_multiple(GTK_RECENT_CHOOSER(recentchooserdialog), multiple);
     
        if (gtk_dialog_run(GTK_DIALOG(recentchooserdialog)) == GTK_RESPONSE_OK)
        {
            info = gtk_recent_chooser_get_current_item (GTK_RECENT_CHOOSER (recentchooserdialog));
            if (multiple==TRUE)
            {
                /** how to get file names selected here **/
     
            }
            else
            {
                /** how to get one single filename selected here **/
                info = gtk_recent_chooser_get_current_item (GTK_RECENT_CHOOSER (recentchooserdialog));
                if (info)
                {
                    text_info = gtk_recent_info_get_uri (info);
                    g_print("une structure info existe %s\n", text_info);
                }
            }
            gtk_recent_info_unref (info);
        }
        gtk_widget_destroy (recentchooserdialog);
        return 0;
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2015, 01h58
  2. Réponses: 1
    Dernier message: 15/09/2008, 10h21
  3. Réponses: 0
    Dernier message: 29/04/2008, 15h33
  4. Réponses: 3
    Dernier message: 13/12/2005, 00h21
  5. [BCB 5]Comment lire un fichier AVI avec un TAnimate ?
    Par Sitting Bull dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2004, 11h57

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