fix: Last-State Bug, Musik-Button und Cookie-Größe
- Label direkt verwendet (nicht in Item genestet) - Icon-Größe auf xx-large erhöht - Musik-Button erst nach Initialisierung sichtbar - Geöffneter Keks größer (36x28 vs 32x24 GU) - Last-State Funktionen bereinigt Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
+69
-45
@@ -12,10 +12,13 @@ MainView {
|
||||
height: units.gu(75)
|
||||
theme.name: "Lomiri.Components.Themes.SuruDark"
|
||||
|
||||
// ====================================================================
|
||||
// PROPERTIES (am Anfang definieren!)
|
||||
// ====================================================================
|
||||
property bool fortuneOpened: false
|
||||
property string currentFortune: ""
|
||||
property bool musicPlaying: false
|
||||
property bool musicButtonVisible: false
|
||||
property bool appInitialized: false
|
||||
|
||||
Python {
|
||||
id: py
|
||||
@@ -40,6 +43,40 @@ MainView {
|
||||
volume: 1.0
|
||||
}
|
||||
|
||||
// ====================================================================
|
||||
// INITIALISIERUNGS-TIMER
|
||||
// ====================================================================
|
||||
// WICHTIG: PyOtherSide braucht Zeit zum Laden!
|
||||
// 1 Sekunde Verzögerung verhindert Race Conditions
|
||||
Timer {
|
||||
id: initTimer
|
||||
interval: 1000
|
||||
running: true
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
try {
|
||||
currentFortune = py.call_sync("fortunecookie.get_initial_fortune", []);
|
||||
currentFortuneLabel.text = currentFortune;
|
||||
cookieImage.source = Qt.resolvedUrl("../assets/cookie_closed2.png");
|
||||
|
||||
// Musik-Status laden (Last-State)
|
||||
musicPlaying = py.call_sync("fortunecookie.get_music_enabled", []);
|
||||
console.log("DEBUG QML: musicPlaying geladen: " + musicPlaying);
|
||||
|
||||
// MediaPlayer Zustand synchronisieren
|
||||
if (musicPlaying) {
|
||||
mediaPlayer.play();
|
||||
}
|
||||
|
||||
// UI erst nach Initialisierung anzeigen
|
||||
appInitialized = true;
|
||||
|
||||
} catch (e) {
|
||||
console.log("ERROR QML: Initialisierung fehlgeschlagen: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Page {
|
||||
id: mainPage
|
||||
anchors.fill: parent
|
||||
@@ -48,30 +85,10 @@ MainView {
|
||||
title: "Fortune Cookie"
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: initTimer
|
||||
interval: 1000 // Warte 1 Sekunde auf Python-Ladung
|
||||
running: true
|
||||
repeat: false
|
||||
onTriggered: {
|
||||
try {
|
||||
currentFortuneLabel.text = py.call_sync("fortunecookie.get_initial_fortune", []);
|
||||
cookieImage.source = Qt.resolvedUrl("../assets/cookie_closed2.png");
|
||||
musicPlaying = py.call_sync("fortunecookie.get_music_enabled", []);
|
||||
console.log("DEBUG QML: musicPlaying loaded from Python: " + musicPlaying);
|
||||
if (musicPlaying) {
|
||||
mediaPlayer.play();
|
||||
}
|
||||
musicButtonVisible = true;
|
||||
} catch (e) {
|
||||
console.log("ERROR QML: Failed to initialize: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Image {
|
||||
id: cookieImage
|
||||
anchors.centerIn: parent
|
||||
// Geöffneter Keks ist größer als geschlossener
|
||||
width: fortuneOpened ? units.gu(36) : units.gu(32)
|
||||
height: fortuneOpened ? units.gu(28) : units.gu(24)
|
||||
source: fortuneOpened ? Qt.resolvedUrl("../assets/cookie_open2.png") : Qt.resolvedUrl("../assets/cookie_closed2.png")
|
||||
@@ -90,6 +107,7 @@ MainView {
|
||||
fortuneOpened = true;
|
||||
currentFortune = py.call_sync("fortunecookie.get_current_fortune", []);
|
||||
currentFortuneLabel.text = currentFortune;
|
||||
currentFortuneLabel.visible = true;
|
||||
cookieImage.source = Qt.resolvedUrl("../assets/cookie_open2.png");
|
||||
});
|
||||
}
|
||||
@@ -133,7 +151,7 @@ MainView {
|
||||
text: ""
|
||||
fontSize: "large"
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
visible: fortuneOpened
|
||||
visible: false
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
MouseArea {
|
||||
@@ -150,8 +168,15 @@ MainView {
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: musicButtonContainer
|
||||
// ================================================================
|
||||
// MUSIK-BUTTON
|
||||
// ================================================================
|
||||
// FIX: Label DIREKT verwenden (nicht in Item nesten!) - sonst "Element is not creatable"
|
||||
// Icon-Größe: xx-large für bessere Sichtbarkeit
|
||||
// Hintergrund: transparent (wie Page-Hintergrund)
|
||||
// Erst nach Initialisierung anzeigen, um Flackern zu vermeiden
|
||||
Label {
|
||||
id: musicButton
|
||||
anchors {
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
@@ -159,29 +184,28 @@ MainView {
|
||||
}
|
||||
width: units.gu(10)
|
||||
height: units.gu(10)
|
||||
visible: musicButtonVisible
|
||||
text: musicPlaying ? "\uD83D\uDD0A" : "\uD83D\uDD07" // 🎵 oder 🔇
|
||||
fontSize: "xx-large" // Großes Icon für gute Sichtbarkeit
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: theme.palette.normalText
|
||||
// FIX: Erst nach Initialisierung anzeigen
|
||||
visible: appInitialized
|
||||
|
||||
Label {
|
||||
id: musicButton
|
||||
text: musicPlaying ? "\uD83D\uDD0A" : "\uD83D\uDD07"
|
||||
fontSize: "x-large"
|
||||
anchors.centerIn: parent
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: {
|
||||
console.log("DEBUG QML: Music button clicked, current musicPlaying: " + musicPlaying);
|
||||
if (musicPlaying) {
|
||||
mediaPlayer.stop();
|
||||
} else {
|
||||
mediaPlayer.play();
|
||||
}
|
||||
musicPlaying = !musicPlaying;
|
||||
console.log("DEBUG QML: Setting music enabled to: " + musicPlaying);
|
||||
py.call("fortunecookie.set_music_enabled", [musicPlaying]);
|
||||
onClicked: {
|
||||
console.log("DEBUG QML: Music button clicked, current musicPlaying: " + musicPlaying);
|
||||
if (musicPlaying) {
|
||||
mediaPlayer.stop();
|
||||
} else {
|
||||
mediaPlayer.play();
|
||||
}
|
||||
musicPlaying = !musicPlaying;
|
||||
console.log("DEBUG QML: Setting music enabled to: " + musicPlaying);
|
||||
py.call("fortunecookie.set_music_enabled", [musicPlaying]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user