Files
BiLauncher/doc/qml/VersionPickerDialog.md
2026-10-11 22:32:13 +03:00

4.0 KiB

VersionPickerDialog.qml

Окно выбора версии Minecraft. Слева категории, справа список версий выбранной категории с поиском.

Раньше на этом месте был выпадающий список на тысячу версий, и найти в нём, например, бету 1.7 можно было только набрав точный номер. Категории делят каталог на части разумного размера, а поиск работает внутри выбранной.

Используется в BuildsDialog для поля версии игры.

Интерфейс

backend (required) LauncherBackend
selectedId выбранная версия
category release, snapshot, old_beta, old_alpha или other
filterText строка поиска
installedOnly показывать только скачанные
openFor(versionId) открыть с этой версией
versionChosen(versionId) выбор подтверждён

Сигнал называется не accepted, потому что такой сигнал у Dialog уже есть, и переопределить его нельзя.

Как работает

openFor() сбрасывает поиск, переключается на категорию переданной версии (а не всегда на релизы), просит бэкенд обновить каталог (refreshVersionCatalog()) и прокручивает список к выбранной строке. Если версии нет в каталоге, окно открывается на релизах. По «Отмене» ничего не меняется: результат уходит наружу только через versionChosen.

versionCatalog приходит из C++ уже отсортированным, новые сверху. visibleEntries только отбирает строки по категории, флажку «только скачанные» и подстроке в поле search, а порядок не меняет. В «Прочие» попадают профили модлоадеров и всё, чего нет в манифесте Mojang.

С клавиатуры: фокус сразу в поиске, стрелки вверх и вниз двигают выбор, Enter подтверждает, Esc закрывает. Мышью выбор подтверждается двойным щелчком или кнопкой.

Если список пуст, на его месте написано почему: каталог ещё грузится, каталог не загрузился или по запросу ничего нет.

Удаление версии

У скачанных версий есть корзина. Версия занимает от десятков мегабайт, а это окно — единственное место, где видно, что именно скачано.

askRemove(versionId) берёт versionRemovalInfo() и открывает подтверждение. В нём указаны размер, профили модлоадеров, которые без этой версии не запустятся (dependents), и сборки, которые на неё ссылаются (builds). id запоминается в окне подтверждения: к моменту ответа под курсором может оказаться другая строка.

performRemove(versionId) вызывает removeVersion(). Если удалили выбранный профиль модлоадера, он пропадает из каталога совсем (он был в нём только потому, что установлен), и выбор сбрасывается.


При создании этого документа использовался ИИ.