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 :

[Gtk+][Gtkada-2.24] Tree_View : ligne première vide à l'affichage des variables d'environnement Gnu/Linux


Sujet :

GTK+ avec C & C++

  1. #1
    Invité
    Invité(e)
    Par défaut [Gtk+][Gtkada-2.24] Tree_View : ligne première vide à l'affichage des variables d'environnement Gnu/Linux
    Bonjour,
    Donc, merci déjà de votre lecture, et comme l'indique le titre, j'affiche les variables d'environnement sur Xorg avec Gnome et GtkAda-2.24 dans un système Debian Jessie tout neuf, et la première ligne est vide, je cherche l'astuce qui fait que c'est ainsi.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Quelle fonction utilises-tu pour récupérer les variables d'environnement ? Comment utilises-tu ton GtkTreeView ?

    Sans un peu de code sans va être dur de te répondre.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Gerald.

    je récupère les varaiable d'environnment ave /usr/bin/env grace à un appel système via un Spwan.
    Spawn me répond dans un fichier et je lis chaque ligne du fichier pour les ajouter au Tree_View.



    Voici le code de récupération dans un tableau du fichier avant de le passer à Gtk.
    Code ada : 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
     
    Spawn_Result.File_Content := new Variadic_Array(1..1);
     
    Text_Io.Open(File, Text_Io.In_File, (-Spawn_Result.Output_File))\
    ;
    while not Text_Io.End_Of_File(File) loop
     
                      declare
     
                         Line : constant String := Text_Io.Get_Line(File);
                         Buffer : Variadic_Array(1..Spawn_Result.File_Content'Length+1);
                      begin
     
                         if Spawn_Result.File_Content /= null then
     
                            Buffer(Buffer'First..Buffer'Last-1) := Spawn_Result.File_Content.all;
     
                         end if;
     
                         Buffer(Buffer'Last) := (+Line);
     
                         Spawn_Result.File_Content := new Variadic_Array ' (Buffer)\
    ;
                      end;
    end loop;

    La procédure Add_Line pour ajouter chaque ligne au model.
    Code ada : 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
     
     --------------                                                               
       -- Add_Line --                                                               
       --------------                                                               
     
       function Add_Line
         (Model    : access Gtk_Tree_Store_Record'Class;
          Name     : String;
          Value     : String;
          Parent   : Gtk_Tree_Iter := Null_Iter) return Gtk_Tree_Iter
       is
          Iter : Gtk_Tree_Iter;
       begin
          --  The implementation here is not the most efficient: it is often easier
          --  to import yourself the function gtk_tree_store_set with the correct   
          --  set of arguments, as shown in the example in gtk-tree_store.ads       
     
          Append (Model, Iter, Parent);
     
          Set (Model, Iter, 0, Name);
          Set (Model, Iter, 1, Value);
     
          return Iter;
       end Add_Line;

    La procedure Run qui applique l'appel système et rempli le Tree_View
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
       procedure Run (Tree_View : access Gtk.Tree_View.Gtk_Tree_View_Record'Class) is
          Model    : Gtk_Tree_Store;
     
     
          Col      : Gtk_Tree_View_Column;
          Num      : Gint;
          Text_Render   : Gtk_Cell_Renderer_Text;
          Toggle_Render : Gtk_Cell_Renderer_Toggle;
          Parent, Iter  : Gtk_Tree_Iter;
          pragma Unreferenced (Num);
          pragma Warnings (Off, Iter);
     
     
          Result : Result_Access;
     
          Search_Result : Posix_Interface.Search_Result_Type;
          Spawn_Result  : Posix_Interface.Spawn_Result_Type;
       begin
     
          Gtk_New (Model,
                   (0       => GType_String,
                    1       => GType_String));
     
          initialize (Tree_View, Model);
          Set_Grid_Lines (Tree_View, Grid_Lines_Vertical);
          Set_Enable_Tree_Lines (Tree_View, True);
          Set_Rubber_Banding (Tree_View, True);
          Set_Mode (Get_Selection (Tree_View), Selection_Multiple);
     
          Gtk_New (Text_Render);
          Gtk_New (Col);
          Num := Append_Column (Tree_View, Col);
          Set_Sort_Column_Id (Col, 0);
          Set_Title (Col, "Name");
          Pack_Start (Col, Text_Render, True);
          Set_Sizing (Col, Tree_View_Column_Autosize);
          Add_Attribute (Col, Text_Render, "text", 0);
     
          Gtk_New (Col);
          Set_Sort_Column_Id (Col, -1);  --  unsortable                             
          Num := Append_Column (Tree_View, Col);
          Set_Title (Col, "Value");
          Pack_Start (Col, Text_Render, False);
          Add_Attribute (Col, Text_Render, "text", 1);
     
     
          Set_Headers_Clickable (Tree_View, True);
          Set_Sort_Func (+Model, 0, Custom_Sort'Access);
     
          Shell.Arch_Shell.Respond(EnvironmentParameters, "");
          Shell.Arch_Shell.Response(Archman_Shell_Response);
          Shell.To_Result(Archman_Shell_Response(EnvironmentParameters).all, Result);
     
          for I in Result.File_Content'Range loop
     
             declare
                Environment_Variable : constant string := (-Result.File_Content(I));
             begin
                Parent := Null_Iter;
                Iter := Add_Line
                  (Model,
                   Name => Environment_Variable(Positive'First..Fixed.Index(Environment_Variable, "=")-1),
                   Value => Environment_Variable(Fixed.Index(Environment_Variable, "=")+1..Environment_Variable'last));
                Parent := Iter;
             end;
          end loop;
       end Run;
    Merci Gerald.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Pour commencer il existe la fonction g_get_env(); (version C). N'existe-t-elle pas en Gtkada ? Si oui je pense que ca simplifierait ton code.

    Après j'ai un peu de mal à lire ton code, n'étant pas familiarisé avec ce langage, mais il semble correcte. Avant toute modification, as-tu essayé d'afficher en console le tableau Spawn_Result.File_Content pour voir si la première ligne ne serait pas vide. Parce que, au final, le problème ne vient peut-être pas de la gestion du treeview...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci Gerald, merci pour g_get_env et effectivement j'ai une ligne vide dans tout mes résultat de Spawn.

    Donc c'est pas un problème Gtk.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/10/2014, 16h03
  2. Réponses: 7
    Dernier message: 16/12/2008, 15h36
  3. masquer les lignes dans une zone si une cellule de la ligne est vide
    Par keguira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2006, 18h21
  4. [VBA-E]derniere ligne non vide
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2006, 10h48

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