Řazení

Standardní stromové modely (TreeStore a ListStore) jsou odvozené z TreeSortable, takže nabízejí funkci řazení. Například zavoláním set_sort_column() seřadíte model podle určeného sloupce. Nebo, když chcete složitější algoritmus řazení, poskytněte funkci zpětného volání do set_sort_func().

TreeSortable Reference

10.5.1. Řazení klikáním na sloupce

Aby uživatel mohl kliknutím na záhlaví sloupce v TreeView seřadit obsah TreeView, je potřeba zavolat metodu Gtk::TreeView::Column::set_sort_column(), které předáte sloupec modelu, na jehož modelu se má řadit, když uživatel na záhlaví klikne. Například:

auto pColumn = treeview.get_column(0);
if(pColumn)
  pColumn->set_sort_column(m_columns.m_col_id);

10.5.2. Nezávisle řazená zobrazení téhož modelu

The TreeView already allows you to show the same TreeModel in two TreeView widgets. If you need one of these TreeViews to sort the model differently than the other then you should use a TreeModelSort instead of just, for instance, Gtk::TreeViewColumn::set_sort_column(). TreeModelSort is a model that contains another model, presenting a sorted version of that model. For instance, you might add a sorted version of a model to a TreeView like so:

auto sorted_model = Gtk::TreeModelSort::create(model);
sorted_model->set_sort_column(columns.m_col_name, Gtk::SORT_ASCENDING);
treeview.set_model(sorted_model);

Všimněte si, že TreeView bude poskytovat iterátory řazenému modelu. Abyste mohli provádět akce na daném modelu, musíte je převést na iterátory do podkladového podřízeného modelu. Například:

void ExampleWindow::on_button_delete()
{
  auto refTreeSelection = m_treeview.get_selection();
  if(refTreeSelection)
  {
    auto sorted_iter = m_refTreeSelection->get_selected();
    if(sorted_iter)
    {
      auto iter = m_refModelSort->convert_iter_to_child_iter(sorted_iter);
      m_refModel->erase(iter);
    }
  }
}

TreeModelSort Reference