feat: current selected file is now displayed on second panel
This commit is contained in:
parent
4189b304d8
commit
62731eb74d
11 changed files with 140 additions and 35 deletions
|
@ -1,23 +1,29 @@
|
||||||
package xyz.atnrch.wrench.components
|
package xyz.atnrch.wrench.components
|
||||||
|
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import xyz.atnrch.wrench.components.center.input.InputEntries
|
import xyz.atnrch.wrench.components.center.input.InputEntries
|
||||||
import xyz.atnrch.wrench.components.center.output.OutputEntries
|
import xyz.atnrch.wrench.components.center.output.OutputEntries
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WatcherDisplay(
|
fun WatcherDisplay(
|
||||||
watcherManager: WatcherManager
|
watcherManager: WatcherManager
|
||||||
) {
|
) {
|
||||||
|
var currentClick by remember { mutableStateOf(-1) }
|
||||||
|
val interactionSource = remember { MutableInteractionSource() }
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
if (watcherManager.getEntries().isEmpty()) {
|
if (watcherManager.getEntries().isEmpty()) {
|
||||||
|
watcherManager.addFile(File("/home/aro/IdeaProjects/Wrench/dummy"))
|
||||||
Box(
|
Box(
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
modifier = Modifier.fillMaxWidth().fillMaxHeight()
|
modifier = Modifier.fillMaxWidth().fillMaxHeight()
|
||||||
|
@ -25,8 +31,8 @@ fun WatcherDisplay(
|
||||||
Text("Add a file to start...")
|
Text("Add a file to start...")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InputEntries(watcherManager)
|
InputEntries(watcherManager, interactionSource) { currentClick = it }
|
||||||
OutputEntries(watcherManager)
|
OutputEntries(watcherManager, currentClick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package xyz.atnrch.wrench.components
|
||||||
|
|
||||||
import androidx.compose.material.Scaffold
|
import androidx.compose.material.Scaffold
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
|
import xyz.atnrch.wrench.components.center.AddButton
|
||||||
|
import xyz.atnrch.wrench.components.top.TopBar
|
||||||
import xyz.atnrch.wrench.watcher.Watcher
|
import xyz.atnrch.wrench.watcher.Watcher
|
||||||
import xyz.atnrch.wrench.watcher.WatcherEntry
|
import xyz.atnrch.wrench.watcher.WatcherEntry
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
|
|
|
@ -1,12 +1,26 @@
|
||||||
package xyz.atnrch.wrench.components.debug
|
package xyz.atnrch.wrench.components.center
|
||||||
|
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import xyz.atnrch.wrench.components.WatcherTextEntry
|
import xyz.atnrch.wrench.registery.RegisterComposable
|
||||||
import xyz.atnrch.wrench.watcher.WatcherEntry
|
import xyz.atnrch.wrench.watcher.WatcherEntry
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DummyTextEntry(watcherManager: WatcherManager) {
|
fun DummyTextEntry(
|
||||||
WatcherTextEntry(0, WatcherEntry(File("/home/aro/IdeaProjects/Wrench/dummy"), arrayListOf()), watcherManager)
|
watcherManager: WatcherManager,
|
||||||
|
interactionSource: MutableInteractionSource,
|
||||||
|
onEntrySelected: (id: Int) -> Unit
|
||||||
|
) {
|
||||||
|
val id = 0
|
||||||
|
RegisterComposable(id) {
|
||||||
|
WatcherTextEntry(
|
||||||
|
id,
|
||||||
|
WatcherEntry(File("/home/aro/IdeaProjects/Wrench/dummy"), arrayListOf()),
|
||||||
|
watcherManager,
|
||||||
|
onEntrySelected,
|
||||||
|
interactionSource
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.atnrch.wrench.components
|
package xyz.atnrch.wrench.components.center
|
||||||
|
|
||||||
import androidx.compose.ui.awt.ComposeWindow
|
import androidx.compose.ui.awt.ComposeWindow
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.atnrch.wrench.components
|
package xyz.atnrch.wrench.components.center
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.material.FloatingActionButton
|
import androidx.compose.material.FloatingActionButton
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
package xyz.atnrch.wrench.components
|
package xyz.atnrch.wrench.components.center
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.PointerMatcher
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
|
import androidx.compose.foundation.onClick
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.input.pointer.PointerButton
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
import androidx.compose.ui.unit.ExperimentalUnitApi
|
||||||
import androidx.compose.ui.unit.TextUnit
|
import androidx.compose.ui.unit.TextUnit
|
||||||
|
@ -16,24 +19,45 @@ import xyz.atnrch.wrench.ui.Fonts
|
||||||
import xyz.atnrch.wrench.watcher.WatcherEntry
|
import xyz.atnrch.wrench.watcher.WatcherEntry
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
|
|
||||||
@OptIn(ExperimentalUnitApi::class)
|
@OptIn(ExperimentalUnitApi::class, ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun WatcherTextEntry(id: Int, entry: WatcherEntry, watcherManager: WatcherManager) {
|
fun WatcherTextEntry(
|
||||||
|
id: Int,
|
||||||
|
entry: WatcherEntry,
|
||||||
|
watcherManager: WatcherManager,
|
||||||
|
onEntrySelected: (id: Int) -> Unit,
|
||||||
|
interactionSource: MutableInteractionSource,
|
||||||
|
) {
|
||||||
var dialogState by remember { mutableStateOf(false) }
|
var dialogState by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = "${entry.file.absolutePath}",
|
text = "${entry.file.absolutePath}",
|
||||||
style = TextStyle(
|
style = TextStyle(
|
||||||
color = Color.Black,
|
color = if(ACTIVE_COMPOSABLE == id) Color.Red else Color.Black,
|
||||||
fontSize = TextUnit(15F, TextUnitType.Sp),
|
fontSize = TextUnit(15F, TextUnitType.Sp),
|
||||||
fontFamily = Fonts.ROBOTO_REGULAR
|
fontFamily = Fonts.ROBOTO_REGULAR
|
||||||
),
|
),
|
||||||
modifier = Modifier.clickable {
|
modifier = Modifier
|
||||||
dialogState = true
|
.onClick(
|
||||||
|
matcher = PointerMatcher.mouse(PointerButton.Primary),
|
||||||
|
interactionSource = interactionSource,
|
||||||
|
onClick = {
|
||||||
|
println("Active composable ID was $ACTIVE_COMPOSABLE")
|
||||||
ACTIVE_COMPOSABLE = id
|
ACTIVE_COMPOSABLE = id
|
||||||
|
println("Active composable ID is now $ACTIVE_COMPOSABLE")
|
||||||
|
if (ACTIVE_COMPOSABLE == id) {
|
||||||
|
onEntrySelected.invoke(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.onClick(
|
||||||
|
matcher = PointerMatcher.mouse(PointerButton.Secondary),
|
||||||
|
onClick = {
|
||||||
|
dialogState = true
|
||||||
println("PATH IS ${watcherManager.getFromId(ACTIVE_COMPOSABLE)!!.file.path}")
|
println("PATH IS ${watcherManager.getFromId(ACTIVE_COMPOSABLE)!!.file.path}")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if (dialogState) {
|
if (dialogState) {
|
||||||
EntryDialog(onStateChange = { dialogState = it })
|
EntryDialog(onStateChange = { dialogState = it })
|
||||||
|
|
|
@ -3,6 +3,7 @@ package xyz.atnrch.wrench.components.center.dialog
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
|
import androidx.compose.material.Button
|
||||||
import androidx.compose.material.Icon
|
import androidx.compose.material.Icon
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Close
|
import androidx.compose.material.icons.filled.Close
|
||||||
|
@ -59,6 +60,12 @@ fun EntryDialog(
|
||||||
modifier = Modifier.size(45.dp)
|
modifier = Modifier.size(45.dp)
|
||||||
)
|
)
|
||||||
Spacer(Modifier.width(75.dp))
|
Spacer(Modifier.width(75.dp))
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
|
||||||
|
},
|
||||||
|
shape = CircleShape
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Filled.Settings,
|
Icons.Filled.Settings,
|
||||||
tint = Color.Black,
|
tint = Color.Black,
|
||||||
|
@ -67,6 +74,7 @@ fun EntryDialog(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|
|
@ -2,20 +2,23 @@ package xyz.atnrch.wrench.components.center.input
|
||||||
|
|
||||||
import androidx.compose.foundation.BorderStroke
|
import androidx.compose.foundation.BorderStroke
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.RectangleShape
|
import androidx.compose.ui.graphics.RectangleShape
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import xyz.atnrch.wrench.components.WatcherTextEntry
|
import xyz.atnrch.wrench.components.center.WatcherTextEntry
|
||||||
import xyz.atnrch.wrench.registery.RegisterComposable
|
import xyz.atnrch.wrench.registery.RegisterComposable
|
||||||
import xyz.atnrch.wrench.ui.UIColors
|
import xyz.atnrch.wrench.ui.UIColors
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun InputEntries(
|
fun InputEntries(
|
||||||
watcherManager: WatcherManager
|
watcherManager: WatcherManager,
|
||||||
|
interactionSource: MutableInteractionSource,
|
||||||
|
onEntryClick: (id: Int) -> Unit
|
||||||
) {
|
) {
|
||||||
Box(
|
Box(
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
|
@ -30,7 +33,15 @@ fun InputEntries(
|
||||||
verticalArrangement = Arrangement.spacedBy(15.dp)
|
verticalArrangement = Arrangement.spacedBy(15.dp)
|
||||||
) {
|
) {
|
||||||
watcherManager.getEntries().forEach {
|
watcherManager.getEntries().forEach {
|
||||||
RegisterComposable(it.key) { WatcherTextEntry(it.key, it.value, watcherManager) }
|
RegisterComposable(it.key) {
|
||||||
|
WatcherTextEntry(
|
||||||
|
it.key,
|
||||||
|
it.value,
|
||||||
|
watcherManager,
|
||||||
|
onEntryClick,
|
||||||
|
interactionSource
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,26 @@ package xyz.atnrch.wrench.components.center.output
|
||||||
import androidx.compose.foundation.BorderStroke
|
import androidx.compose.foundation.BorderStroke
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.material.Button
|
||||||
|
import androidx.compose.material.Icon
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.PostAdd
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.RectangleShape
|
import androidx.compose.ui.graphics.RectangleShape
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import xyz.atnrch.wrench.registery.ACTIVE_COMPOSABLE
|
|
||||||
import xyz.atnrch.wrench.ui.UIColors
|
import xyz.atnrch.wrench.ui.UIColors
|
||||||
import xyz.atnrch.wrench.watcher.WatcherEntry
|
import xyz.atnrch.wrench.watcher.WatcherEntry
|
||||||
import xyz.atnrch.wrench.watcher.WatcherManager
|
import xyz.atnrch.wrench.watcher.WatcherManager
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun OutputEntries(watcherManager: WatcherManager) {
|
fun OutputEntries(
|
||||||
|
watcherManager: WatcherManager,
|
||||||
|
currentSelectedInputId: Int
|
||||||
|
) {
|
||||||
Box(
|
Box(
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
@ -27,7 +35,36 @@ fun OutputEntries(watcherManager: WatcherManager) {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.spacedBy(15.dp)
|
verticalArrangement = Arrangement.spacedBy(15.dp)
|
||||||
) {
|
) {
|
||||||
val entry: WatcherEntry? = watcherManager.getFromId(ACTIVE_COMPOSABLE)
|
val entry: WatcherEntry? = watcherManager.getFromId(currentSelectedInputId)
|
||||||
|
if (entry != null) {
|
||||||
|
if (entry.map.isEmpty()) {
|
||||||
|
Box(
|
||||||
|
contentAlignment = Alignment.Center
|
||||||
|
) {
|
||||||
|
Column (
|
||||||
|
verticalArrangement = Arrangement.SpaceEvenly,
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
Text("No output")
|
||||||
|
Spacer(Modifier.height(28.dp))
|
||||||
|
Text("CURRENT SELECTED FILE IS: ${entry.file.absolutePath}")
|
||||||
|
Spacer(Modifier.height(28.dp))
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
println("test")
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.PostAdd,
|
||||||
|
tint = Color.White,
|
||||||
|
contentDescription = "Add",
|
||||||
|
modifier = Modifier.size(28.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.atnrch.wrench.components
|
package xyz.atnrch.wrench.components.top
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
|
|
@ -9,7 +9,7 @@ class WatcherManager(private val entries: MutableMap<Int, WatcherEntry>) {
|
||||||
fun addFile(file: File) {
|
fun addFile(file: File) {
|
||||||
val watcherEntry = WatcherEntry(file, arrayListOf())
|
val watcherEntry = WatcherEntry(file, arrayListOf())
|
||||||
currentId += 1
|
currentId += 1
|
||||||
entries[currentId] = (watcherEntry)
|
entries[currentId] = watcherEntry
|
||||||
Logger.info("Tracking new file:\n ID: $currentId\n Name: ${file.name}\n Path: ${file.absolutePath}")
|
Logger.info("Tracking new file:\n ID: $currentId\n Name: ${file.name}\n Path: ${file.absolutePath}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@ class WatcherManager(private val entries: MutableMap<Int, WatcherEntry>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFromId(id: Int): WatcherEntry? {
|
fun getFromId(id: Int): WatcherEntry? {
|
||||||
|
if (id == -1) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
return entries[id]
|
return entries[id]
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in a new issue