diff --git a/qml/Main.qml b/qml/Main.qml index d4ce635..bc74891 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -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 { diff --git a/qml/Settings.qml b/qml/Settings.qml deleted file mode 100644 index cc47c74..0000000 --- a/qml/Settings.qml +++ /dev/null @@ -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; - } - } - } -}