Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1119 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  [Ada+Gtk] Gtkada Ctree ou Tree Folder.... difficultés

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Ada+Gtk] Gtkada Ctree ou Tree Folder.... difficultés

n°2081472
Profil sup​primé
Posté le 09-06-2011 à 05:39:19  answer
 

Bonjour,
Je suis amateur en programmation, et j'ai peu d'expérience en graphique.
J'essaye de fair avec GtkAda, un arbre bianire à l'aide  de Gtk.Ctree.
 
J'ai créé la fenêtre, et le ctree, et j'arrive tant bien que mal à construire un truc, mais :
J'ai pas le texte associé à chaque noeud.
J'ai pas l'image associée à chaque noeud.
Je voudrais vider l'arbre, je sais pas comment.
Bref, j'aurais besoin que quelqu'un jette un oeil à mon code.
 
Screen_shot : http://hfr-rehost.net/thumb/self/pic/6273cef3eefd2a42f3c9443e5a8e159c14e1992b.jpeg
 
 
 
 
Ce programme construit un arbre binaire contenant les réel 0.0 ou 1.0.
En gros pour 0.0 on ajoute à gauche, pour 1.0 on ajoute à droite.
Bref, j'ai un arbre bianire.
Je voudrais construire le tree folder à l'image de mon arbre bianire.
 
L'alogo général pour une itération après initialisation
 - on ajoute le nouveau noeud.
 - on appelle une fonction récursive de rétropropagation pour reconstruire l'arbre.
 
Voici la procédure récursive en question :
 

Code :
  1. procedure Unfree(Main_Window : in out Main_Window_type) is
  2.      Saved_Node : Node_Access := Main_Window.Next;
  3.      Save_Ctree_Node : Gtk.Ctree.Gtk_Ctree_Node;
  4.  
  5.      Text : Interfaces.C.Strings.Chars_Ptr_Array (Title'Range);
  6.      Style : Gtk.Style.Gtk_Style;
  7.      Tmp_Color : Gdk.Color.Gdk_Color;
  8.  
  9.      use type Gtk_Ctree_Line_Style;
  10.  
  11.   begin
  12.      Main_Window.Save_Left := Main_Window.Locale_Value;
  13.      Main_Window.Save_Right := Main_Window.Locale_Value;
  14.      if Main_Window.Next.Left /= null then
  15.         Main_Window.Next := Main_Window.Next.Left;
  16.         Unfree(Main_Window);
  17.      end if;
  18.  
  19.      Main_Window.Locale_Value := Main_Window.Save_Left;
  20.      Main_Window.Next := Saved_Node;
  21.      declare
  22.         procedure Get_Input(Pattern : in Positive;
  23.                             Input   : out Node_Set;
  24.                             Desired : out Node_Set) is
  25.         begin
  26.            Input := (Main_Window.next.Node.Value(1), Main_Window.Save_left);
  27.            Desired := (1 => 0.0);
  28.         end Get_Input;
  29.  
  30.         package Binary_NN is new REM_NN(Num_Input_Nodes => 2,
  31.                                         Num_Hidden_Nodes => 2,
  32.                                         Num_Output_Nodes => 1,
  33.                                         Num_Patterns => 1,
  34.                                         New_Random_Weights => False,
  35.                                         Input_To_Output_Connections => False,
  36.                                         Weight_File_Name => "node 1.wgt",
  37.                                         Get_Input => Get_Input);
  38.         Response : Node_Set(1..1);
  39.  
  40.      begin
  41.  
  42.         Binary_NN.Respond(1, Response);
  43.         Main_Window.Locale_Value := Response(1);
  44.  
  45.         if Main_Window.Locale_Value > 0.5 then
  46.            Main_Window.Locale_Value := 1.0;
  47.         else
  48.            Main_Window.Locale_Value := 0.0;
  49.         end if;
  50.         Main_Window.Next.Node.Value(1) := Main_Window.Locale_Value;
  51.      end;
  52.  
  53.  
  54.      -- Ajouter un noeud Ctree
  55.  
  56.  
  57.      Main_Window.parent := Gtk.Ctree.Insert_Node
  58.        (Main_Window.Ctree,
  59.         Parent => Main_Window.Parent,
  60.         Sibling => Main_Window.Sibling,
  61.         Text => Text,
  62.         Spacing => 5,
  63.         Pixmap_Closed => Pixmap1,
  64.         Mask_Closed => Mask1,
  65.         Pixmap_Opened => Pixmap2,
  66.         Mask_Opened => Mask2,
  67.         Is_Leaf => False,
  68.         Expanded => False);
  69.  
  70.      if Main_Window.Locale_Value = 1.0 then
  71.         Node_Set_Text(Main_Window.Ctree, Main_Window.Parent, 50, "Right" );
  72.      else
  73.         Node_Set_Text(Main_Window.Ctree, Main_Window.Parent, 50, "Left" );
  74.      end if;
  75.      Ctree_Style_Row_Data.Node_Set_Row_Data
  76.        (Main_Window.Ctree, Node => Main_Window.parent, Data => Style);
  77.  
  78.      if Gtk.Ctree.Get_Line_Style (Main_Window.Ctree) = Ctree_Lines_Tabbed then
  79.         Gtk.Ctree.Node_Set_Row_Style
  80.           (Main_Window.Ctree, Node => Main_Window.parent, Style => Style);
  81.      end if;
  82.      Free (Text);
  83.  
  84.      if Main_Window.Locale_Value = 1.0 then
  85.         put('1');
  86.      else
  87.         put('0');
  88.      end if;
  89.  
  90.      if Main_Window.Next.Right /= null then
  91.         Main_Window.Next := Main_Window.Next.Right;
  92.         Unfree(Main_Window);
  93.      end if;
  94.      Main_Window.Next := Saved_Node;
  95.   end Unfree;


 
Procedure d'initialisation (la parrtie sur l'initialisation du Ctree) :
 

