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(). Если удалили выбранный профиль модлоадера,
он пропадает из каталога совсем (он был в нём только потому, что установлен), и выбор
сбрасывается.
При создании этого документа использовался ИИ.