java implementation and downloading

This commit is contained in:
2026-08-27 19:35:11 +03:00
parent 08e0dc4965
commit dddc0261d4
14 changed files with 2907 additions and 10 deletions
+109
View File
@@ -913,10 +913,30 @@ Window {
y: (window.height - height) / 2
padding: 0
// Выбранная сборка Java живёт в свойстве, а не в поле ввода: её выбирают
// в отдельном окне, а записывается она только по «Сохранить».
property string javaRuntimeId: ""
// Не привязка: javaRuntimeInfo() — обычный вызов, и сам он не
// пересчитается, когда сборка докачается. Обновляем по событиям.
property var javaRuntimeInfo: null
onJavaRuntimeIdChanged: settingsDialog.refreshJavaInfo()
function refreshJavaInfo() {
javaRuntimeInfo = javaRuntimeId === "" ? null
: backend.javaRuntimeInfo(javaRuntimeId)
}
Connections {
target: backend
function onJavaRuntimeInstalled(runtimeId) { settingsDialog.refreshJavaInfo() }
}
function load() {
const s = backend.settings()
stGameDir.text = s.gameDir || ""
stJavaPath.text = s.javaPath || ""
settingsDialog.javaRuntimeId = s.javaRuntime || ""
settingsDialog.refreshJavaInfo()
stMinMemory.text = String(s.minMemoryMb)
stMaxMemory.text = String(s.maxMemoryMb)
stJvmArgs.text = s.jvmArgs || ""
@@ -972,6 +992,84 @@ Window {
placeholder: "автоопределение"
}
// Сборка Java из папки лаунчера. Выбрана — запуск идёт ей, а не тем,
// что нашлось в системе; путь выше остаётся запасным вариантом.
Column {
x: 20
width: parent.width - 40
spacing: 3
Text {
text: "Версия Java из папки лаунчера"
color: "#aaaaaa"
font.pixelSize: 11
}
Rectangle {
width: parent.width
height: 32
radius: 6
color: "#2a2a2a"
border.color: javaFieldArea.containsMouse ? "#91B315" : "#444444"
border.width: 1
Text {
anchors.fill: parent
leftPadding: 10
rightPadding: 150
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
color: settingsDialog.javaRuntimeId === "" ? "#666666" : "#ffffff"
text: {
if (settingsDialog.javaRuntimeId === "")
return qsTr("не выбрана — искать в системе")
const info = settingsDialog.javaRuntimeInfo
if (!info)
return settingsDialog.javaRuntimeId
return info.installed ? info.label
: qsTr("%1 — скачивается").arg(info.label)
}
}
Text {
anchors.right: clearJava.left
anchors.rightMargin: 12
anchors.verticalCenter: parent.verticalCenter
text: qsTr("Выбрать…")
color: "#91B315"
font.pixelSize: 12
}
Text {
id: clearJava
anchors.right: parent.right
anchors.rightMargin: 12
anchors.verticalCenter: parent.verticalCenter
visible: settingsDialog.javaRuntimeId !== ""
text: "✕"
color: clearJavaArea.containsMouse ? "#cc6666" : "#666666"
font.pixelSize: 12
MouseArea {
id: clearJavaArea
anchors.fill: parent
anchors.margins: -6
hoverEnabled: true
onClicked: settingsDialog.javaRuntimeId = ""
}
}
MouseArea {
id: javaFieldArea
anchors.fill: parent
anchors.rightMargin: 26
hoverEnabled: true
onClicked: javaPicker.openFor(settingsDialog.javaRuntimeId,
backend.requiredJavaMajor(backend.activeBuildIndex))
}
}
}
Row {
x: 20
spacing: 10
@@ -1110,6 +1208,7 @@ Window {
onAccepted: backend.updateSettings({
"gameDir": stGameDir.text.trim(),
"javaPath": stJavaPath.text.trim(),
"javaRuntime": settingsDialog.javaRuntimeId,
"minMemoryMb": parseInt(stMinMemory.text) || 0,
"maxMemoryMb": parseInt(stMaxMemory.text) || 0,
"jvmArgs": stJvmArgs.text.trim(),
@@ -1118,4 +1217,14 @@ Window {
"fullscreen": stFullscreen.checked
})
}
// Окно выбора Java. Живёт рядом с настройками, а не внутри: оно шире их и
// центрируется по самому окну лаунчера.
JavaPickerDialog {
id: javaPicker
backend: backend
x: (window.width - width) / 2
y: (window.height - height) / 2
onRuntimeChosen: (runtimeId) => settingsDialog.javaRuntimeId = runtimeId
}
}