La selección
Para descubrir qué filas ha seleccionado el usuario, obtenga el objeto Gtk::TreeView::Selection del TreeView, así:
Glib::RefPtr<Gtk::TreeSelection> refTreeSelection = m_TreeView.get_selection();
- 9.4.1. Selección única o múltiple
- 9.4.2. Las filas seleccionadas
- 9.4.3. La señal «changed»
- 9.4.4. Evitar la selección de la fila
- 9.4.5. Cambiar la selección
9.4.1. Selección única o múltiple
De manera predeterminada, sólo se pueden seleccionar filas únicas, pero puede permitir la selección múltiple estableciendo el modo, así:
refTreeSelection->set_mode(Gtk::SELECTION_MULTIPLE);
9.4.2. Las filas seleccionadas
Para la selección simple, puede simplemente llamar get_selected(), así:
TreeModel::iterator iter = refTreeSelection->get_selected(); if(iter) //If anything is selected { TreeModel::Row row = *iter; //Do something with the row. }
Para la selección múltiple, debe definir un retorno llamada, y pasárselo a selected_foreach(), selected_foreach_path(), o selected_foreach_iter(), así:
refTreeSelection->selected_foreach_iter( sigc::mem_fun(*this, &TheClass::selected_row_callback) ); void TheClass::selected_row_callback( const Gtk::TreeModel::iterator& iter) { TreeModel::Row row = *iter; //Do something with the row. }
9.4.3. La señal «changed»
Para responder a la pulsación del usuario en una fila o un rango de filas, conéctese a la señal así:
refTreeSelection->signal_changed().connect( sigc::mem_fun(*this, &Example_StockBrowser::on_selection_changed) );
9.4.4. Evitar la selección de la fila
Tal vez, el usuario no deba ser capaz de seleccionar todos los elementos en su lista o árbol. Por ejemplo, en gtk-demo, puede seleccionar una demostración para ver su código fuente, pero no tiene ningún sentido seleccionar una categoría de demostraciones.
Para controlar qué filas pueden seleccionarse, use el método set_select_function(), proporcionándole un retorno de llamada sigc::slot. Por ejemplo:
m_refTreeSelection->set_select_function( sigc::mem_fun(*this, &DemoWindow::select_function) );
Y luego
bool DemoWindow::select_function( const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool) { const Gtk::TreeModel::iterator iter = model->get_iter(path); return iter->children().empty(); // only allow leaf nodes to be selected }
9.4.5. Cambiar la selección
Para cambiar la selección, especifique un Gtk::TreeModel::iterator o un Gtk::TreeModel::Row, así:
Gtk::TreeModel::Row row = m_refModel->children()[5]; //The fifth row. if(row) refTreeSelection->select(row);
o
Gtk::TreeModel::iterator iter = m_refModel->children().begin() if(iter) refTreeSelection->select(iter);