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

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.Box
import androidx.compose.foundation.layout.Column 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.Box
import androidx.compose.foundation.layout.Column 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
}
}