Spec-Zone.ru › GTK 4.0

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 Выполняется последним

Типы и значения

GtkSelectionModel

Иерархия объектов

    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

a GtkSelectionModel

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 GtkSelectionModel

Возвращаемое значение

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

a GtkSelectionModel

position

начало запрошенного диапазона

n_items

количество элементов в запрошенном диапазоне

Возвращаемое значение

GtkBitset, который соответствует состоянию выбора для заданного состояния, при этом все другие значения не определены. Множество не должно изменяться.

gtk_selection_model_select_item ()

gboolean
gtk_selection_model_select_item (GtkSelectionModel *model,
                                 guint position,
                                 gboolean unselect_rest);

Запрашивает выбор элемента в модели.

Параметры

model

a GtkSelectionModel

position

позиция элемента для выбора

unselect_rest

должны ли быть сняты ранее выбранные элементы с выбора

Возвращаемое значение

TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что элемент был выбран.

gtk_selection_model_unselect_item ()

gboolean
gtk_selection_model_unselect_item (GtkSelectionModel *model,
                                   guint position);

Запрашивает снятие элемента с выбора в модели.

Параметры

model

a GtkSelectionModel

position

позиция элемента для снятия с выбора

Возвращаемое значение

TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что элемент был снят с выбора.

gtk_selection_model_select_range ()

gboolean
gtk_selection_model_select_range (GtkSelectionModel *model,
                                  guint position,
                                  guint n_items,
                                  gboolean unselect_rest);

Запрашивает выбор диапазона элементов в модели.

Параметры

model

a GtkSelectionModel

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

a GtkSelectionModel

position

первый элемент для снятия с выбора

n_items

количество элементов для снятия с выбора

Возвращаемое значение

TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что диапазон был снят с выбора.

gtk_selection_model_select_all ()

gboolean
gtk_selection_model_select_all (GtkSelectionModel *model);

Запрашивает выбор всех элементов в модели.

Параметры

model

a GtkSelectionModel

Возвращаемое значение

TRUE если данное действие поддерживается и не следует пытаться использовать резервный вариант. Это не означает, что все элементы сейчас выбраны.

gtk_selection_model_unselect_all ()

gboolean
gtk_selection_model_unselect_all (GtkSelectionModel *model);

Запрашивает снятие с выбора всех элементов в модели.

Параметры

model

a GtkSelectionModel

Возвращаемое значение

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API