Glisser-déposer

Gtk::TreeView implémente déjà le simple glisser-déposer lorsqu'on l'utilise avec des modèles Gtk::ListStore ou Gtk::TreeStore. Mais, si nécessaire, il vous permet d'implémenter des comportements plus complexes lorsque les éléments sont glissés et déposés en utilisant l'API classique du glisser-déposer.

IX.VI.I. Réarrangement de lignes

Si vous faites appel à la fonction membre Gtk::TreeView::set_reorderable(), les éléments d'un objet TreeView peuvent être déplacés au sein même de la vue arborescente. Ceci est montré dans l'exemple TreeStore.

Toutefois, cela ne vous donne aucun contrôle sur les éléments qu'il est possible de faire glisser et sur l'emplacement où ils peuvent être déposés. Si vous avez besoin de ce contrôle supplémentaire, vous devez créer un Gtk::TreeModel dérivé de Gtk::TreeStore ou Gtk::ListStore et opérer une surdéfinition des fonctions membres virtuelles Gtk::TreeDragSource::row_draggable() et Gdk::TreeDragDest::row_drop_possible(). Vous examinez alors les Gtk::TreeModel::Path fournis et autorisez/interdisez le glisser ou le déposer en renvoyant true ou false.

Cette construction est montrée dans l'exemple du glisser-déposer.