feat: file picker, colors values, refactoring
This commit is contained in:
parent
5ff2319f37
commit
44bf996d3c
8 changed files with 125 additions and 156 deletions
|
@ -3,10 +3,13 @@ package xyz.atnrch.wrench
|
||||||
import androidx.compose.desktop.ui.tooling.preview.Preview
|
import androidx.compose.desktop.ui.tooling.preview.Preview
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.window.Window
|
import androidx.compose.ui.window.Window
|
||||||
import androidx.compose.ui.window.application
|
import androidx.compose.ui.window.application
|
||||||
import xyz.atnrch.wrench.logger.Logger
|
import xyz.atnrch.wrench.logger.Logger
|
||||||
import xyz.atnrch.wrench.scaffold.WrenchScaffold
|
import xyz.atnrch.wrench.scaffold.WrenchScaffold
|
||||||
|
import xyz.atnrch.wrench.watcher.Watcher
|
||||||
|
import javax.swing.UIManager
|
||||||
|
|
||||||
class WrenchApp {
|
class WrenchApp {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -30,16 +33,14 @@ class WrenchApp {
|
||||||
@Preview
|
@Preview
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun App() {
|
fun App() {
|
||||||
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
|
||||||
MaterialTheme {
|
MaterialTheme {
|
||||||
WrenchScaffold()
|
|
||||||
/*
|
|
||||||
val watcher = remember { Watcher() }
|
val watcher = remember { Watcher() }
|
||||||
WrenchDisplay(
|
WrenchScaffold(
|
||||||
onStartButtonClick = watcher::start,
|
onStartButtonClick = watcher::start,
|
||||||
onStopButtonClick = watcher::stop,
|
onStopButtonClick = watcher::stop,
|
||||||
onAddButtonClick = {}
|
onAddButtonClick = {}
|
||||||
)
|
)
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
src/main/kotlin/xyz/atnrch/wrench/colors/WrenchColors.kt
Normal file
10
src/main/kotlin/xyz/atnrch/wrench/colors/WrenchColors.kt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
package xyz.atnrch.wrench.colors
|
||||||
|
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
|
class WrenchColors {
|
||||||
|
companion object {
|
||||||
|
val PRIMARY = Color(0xFF424242)
|
||||||
|
val LIGHT = Color(0xFF6D6D6D)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.atnrch.wrench.display.file
|
package xyz.atnrch.wrench.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.atnrch.wrench.display.file
|
package xyz.atnrch.wrench.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
108
src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt
Normal file
108
src/main/kotlin/xyz/atnrch/wrench/components/WrenchScaffold.kt
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
package xyz.atnrch.wrench.scaffold
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.shape.CornerSize
|
||||||
|
import androidx.compose.material.*
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Add
|
||||||
|
import androidx.compose.material.icons.filled.Close
|
||||||
|
import androidx.compose.material.icons.filled.PlayArrow
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.awt.ComposeWindow
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import xyz.atnrch.wrench.colors.WrenchColors
|
||||||
|
import xyz.atnrch.wrench.components.WrenchFileManagerInput
|
||||||
|
import xyz.atnrch.wrench.components.WrenchFileManagerOutput
|
||||||
|
import javax.swing.JFileChooser
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun WrenchScaffold(
|
||||||
|
onStartButtonClick: () -> Unit,
|
||||||
|
onStopButtonClick: () -> Unit,
|
||||||
|
onAddButtonClick: () -> Unit
|
||||||
|
) {
|
||||||
|
var status by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
Scaffold(
|
||||||
|
topBar = {
|
||||||
|
TopAppBar(
|
||||||
|
backgroundColor = WrenchColors.PRIMARY,
|
||||||
|
contentColor = Color.White,
|
||||||
|
elevation = 16.dp,
|
||||||
|
title = { Text("Wrench") },
|
||||||
|
actions = {
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
val fileChooser = JFileChooser(System.getProperty("user.home")).apply {
|
||||||
|
fileSelectionMode = JFileChooser.FILES_ONLY
|
||||||
|
dialogTitle = "Select a file"
|
||||||
|
approveButtonText = "Select"
|
||||||
|
approveButtonToolTipText = "Select current directory as save destination"
|
||||||
|
}
|
||||||
|
fileChooser.showOpenDialog(ComposeWindow())
|
||||||
|
val result = fileChooser.selectedFile
|
||||||
|
println(result)
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Text("DEBUG")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
FloatingActionButton(
|
||||||
|
onClick = { /* ... */ },
|
||||||
|
backgroundColor = WrenchColors.LIGHT
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.Add,
|
||||||
|
tint = Color.White,
|
||||||
|
contentDescription = "Start",
|
||||||
|
modifier = Modifier.size(28.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isFloatingActionButtonDocked = true,
|
||||||
|
bottomBar = {
|
||||||
|
BottomAppBar(
|
||||||
|
cutoutShape = MaterialTheme.shapes.small.copy(
|
||||||
|
CornerSize(percent = 50)
|
||||||
|
),
|
||||||
|
backgroundColor = WrenchColors.PRIMARY
|
||||||
|
) {
|
||||||
|
Spacer(Modifier.width(5.dp))
|
||||||
|
Button(
|
||||||
|
{
|
||||||
|
status = if (status) {
|
||||||
|
onStopButtonClick.invoke()
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
onStartButtonClick.invoke()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
colors = ButtonDefaults.buttonColors(WrenchColors.LIGHT, Color.White),
|
||||||
|
contentPadding = ButtonDefaults.ContentPadding
|
||||||
|
) {
|
||||||
|
if (status) Icon(
|
||||||
|
Icons.Filled.Close,
|
||||||
|
contentDescription = "Stop",
|
||||||
|
modifier = Modifier.size(28.dp)
|
||||||
|
) else Icon(
|
||||||
|
Icons.Filled.PlayArrow,
|
||||||
|
tint = Color.White,
|
||||||
|
contentDescription = "Start",
|
||||||
|
modifier = Modifier.size(28.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
WrenchFileManagerInput()
|
||||||
|
WrenchFileManagerOutput()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,28 +0,0 @@
|
||||||
package xyz.atnrch.wrench.display
|
|
||||||
|
|
||||||
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 xyz.atnrch.wrench.display.file.WrenchFileManagerInput
|
|
||||||
import xyz.atnrch.wrench.display.file.WrenchFileManagerOutput
|
|
||||||
import xyz.atnrch.wrench.display.status.WrenchStatus
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun WrenchDisplay(
|
|
||||||
onStartButtonClick: () -> Unit,
|
|
||||||
onStopButtonClick: () -> Unit,
|
|
||||||
onAddButtonClick: () -> Unit
|
|
||||||
) {
|
|
||||||
Box {
|
|
||||||
WrenchFileManagerInput()
|
|
||||||
WrenchFileManagerOutput()
|
|
||||||
}
|
|
||||||
Box(
|
|
||||||
contentAlignment = Alignment.BottomEnd,
|
|
||||||
modifier = Modifier.fillMaxSize()
|
|
||||||
) {
|
|
||||||
WrenchStatus(onStartButtonClick, onStopButtonClick, onAddButtonClick)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
package xyz.atnrch.wrench.display.status
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
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.Add
|
|
||||||
import androidx.compose.material.icons.filled.Close
|
|
||||||
import androidx.compose.material.icons.filled.PlayArrow
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun WrenchStatus(
|
|
||||||
onStartButtonClick: () -> Unit,
|
|
||||||
onStopButtonClick: () -> Unit,
|
|
||||||
onAddButtonClick: () -> Unit
|
|
||||||
) {
|
|
||||||
val padding = PaddingValues(
|
|
||||||
start = 13.dp,
|
|
||||||
top = 10.dp,
|
|
||||||
end = 13.dp,
|
|
||||||
bottom = 10.dp
|
|
||||||
)
|
|
||||||
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"
|
|
||||||
}, contentPadding = padding
|
|
||||||
) {
|
|
||||||
if (status) Icon(
|
|
||||||
Icons.Filled.Close,
|
|
||||||
contentDescription = "Start",
|
|
||||||
modifier = Modifier.size(ButtonDefaults.IconSize)
|
|
||||||
) else Icon(
|
|
||||||
Icons.Filled.PlayArrow,
|
|
||||||
tint = Color.White,
|
|
||||||
contentDescription = "Start",
|
|
||||||
modifier = Modifier.size(24.dp)
|
|
||||||
)
|
|
||||||
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
|
|
||||||
Text(startStopButtonText)
|
|
||||||
}
|
|
||||||
Spacer(Modifier.width(10.dp))
|
|
||||||
Button(
|
|
||||||
onAddButtonClick,
|
|
||||||
contentPadding = padding
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
Icons.Filled.Add,
|
|
||||||
contentDescription = "Add",
|
|
||||||
modifier = Modifier.size(ButtonDefaults.IconSize)
|
|
||||||
)
|
|
||||||
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
|
|
||||||
Text("Add...")
|
|
||||||
}
|
|
||||||
Spacer(Modifier.width(10.dp))
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
package xyz.atnrch.wrench.scaffold
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.size
|
|
||||||
import androidx.compose.foundation.shape.CornerSize
|
|
||||||
import androidx.compose.material.*
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.filled.PlayArrow
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun WrenchScaffold() {
|
|
||||||
Scaffold(
|
|
||||||
topBar = {
|
|
||||||
TopAppBar {
|
|
||||||
Text("Wrench")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
floatingActionButton = {
|
|
||||||
FloatingActionButton(
|
|
||||||
onClick = { /* ... */ },
|
|
||||||
backgroundColor = Color.Black
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
Icons.Filled.PlayArrow,
|
|
||||||
tint = Color.White,
|
|
||||||
contentDescription = "Start",
|
|
||||||
modifier = Modifier.size(24.dp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
isFloatingActionButtonDocked = true,
|
|
||||||
bottomBar = {
|
|
||||||
BottomAppBar(
|
|
||||||
cutoutShape = MaterialTheme.shapes.small.copy(
|
|
||||||
CornerSize(percent = 50)
|
|
||||||
),
|
|
||||||
backgroundColor = Color.Black
|
|
||||||
) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
// Screen content
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Reference in a new issue