feat: file picker, colors values, refactoring

This commit is contained in:
aro 2022-11-17 13:43:06 +01:00
parent 5ff2319f37
commit 44bf996d3c
8 changed files with 125 additions and 156 deletions

View file

@ -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 = {}
)
*/
}
}
}

View 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)
}
}

View file

@ -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

View file

@ -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

View 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()
}
}

View file

@ -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)
}
}

View file

@ -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))
}
}

View file

@ -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
}
}