fix: Settings als Inline-Komponente + showValue entfernt

- Settings.qml als Inline-Komponente in Main.qml eingebunden (Import-Problem gelöst)
- showValue: false entfernt (nicht unterstützt in QtQuick.Controls 2.4)
- Settings.qml Datei gelöscht (nun Inline)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
darklithium
2026-06-03 01:59:36 +02:00
parent 5060703db3
commit f5b686cbf7
2 changed files with 203 additions and 197 deletions
+203 -1
View File
@@ -4,7 +4,6 @@ import QtMultimedia 5.0
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import io.thp.pyotherside 1.4
import "."
MainView {
id: root
@@ -76,7 +75,210 @@ MainView {
anchors.fill: parent
currentIndex: 0
// SEITE 1: EINSTELLUNGEN
// ================================================================
Settings {
id: settingsPage
}
=======
// ================================================================
// SEITE 1: EINSTELLUNGEN (Inline-Komponente)
// ================================================================
Component {
id: settingsComponent
Page {
id: settingsPage
objectName: 'settingsPage'
property bool settingsInitialized: false
property var currentFortuneList: "classic"
property real musicVolume: 0.5
property real crackVolume: 1.0
header: PageHeader {
title: "Einstellungen"
}
// Timer für PyOtherSide Initialisierung
Timer {
id: initTimer
interval: 1000
running: true
repeat: false
onTriggered: {
try {
// Einstellungen laden
currentFortuneList = py.call_sync("fortunecookie.get_current_fortune_list", []);
musicVolume = py.call_sync("fortunecookie.get_music_volume", []);
crackVolume = py.call_sync("fortunecookie.get_crack_volume", []);
// Slider Werte setzen
musicVolumeSlider.value = musicVolume;
crackVolumeSlider.value = crackVolume;
// Spruchlisten ComboBox füllen
var lists = py.call_sync("fortunecookie.get_fortune_lists_with_description", []);
fortuneListCombo.model = lists;
// Aktuelle Liste auswählen (vergleiche nur den Listennamen, nicht die Beschreibung)
for (var i = 0; i < fortuneListCombo.count; i++) {
var text = fortuneListCombo.textAt(i);
var listName = text.split(" - ")[0];
if (listName === currentFortuneList) {
fortuneListCombo.currentIndex = i;
break;
}
}
settingsInitialized = true;
} catch (e) {
console.log("ERROR: Einstellungen nicht geladen: " + e);
}
}
}
ColumnLayout {
anchors.fill: parent
anchors.margins: units.gu(2)
spacing: units.gu(2)
// Spacer für Header
Item {
Layout.fillWidth: true
Layout.preferredHeight: units.gu(2)
}
// ============================================================
// SPRUCHLISTEN-AUSWAHL
// ============================================================
Label {
text: "Spruchliste:"
Layout.fillWidth: true
fontSize: "large"
}
ComboBox {
id: fortuneListCombo
Layout.fillWidth: true
Layout.preferredHeight: units.gu(8)
onActivated: {
var newListFull = fortuneListCombo.currentText;
// Extrahiere den Listennamen (Teil vor " - ")
var newList = newListFull.split(" - ")[0];
py.call("fortunecookie.set_fortune_list", [newList], function() {
console.log("Spruchliste gewaehlt: " + newList);
});
}
}
// ============================================================
// LAUTSTÄRKE - MUSIK
// ============================================================
Label {
text: "Musik-Lautstärke:"
Layout.fillWidth: true
fontSize: "large"
}
RowLayout {
Layout.fillWidth: true
spacing: units.gu(2)
Slider {
id: musicVolumeSlider
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 1.0
stepSize: 0.1
value: 0.5
onValueChanged: {
var volume = musicVolumeSlider.value;
py.call("fortunecookie.set_music_volume", [volume]);
musicVolumeLabel.text = Math.round(volume * 100) + "%";
}
}
Label {
id: musicVolumeLabel
text: Math.round(musicVolumeSlider.value * 100) + "%"
width: units.gu(10)
horizontalAlignment: Text.AlignHCenter
fontSize: "medium"
}
}
// ============================================================
// LAUTSTÄRKE - KNACK-GERÄUSCH
// ============================================================
Label {
text: "Knack-Lautstärke:"
Layout.fillWidth: true
fontSize: "large"
}
RowLayout {
Layout.fillWidth: true
spacing: units.gu(2)
Slider {
id: crackVolumeSlider
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 1.0
stepSize: 0.1
value: 1.0
onValueChanged: {
var volume = crackVolumeSlider.value;
py.call("fortunecookie.set_crack_volume", [volume]);
crackVolumeLabel.text = Math.round(volume * 100) + "%";
}
}
Label {
id: crackVolumeLabel
text: Math.round(crackVolumeSlider.value * 100) + "%"
width: units.gu(10)
horizontalAlignment: Text.AlignHCenter
fontSize: "medium"
}
}
// ============================================================
// ZURÜCK-BUTTON
// ============================================================
Item {
Layout.fillWidth: true
Layout.preferredHeight: units.gu(10)
}
Button {
text: "Zurück"
Layout.fillWidth: false
Layout.preferredWidth: units.gu(20)
Layout.preferredHeight: units.gu(8)
Layout.alignment: Qt.AlignHCenter
onClicked: {
mainStack.currentIndex = 0;
}
}
}
}
}
// Settings-Page erstellen
Component.onCompleted: {
var comp = settingsComponent.createObject(mainStack);
mainStack.insert(1, comp);
}================================================================
// SEITE 0: HAUPTSPIELBILDSCHIRM
// ================================================================
Page {
-196
View File
@@ -1,196 +0,0 @@
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import QtMultimedia 5.0
import Lomiri.Components 1.3
import Lomiri.Components.Popups 1.3
import io.thp.pyotherside 1.4
Page {
id: settingsPage
objectName: 'settingsPage'
property bool settingsInitialized: false
property var currentFortuneList: "classic"
property real musicVolume: 0.5
property real crackVolume: 1.0
header: PageHeader {
title: "Einstellungen"
}
// Timer für PyOtherSide Initialisierung
Timer {
id: initTimer
interval: 1000
running: true
repeat: false
onTriggered: {
try {
// Einstellungen laden
currentFortuneList = py.call_sync("fortunecookie.get_current_fortune_list", []);
musicVolume = py.call_sync("fortunecookie.get_music_volume", []);
crackVolume = py.call_sync("fortunecookie.get_crack_volume", []);
// Slider Werte setzen
musicVolumeSlider.value = musicVolume;
crackVolumeSlider.value = crackVolume;
// Spruchlisten ComboBox füllen
var lists = py.call_sync("fortunecookie.get_fortune_lists_with_description", []);
fortuneListCombo.model = lists;
// Aktuelle Liste auswählen (vergleiche nur den Listennamen, nicht die Beschreibung)
for (var i = 0; i < fortuneListCombo.count; i++) {
var text = fortuneListCombo.textAt(i);
var listName = text.split(" - ")[0];
if (listName === currentFortuneList) {
fortuneListCombo.currentIndex = i;
break;
}
}
settingsInitialized = true;
} catch (e) {
console.log("ERROR: Einstellungen nicht geladen: " + e);
}
}
}
ColumnLayout {
anchors.fill: parent
anchors.margins: units.gu(2)
spacing: units.gu(2)
// Spacer für Header
Item {
Layout.fillWidth: true
Layout.preferredHeight: units.gu(2)
}
// ============================================================
// SPRUCHLISTEN-AUSWAHL
// ============================================================
Label {
text: "Spruchliste:"
Layout.fillWidth: true
fontSize: "large"
}
ComboBox {
id: fortuneListCombo
Layout.fillWidth: true
Layout.preferredHeight: units.gu(8)
onActivated: {
var newListFull = fortuneListCombo.currentText;
// Extrahiere den Listennamen (Teil vor " - ")
var newList = newListFull.split(" - ")[0];
py.call("fortunecookie.set_fortune_list", [newList], function() {
console.log("Spruchliste gewaehlt: " + newList);
});
}
}
// ============================================================
// LAUTSTÄRKE - MUSIK
// ============================================================
Label {
text: "Musik-Lautstärke:"
Layout.fillWidth: true
fontSize: "large"
}
RowLayout {
Layout.fillWidth: true
spacing: units.gu(2)
Slider {
id: musicVolumeSlider
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 1.0
stepSize: 0.1
value: 0.5
showValue: false
onValueChanged: {
var volume = musicVolumeSlider.value;
py.call("fortunecookie.set_music_volume", [volume]);
musicVolumeLabel.text = Math.round(volume * 100) + "%";
}
}
Label {
id: musicVolumeLabel
text: Math.round(musicVolumeSlider.value * 100) + "%"
width: units.gu(10)
horizontalAlignment: Text.AlignHCenter
fontSize: "medium"
}
}
// ============================================================
// LAUTSTÄRKE - KNACK-GERÄUSCH
// ============================================================
Label {
text: "Knack-Lautstärke:"
Layout.fillWidth: true
fontSize: "large"
}
RowLayout {
Layout.fillWidth: true
spacing: units.gu(2)
Slider {
id: crackVolumeSlider
Layout.fillWidth: true
minimumValue: 0.0
maximumValue: 1.0
stepSize: 0.1
value: 1.0
showValue: false
onValueChanged: {
var volume = crackVolumeSlider.value;
py.call("fortunecookie.set_crack_volume", [volume]);
crackVolumeLabel.text = Math.round(volume * 100) + "%";
}
}
Label {
id: crackVolumeLabel
text: Math.round(crackVolumeSlider.value * 100) + "%"
width: units.gu(10)
horizontalAlignment: Text.AlignHCenter
fontSize: "medium"
}
}
// ============================================================
// ZURÜCK-BUTTON
// ============================================================
Item {
Layout.fillWidth: true
Layout.preferredHeight: units.gu(10)
}
Button {
text: "Zurück"
Layout.fillWidth: false
Layout.preferredWidth: units.gu(20)
Layout.preferredHeight: units.gu(8)
Layout.alignment: Qt.AlignHCenter
onClicked: {
mainStack.currentIndex = 0;
}
}
}
}