Skip to content

Gtk.SortListModel

class — extends GObject.Object, Gio.ListModel, SectionModel

A list model that sorts the elements of another model.

The elements are sorted according to a GtkSorter.

The model is a stable sort. If two items compare equal according to the sorter, the one that appears first in the original model will also appear first after sorting.

Note that if you change the sorter, the previous order will have no influence on the new order. If you want that, consider using a GtkMultiSorter and appending the previous sorter to it.

The model can be set up to do incremental sorting, so that sorting long lists doesn't block the UI. See SortListModel.set_incremental for details.

GtkSortListModel is a generic model and because of that it cannot take advantage of any external knowledge when sorting. If you run into performance issues with GtkSortListModel, it is strongly recommended that you write your own sorting list model.

GtkSortListModel allows sorting the items into sections. It implements GtkSectionModel and when SortListModel.section-sorter is set, it will sort all items with that sorter and items comparing equal with it will be put into the same section. The SortListModel.sorter will then be used to sort items inside their sections.

Constructors

new

@classmethod
def new(cls, model: Gio.ListModel | None = ..., sorter: Sorter | None = ...) -> SortListModel

Creates a new sort list model that uses the sorter to sort model.

Parameters:

  • model — the model to sort
  • sorter — the GtkSorter to sort model with,

Methods

get_incremental

def get_incremental(self) -> bool

Returns whether incremental sorting is enabled.

See SortListModel.set_incremental.

get_model

def get_model(self) -> Gio.ListModel | None

Gets the model currently sorted or None if none.

get_pending

def get_pending(self) -> int

Estimates progress of an ongoing sorting operation.

The estimate is the number of items that would still need to be sorted to finish the sorting operation if this was a linear algorithm. So this number is not related to how many items are already correctly sorted.

If you want to estimate the progress, you can use code like this:

pending = gtk_sort_list_model_get_pending (self);
model = gtk_sort_list_model_get_model (self);
progress = 1.0 - pending / (double) MAX (1, g_list_model_get_n_items (model));

If no sort operation is ongoing - in particular when SortListModel.incremental is False - this function returns 0.

get_section_sorter

def get_section_sorter(self) -> Sorter | None

Gets the section sorter that is used to sort items of self into sections.

get_sorter

def get_sorter(self) -> Sorter | None

Gets the sorter that is used to sort self.

set_incremental

def set_incremental(self, incremental: bool) -> None

Sets the sort model to do an incremental sort.

When incremental sorting is enabled, the GtkSortListModel will not do a complete sort immediately, but will instead queue an idle handler that incrementally sorts the items towards their correct position. This of course means that items do not instantly appear in the right place. It also means that the total sorting time is a lot slower.

When your filter blocks the UI while sorting, you might consider turning this on. Depending on your model and sorters, this may become interesting around 10,000 to 100,000 items.

By default, incremental sorting is disabled.

See SortListModel.get_pending for progress information about an ongoing incremental sorting operation.

Parameters:

  • incrementalTrue to sort incrementally

set_model

def set_model(self, model: Gio.ListModel | None = ...) -> None

Sets the model to be sorted.

The model's item type must conform to the item type of self.

Parameters:

  • model — The model to be sorted

set_section_sorter

def set_section_sorter(self, sorter: Sorter | None = ...) -> None

Sets a new section sorter on self.

Parameters:

  • sorter — the GtkSorter to sort model with

set_sorter

def set_sorter(self, sorter: Sorter | None = ...) -> None

Sets a new sorter on self.

Parameters:

  • sorter — the GtkSorter to sort model with

Properties

incremental

incremental: bool  # read/write

If the model should sort items incrementally.

item_type

item_type: type | GObject.Type  # read-only

The type of items. See Gio.ListModel.get_item_type.

model

model: Gio.ListModel  # read/write

The model being sorted.

n_items

n_items: int  # read-only

The number of items. See Gio.ListModel.get_n_items.

pending

pending: int  # read-only

Estimate of unsorted items remaining.

section_sorter

section_sorter: Sorter  # read/write

The section sorter for this model, if one is set.

sorter

sorter: Sorter  # read/write

The sorter for this model.