class Gtk::FilterListModel

Overview

Gtk::FilterListModel is a list model that filters the elements of the underlying model according to a Gtk::Filter.

It hides some elements from the other model according to criteria given by a Gtk::Filter.

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 | Nil item, item_type : UInt64 item_type, items_changed(position : UInt32, removed : UInt32, added : UInt32) : Nil
items_changed(position : Int, removed : Int, added : Int) : Nil
items_changed
, items_changed_signal items_changed_signal, n_items : UInt32 n_items, to_unsafe to_unsafe

Constructor methods inherited from module Gio::ListModel

cast(obj : GObject::Object) : self cast

Class methods inherited from module Gio::ListModel

cast?(obj : GObject::Object) : self | Nil cast?, g_type : UInt64 g_type

Instance methods inherited from class GObject::Object

==(other : self) ==, 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) | Nil data, finalize finalize, freeze_notify : Nil freeze_notify, getv(names : Enumerable(String), values : Enumerable(_)) : Nil getv, hash(hasher) hash, 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) | Nil qdata, ref_count : UInt32 ref_count, run_dispose : Nil run_dispose, set_data(key : String, data : Pointer(Void) | Nil) : Nil set_data, set_property(property_name : String, value : _) : Nil set_property, steal_data(key : String) : Pointer(Void) | Nil steal_data, steal_qdata(quark : UInt32) : Pointer(Void) | Nil 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, 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

cast?(obj : GObject::Object) : self | Nil cast?, compat_control(what : UInt64, data : Pointer(Void) | Nil) : 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 | Nil, filter : Gtk::Filter | Nil) : self #

Creates a new Gtk::FilterListModel that will filter model using the given filter.


[View source]
def self.new #

Initialize a new FilterListModel.


[View source]
def self.new(*, filter : Gtk::Filter | Nil = nil, incremental : Bool | Nil = nil, model : Gio::ListModel | Nil = nil, pending : UInt32 | Nil = nil) #

[View source]

Class Method Detail

def self.g_type : UInt64 #

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


[View source]

Instance Method Detail

def ==(other : self) #
Description copied from class Reference

Returns true if this reference is the same as other. Invokes same?.


def filter : Gtk::Filter | Nil #

Gets the Gtk::Filter currently set on self.


[View source]
def filter=(filter : Gtk::Filter | Nil) : Nil #

Sets the filter used to filter items.


[View source]
def hash(hasher) #
Description copied from class Reference

See Object#hash(hasher)


def incremental : Bool #

Returns whether incremental filtering is enabled.

See Gtk::FilterListModel#incremental=.


[View source]
def incremental=(incremental : Bool) : Nil #

Sets the filter model to do an incremental sort.

When incremental filtering is enabled, the Gtk::FilterListModel 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.


[View source]
def incremental? : Bool #

[View source]
def model : Gio::ListModel | Nil #

Gets the model currently filtered or nil if none.


[View source]
def model=(model : Gio::ListModel | Nil) : 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.


[View source]
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.


[View source]