Состояние и параметры действий
Большинство действий в вашем приложении будут безсостоятельными действиями без параметров. Они обычно отображаются как пункты меню без специального оформления. Примером является “выйти”.
Состоятельные действия используются для представления действия, которое имеет тесно связанное состояние какого-либо рода. Хорошим примером является действие “полноэкранный режим”. В этом случае вы ожидаете увидеть галочку рядом с пунктом меню, когда опция полноэкранного режима активна. Это обычно называется действием переключения, и оно имеет булево состояние. По соглашению, действия переключения не имеют типа параметра для активации: активация действия всегда переключает состояние.
Другой распространённый случай — действие, представляющее перечисление возможных значений заданного типа (обычно строка). Это часто называется действием радиокнопки и обычно представлено в пользовательском интерфейсе радиокнопками или пунктами меню радиокнопки, или иногда раскрывающимся списком. Хорошим примером является “выравнивание текста” со возможными значениями “слева”, “по центру” и “справа”. По соглашению, эти типы действий имеют тип параметра, равный типу их состояния, и активация их с определённым значением параметра эквивалентна изменению их состояния на это значение.
Этот подход к обработке радиокнопок отличается от многих других систем действий, таких как GtkAction. В GAction существует только одно действие для “выравнивание текста”, а “слева”, “по центру” и “справа” являются возможными состояниями этого действия. Нет трёх отдельных действий “выравнивание-слева”, “выравнивание-по-центру” и “выравнивание-справа”.
Последний распространённый тип действия — это безсостоятельное действие с параметром. Это обычно используется для действий, таких как “открыть закладку”, где параметром действия будет идентификатор закладки, которую нужно открыть.
Поскольку некоторые типы действий не могут быть вызваны без параметра, часто важно указать параметр при ссылке на действие из места, где оно будет вызвано (например, из радиокнопки, которая устанавливает состояние в определённое значение, или из пункта меню, который открывает определённую закладку). В этих контекстах значение, используемое для параметра действия, обычно называется целевым значением действия.
Несмотря на то, что действия переключения имеют состояние, они не имеют параметра. Поэтому целевое значение не требуется при ссылке на них — они всегда будут переключаться при активации.
Большинство API, которые позволяют использовать GAction (например, GMenuModel и GtkActionable), позволяют использовать подробные имена действий. Это удобный способ указания имени действия и целевого значения действия одной строкой.
В случае, если целевое значение действия — строка без необычных символов (т. е.: только буквенно-цифровые символы, плюс “-” и “.”), то вы можете использовать подробное имя действия в формате “выравнивание::слева” для указания действия выравнивания с целевым значением слева.
В случае, если целевое значение действия не является строкой или содержит необычные символы, вы можете использовать более общий формат “имя-действия(5)”, где “5” здесь — любое допустимое текстовое значение GVariant (т. е.: строка, которая может быть обработана g_variant_parse()). Другой пример — “открыть-закладку(‘http://gnome.org/’)”.
Вы можете преобразовывать между подробными именами действий и раздельными именами действий и целевыми значениями, используя g_action_parse_detailed_name() и g_action_print_detailed_name(), но обычно вам это не потребуется. Большинство API предоставят оба способа указания действий с целевыми значениями.
© 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/ch06s02.html