Code :
  1. Text := "Root" + "";
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.      Gtk.Style.Gtk_New (Style);
  9.      Gdk.Color.Set_Rgb (Tmp_Color, Red => 0, Green => 45_000, Blue => 55_000);
  10.      Gtk.Style.Set_Base (Style,
  11.                          State_Type => State_Normal,
  12.                          Color => Tmp_Color);
  13.      Ctree_Style_Row_Data.Node_Set_Row_Data
  14.        (Main_Window.Ctree, Node => Main_Window.Parent, Data => Style);
  15.  
  16.      if Gtk.Ctree.Get_Line_Style (Main_Window.Ctree) = Ctree_Lines_Tabbed then
  17.         Gtk.Ctree.Node_Set_Row_Style (Main_Window.Ctree, Node => Main_Window.Parent, Style => Style);
  18.      end if;
  19.      Main_Window.Parent := Gtk.Ctree.Insert_Node (Main_Window.Ctree,
  20.                                                   Parent => Gtk.Ctree.Null_Ctree_Node,
  21.                                                   Sibling => Gtk.Ctree.Null_Ctree_Node,
  22.                                                   Text => Text,
  23.                                                   Spacing => 5,
  24.                                                   Pixmap_Closed => Pixmap1,
  25.                                                   Mask_Closed => Mask1,
  26.                                                   Pixmap_Opened => Pixmap2,
  27.                                                   Mask_Opened => Mask2,
  28.                                                   Is_Leaf => False,
  29.                                                   Expanded => True);
  30.      Free (Text);
  31.      Put_Line(" : Sibling...Done...." );
  32.      Ctree_Style_Row_Data.Node_Set_Row_Data
  33.        (Main_Window.Ctree, Node => Main_Window.Sibling, Data => Style);
  34.  
  35.      if Gtk.Ctree.Get_Line_Style (Main_Window.Ctree) = Ctree_Lines_Tabbed then
  36.         Gtk.Ctree.Node_Set_Row_Style
  37.           (Main_Window.Ctree, Node => Main_Window.Sibling, Style => Style);
  38.      end if;
  39.      Free (Text);
  40.  
  41.      Gtk.Ctree.Thaw (Main_Window.Ctree);


 
