diff --git a/commonUI/src/commonMain/composeResources/values/strings.xml b/commonUI/src/commonMain/composeResources/values/strings.xml
index 0f55b09..8d0c491 100644
--- a/commonUI/src/commonMain/composeResources/values/strings.xml
+++ b/commonUI/src/commonMain/composeResources/values/strings.xml
@@ -1,4 +1,76 @@
YAEP
Yet Another Einstein Puzzle
+ Congratulations! You solved the puzzle in %1$s
+ Restart
+
+
+ Zebra
+ Octopus
+ Goat
+ Sloth
+ Dog
+ Snail
+ Ant
+
+
+ Ice Cream
+ Doughnut
+ Cookie
+ Cake
+ Cupcake
+ Pie
+ Chocolate
+ Lollipop
+ Custard
+
+
+ Milk
+ Wine
+ Cocktail
+ Coffee
+ Tea
+ Beer
+ Beverage
+
+
+ Banana
+ Cherries
+ Grapes
+ Kiwi
+ Lemon
+ Mango
+ Pear
+ Pineapple
+ Strawberry
+ Watermelon
+
+
+ Canadian
+ Japanese
+ Norwegian
+ Spanish
+ Swedish
+ Swiss
+ British
+ Ukrainian
+
+
+ Astronaut
+ Health_worker
+ Farmer
+ Rock_star
+ Scientist
+ Software_dev
+ Firefighter
+ Teacher
+
+
+ Bicycle
+ Motor Scooter
+ Skateboard
+ Taxi
+ Locomotive
+ Tram Car
+ Bus
\ No newline at end of file
diff --git a/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/App.kt b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/App.kt
index 46b68ac..5aab950 100644
--- a/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/App.kt
+++ b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/App.kt
@@ -101,7 +101,7 @@ fun App(modifier: Modifier = Modifier) {
Text(time, fontSize = TextUnit(4f, TextUnitType.Em))
}
}
- EndOfGame(isSolved = isSolved) {
+ EndOfGame(isSolved = isSolved, time = time) {
game = generateGame()
}
}
diff --git a/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/end.kt b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/end.kt
index ed014d7..5185ada 100644
--- a/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/end.kt
+++ b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/end.kt
@@ -18,11 +18,16 @@ import androidx.compose.ui.graphics.BlurEffect
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.sp
+import org.jetbrains.compose.resources.stringResource
+import yaep.commonui.generated.resources.Res
+import yaep.commonui.generated.resources.restart
+import yaep.commonui.generated.resources.solved
@Composable
fun EndOfGame(
modifier: Modifier = Modifier,
isSolved: Boolean,
+ time: String,
onRestart: () -> Unit
) {
AnimatedVisibility(
@@ -43,7 +48,7 @@ fun EndOfGame(
.align(Alignment.Center)
) {
Text(
- text = "You won",
+ text = stringResource(Res.string.solved, time),
fontSize = 128.sp,
textAlign = TextAlign.Center,
)
@@ -51,7 +56,7 @@ fun EndOfGame(
modifier = Modifier.align(CenterHorizontally),
onClick = onRestart
) {
- Text("Restart")
+ Text(stringResource(Res.string.restart))
}
}
}
diff --git a/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/names.kt b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/names.kt
new file mode 100644
index 0000000..1b21714
--- /dev/null
+++ b/commonUI/src/commonMain/kotlin/ch/dissem/yaep/ui/common/names.kt
@@ -0,0 +1,163 @@
+package ch.dissem.yaep.ui.common
+
+import ch.dissem.yaep.domain.Animal
+import ch.dissem.yaep.domain.Dessert
+import ch.dissem.yaep.domain.Drink
+import ch.dissem.yaep.domain.Fruit
+import ch.dissem.yaep.domain.ItemClass
+import ch.dissem.yaep.domain.Nationality
+import ch.dissem.yaep.domain.Profession
+import ch.dissem.yaep.domain.Transportation
+import org.jetbrains.compose.resources.StringResource
+import yaep.commonui.generated.resources.Res
+import yaep.commonui.generated.resources.ant
+import yaep.commonui.generated.resources.astronaut
+import yaep.commonui.generated.resources.banana
+import yaep.commonui.generated.resources.beer
+import yaep.commonui.generated.resources.beverage
+import yaep.commonui.generated.resources.bicycle
+import yaep.commonui.generated.resources.british
+import yaep.commonui.generated.resources.bus
+import yaep.commonui.generated.resources.cake
+import yaep.commonui.generated.resources.canadian
+import yaep.commonui.generated.resources.cherries
+import yaep.commonui.generated.resources.chocolate
+import yaep.commonui.generated.resources.cocktail
+import yaep.commonui.generated.resources.coffee
+import yaep.commonui.generated.resources.cookie
+import yaep.commonui.generated.resources.cupcake
+import yaep.commonui.generated.resources.custard
+import yaep.commonui.generated.resources.dog
+import yaep.commonui.generated.resources.doughnut
+import yaep.commonui.generated.resources.farmer
+import yaep.commonui.generated.resources.firefighter
+import yaep.commonui.generated.resources.goat
+import yaep.commonui.generated.resources.grapes
+import yaep.commonui.generated.resources.health_worker
+import yaep.commonui.generated.resources.ice_cream
+import yaep.commonui.generated.resources.japanese
+import yaep.commonui.generated.resources.kiwi
+import yaep.commonui.generated.resources.lemon
+import yaep.commonui.generated.resources.locomotive
+import yaep.commonui.generated.resources.lollipop
+import yaep.commonui.generated.resources.mango
+import yaep.commonui.generated.resources.milk
+import yaep.commonui.generated.resources.motor_scooter
+import yaep.commonui.generated.resources.norwegian
+import yaep.commonui.generated.resources.octopus
+import yaep.commonui.generated.resources.pear
+import yaep.commonui.generated.resources.pie
+import yaep.commonui.generated.resources.pineapple
+import yaep.commonui.generated.resources.rock_star
+import yaep.commonui.generated.resources.scientist
+import yaep.commonui.generated.resources.skateboard
+import yaep.commonui.generated.resources.sloth
+import yaep.commonui.generated.resources.snail
+import yaep.commonui.generated.resources.software_dev
+import yaep.commonui.generated.resources.spanish
+import yaep.commonui.generated.resources.strawberry
+import yaep.commonui.generated.resources.swedish
+import yaep.commonui.generated.resources.swiss
+import yaep.commonui.generated.resources.taxi
+import yaep.commonui.generated.resources.tea
+import yaep.commonui.generated.resources.teacher
+import yaep.commonui.generated.resources.tram_car
+import yaep.commonui.generated.resources.ukrainian
+import yaep.commonui.generated.resources.watermelon
+import yaep.commonui.generated.resources.wine
+import yaep.commonui.generated.resources.zebra
+
+val ItemClass<*>.localName: StringResource
+ get() = when (this) {
+ is Animal -> this.stringResource
+ is Dessert -> this.stringResource
+ is Drink -> this.stringResource
+ is Fruit -> this.stringResource
+ is Nationality -> this.stringResource
+ is Profession -> this.stringResource
+ is Transportation -> this.stringResource
+ }
+
+private val Animal.stringResource: StringResource
+ get() = when (this) {
+ Animal.ZEBRA -> Res.string.zebra
+ Animal.OCTOPUS -> Res.string.octopus
+ Animal.GOAT -> Res.string.goat
+ Animal.SLOTH -> Res.string.sloth
+ Animal.DOG -> Res.string.dog
+ Animal.SNAIL -> Res.string.snail
+ Animal.ANT -> Res.string.ant
+ }
+
+private val Dessert.stringResource: StringResource
+ get() = when (this) {
+ Dessert.ICE_CREAM -> Res.string.ice_cream
+ Dessert.DOUGHNUT -> Res.string.doughnut
+ Dessert.COOKIE -> Res.string.cookie
+ Dessert.CAKE -> Res.string.cake
+ Dessert.CUPCAKE -> Res.string.cupcake
+ Dessert.PIE -> Res.string.pie
+ Dessert.CHOCOLATE -> Res.string.chocolate
+ Dessert.LOLLIPOP -> Res.string.lollipop
+ Dessert.CUSTARD -> Res.string.custard
+ }
+
+private val Drink.stringResource: StringResource
+ get() = when (this) {
+ Drink.MILK -> Res.string.milk
+ Drink.WINE -> Res.string.wine
+ Drink.COCKTAIL -> Res.string.cocktail
+ Drink.COFFEE -> Res.string.coffee
+ Drink.TEA -> Res.string.tea
+ Drink.BEER -> Res.string.beer
+ Drink.BEVERAGE -> Res.string.beverage
+ }
+
+private val Fruit.stringResource: StringResource
+ get() = when (this) {
+ Fruit.BANANA -> Res.string.banana
+ Fruit.CHERRIES -> Res.string.cherries
+ Fruit.GRAPES -> Res.string.grapes
+ Fruit.KIWI -> Res.string.kiwi
+ Fruit.LEMON -> Res.string.lemon
+ Fruit.MANGO -> Res.string.mango
+ Fruit.PEAR -> Res.string.pear
+ Fruit.PINEAPPLE -> Res.string.pineapple
+ Fruit.STRAWBERRY -> Res.string.strawberry
+ Fruit.WATERMELON -> Res.string.watermelon
+ }
+
+private val Nationality.stringResource: StringResource
+ get() = when (this) {
+ Nationality.CANADA -> Res.string.canadian
+ Nationality.JAPAN -> Res.string.japanese
+ Nationality.NORWAY -> Res.string.norwegian
+ Nationality.SPAIN -> Res.string.spanish
+ Nationality.SWEDEN -> Res.string.swedish
+ Nationality.SWITZERLAND -> Res.string.swiss
+ Nationality.UNITED_KINGDOM -> Res.string.british
+ Nationality.UKRAINE -> Res.string.ukrainian
+ }
+
+private val Profession.stringResource: StringResource
+ get() = when (this) {
+ Profession.ASTRONAUT -> Res.string.astronaut
+ Profession.HEALTH_WORKER -> Res.string.health_worker
+ Profession.FARMER -> Res.string.farmer
+ Profession.ROCK_STAR -> Res.string.rock_star
+ Profession.SCIENTIST -> Res.string.scientist
+ Profession.SOFTWARE_DEV -> Res.string.software_dev
+ Profession.FIREFIGHTER -> Res.string.firefighter
+ Profession.TEACHER -> Res.string.teacher
+ }
+
+private val Transportation.stringResource: StringResource
+ get() = when (this) {
+ Transportation.BICYCLE -> Res.string.bicycle
+ Transportation.MOTOR_SCOOTER -> Res.string.motor_scooter
+ Transportation.SKATEBOARD -> Res.string.skateboard
+ Transportation.TAXI -> Res.string.taxi
+ Transportation.LOCOMOTIVE -> Res.string.locomotive
+ Transportation.TRAM_CAR -> Res.string.tram_car
+ Transportation.BUS -> Res.string.bus
+ }
\ No newline at end of file
diff --git a/desktop/src/main/composeResources/drawable/ic_launcher.svg b/desktop/src/main/composeResources/drawable/ic_launcher.svg
index cfe3871..f98f17b 100644
--- a/desktop/src/main/composeResources/drawable/ic_launcher.svg
+++ b/desktop/src/main/composeResources/drawable/ic_launcher.svg
@@ -6,23 +6,24 @@
id="Layer_2"
x="0px"
y="0px"
- viewBox="0 0 128 128"
- style="enable-background:new 0 0 128 128;"
+ viewBox="0 0 32 32"
xml:space="preserve"
- sodipodi:docname="app_icon.svg"
+ sodipodi:docname="ic_launcher.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
+ width="32"
+ height="32"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
+
diff --git a/desktop/src/main/kotlin/ch/dissem/yaep/ui/desktop/desktop window.kt b/desktop/src/main/kotlin/ch/dissem/yaep/ui/desktop/desktop window.kt
index 63acdd5..08cce0a 100644
--- a/desktop/src/main/kotlin/ch/dissem/yaep/ui/desktop/desktop window.kt
+++ b/desktop/src/main/kotlin/ch/dissem/yaep/ui/desktop/desktop window.kt
@@ -1,5 +1,7 @@
+import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.window.WindowDraggableArea
@@ -13,6 +15,7 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
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
@@ -20,14 +23,15 @@ import androidx.compose.ui.window.WindowState
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.Res
import yaep.commonui.generated.resources.app_name_full
-import yaep.commonui.generated.resources.lightbulb
import yaep.commonui.generated.resources.moon
import yaep.commonui.generated.resources.sun
import yaep.commonui.generated.resources.window_close
import yaep.commonui.generated.resources.window_maximize
import yaep.commonui.generated.resources.window_minimize
+import yaep.desktop.generated.resources.ic_launcher
+import yaep.commonui.generated.resources.Res as CRes
+import yaep.desktop.generated.resources.Res as DRes
@Composable
fun WindowScope.DesktopWindow(
@@ -58,9 +62,13 @@ fun AppBar(
) {
TopAppBar(
navigationIcon = {
- Icon(painterResource(Res.drawable.lightbulb), null)
+ Image(
+ painter = painterResource(DRes.drawable.ic_launcher),
+ contentDescription = null,
+ modifier = Modifier.aspectRatio(1f).scale(0.5f),
+ )
},
- title = { Text(text = stringResource(Res.string.app_name_full)) },
+ title = { Text(text = stringResource(CRes.string.app_name_full)) },
actions = {
Switch(
checked = useDarkMode,
@@ -69,9 +77,9 @@ fun AppBar(
Icon(
painter = painterResource(
if (useDarkMode) {
- Res.drawable.sun
+ CRes.drawable.sun
} else {
- Res.drawable.moon
+ CRes.drawable.moon
}
),
contentDescription = null,
@@ -84,7 +92,7 @@ fun AppBar(
onClick = { windowState.isMinimized = !windowState.isMinimized }
) {
Icon(
- painter = painterResource(Res.drawable.window_minimize),
+ painter = painterResource(CRes.drawable.window_minimize),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
@@ -97,7 +105,7 @@ fun AppBar(
}
) {
Icon(
- painter = painterResource(Res.drawable.window_maximize),
+ painter = painterResource(CRes.drawable.window_maximize),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)
@@ -106,7 +114,7 @@ fun AppBar(
onClick = onCloseRequest
) {
Icon(
- painter = painterResource(Res.drawable.window_close),
+ painter = painterResource(CRes.drawable.window_close),
contentDescription = null,
modifier = Modifier.size(SwitchDefaults.IconSize),
)