Package ch.bailu.gtk.gtk
Class SortListModel
java.lang.Object
ch.bailu.gtk.type.Type
ch.bailu.gtk.type.Pointer
ch.bailu.gtk.gobject.Object
ch.bailu.gtk.gtk.SortListModel
- All Implemented Interfaces:
PointerInterface
A `GListModel` that sorts the elements of an underlying model
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
[method@Gtk.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.
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
[method@Gtk.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.
-
Nested Class Summary
Nested classes/interfaces inherited from class ch.bailu.gtk.gobject.Object
Object.OnBindingTransformFunc, Object.OnDestroyNotify, Object.OnDuplicateFunc, Object.OnNotify, Object.OnToggleNotify, Object.OnWeakNotify
-
Field Summary
Fields inherited from class ch.bailu.gtk.gobject.Object
SIGNAL_ON_NOTIFY
-
Constructor Summary
ConstructorDescriptionSortListModel
(ListModel model, Sorter sorter) Creates a new sort list model that uses the @sorter to sort @model.SortListModel
(PointerContainer pointer) -
Method Summary
Modifier and TypeMethodDescriptionImplements interfaceListModel
.static ClassHandler
boolean
Returns whether incremental sorting is enabled.static int
getModel()
Gets the model currently sorted or %NULL if none.static long
static TypeSystem.TypeSize
int
Estimates progress of an ongoing sorting operation.Gets the sorter that is used to sort @self.static long
static TypeSystem.TypeSize
void
setIncremental
(boolean incremental) Sets the sort model to do an incremental sort.void
Sets the model to be sorted.void
Sets a new sorter on @self.Methods inherited from class ch.bailu.gtk.gobject.Object
addToggleRef, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, disconnect, disconnect, dupData, dupData, dupQdata, forceFloating, freezeNotify, get, get, getData, getData, getProperty, getProperty, getQdata, interfaceFindProperty, interfaceInstallProperty, isFloating, notify, notify, notifyByPspec, onNotify, ref, refSink, removeToggleRef, replaceData, replaceData, replaceQdata, runDispose, set, set, setData, setData, setDataFull, setDataFull, setProperty, setProperty, setQdata, setQdataFull, stealData, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref
Methods inherited from class ch.bailu.gtk.type.Pointer
asCPointer, cast, connectSignal, disconnectSignals, disconnectSignals, equals, hashCode, throwIfNull, throwNullPointerException, toString, unregisterCallbacks, unregisterCallbacks
Methods inherited from class ch.bailu.gtk.type.Type
asCPointer, asCPointer, asCPointerNotNull, asJnaPointer, asJnaPointer, asPointer, asPointer, cast, cast, throwIfNull
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ch.bailu.gtk.type.PointerInterface
asCPointerNotNull, asJnaPointer, asPointer, isNotNull, isNull
-
Constructor Details
-
SortListModel
-
SortListModel
Creates a new sort list model that uses the @sorter to sort @model.- Parameters:
model
- the model to sortsorter
- the `GtkSorter` to sort @model with,
-
-
Method Details
-
getClassHandler
-
getIncremental
public boolean getIncremental()Returns whether incremental sorting is enabled.
See [method@Gtk.SortListModel.set_incremental].- Returns:
- %TRUE if incremental sorting is enabled
-
getModel
Gets the model currently sorted or %NULL if none.- Returns:
- The model that gets sorted
-
getPending
public int getPending()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:
```c
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
[property@Gtk.SortListModel:incremental] is %FALSE - this
function returns 0.- Returns:
- a progress estimate of remaining items to sort
-
getSorter
Gets the sorter that is used to sort @self.- Returns:
- the sorter of #self
-
setIncremental
public void setIncremental(boolean incremental) 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 [method@Gtk.SortListModel.get_pending] for progress information
about an ongoing incremental sorting operation.- Parameters:
incremental
- %TRUE to sort incrementally
-
setModel
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
-
setSorter
Sets a new sorter on @self.- Parameters:
sorter
- the `GtkSorter` to sort @model with
-
asListModel
Implements interfaceListModel
. Call this to get access to interface functions.- Returns:
ListModel
-
getTypeID
public static long getTypeID() -
getParentTypeID
public static long getParentTypeID() -
getTypeSize
-
getParentTypeSize
-
getInstanceSize
public static int getInstanceSize()
-