60 lines
4.0 KiB
Markdown
60 lines
4.0 KiB
Markdown
# VersionPickerDialog.qml
|
||
|
||
Окно выбора версии Minecraft. Слева категории, справа список версий выбранной категории с поиском.
|
||
|
||
Раньше на этом месте был выпадающий список на тысячу версий, и найти в нём, например, бету 1.7
|
||
можно было только набрав точный номер. Категории делят каталог на части разумного размера, а поиск
|
||
работает внутри выбранной.
|
||
|
||
Используется в [BuildsDialog](BuildsDialog.md) для поля версии игры.
|
||
|
||
## Интерфейс
|
||
|
||
| | |
|
||
|---|---|
|
||
| `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()`. Если удалили выбранный профиль модлоадера,
|
||
он пропадает из каталога совсем (он был в нём только потому, что установлен), и выбор
|
||
сбрасывается.
|
||
|
||
---
|
||
|
||
При создании этого документа использовался ИИ.
|