GtkSelectionModel
GtkSelectionModel — Расширение интерфейса модели списка, обрабатывающее выделения
Функции
| gboolean | gtk_selection_model_is_selected () |
| GtkBitset * | gtk_selection_model_get_selection () |
| GtkBitset * | gtk_selection_model_get_selection_in_range () |
| gboolean | gtk_selection_model_select_item () |
| gboolean | gtk_selection_model_unselect_item () |
| gboolean | gtk_selection_model_select_range () |
| gboolean | gtk_selection_model_unselect-range () |
| gboolean | gtk_selection_model_select_all () |
| gboolean | gtk_selection_model_unselect_all () |
| gboolean | gtk_selection_model_set_selection () |
| void | gtk_selection_model_selection_changed () |
Сигналы
| void | selection-changed | Выполняется последним |
Типы и значения
Иерархия объектов
GInterface ╰── GtkSelectionModel
Предпосылки
GtkSelectionModel требует GListModel и GObject.
Известные реализации
GtkSelectionModel реализуется в GtkMultiSelection, GtkNoSelection и GtkSingleSelection.
Включаемые файлы
#include <gtk/gtk.h>
Описание
GtkSelectionModel — это интерфейс, расширяющий интерфейс GListModel, добавляя поддержку выделений. Затем эта поддержка используется виджетами, использующими модели списка, для добавления возможности выделять и отменять выделение различных элементов.
GTK предоставляет стандартные реализации наиболее распространённых режимов выделения, такие как GtkSingleSelection, поэтому вам нужно будет реализовать этот интерфейс только если вы хотите иметь подробный контроль над тем, как должны обрабатываться выделения.
Модель GtkSelectionModel поддерживает один булевый параметр на каждый элемент, указывающий, выбран ли элемент или нет. Это можно запросить с помощью gtk_selection_model_is_selected(). Когда состояние выделения одного или нескольких элементов изменяется, модель генерирует сигнал “selection-changed”, вызывая функцию gtk_selection_model_selection_changed(). Позиции, указанные в этом сигнале, могут изменить своё состояние выделения, хотя это не обязательно. Если новые элементы, добавленные в модель через сигнал “items-changed”, выделены или нет, зависит от реализации.
Обратите внимание, что элементы, добавленные через “items-changed”, могут уже быть выделены, и для них не будет генерироваться сигнал “selection-changed”. Таким образом, для отслеживания выделенных элементов необходимо следить за обоими сигналами.
Кроме того, интерфейс может предоставлять функциональность для выделения и отмены выделения элементов. Если эти функции реализованы, виджеты списка GTK позволят пользователям выделять и отменять выделение элементов. Однако модели GtkSelectionModels могут свободно реализовывать их частично или вовсе не реализовывать. В этом случае виджеты не будут поддерживать нереализованные операции.
Когда выделение или отмена выделения поддерживаются моделью, значения возврата функций выделения *не* указывают, произошло ли выделение или отмена выделения. Они предназначены только для указания полного отказа, например, когда этот способ выделения не поддерживается моделью.
Выделения могут происходить асинхронно, поэтому единственный надёжный способ узнать, когда элемент был выделен, — это прослушивать сигналы, указывающие на выделение.
Функции
gtk_selection_model_is_selected ()
gboolean gtk_selection_model_is_selected (GtkSelectionModel *model,guint position);
Проверяет, выбран ли данный элемент.
Параметры
model | ||
position | позиция элемента для запроса |
Возвращаемое значение
TRUE если элемент выбран
gtk_selection_model_get_selection ()
GtkBitset *
gtk_selection_model_get_selection (GtkSelectionModel *model); Получает множество, содержащее все выбранные в данный момент элементы в модели.
Эта функция может быть медленной, поэтому если вас интересует только один элемент, рассмотрите использование gtk_selection_model_is_selected(), а если несколько — gtk_selection_model_get_selection_in_range().
Параметры
model |
Возвращаемое значение
a GtkBitset содержащий все значения, которые в данный момент выбраны в model. Если элементы не выбраны, множество пустое. Множество не должно изменяться.
[transfer full]
gtk_selection_model_get_selection_in_range ()
GtkBitset * gtk_selection_model_get_selection_in_range (GtkSelectionModel *model,guint position,guint n_items);
Получает множество, содержащее значения в диапазоне [position,
position + n_items), соответствующие выбранному состоянию элементов в этом диапазоне. Все значения вне этого диапазона не определены.
Эта функция является оптимизацией для gtk_selection_model_get_selection(), когда вас интересует только часть выбранного состояния модели. Типичный случай использования — в ответ на сигнал “selection-changed”.
Параметры
model | ||
position | начало запрошенного диапазона | |
n_items | количество элементов в запрошенном диапазоне |
Возвращаемое значение
GtkBitset, который соответствует состоянию выбора для заданного состояния, при этом все другие значения не определены. Множество не должно изменяться.
gtk_selection_model_select_item ()
gboolean gtk_selection_model_select_item (GtkSelectionModel *model,guint position,gboolean unselect_rest);
Запрашивает выбор элемента в модели.
Параметры
model | ||
position | позиция элемента для выбора | |
unselect_rest | должны ли быть сняты ранее выбранные элементы с выбора |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что элемент был выбран.
gtk_selection_model_unselect_item ()
gboolean gtk_selection_model_unselect_item (GtkSelectionModel *model,guint position);
Запрашивает снятие элемента с выбора в модели.
Параметры
model | ||
position | позиция элемента для снятия с выбора |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что элемент был снят с выбора.
gtk_selection_model_select_range ()
gboolean gtk_selection_model_select_range (GtkSelectionModel *model,guint position,guint n_items,gboolean unselect_rest);
Запрашивает выбор диапазона элементов в модели.
Параметры
model | ||
position | первый элемент для выбора | |
n_items | количество элементов для выбора | |
unselect_rest | должны ли быть сняты с выбора ранее выбранные элементы |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что диапазон был выбран.
gtk_selection_model_unselect_range ()
gboolean gtk_selection_model_unselect_range (GtkSelectionModel *model,guint position,guint n_items);
Запрашивает снятие диапазона элементов с выбора в модели.
Параметры
model | ||
position | первый элемент для снятия с выбора | |
n_items | количество элементов для снятия с выбора |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что диапазон был снят с выбора.
gtk_selection_model_select_all ()
gboolean
gtk_selection_model_select_all (GtkSelectionModel *model); Запрашивает выбор всех элементов в модели.
Параметры
model |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что все элементы сейчас выбраны.
gtk_selection_model_unselect_all ()
gboolean
gtk_selection_model_unselect_all (GtkSelectionModel *model); Запрашивает снятие с выбора всех элементов в модели.
Параметры
model |
Возвращаемое значение
TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что все элементы сейчас сняты с выбора.
gtk_selection_model_set_selection ()
gboolean gtk_selection_model_set_selection (GtkSelectionModel *model,GtkBitset *selected,GtkBitset *mask);
Это метод обновления выделения, обеспечивающий самый точный контроль над изменениями выделения. Если возможно, следует использовать более простые версии, так как реализации с большей вероятностью будут поддерживать их.
Запрашивает обновление состояния выделения всех позиций, указанных в mask, до соответствующего значения в битовой маске selected.
В псевдокоде это выглядит примерно так:
for (i = 0; i < n_items; i++)
{
// don't change values not in the mask
if (!gtk_bitset_contains (mask, i))
continue;
if (gtk_bitset_contains (selected, i))
select_item (i);
else
unselect_item (i);
}
gtk_selection_model_selection_changed (model, first_changed_item, n_changed_items);mask и selected не должны изменяться. Они могут ссылаться на один и тот же битсет, что означает, что каждый элемент в наборе должен быть выбран.
Параметры
model | объект GtkSelectionModel | |
selected | битовая маска, определяющая, должны ли элементы быть выделены или сняты с выделения | |
mask | битовая маска, определяющая, какие элементы должны быть обновлены |
Возвращаемое значение
TRUE , если это действие было поддержано и не следует пытаться перейти к резервному варианту. Это не означает, что все элементы были обновлены в соответствии с входными данными.
gtk_selection_model_selection_changed ()
void gtk_selection_model_selection_changed (GtkSelectionModel *model,guint position,guint n_items);
Вспомогательная функция для реализации GtkSelectionModel. Вызывайте ее при изменении выделения для отправки сигнала “selection-changed”.
Параметры
model | объект GtkSelectionModel | |
position | первый измененный элемент | |
n_items | количество измененных элементов |
Типы и значения
GtkSelectionModel
typedef struct _GtkSelectionModel GtkSelectionModel;
Подробности сигналов
Сигнал “selection-changed”
void user_function (GtkSelectionModel *model, guint position, guint n_items, gpointer user_data)
Отправляется при изменении состояния выделения некоторых элементов в model.
Обратите внимание, что этот сигнал не указывает новое состояние выделения элементов; их необходимо запрашивать вручную. Также необязательно, чтобы модель изменяла состояние выделения любого из элементов в модели выделения, хотя отправка такого сигнала была бы довольно бесполезной.
Параметры
model | объект GtkSelectionModel | |
position | Первый элемент, который мог измениться | |
n_items | количество измененных элементов | |
user_data | данные пользователя, заданные при подключении обработчика сигнала. |
Флаги: Run Last
См. также
GListModel, GtkSingleSelection
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkSelectionModel.html