Ταξινόμηση

Τα τυπικά πρότυπα δένδρου (TreeStore και ListStore) παράγονται από TreeSortable, έτσι προσφέρουν ταξινόμηση λειτουργικότητας. Για παράδειγμα, καλέστε set_sort_column(), για ταξινόμηση του προτύπου από τη συγκεκριμένη στήλη. Ή δώστε μια συνάρτηση επανάκλησης set_sort_func() για να υλοποιηθεί ένας πιο περίπλοκος αλγόριθμος ταξινόμησης.

TreeSortable Reference

10.5.1. Ταξινόμηση πατώντας στις στήλες

Για να μπορεί ένας χρήστης να πατά σε μία κεφαλίδα στήλης TreeView για να ταξινομήσει τα περιεχόμενα της TreeView, καλέστε Gtk::TreeView::Column::set_sort_column(), παρέχοντας τη στήλη προτύπου στην οποία το πρότυπο πρέπει να ταξινομηθεί, όταν πατηθεί η κεφαλίδα. Για παράδειγμα:

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

10.5.2. Ανεξάρτητα ταξινομημένες προβολές του ίδιου προτύπου

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);

Σημειώστε, όμως, ότι η TreeView θα δώσει επαναλήπτες στο ταξινομημένο πρότυπο. Πρέπει να τους μετατρέψετε σε επαναλήπτες στο υποκείμενο θυγατρικό πρότυπο για να εκτελέσετε ενέργειες σε αυτό το πρότυπο. Για παράδειγμα:

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