Владелец попросил (2026-10-08): то, чего не видно, не строить и не рисовать сразу, а достраивать позже; везде лёгкое появление; главное — общее ядро. Ядро: - ui/block_build.py: блоки страницы (LazyBlock) и наполнение списков (DeferredFill). Блок первого экрана собирается при показе, без таймеров; блок, до которого долистали, — сразу; остальные — по одному в паузах, пока молчит фоновая дорожка запуска. Место под несобранное занято заранее; - BasePage.add_lazy_block / ensure_block / ensure_all_blocks; команды страницам, экскурсия и шаг «назад» достраивают страницу сами; - появление (ui/widgets/stagger_float_in.py) переписано: видимая часть блока снимается в картинку один раз, настоящий блок на время полёта спрятан маской, один слой на контейнер рисует картинки по общему такту кадров, точка в точку экрана. Вид и длительности те же; - меньше обращений к Qt при сборке: тексты стилей qfluentwidgets запоминаются (ui/qfluent_style_cache.py); у виджета со стилем и у привязки темы больше нет своих подключений сигналов; надпись подключает «своё меню», только когда его включили; сборка страницы по щелчку ждёт своей очереди с фоновой дорожкой запуска, как сборка про запас. Страницы: - главная (Zapret 1 и 2): три группы настроек и «Последнее сообщение» — четыре блока ниже первого экрана; строители групп разделены; - сетка карточек итога (BlockCheck, «Проверка домена») создаёт карточки порциями по 12: видимые сразу, остальные при прокрутке или в паузе; - hosts: плитки сервисов выплывают и тогда, когда пришли на открытую страницу; - полоса ожидания на главной и в проверке домена не крутится скрытой. Замер на win10, поток окна за 1,3 с после показа страницы (масштаб 100% / 150%): DNS 269→103 / 271→115 мс, Telegram Proxy 146→62 / 203→93, «Оформление» 145→92 / 274→93, «О программе» 134→58 / 157→77, главная 114→91 / 164→124. Сборка главной 56→20 мс. Открытие главной рядом с занятым фоновым потоком (стенд на хосте) 966→282 мс. Тесты ядра прошли и на Windows. Прежний запрет откладывать настройки главной (test_zapret2_control_lazy_startup) снят этим решением владельца: прошлые попытки откладывали таймерами и видимое тоже; теперь первый экран собирается сразу, а откладывается только то, что ниже края окна. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
965 B
Python
21 lines
965 B
Python
from __future__ import annotations
|
||
|
||
import inspect
|
||
import unittest
|
||
|
||
|
||
class TrayCloseModeUiTests(unittest.TestCase):
|
||
def test_control_pages_build_tray_close_mode_as_combo_with_three_options(self) -> None:
|
||
import presets.ui.control.zapret1.sections_build as zapret1_sections
|
||
import presets.ui.control.zapret2.sections_build as zapret2_sections
|
||
|
||
for builder in (zapret1_sections.build_program_settings_group, zapret2_sections.build_program_settings_group):
|
||
source = inspect.getsource(builder)
|
||
self.assertIn("win11_combo_row_cls", source)
|
||
self.assertIn('("Свернуть и крестик скрывают в трей", "minimize_and_close")', source)
|
||
self.assertIn('("Только свернуть скрывает в трей", "minimize_only")', source)
|
||
self.assertIn('("Не скрывать в трей", "normal")', source)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|