Gtk# : Avoir un renderer différent en fonction du niveau dans l'arbre

Gtk# : Avoir un renderer différent en fonction du niveau dans l'arbre - C#/.NET managed - Programmation

Marsh Posté le 09-08-2004 à 12:03:51    


Bonjour,
 
 
J'essai de développer une petite application perso avec Mono et Gtk#.
L'application comporte un treeview.  
 
En Gtk#, les treeviews suivent le modèle MVC avec le composant Gtk.TreeView qui s'occupe de l'affichage (view) et l'interface Gtk.TreeModel qui s'occupe donc du modèle de données.
 
Le rendu du treeview s'effectue donc au niveau du Gtk.TreeView (par exemple la 1er colonne sera une image, la 2e du texte et la 3e une case à cocher).
 
Ce que je voudrai obtenir c'est d'avoir la possibilité d'avoir un rendu différent en fonction du niveau où on se trouve.
 
Pour être plus clair je prend l'exemple de Gaim car je souhaite obtenir le même effet : le 1er niveau (celui des groupes) est rendu en tant que texte gras) tandis que les éléments du niveau inférieur (celui des contacts) sont rendu avec une icone et un texte.
 
Bon je sais pas si j'ai été clair  :sweat: mais merci de m'aider


---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 09-08-2004 à 12:03:51   

Reply

Marsh Posté le 11-08-2004 à 11:20:58    

Reparge du cote de TreeViewColumn.
Tu doit pourvoir y spécifier un CellRenderer

Reply

Marsh Posté le 11-08-2004 à 19:13:57    

pascal34 a écrit :

Reparge du cote de TreeViewColumn.
Tu doit pourvoir y spécifier un CellRenderer


 
Ok mais je n'ai pas de problème avec le TreeViewColumn (enfin je crois). J'arrive à avoir les renderers que je veux pour chaque colonne.
 
Ce que je voudrai ce que pour chaque niveau le 1er niveau du TreeView puisse avoir un renderer différent des niveaux suivants.
 
Par exemple, j'ai l'arbre suivant :
- Item 1
+ - Item 11
+ - Item 12
+ - Item 13
- Item 2
+ - Item 21
+ - Item 22
+ + - Item 221
- Item 3
 
Je voudrai par exemple que le 1er niveau(Item 1, Item 2 et Item 3) soit rendu en tant qu'image et le 2e (Item 11, Item 12, Item 13, Item 21, Item 22) en texte ou en case à cocher par exemple.
 
Je commence à me demander si la seule solution qui me reste et d'implémenter moi même l'interface TreeModel (ListStore et TreeStore sont les modèles génériques fournit) en créeant un objet ou chaque élément serait aussi une treeview et ainsi de suite. Mais ça me parait lourd et j'aimerai pouvoir faire autrement :/
 
Si quelqu'un a une autre idée merci :hello:n]


---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 11-08-2004 à 21:24:50    

Salut, moi j'ai un treeView code en XSLT a partir d'un fichier XML.  Si tu est interesse je te post le code tu as juste a me le dire sur le forum.

Reply

Marsh Posté le 12-08-2004 à 08:52:03    

Je pense que tu dois mettre un CellRenderer par colonne et ensuite chaque renderer doit gérer ce qu'il a à afficher en fonction de l'élément courant
Mais tu ne dois pas pouvoir mettre un renderer par élément


Message édité par pascal34 le 12-08-2004 à 08:52:34
Reply

Marsh Posté le 12-08-2004 à 10:17:51    

dex33 a écrit :

Salut, moi j'ai un treeView code en XSLT a partir d'un fichier XML.  Si tu est interesse je te post le code tu as juste a me le dire sur le forum.


 
Ça concerne Gtk#? Si oui je suis preneur mais là j'ai l'impression que tu me propose qqch pour le web


---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 12-08-2004 à 10:19:51    

pascal34 a écrit :

Je pense que tu dois mettre un CellRenderer par colonne et ensuite chaque renderer doit gérer ce qu'il a à afficher en fonction de l'élément courant
Mais tu ne dois pas pouvoir mettre un renderer par élément


 
Donc je dois moi même faire mon propre renderer et choisir en fonction du type de l'objet ce que je veux afficher.  
 
Je vais regarder de ce côté là (ça me parait déjà plus simple que de faire mon propre TreeModel) et je tiens au courant si j'arrive à qqch.


---------------
http://anothergeekwebsite.com
Reply

Marsh Posté le 18-08-2004 à 12:45:05    

Voilà j'ai enfin trouvé une solution que me convient à peu prés.
 
pascal34 c'était bien du côté du CellRenderer, merci :jap:
 
J'utilise le fait qu'il est possible d'avoir plusieurs CellRenderer pour une colonne TreeViewColumn donnée. Je mets donc un CellRendererText pour afficher les valeurs du modèle et un CellRendererPixbuf pour afficher une image.  
Peu importe que le modèle ne contienne que des données de type texte. Le CellRendererPixbuf ne prend en effet pas sa valeur directement dans le modèle. Pour lui dire d'afficher telle ou telle image, il faut passer par la méthode TreeViewColumn.SetCellDataFunc() qui effectuera les modification que l'on voudra, indépendament du modèle.
 
 
Autre question :
Comment faire pour créer une image vide?
En effet j'ai essayé de faire :

Code :
  1. CellRenderePixbuf pix = (CellRendererPixbuf)cell;
  2. pix.Pixbuf = null;


mais il veut pas. Il y'a bien sur la possiblité de créer un fichier image vide et de faire un pix.Pixbuf = new Gdk.Pixbuf("vide.png" ) mais si y'a un autre moyen ce serait bien


---------------
http://anothergeekwebsite.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed