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+ Discussion :

[VALA] Treeview et refilter


Sujet :

GTK+

  1. #1
    Membre très actif
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut [VALA] Treeview et refilter
    Bonjour,

    Voilà j'ai un treeview et un entry, l'entry me permet de filtrer les lignes du treeview visible.

    voilà mon 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
    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
     
    .....
    	private TreeView tree;
    	private ListStore liststore;
            private TreeModelFilter search_filter;
    	private TreeIter iter;
    	private TreePath path;
    	private TreeSelection selection;
            private Entry filter_entry;
     
    ....
    	    filter_entry.changed.connect(on_filter_entry_text_changed);
    .....
     
    private bool on_button_press_event (Gdk.EventButton event)
    	{
    		TreeViewColumn column;
     
    		this.selection = this.tree.get_selection ();
    		int x = (int)event.x; 
    		int y = (int)event.y;
    		int cell_x, cell_y;
    		if (!(this.tree.get_path_at_pos (x, y, out path, out column, out cell_x, out cell_y))) 
    			return true;
     
     
    		if ((event.type == Gdk.EventType.BUTTON_PRESS) && (event.button == 3 )) {
    			this.selection.get_selected (null, out this.iter);
     
    			this.selection.select_path (path);
    		}
     
    		if (event.button == 3) {
    		    Menu menu = this.builder.get_object ("treeview_menu") as Menu;
    		    menu.show_all ();
    			menu.popup (null, null, null, event.button, event.time);
    			return true;
            }
    		return false;
    	}
     
        private void on_filter_entry_text_changed ()
        {
        	this.tree.model = search_filter;
        	search_filter.refilter ();
        }
     
        private bool filter_tree (TreeModel model, TreeIter iter)
        {
            Value cat_id;
    	    model.get_value (iter, 1, out cat_id);
     
            if (this.category_id == 0)
                return true;
            else if (cat_id.get_int () == this.category_id)
    	        return true;
    	    else
    	        return false;
        }
    Voilà à peu près mon code.
    Le problème est que lorsque je filtre je ne parviens plus à récupérer l'iter selectionné, sans filtrer je parviens.

    Voilà j'espere avoir été clair
    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Je connais pas Vala, donc je vais tenter de te répondre en Python :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select = gui.get_object('treeview').get_selection()
    (model, iter1) = select.get_selected()
    iter2 = model.convert_iter_to_child_iter(iter1)
    liststore.set_value(iter2, column_number, "bla bla")

    La fonction ".get_selected" renvoie sous Python un couple "(model, iter1)", avec "iter1" un TreeIter du TreeModelFilter "model".

    Note : on peut aussi obtenir "model" avec treeview.get_model()

    Or pour accéder au ListStore (pour modifier une donnée par exemple), on ne peut pas utiliser le TreeIter du TreeModelFilter ; il faut d'abord convertir "iter1" en "iter2", qui lui itère le ListStore.

    Dans un de mes programmes, j'ai un TreeModelSort en plus, donc je dois faire une conversion supplémentaire


    J'espère que ça répond à ta question.

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. TreeView -> ajouter un child à un noeud donné
    Par fake dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/03/2003, 17h14
  3. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  4. où y a t il un tutorial pour le Treeview ??
    Par silvermoon dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h30
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

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