class Gtk::FilterListModel

Overview

GtkFilterListModel is a list model that filters the elements of the underlying model according to a GtkFilter.

It hides some elements from the other model according to criteria given by a GtkFilter.

The model can be set up to do incremental searching, so that filtering long lists doesn't block the UI. See Gtk::FilterListModel#incremental= for details.

Included Modules

Defined in:

lib/gi-crystal/src/auto/gtk-4.0/filter_list_model.cr

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from module Gio::ListModel

item(position : UInt32) : GObject::Object? item, item_type : UInt64 item_type, items_changed(position : UInt32, removed : UInt32, added : UInt32) : Nil items_changed, items_changed_signal items_changed_signal, n_items : UInt32 n_items, to_unsafe to_unsafe

Class methods inherited from module Gio::ListModel

g_type : UInt64 g_type

Instance methods inherited from class GObject::Object

bind_property(source_property : String, target : GObject::Object, target_property : String, flags : GObject::BindingFlags) : GObject::Binding bind_property, bind_property_full(source_property : String, target : GObject::Object, target_property : String, flags : GObject::BindingFlags, transform_to : GObject::Closure, transform_from : GObject::Closure) : GObject::Binding bind_property_full, data(key : String) : Pointer(Void)? data, finalize finalize, freeze_notify : Nil freeze_notify, getv(names : Enumerable(String), values : Enumerable(_)) : Nil getv, notify(property_name : String) : Nil notify, notify_by_pspec(pspec : GObject::ParamSpec) : Nil notify_by_pspec, notify_signal notify_signal, property(property_name : String, value : _) : Nil property, qdata(quark : UInt32) : Pointer(Void)? qdata, ref_count : UInt32 ref_count, run_dispose : Nil run_dispose, set_data(key : String, data : Pointer(Void)?) : Nil set_data, set_property(property_name : String, value : _) : Nil set_property, steal_data(key : String) : Pointer(Void)? steal_data, steal_qdata(quark : UInt32) : Pointer(Void)? steal_qdata, thaw_notify : Nil thaw_notify, to_unsafe : Pointer(Void) to_unsafe, watch_closure(closure : GObject::Closure) : Nil watch_closure

Constructor methods inherited from class GObject::Object

cast(obj : GObject::Object) : self cast, cast?(obj : GObject::Object) : self? cast?, new(pointer : Pointer(Void), transfer : GICrystal::Transfer)
new
new
, newv(object_type : UInt64, parameters : Enumerable(GObject::Parameter)) : self newv

Class methods inherited from class GObject::Object

compat_control(what : UInt64, data : Pointer(Void)?) : UInt64 compat_control, g_type : UInt64 g_type, interface_find_property(g_iface : GObject::TypeInterface, property_name : String) : GObject::ParamSpec interface_find_property, interface_list_properties(g_iface : GObject::TypeInterface) : Enumerable(GObject::ParamSpec) interface_list_properties

Constructor Detail

def self.new(model : Gio::ListModel?, filter : Gtk::Filter?) : self #

Creates a new GtkFilterListModel that will filter @model using the given @filter.


def self.new #

Initialize a new FilterListModel.


def self.new(*, filter : Gtk::Filter? = nil, incremental : Bool? = nil, model : Gio::ListModel? = nil, pending : UInt32? = nil) #

Class Method Detail

def self.g_type : UInt64 #

Returns the type id (GType) registered in GLib type system.


Instance Method Detail

def filter : Gtk::Filter? #

Gets the GtkFilter currently set on @self.


def filter=(filter : Gtk::Filter?) : Nil #

Sets the filter used to filter items.


def incremental : Bool #

Returns whether incremental filtering is enabled.

See Gtk::FilterListModel#incremental=.


def incremental=(incremental : Bool) : Nil #

Sets the filter model to do an incremental sort.

When incremental filtering is enabled, the GtkFilterListModel will not run filters immediately, but will instead queue an idle handler that incrementally filters the items and adds them to the list. This of course means that items are not instantly added to the list, but only appear incrementally.

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

By default, incremental filtering is disabled.

See Gtk::FilterListModel#pending for progress information about an ongoing incremental filtering operation.


def incremental? : Bool #

def model : Gio::ListModel? #

Gets the model currently filtered or %NULL if none.


def model=(model : Gio::ListModel?) : Nil #

Sets the model to be filtered.

Note that GTK makes no effort to ensure that @model conforms to the item type of @self. It assumes that the caller knows what they are doing and have set up an appropriate filter to ensure that item types match.


def pending : UInt32 #

Returns the number of items that have not been filtered yet.

You can use this value to check if @self is busy filtering by comparing the return value to 0 or you can compute the percentage of the filter remaining by dividing the return value by the total number of items in the underlying model:

WARNING ⚠️ The following code is in c ⚠️

pending = gtk_filter_list_model_get_pending (self);
model = gtk_filter_list_model_get_model (self);
percentage = pending / (double) g_list_model_get_n_items (model);

If no filter operation is ongoing - in particular when Gtk::FilterListModel#incremental is %FALSE - this function returns 0.