Arrastrar y soltar

Gtk::TreeView ya implementa un simple «arrastrar y soltar» cuando se usa con los modelos Gtk::ListStore o Gtk::TreeStore. Si es necesario, también le permite implementar un comportamiento más complejo cuando se arrastran y sueltan los elementos, usando la API de Arrastrar y soltar normal.

9.6.1. Filas reordenables

Si llama a Gtk::TreeView::set:reorderable, entonces se podrán mover los elementos de su «TreeView» dentro del «TreeView» en sí. Esto se demuestra en el ejemplo TreeStore.

Sin embargo, esto no le permite ningún control acerca de qué elementos pueden arrastrarse, ni dónde pueden soltarse. Si necesita ese control adicional, puede crear un Gtk::TreeModel derivado de Gtk::TreeStore o Gtk::ListStore y sobrecargar los métodos virtuales Gtk::TreeDragSource::row_draggable() y Gdk::TreeDragDest::row_drop_possible(). Puede examinar los Gtk::TreeModel::Path proporcionados y permitir o no arrastrar y soltar devolviendo true o false.

Esto se demuestra en el ejemplo «drag_and_drop».