Add restart option
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
package ch.dissem.yaep.ui.desktop
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -14,17 +16,25 @@ import androidx.compose.material3.SwitchDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.WindowPlacement
|
||||
import androidx.compose.ui.window.WindowScope
|
||||
import androidx.compose.ui.window.WindowState
|
||||
import ch.dissem.yaep.domain.Game
|
||||
import ch.dissem.yaep.ui.common.theme.AppTheme
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
import yaep.commonui.generated.resources.action_restart
|
||||
import yaep.commonui.generated.resources.app_name_full
|
||||
import yaep.commonui.generated.resources.moon
|
||||
import yaep.commonui.generated.resources.restart
|
||||
import yaep.commonui.generated.resources.sun
|
||||
import yaep.commonui.generated.resources.window_close
|
||||
import yaep.commonui.generated.resources.window_maximize
|
||||
@@ -58,8 +68,17 @@ fun AppBar(
|
||||
useDarkMode: Boolean,
|
||||
setDarkMode: (Boolean) -> Unit,
|
||||
onCloseRequest: () -> Unit,
|
||||
onRestart: () -> Unit,
|
||||
windowState: WindowState,
|
||||
game: Game,
|
||||
) {
|
||||
var gameSolved by remember { mutableStateOf(false) }
|
||||
LaunchedEffect(game) {
|
||||
game.onSolved {
|
||||
gameSolved = true
|
||||
}
|
||||
}
|
||||
|
||||
TopAppBar(
|
||||
navigationIcon = {
|
||||
Image(
|
||||
@@ -70,6 +89,16 @@ fun AppBar(
|
||||
},
|
||||
title = { Text(text = stringResource(CRes.string.app_name_full)) },
|
||||
actions = {
|
||||
IconButton(
|
||||
onClick = onRestart
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(CRes.drawable.action_restart),
|
||||
contentDescription = stringResource(CRes.string.restart),
|
||||
modifier = Modifier.size(SwitchDefaults.IconSize),
|
||||
)
|
||||
}
|
||||
Spacer(Modifier.width(8.dp))
|
||||
Switch(
|
||||
checked = useDarkMode,
|
||||
onCheckedChange = setDarkMode,
|
||||
@@ -98,6 +127,7 @@ fun AppBar(
|
||||
)
|
||||
}
|
||||
IconButton(
|
||||
enabled = !gameSolved,
|
||||
onClick = {
|
||||
windowState.placement =
|
||||
if (windowState.placement == WindowPlacement.Maximized)
|
||||
|
||||
@@ -14,8 +14,12 @@ import androidx.compose.ui.window.Window
|
||||
import androidx.compose.ui.window.WindowPlacement
|
||||
import androidx.compose.ui.window.application
|
||||
import androidx.compose.ui.window.rememberWindowState
|
||||
import ch.dissem.yaep.domain.Game
|
||||
import ch.dissem.yaep.domain.generateGame
|
||||
import ch.dissem.yaep.ui.common.App
|
||||
import ch.dissem.yaep.ui.common.theme.emojiFontFamily
|
||||
import ch.dissem.yaep.ui.desktop.AppBar
|
||||
import ch.dissem.yaep.ui.desktop.DesktopWindow
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.resources.stringResource
|
||||
import yaep.commonui.generated.resources.app_name
|
||||
@@ -35,6 +39,7 @@ fun main() = application {
|
||||
placement = WindowPlacement.Floating,
|
||||
size = DpSize(1200.dp, 800.dp)
|
||||
)
|
||||
var game by remember { mutableStateOf<Game>(generateGame()) }
|
||||
|
||||
Window(
|
||||
onCloseRequest = ::exitApplication,
|
||||
@@ -44,6 +49,7 @@ fun main() = application {
|
||||
icon = painterResource(DRes.drawable.ic_launcher)
|
||||
) {
|
||||
var useDarkMode by remember { mutableStateOf(true) }
|
||||
var resetCluesBeacon by remember { mutableStateOf(Any()) }
|
||||
DesktopWindow(
|
||||
useDarkMode = useDarkMode,
|
||||
topBar = {
|
||||
@@ -51,11 +57,21 @@ fun main() = application {
|
||||
useDarkMode = useDarkMode,
|
||||
setDarkMode = { useDarkMode = it },
|
||||
onCloseRequest = ::exitApplication,
|
||||
windowState = windowState
|
||||
onRestart = {
|
||||
do while (game.grid.undo());
|
||||
resetCluesBeacon = Any()
|
||||
},
|
||||
windowState = windowState,
|
||||
game = game,
|
||||
)
|
||||
}
|
||||
) {
|
||||
App(modifier = Modifier.padding(it))
|
||||
App(
|
||||
modifier = Modifier.padding(it),
|
||||
game = game,
|
||||
onNewGame = { game = generateGame() },
|
||||
resetCluesBeacon = resetCluesBeacon
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user