feat: minmode

This commit is contained in:
aro 2022-12-06 00:14:40 +01:00
parent 50b52ecf58
commit 9908cb01ce
11 changed files with 167 additions and 72 deletions

View file

@ -33,9 +33,13 @@ compose.desktop {
application {
mainClass = "xyz.atnrch.wrench.WrenchApp"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.AppImage)
targetFormats(TargetFormat.AppImage)
packageName = "Wrench"
packageVersion = "1.0.0"
linux {
packageName = "Wrench"
//iconFile.set(project.file(""))
}
}
}
}

View file

@ -1,7 +1,10 @@
package xyz.atnrch.wrench
import androidx.compose.material.MaterialTheme
import androidx.compose.ui.window.singleWindowApplication
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState
import xyz.atnrch.wrench.components.WrenchScaffold
import xyz.atnrch.wrench.logger.Logger
import javax.swing.UIManager
@ -11,10 +14,16 @@ class WrenchApp {
const val PREFIX: String = "(Wrench)"
@JvmStatic
fun main(args: Array<String>) = singleWindowApplication {
Logger.info("Starting Wrench...")
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
MaterialTheme { WrenchScaffold() }
fun main(args: Array<String>) = application {
val state = rememberWindowState(width = 1000.dp, height = 1024.dp)
Window(
state = state,
onCloseRequest = ::exitApplication
) {
Logger.info("Starting Wrench...")
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
MaterialTheme { WrenchScaffold(state) }
}
}
}
}

View file

