Типы страниц
Tuner.Page является составным элементом всего интерфейса Тюнера.
Существует четыре типа страниц: верхнеуровневые (top level), обычная подстраница (regular subpage), внутренняя подстраница (internal subpage) и стековая страница (stack page).
Верхнеуровневые страницы
Интерфейс состоит из страниц верхнего уровня, которые представляют собой строки на боковой панели.
using Gtk 4.0;
using Tuner 1;
Tuner.Page {
title: _("Row 1");
}
Tuner.Page {
title: _("Row 2");
}
Tuner.Page {
title: _("Row 3");
}Результат

Обычные подстраницы
Обычные подстраницы — это дочерние страницы верхнеуровневых страниц или других подстраниц.
Они имеют тип subpage.
using Gtk 4.0;
using Tuner 1;
Tuner.Page {
title: _("Level 1");
[subpage]
Tuner.Page {
title: _("Level 2");
[subpage]
Tuner.Page {
title: _("Level 2");
}
}
}Результат



Внутренние подстраницы
Внутренние подстраницы могут быть добавлены на любую верхнеуровневую страницу или на отдельную подстраницу.
Они представляют собой Adw.NavigationPage в плагине Панельном режиме (Panel). Вы можете перейти на внутреннюю страницу, используя Tuner.Route или действием navigation.push.
using Gtk 4.0;
using Tuner 1;
Tuner.Page {
title: _("Internal example");
Tuner.Group {
Tuner.Route {
title: _("Go to internal page");
tag: "internal-tag";
}
}
// Внутренние страницы не имеют типа!
Tuner.Page {
title: _("Internal page");
tag: "internal-tag"; // Tag is required to access internal page
}
}Result


Стековые подстраницы
Стековые страницы действуют почти так же, как внутренние подстраницы. Страница, содержащая стековые страницы, не может содержать группы (они будут проигнорированы). Кроме того, при создании интерфейса будет присвоено свойство stack, поэтому необходимо использовать bind.
using Gtk 4.0;
using Tuner 1;
using Adw 1;
Tuner.Page stack_page_id {
title: _("Stack");
[title]
Adw.ViewSwitcher {
stack: bind stack_page_id.stack;
policy: wide;
}
[stack]
Tuner.Page {
title: _("Stack page 1");
icon-name: "gnome-power-manager-symbolic";
Tuner.Group {
Tuner.Switch {
title: _("Switch from page 1");
binding: Tuner.Setting {};
}
}
}
[stack]
Tuner.Page {
title: _("Stack page 2");
icon-name: "help-info-symbolic";
Tuner.Group {
Tuner.Switch {
title: _("Switch from page 2");
binding: Tuner.Setting {};
}
}
}
}Result

