From 50b52ecf58e2c7088bc1087d4ecbf34237bcdb2b Mon Sep 17 00:00:00 2001 From: aro Date: Fri, 2 Dec 2022 17:20:16 +0100 Subject: [PATCH] feat: remove output button --- .../wrench/components/WatcherDisplay.kt | 3 +- .../wrench/components/WrenchScaffold.kt | 2 +- .../components/bottom/AddOutputButton.kt | 62 +++++++++++++++++++ .../wrench/components/bottom/BottomBar.kt | 5 +- .../components/bottom/RemoveOutputButton.kt | 58 ++++++++++++++++- .../components/bottom/WatcherStatusButton.kt | 44 ++----------- .../components/center/empty/DefaultDisplay.kt | 26 +++++--- .../atnrch/wrench/watcher/WatcherManager.kt | 4 ++ 8 files changed, 150 insertions(+), 54 deletions(-) diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/WatcherDisplay.kt b/src/main/kotlin/xyz/atnrch/wrench/components/WatcherDisplay.kt index 5f54036..c3acc87 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/WatcherDisplay.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/WatcherDisplay.kt @@ -9,7 +9,6 @@ import xyz.atnrch.wrench.components.center.empty.DefaultDisplay import xyz.atnrch.wrench.components.center.input.InputEntries import xyz.atnrch.wrench.components.center.output.OutputEntries import xyz.atnrch.wrench.watcher.WatcherManager -import java.io.File import java.nio.file.Path @Composable @@ -24,7 +23,7 @@ fun WatcherDisplay( modifier = Modifier.padding(0.dp, 0.dp, 0.dp, 55.dp) ) { if (watcherManager.getEntries().isEmpty()) { - watcherManager.addFile(File("/home/aro/IdeaProjects/Wrench/dummy")) + //watcherManager.addFile(File("/home/aro/IdeaProjects/Wrench/dummy")) DefaultDisplay() } else { InputEntries(watcherManager, onEntryClick) diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt b/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt index 466739c..d649f7c 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt @@ -30,6 +30,6 @@ fun WrenchScaffold() { floatingActionButton = { FloatingButton(watcherManager) }, isFloatingActionButtonDocked = true, backgroundColor = UIColors.PRIMARY, - bottomBar = { BottomAppBar(watcherManager, watcher, currentClick, outputs) } + bottomBar = { BottomAppBar(watcherManager, watcher, currentClick, outputs) { currentClick = it } } ) { WatcherDisplay(watcherManager, currentClick, outputs) { currentClick = it } } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/AddOutputButton.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/AddOutputButton.kt index 2f68331..ced9ad8 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/AddOutputButton.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/AddOutputButton.kt @@ -1,2 +1,64 @@ package xyz.atnrch.wrench.components.bottom +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.NoteAdd +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import xyz.atnrch.wrench.components.center.showDirectoryPicker +import xyz.atnrch.wrench.logger.Logger +import xyz.atnrch.wrench.ui.UIColors +import xyz.atnrch.wrench.watcher.WatcherEntry +import xyz.atnrch.wrench.watcher.WatcherManager +import java.nio.file.Path + +@Composable +fun AddOutputButton( + watcherManager: WatcherManager, + outputs: MutableList, + currentClick: Int +) { + Button( + onClick = + { + val entry: WatcherEntry? = watcherManager.getFromId(currentClick) + showDirectoryPicker({ + Logger.info("Path: ${it.absolutePath}") + entry!!.map.add(it.toPath()) + outputs.add(it.toPath()) + }, { + Logger.info("No file selected.") + }) + }, + colors = ButtonDefaults.buttonColors(UIColors.DARK, Color.White), + contentPadding = PaddingValues( + start = 14.dp, + top = 6.dp, + end = 14.dp, + bottom = 6.dp + ), + shape = RoundedCornerShape(100), + border = BorderStroke(2.dp, UIColors.ORANGE), + modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false) + ) { + Icon( + Icons.Filled.NoteAdd, + tint = UIColors.ORANGE, + contentDescription = "Add output", + modifier = Modifier.size(22.dp) + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text("Add output...") + } +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt index f57e8bb..fdc1714 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/BottomBar.kt @@ -13,12 +13,13 @@ fun BottomAppBar( watcherManager: WatcherManager, watcher: Watcher, currentClick: Int, - outputs: MutableList + outputs: MutableList, + onCurrentClick: (Int) -> Unit ) { androidx.compose.material.BottomAppBar( cutoutShape = MaterialTheme.shapes.small.copy( CornerSize(percent = 50) ), backgroundColor = UIColors.DARK - ) { BottomRowNew(watcherManager, watcher, currentClick, outputs) } + ) { BottomRowNew(watcherManager, watcher, currentClick, outputs, onCurrentClick) } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/RemoveOutputButton.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/RemoveOutputButton.kt index aa35762..bc54a64 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/RemoveOutputButton.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/RemoveOutputButton.kt @@ -1,5 +1,61 @@ package xyz.atnrch.wrench.components.bottom -class RemoveOutputButton(watcherManager: WatcherManager, outputs: MutableList, currentClick: Int) { +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Delete +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import xyz.atnrch.wrench.registery.ACTIVE_COMPOSABLE +import xyz.atnrch.wrench.ui.UIColors +import xyz.atnrch.wrench.watcher.WatcherEntry +import xyz.atnrch.wrench.watcher.WatcherManager +import java.nio.file.Path +@Composable +fun RemoveOutputButton( + watcherManager: WatcherManager, + outputs: MutableList, + currentClick: Int, + onCurrentClick: (Int) -> Unit +) { + Button( + onClick = + { + val entry: WatcherEntry? = watcherManager.getFromId(currentClick) + watcherManager.removeFile(currentClick) + outputs.clear() + ACTIVE_COMPOSABLE = -1 + onCurrentClick.invoke(-1) + }, + colors = ButtonDefaults.buttonColors(UIColors.DARK, Color.White), + contentPadding = PaddingValues( + start = 14.dp, + top = 6.dp, + end = 14.dp, + bottom = 6.dp + ), + shape = RoundedCornerShape(100), + border = BorderStroke(2.dp, UIColors.STRESS), + modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false) + ) { + Icon( + Icons.Filled.Delete, + tint = UIColors.STRESS, + contentDescription = "Remove file", + modifier = Modifier.size(22.dp) + ) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text("Delete input") + } } diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt index 4be0c0b..361358a 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/bottom/WatcherStatusButton.kt @@ -11,18 +11,14 @@ import androidx.compose.material.ButtonDefaults import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.NoteAdd import androidx.compose.material.icons.filled.Update import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import xyz.atnrch.wrench.components.center.showDirectoryPicker -import xyz.atnrch.wrench.logger.Logger import xyz.atnrch.wrench.ui.UIColors import xyz.atnrch.wrench.watcher.Watcher -import xyz.atnrch.wrench.watcher.WatcherEntry import xyz.atnrch.wrench.watcher.WatcherManager import java.nio.file.Path @@ -31,7 +27,8 @@ fun BottomRowNew( watcherManager: WatcherManager, watcher: Watcher, currentClick: Int, - outputs: MutableList + outputs: MutableList, + onCurrentClick: (Int) -> Unit, ) { Spacer(Modifier.width(10.dp)) Button( @@ -56,39 +53,10 @@ fun BottomRowNew( Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Text("Move files") } - if(currentClick != -1) { + if (currentClick != -1) { Spacer(Modifier.width(10.dp)) - Button( - onClick = - { - val entry: WatcherEntry? = watcherManager.getFromId(currentClick) - showDirectoryPicker({ - Logger.info("Path: ${it.absolutePath}") - entry!!.map.add(it.toPath()) - outputs.add(it.toPath()) - }, { - Logger.info("No file selected.") - }) - }, - colors = ButtonDefaults.buttonColors(UIColors.DARK, Color.White), - contentPadding = PaddingValues( - start = 14.dp, - top = 6.dp, - end = 14.dp, - bottom = 6.dp - ), - shape = RoundedCornerShape(100), - border = BorderStroke(2.dp, UIColors.ORANGE), - modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false) - ) { - Icon( - Icons.Filled.NoteAdd, - tint = UIColors.ORANGE, - contentDescription = "Start", - modifier = Modifier.size(22.dp) - ) - Spacer(Modifier.size(ButtonDefaults.IconSpacing)) - Text("Add output...") - } + AddOutputButton(watcherManager, outputs, currentClick) + Spacer(Modifier.width(10.dp)) + RemoveOutputButton(watcherManager, outputs, currentClick, onCurrentClick) } } \ No newline at end of file diff --git a/src/main/kotlin/xyz/atnrch/wrench/components/center/empty/DefaultDisplay.kt b/src/main/kotlin/xyz/atnrch/wrench/components/center/empty/DefaultDisplay.kt index 6fb0eb9..b79b593 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/components/center/empty/DefaultDisplay.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/components/center/empty/DefaultDisplay.kt @@ -1,37 +1,43 @@ package xyz.atnrch.wrench.components.center.empty import androidx.compose.foundation.layout.* -import androidx.compose.material.ButtonDefaults import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.QuestionMark +import androidx.compose.material.icons.rounded.FolderOff import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.ExperimentalUnitApi +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.TextUnitType +import androidx.compose.ui.unit.dp import xyz.atnrch.wrench.ui.Fonts +import xyz.atnrch.wrench.ui.UIColors +@OptIn(ExperimentalUnitApi::class) @Composable fun DefaultDisplay() { Box( contentAlignment = Alignment.Center, modifier = Modifier.fillMaxWidth().fillMaxHeight() ) { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceEvenly + Column ( + verticalArrangement = Arrangement.SpaceEvenly, + horizontalAlignment = Alignment.CenterHorizontally ) { Icon( - imageVector = Icons.Rounded.QuestionMark, - tint = Color.White, + imageVector = Icons.Rounded.FolderOff, + tint = UIColors.ORANGE, contentDescription = "Open Folder", - modifier = Modifier.size(ButtonDefaults.IconSize) + modifier = Modifier.size(58.dp) ) - Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Spacer(Modifier.height(24.dp)) Text( text = "Add a file to start...", - fontFamily = Fonts.ROBOTO_REGULAR, + fontFamily = Fonts.ROBOTO_BOLD, + fontSize = TextUnit(20F, TextUnitType.Sp), color = Color.White ) } diff --git a/src/main/kotlin/xyz/atnrch/wrench/watcher/WatcherManager.kt b/src/main/kotlin/xyz/atnrch/wrench/watcher/WatcherManager.kt index 65bec3b..a13505e 100644 --- a/src/main/kotlin/xyz/atnrch/wrench/watcher/WatcherManager.kt +++ b/src/main/kotlin/xyz/atnrch/wrench/watcher/WatcherManager.kt @@ -13,6 +13,10 @@ class WatcherManager(private val entries: MutableMap) { Logger.info("Tracking new file:\n ID: $currentId\n Name: ${file.name}\n Path: ${file.absolutePath}") } + fun removeFile(id: Int) { + entries.remove(id) + } + fun getEntries(): MutableMap { return entries }