@ -1,33 +1,61 @@
package xyz.atnrch.wrench.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowState
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
fun WatcherDisplay(
state: WindowState,
watcherManager: WatcherManager,
currentClick: Int,
outputs: MutableList<Path>,
onEntryClick: (id: Int) -> Unit
) {
Row(
modifier = Modifier.padding(0.dp, 0.dp, 0.dp, 55.dp)
) {
if (watcherManager.getEntries().isEmpty()) {
//watcherManager.addFile(File("/home/aro/IdeaProjects/Wrench/dummy"))
DefaultDisplay()
} else {
InputEntries(watcherManager, onEntryClick)
OutputEntries(watcherManager, currentClick, outputs)
if (state.size.width <= 600.dp) {
Column(
modifier = Modifier.padding(0.dp, 0.dp, 0.dp, 55.dp),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally
) {
displayEntries(true, watcherManager, currentClick, outputs, onEntryClick)
}
} else {
Row(
modifier = Modifier.padding(0.dp, 0.dp, 0.dp, 55.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
displayEntries(false, watcherManager, currentClick, outputs, onEntryClick)
}
}
}
@Composable
fun displayEntries(
minmode: Boolean,
watcherManager: WatcherManager,
currentClick: Int,
outputs: MutableList<Path>,
onEntryClick: (id: Int) -> Unit
) {
if (watcherManager.getEntries().isEmpty()) {
watcherManager.addFile(File("/home/aro/IdeaProjects/Wrench/dummy"))
DefaultDisplay()
} else {
InputEntries(minmode, watcherManager, onEntryClick)
OutputEntries(minmode, watcherManager, currentClick, outputs)
}
}

View file

@ -4,6 +4,7 @@ import androidx.compose.material.Scaffold
import androidx.compose.material.ScaffoldState
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.*
import androidx.compose.ui.window.WindowState
import xyz.atnrch.wrench.components.bottom.BottomAppBar
import xyz.atnrch.wrench.components.bottom.FloatingButton
import xyz.atnrch.wrench.components.top.TopBar
@ -15,7 +16,7 @@ import xyz.atnrch.wrench.watcher.WatcherManager
import java.nio.file.Path
@Composable
fun WrenchScaffold() {
fun WrenchScaffold(state: WindowState) {
val scaffoldState: ScaffoldState = rememberScaffoldState()
val entries: MutableMap<Int, WatcherEntry> = remember { mutableStateMapOf() }
val outputs: MutableList<Path> = remember { mutableStateListOf() }
@ -30,6 +31,6 @@ fun WrenchScaffold() {
floatingActionButton = { FloatingButton(watcherManager) },
isFloatingActionButtonDocked = true,
backgroundColor = UIColors.PRIMARY,
bottomBar = { BottomAppBar(watcherManager, watcher, currentClick, outputs) { currentClick = it } }
) { WatcherDisplay(watcherManager, currentClick, outputs) { currentClick = it } }
bottomBar = { BottomAppBar(state, watcherManager, watcher, currentClick, outputs) { currentClick = it } }
) { WatcherDisplay(state, watcherManager, currentClick, outputs) { currentClick = it } }
}

View file

@ -13,9 +13,11 @@ 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.scale
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowState
import xyz.atnrch.wrench.components.center.showDirectoryPicker
import xyz.atnrch.wrench.logger.Logger
import xyz.atnrch.wrench.ui.UIColors
@ -25,10 +27,13 @@ import java.nio.file.Path
@Composable
fun AddOutputButton(
state: WindowState,
watcherManager: WatcherManager,
outputs: MutableList<Path>,
currentClick: Int
) {
val scaleFactor: Float = if (state.size.width <= 600.dp) 0.85f else 1f
Button(
onClick =
{
@ -50,7 +55,7 @@ fun AddOutputButton(
),
shape = RoundedCornerShape(100),
border = BorderStroke(2.dp, UIColors.ORANGE),
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false)
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false).scale(scaleFactor)
) {
Icon(
Icons.Filled.NoteAdd,

View file

@ -3,6 +3,7 @@ package xyz.atnrch.wrench.components.bottom
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.window.WindowState
import xyz.atnrch.wrench.ui.UIColors
import xyz.atnrch.wrench.watcher.Watcher
import xyz.atnrch.wrench.watcher.WatcherManager
@ -10,6 +11,7 @@ import java.nio.file.Path
@Composable
fun BottomAppBar(
state: WindowState,
watcherManager: WatcherManager,
watcher: Watcher,
currentClick: Int,
@ -21,5 +23,5 @@ fun BottomAppBar(
CornerSize(percent = 50)
),
backgroundColor = UIColors.DARK
) { BottomRowNew(watcherManager, watcher, currentClick, outputs, onCurrentClick) }
) { BottomRowNew(state, watcherManager, watcher, currentClick, outputs, onCurrentClick) }
}

View file

@ -0,0 +1,53 @@
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.Update
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowState
import xyz.atnrch.wrench.ui.UIColors
import xyz.atnrch.wrench.watcher.Watcher
@Composable
fun MoveFilesButton(
state: WindowState,
watcher: Watcher
) {
val scaleFactor: Float = if (state.size.width <= 600.dp) 0.85f else 1f
Button(
onClick = { watcher.move() },
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.GREEN),
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false).scale(scaleFactor)
) {
Icon(
Icons.Filled.Update,
tint = UIColors.GREEN,
contentDescription = "Start",
modifier = Modifier.size(22.dp)
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Move files")
}
}

View file

@ -13,26 +13,29 @@ 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.scale
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowState
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(
state: WindowState,
watcherManager: WatcherManager,
outputs: MutableList<Path>,
currentClick: Int,
onCurrentClick: (Int) -> Unit
) {
val scaleFactor: Float = if (state.size.width <= 600.dp) 0.85f else 1f
Button(
onClick =
{
val entry: WatcherEntry? = watcherManager.getFromId(currentClick)
watcherManager.removeFile(currentClick)
outputs.clear()
ACTIVE_COMPOSABLE = -1
@ -47,7 +50,7 @@ fun RemoveOutputButton(
),
shape = RoundedCornerShape(100),
border = BorderStroke(2.dp, UIColors.STRESS),
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false)
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false).scale(scaleFactor)
) {
Icon(
Icons.Filled.Delete,

View file

@ -1,62 +1,32 @@
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.layout.width
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.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.ui.UIColors
import androidx.compose.ui.window.WindowState
import xyz.atnrch.wrench.watcher.Watcher
import xyz.atnrch.wrench.watcher.WatcherManager
import java.nio.file.Path
@Composable
fun BottomRowNew(
state: WindowState,
watcherManager: WatcherManager,
watcher: Watcher,
currentClick: Int,
outputs: MutableList<Path>,
onCurrentClick: (Int) -> Unit,
) {
val buttonWidth = if (state.size.width <= 600.dp) 0.dp else 10.dp
Spacer(Modifier.width(10.dp))
Button(
onClick = { watcher.move() },
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.GREEN),
modifier = Modifier.shadow(24.dp, RoundedCornerShape(100), false)
) {
Icon(
Icons.Filled.Update,
tint = UIColors.GREEN,
contentDescription = "Start",
modifier = Modifier.size(22.dp)
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Move files")
}
MoveFilesButton(state, watcher)
if (currentClick != -1) {
Spacer(Modifier.width(10.dp))
AddOutputButton(watcherManager, outputs, currentClick)
Spacer(Modifier.width(10.dp))
RemoveOutputButton(watcherManager, outputs, currentClick, onCurrentClick)
Spacer(Modifier.width(buttonWidth))
AddOutputButton(state, watcherManager, outputs, currentClick)
Spacer(Modifier.width(buttonWidth))
RemoveOutputButton(state, watcherManager, outputs, currentClick, onCurrentClick)
}
}

View file

@ -16,19 +16,13 @@ import xyz.atnrch.wrench.watcher.WatcherManager
@Composable
fun InputEntries(
minmode: Boolean,
watcherManager: WatcherManager,
onEntryClick: (id: Int) -> Unit
) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxHeight()
.fillMaxWidth(0.5f)
.border(BorderStroke(4.dp, UIColors.ORANGE), RectangleShape)
.clickable {
ACTIVE_COMPOSABLE = -1
onEntryClick.invoke(-1)
}
modifier = getModifier(minmode, onEntryClick)
) {
InputTopText()
Column(
@ -45,4 +39,29 @@ fun InputEntries(
}
}
}
}
}
@Composable
fun getModifier(
minmode: Boolean,
onEntryClick: (id: Int) -> Unit
): Modifier {
return if (minmode)
Modifier
.fillMaxWidth()
.fillMaxHeight(0.5f)
.border(BorderStroke(4.dp, UIColors.ORANGE), RectangleShape)
.clickable {
ACTIVE_COMPOSABLE = -1
onEntryClick.invoke(-1)
} else {
Modifier
.fillMaxHeight()
.fillMaxWidth(0.5f)
.border(BorderStroke(4.dp, UIColors.ORANGE), RectangleShape)
.clickable {
ACTIVE_COMPOSABLE = -1
onEntryClick.invoke(-1)
}
}
}

View file

@ -22,6 +22,7 @@ import kotlin.io.path.pathString
@OptIn(ExperimentalUnitApi::class)
@Composable
fun OutputEntries(
minmode: Boolean,
watcherManager: WatcherManager,
currentClick: Int,
outputs: MutableList<Path>