From a42eb486e4ffa6572fd98d067ae92b930e084c2a Mon Sep 17 00:00:00 2001 From: aro Date: Sat, 7 Jan 2023 10:43:09 +0100 Subject: [PATCH] feat: non-working implementation of layout saving --- layout.json | 0 .../xyz/atnrch/wrench/gui/WrenchScaffold.kt | 12 ++++++-- .../wrench/gui/filemanager/top/TopBar.kt | 13 +++++++- .../gui/filemanager/top/TopBarButtons.kt | 30 +++++++++++++++++++ .../xyz/atnrch/wrench/json/JsonConfig.kt | 7 +++-- 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 layout.json create mode 100644 src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBarButtons.kt diff --git a/layout.json b/layout.json new file mode 100644 index 0000000..e69de29 diff --git a/src/main/kotlin/xyz/atnrch/wrench/gui/WrenchScaffold.kt b/src/main/kotlin/xyz/atnrch/wrench/gui/WrenchScaffold.kt index ee823f4..ae1f2af 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/gui/WrenchScaffold.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/gui/WrenchScaffold.kt @@ -7,10 +7,11 @@ import androidx.compose.material.rememberScaffoldState import androidx.compose.runtime.* import androidx.compose.ui.unit.dp import androidx.compose.ui.window.WindowState +import xyz.atnrch.wrench.data.SnackBarDataHolder import xyz.atnrch.wrench.gui.filemanager.bottom.FloatingButton import xyz.atnrch.wrench.gui.filemanager.top.TopBar -import xyz.atnrch.wrench.data.SnackBarDataHolder import xyz.atnrch.wrench.gui.style.UIColors +import xyz.atnrch.wrench.json.JsonConfig import xyz.atnrch.wrench.watcher.Watcher import xyz.atnrch.wrench.watcher.WatcherEntry import xyz.atnrch.wrench.watcher.WatcherManager @@ -26,18 +27,23 @@ fun WrenchScaffold(state: WindowState) { val watcherManager = remember { WatcherManager(entries) } val watcher = remember { Watcher(watcherManager, snackBarDataHolder) } val tabTitles = listOf("File Manager", "Servers") + val jsonConfig = JsonConfig { + it.forEach { entry -> + watcherManager.addFile(entry.file, entry.outputs) + } + } var currentClick by remember { mutableStateOf(-1) } var tabIndex by remember { mutableStateOf(0) } var minMode by remember { mutableStateOf(false) } minMode = state.size.width <= 600.dp - if(state.size.width < 500.dp) { + if (state.size.width < 500.dp) { Text("Window is too small") } else { Scaffold( scaffoldState = scaffoldState, - topBar = { TopBar() }, + topBar = { TopBar(jsonConfig, tabIndex, entries.values) }, floatingActionButton = { if (tabIndex == 0) FloatingButton(watcherManager) }, isFloatingActionButtonDocked = true, backgroundColor = UIColors.PRIMARY, diff --git a/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBar.kt b/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBar.kt index cb5edc7..97fe436 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBar.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBar.kt @@ -14,9 +14,15 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import xyz.atnrch.wrench.gui.style.Fonts import xyz.atnrch.wrench.gui.style.UIColors +import xyz.atnrch.wrench.json.JsonConfig +import xyz.atnrch.wrench.watcher.WatcherEntry @Composable -fun TopBar() { +fun TopBar( + jsonConfig: JsonConfig, + tabIndex: Int, + values: MutableCollection +) { TopAppBar( backgroundColor = UIColors.DARK, contentColor = Color.White, @@ -33,6 +39,11 @@ fun TopBar() { text = "Wrench", fontFamily = Fonts.JOST_MEDIUM ) + }, + actions = { + if (tabIndex == 0) { + TopBarButtons(jsonConfig, values) + } } ) } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBarButtons.kt b/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBarButtons.kt new file mode 100644 index 0000000..b81e189 --- /dev/null +++ b/src/main/kotlin/xyz/atnrch/wrench/gui/filemanager/top/TopBarButtons.kt @@ -0,0 +1,30 @@ +package xyz.atnrch.wrench.gui.filemanager.top + +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.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import xyz.atnrch.wrench.json.JsonConfig +import xyz.atnrch.wrench.watcher.WatcherEntry + +@Composable +fun TopBarButtons( + jsonConfig: JsonConfig, + values: MutableCollection +) { + Button(onClick = { + jsonConfig.writeLayout(values.toList()) + }) { + Text("Save") + } + Spacer(Modifier.width(10.dp)) + Button(onClick = { + jsonConfig.readLayout() + }) { + Text("Load") + } + Spacer(Modifier.width(10.dp)) +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/json/JsonConfig.kt b/src/main/kotlin/xyz/atnrch/wrench/json/JsonConfig.kt index ed86b6a..f8892ee 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/json/JsonConfig.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/json/JsonConfig.kt @@ -7,7 +7,9 @@ import java.io.File import java.io.FileReader import java.io.FileWriter -class JsonConfig { +class JsonConfig( + private val onWatcherEntriesUpdate: (List) -> Unit +) { private val gson: Gson = Gson().newBuilder().serializeNulls().setPrettyPrinting().create() private val file = File("layout.json") private val watcherEntryType = object : TypeToken>() {}.type @@ -17,6 +19,7 @@ class JsonConfig { } fun readLayout() { - gson.fromJson>(FileReader(file), watcherEntryType) + val entries = gson.fromJson>(FileReader(file), watcherEntryType) + onWatcherEntriesUpdate.invoke(entries) } } \ No newline at end of file