Mon problème je pense en premier lieu serait de comprendre le fonctionnement de Gtk.Ctree.Insert_Node.
Je dois mettre éventuellement deux dossier dans un. et ainsi de suite.
 
Merci pour votre aide.

mood
Publicité
Posté le 09-06-2011 à 05:39:19  profilanswer
 

n°2081549
Profil sup​primé
Posté le 09-06-2011 à 12:08:31  answer
 

Bonjour,
 
j'ai pas fait grand chose depuis ce matin.
J'ai un peu épuré mon code Gtk, ça tourne mieux. Je n'ai toujours pas les image ni le texte associé au noeud mais c'est un détail.
Je planche maintenant sur la méthode pour construire et reconstruire le Ctree avec mon arbre.
Comme je l'ai peut-être dit un peu courtement, je compte construire l'arbre dans la procédure récussive Unfree qui parcours l'arbre pour le mettre à jour après l'ajout d'un noeud.
 
Pour le moment j'ajoute simplement chaque noeud au noeud précédent.
Il faut que je trouve comment reproduire mon arbre avec Ctree.
Mais je ne sais pas si de par ma fonction récursive Unfree ce soit possible ou pas.
Et j'ai aucune idée de comme gruger si non.

n°2081550
GrosBocdel
Posté le 09-06-2011 à 12:16:35  profilanswer
 

FInalement tu n'es pas parti sur Qt.
Je me demande si CTree n'est pas l'ancienne version à ne plus utiliser, et qu'il faudrait utiliser GtkTreeView.
En ada j'en sais rien, c'est peut-etre encore wrappé sur l'ancienne version...

n°2081552
Profil sup​primé
Posté le 09-06-2011 à 12:23:32  answer
 

Finalement non. j'ai voulue installer QtAda, ça a foiré, j'ai pas insisté.
 
Oui, j'ai pas fait gaffe, à propos de Ctree :

Code :
  1. --  <description>
  2. --  This widget is deprecated. Use Gtk.Tree_View instead.


 
Merci GrosBoc.
 
edit quoi qu'il en soit je reste sur Ctree, je préfère en fait.


Message édité par Profil supprimé le 09-06-2011 à 12:31:29
n°2081670
Profil sup​primé
Posté le 09-06-2011 à 19:02:38  answer
 

Bonjour, ou re...
 
J'ai réussi à faire un arbre. Mais je pense pas que ce soit le bon.
Au cas ou, je ne sais si finalement, ma recherche de facilité facilitera la lecture ; Néanmoins, je vous poste mes sources pour ceux et celles qui désirraient tester le programme : http://www.toofiles.com/fr/oip/doc [...] 10tar.html
 
J'ai essentiellement Trois problèmes : 1) construire l'abre du Ctree à l'image de celui construit par ailleurs ; 2) Réinitialiser le Ctree ; 3) Le scroll horizontal ne fonctionne pas.


Message édité par Profil supprimé le 09-06-2011 à 19:03:21
n°2081687
Profil sup​primé
Posté le 09-06-2011 à 20:41:54  answer
 

Point 2) done.
Il suffisait de déplacer l'initialisation du Ctree, dans chacune des boucle diteration dans la tache Process.
Ca fonctionne beaucoup mieux du coup.


Message édité par Profil supprimé le 09-06-2011 à 20:42:18

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  [Ada+Gtk] Gtkada Ctree ou Tree Folder.... difficultés

 

Sujets relatifs
Difficultés pour appeler une méthodeProblème lors de l'import de GTK
Problème de généricité avec AdaEncore un problème avec les Socket avec Ada
Comment procéder pour faire de la logique booléenne avec Ada[Ada] [Résolu] Problème d'encodage de caractères avec Ada sur Windows
[GtkAda] Déplacement de widget dans un Gtk_Fixedrécupérer tout les élements d'un tree
[GtkAda] [ résolu ] Click droit dans un Gtk_Fixed. 
Plus de sujets relatifs à : [Ada+Gtk] Gtkada Ctree ou Tree Folder.... difficultés


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR