Ταξινόμηση

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

TreeSortable Reference

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

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

Gtk::TreeView::Column* pColumn = treeview.get_column(0);
if(pColumn)
  pColumn->set_sort_column(m_columns.m_col_id);

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

Η TreeView επιτρέπει ήδη να εμφανίσετε την ίδια TreeModel σε δύο γραφικά συστατικά TreeView. Αν χρειάζεστε μια από αυτές τις TreeViews για να ταξινομήσετε το πρότυπο διαφορετικά από την άλλη, τότε θα πρέπει να χρησιμοποιήσετε μια TreeModelSort αντί για απλώς, για παράδειγμα, Gtk::TreeViewModel::set_sort_column(). Η TreeModelSort είναι ένα πρότυπο που περιέχει ένα άλλο πρότυπο, που παρουσιάζει μια ταξινομημένη έκδοση αυτού του προτύπου. Για παράδειγμα, μπορεί να προσθέσετε μια ταξινομημένη έκδοση ενός προτύπου σε μια TreeView ως εξής:

Glib::RefPtr<Gtk::TreeModelSort> 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()
{
  Glib::RefPtr<Gtk::TreeSelection> refTreeSelection =
      m_treeview.get_selection();
  if(refTreeSelection)
  {
    Gtk::TreeModel::iterator sorted_iter =
        m_refTreeSelection->get_selected();
    if(sorted_iter)
    {
      Gtk::TreeModel::iterator iter =
          m_refModelSort->convert_iter_to_child_iter(sorted_iter);
      m_refModel->erase(iter);
    }
  }
}

TreeModelSort Reference