1 parent
fd14b54d8a
commit
0f370167db
9 files changed
+18
-134
No files matched your search
@@ -1,13 +1,6 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
// Один модлоадер в карточке сборки: чекбокс и, когда он отмечен, список версий
|
||||
// именно под выбранную версию Minecraft.
|
||||
//
|
||||
// Совместимость проверять не нужно: backend.loaderVersions() отдаёт список уже
|
||||
// под конкретную версию игры, поэтому несовместимой строки в нём не бывает.
|
||||
// Пустой список — это «лоадер не поддерживает эту версию игры», и он тоже
|
||||
// показывается словами, а не пустым выпадающим списком.
|
||||
Column {
|
||||
id: loaderRow
|
||||
|
||||
@@ -15,21 +8,13 @@ Column {
|
||||
required property string loaderKey
|
||||
required property string title
|
||||
|
||||
// Версия Minecraft, выбранная в карточке. Её смена сбрасывает выбор.
|
||||
property string gameVersion: ""
|
||||
|
||||
property alias checked: box.checked
|
||||
property string selectedVersion: ""
|
||||
property var entries: []
|
||||
|
||||
// Пользователь щёлкнул чекбокс — карточка снимет отметки с остальных
|
||||
// лоадеров: одновременно в .minecraft может жить только один.
|
||||
signal userChecked()
|
||||
// Отметка или версия изменились — карточке пора сохранить сборку.
|
||||
signal changed()
|
||||
|
||||
// Ставится, пока карточка заполняет строку данными сборки: в это время
|
||||
// обработчики не должны считать изменения пользовательскими.
|
||||
property bool applying: false
|
||||
|
||||
spacing: 4
|
||||
@@ -42,16 +27,9 @@ Column {
|
||||
return -1
|
||||
}
|
||||
|
||||
// Единственное место, где меняются entries и selectedVersion. Через него
|
||||
// проходят все три пути — кэш, ответ сети и заполнение из сборки, — потому
|
||||
// что выбранная версия обязана существовать в списке под текущую версию
|
||||
// игры. Раньше проверял только путь из сети, и версия лоадера от прошлой
|
||||
// версии игры доживала до сохранения сборки.
|
||||
function applyEntries(list) {
|
||||
loaderRow.entries = list
|
||||
|
||||
// Список отсортирован новыми вперёд, поэтому максимально доступная
|
||||
// версия для этой версии игры — всегда первая строка.
|
||||
if (loaderRow.versionIndex(loaderRow.selectedVersion) < 0) {
|
||||
const fallback = list.length > 0 ? list[0].version : ""
|
||||
const changedValue = loaderRow.selectedVersion !== fallback
|
||||
@@ -68,26 +46,20 @@ Column {
|
||||
loaderRow.applyEntries([])
|
||||
return
|
||||
}
|
||||
// Сначала из кэша — список появляется мгновенно, — потом обновление сети.
|
||||
loaderRow.applyEntries(loaderRow.backend.loaderVersions(loaderRow.loaderKey,
|
||||
loaderRow.gameVersion))
|
||||
loaderRow.backend.refreshLoaderVersions(loaderRow.loaderKey, loaderRow.gameVersion)
|
||||
}
|
||||
|
||||
// Заполнение из сохранённой сборки: без сигналов changed().
|
||||
function applyBuild(loader, loaderVersion) {
|
||||
loaderRow.applying = true
|
||||
box.checked = loader === loaderRow.loaderKey
|
||||
// Версию из сборки берём как пожелание: если под выбранную версию игры
|
||||
// её нет, applyEntries() заменит её на максимально доступную.
|
||||
loaderRow.selectedVersion = box.checked ? loaderVersion : ""
|
||||
loaderRow.reload()
|
||||
loaderRow.applying = false
|
||||
}
|
||||
|
||||
onGameVersionChanged: {
|
||||
// Сборка лоадера привязана к версии игры: под новой версией прежний
|
||||
// выбор недействителен, и список перезапрашивается заново.
|
||||
loaderRow.selectedVersion = ""
|
||||
loaderRow.reload()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user