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.material.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.window.Window
|
||||
import androidx.compose.ui.window.application
|
||||
import xyz.atnrch.wrench.logger.Logger
|
||||
import xyz.atnrch.wrench.scaffold.WrenchScaffold
|
||||
import xyz.atnrch.wrench.watcher.Watcher
|
||||
import javax.swing.UIManager
|
||||
|
||||
class WrenchApp {
|
||||
companion object {
|
||||
|
@ -30,16 +33,14 @@ class WrenchApp {
|
|||
@Preview
|
||||
@JvmStatic
|
||||
fun App() {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
|
||||
MaterialTheme {
|
||||
WrenchScaffold()
|
||||
/*
|
||||
val watcher = remember { Watcher() }
|
||||
WrenchDisplay(
|
||||
WrenchScaffold(
|
||||
onStartButtonClick = watcher::start,
|
||||
onStopButtonClick = watcher::stop,
|
||||
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.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.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