From 7192bbd7fa740f4165e631d9280df8b2e0f8de4b Mon Sep 17 00:00:00 2001 From: aro Date: Sun, 13 Nov 2022 23:01:59 +0100 Subject: [PATCH] feat: "state machine" --- src/main/kotlin/xyz/atnrch/wrench/Main.kt | 10 +++-- .../atnrch/wrench/display/WrenchDisplay.kt | 28 ++++--------- .../wrench/display/status/WrenchStatus.kt | 40 +++++++++++++++++++ .../scheduler/{FileMover.kt => Watcher.kt} | 19 +++++---- 4 files changed, 64 insertions(+), 33 deletions(-) create mode 100644 src/main/kotlin/xyz/atnrch/wrench/display/status/WrenchStatus.kt rename src/main/kotlin/xyz/atnrch/wrench/scheduler/{FileMover.kt => Watcher.kt} (69%) diff --git a/src/main/kotlin/xyz/atnrch/wrench/Main.kt b/src/main/kotlin/xyz/atnrch/wrench/Main.kt index caa4ac0..267186e 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/Main.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/Main.kt @@ -7,14 +7,18 @@ import androidx.compose.runtime.remember import androidx.compose.ui.window.Window import androidx.compose.ui.window.application import xyz.atnrch.wrench.display.WrenchDisplay -import xyz.atnrch.wrench.scheduler.FileMover +import xyz.atnrch.wrench.scheduler.Watcher @Composable @Preview fun App() { MaterialTheme { - val fileMover = remember { FileMover() } - WrenchDisplay(onStartButtonClick = fileMover::start) + val watcher = remember { Watcher() } + WrenchDisplay( + onStartButtonClick = watcher::start, + onStopButtonClick = watcher::stop, + onAddButtonClick = {} + ) } } diff --git a/src/main/kotlin/xyz/atnrch/wrench/display/WrenchDisplay.kt b/src/main/kotlin/xyz/atnrch/wrench/display/WrenchDisplay.kt index 0c20f57..c0b1669 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/display/WrenchDisplay.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/display/WrenchDisplay.kt @@ -1,34 +1,22 @@ package xyz.atnrch.wrench.display -import androidx.compose.foundation.layout.* -import androidx.compose.material.Button -import androidx.compose.material.Text +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp +import xyz.atnrch.wrench.display.status.WrenchStatus @Composable fun WrenchDisplay( - onStartButtonClick: () -> Unit + onStartButtonClick: () -> Unit, + onStopButtonClick: () -> Unit, + onAddButtonClick: () -> Unit ) { Box( - contentAlignment = Alignment.Center, + contentAlignment = Alignment.BottomEnd, modifier = Modifier.fillMaxSize() ) { - Row { - - Button(onStartButtonClick) { - Text("Watch") - } - Spacer(Modifier.width(16.dp)) - Button({}) { - Text("Stop") - } - Spacer(Modifier.width(16.dp)) - Button({}) { - Text("Add...") - } - } + WrenchStatus(onStartButtonClick, onStopButtonClick, onAddButtonClick) } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/display/status/WrenchStatus.kt b/src/main/kotlin/xyz/atnrch/wrench/display/status/WrenchStatus.kt new file mode 100644 index 0000000..f4413b3 --- /dev/null +++ b/src/main/kotlin/xyz/atnrch/wrench/display/status/WrenchStatus.kt @@ -0,0 +1,40 @@ +package xyz.atnrch.wrench.display.status + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.width +import androidx.compose.material.Button +import androidx.compose.material.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun WrenchStatus( + onStartButtonClick: () -> Unit, + onStopButtonClick: () -> Unit, + onAddButtonClick: () -> Unit +) { + var status by remember { mutableStateOf(false) } + var startStopButtonText by remember { mutableStateOf("Start") } + + Row { + Button({ + status = if (status) { + onStopButtonClick.invoke() + false + } else { + onStartButtonClick.invoke() + true + } + startStopButtonText = if (status) "Stop" else "Start" + }) { + Text(startStopButtonText) + } + Spacer(Modifier.width(10.dp)) + Button(onAddButtonClick) { + Text("Add...") + } + Spacer(Modifier.width(10.dp)) + } +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/scheduler/FileMover.kt b/src/main/kotlin/xyz/atnrch/wrench/scheduler/Watcher.kt similarity index 69% rename from src/main/kotlin/xyz/atnrch/wrench/scheduler/FileMover.kt rename to src/main/kotlin/xyz/atnrch/wrench/scheduler/Watcher.kt index 9ca9caa..c02648c 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/scheduler/FileMover.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/scheduler/Watcher.kt @@ -4,29 +4,28 @@ import kotlinx.coroutines.* import kotlinx.coroutines.swing.Swing import java.util.concurrent.TimeUnit -class FileMover { +class Watcher { + companion object { + var WATCHING = false + } + private var coroutineScope = CoroutineScope(Dispatchers.Swing) - private var isActive = false fun start() { - if(isActive) return + if(WATCHING) return coroutineScope.launch { - this@FileMover.isActive = true - while (isActive) { + WATCHING = true + while (WATCHING) { delay(TimeUnit.SECONDS.toMillis(5)) println("Hello world!") } } } - fun pause() { - isActive = false - } - fun stop() { coroutineScope.cancel() coroutineScope = CoroutineScope(Dispatchers.Main) - isActive = false + WATCHING = false } } \ No newline at end of file