Архитектура
На этой странице рассматриваются некоторые важные части libtuner и Tuner, которые полезно учитывать при создании плагинов.
Дерево объектов
Тюнер использует собственную структуру дерева объектов, которая несовместима со структурой Gtk.Widget. Это блокирует использование функции template в Gtk.Builder.
Tuner.Widget и Tuner.Binding
Все элементы интерфейса создаются с помощью Tuner.Widget. Некоторые виджеты не работают без присвоения им свойства binding. Tuner.Привязка — это простой инструмент, который привязывает определенное свойство виджета (например, active во внутреннем виджете Tuner.Switch) к требуемому бэкенду.
В следующем примере создаётся Tuner.Switch с привязкой к Tuner.Setting, который реализует бэкенд GSettings. Когда приложение запустится, будет создан Adw.SwitchRow, и свойство active будет привязано к ключу allow-volume-above-100-percent. Это позволит изменить свойство active в Adw.SwitchRow для изменения значения GSettings, также при независимом изменении значения GSettings, переключение будет синхронизировано.
Tuner.Switch {
title: _("Over Amplification");
binding: Tuner.Setting {
schema-id: "org.gnome.desktop.sound";
schema-key: "allow-volume-above-100-percent";
}
}Система объединения и приоритетов
Система объединения в Тюнере позволяет расширить интерфейс уже существующих плагинов за счёт других плагинов.
В Tuner есть разные приоритеты — плагинов (plugin priority), страниц (page priorirty) и групп (group priority).
Приоритет плагинов (
plugin priority) определяет порядок, в котором они загружаются. Если два плагина попытаются добавитьTuner.Pageс одинаковымtag, плагин с более высоким приоритетом будет указывать всю информацию о странице (icon,titleи другое). Их содержимое будет объединено. Кроме того, если плагин с более высоким приоритетом не устанавливает значок, можно использовать значок из плагина с более низким приоритетом, если он у него есть.Приоритет страниц (
page priority) определяет порядок расположения страниц в боковой панели. Чем ниже приоритет, тем выше будет отображаться страница в списке. Это не относится к внутренним страницам.Tuner.Groupимеют собственные приоритеты, которые определяют порядок в списке групп. Группа с низким приоритетом будет отображаться выше в интерфейсе страницы. Группы также обладают свойствомtag, если две группы имеют одинаковыйtag, они будут объединены, виджеты из группы с более высоким приоритетом плагина будут располагаться выше в интерфейсе результирующей группы.
For example, this system allows Tweaks and Panel plugins to exist separately and independently. Например, эта система позволяет плагинам Расширенных настроек (Tweaks) и Панельного режима (Panel) существовать отдельно и независимо друг от друга.
Загружен только плагин Панельного режима (Panel)
Плагин Панельного режиима (Panel) устанавливает свой собственный значок для строки.

Загружен только плагин Расширенных настроек (Tweaks)
Плагин Расширенных настроек (Tweaks) устанавливает свой собственный значок для строки.

Расширенные настройки (Tweaks) и Панельный режим (Panel) загружены вместе
The icon for the row is set using the Tweaks plugin since it has higher priority. Значок для строки устанавливается с плагином Расширенных настроек (Tweaks), поскольку он имеет более высокий приоритет.
Their content was merged and despite the fact that the panel plugin had a lower priority, the group from the panel plugin turned out to be higher because the priority of this group was lower than the priority of the groups from the tweaks plugin. Их содержимое было объединено, и, несмотря на то, что плагин Панельного режима (Panel) имел более низкий приоритет, его группа оказалась выше, потому что приоритет этой группы был ниже, чем приоритет групп из плагина Расширенных настроек (Tweaks).
