106 lines
3.6 KiB
Kotlin
106 lines
3.6 KiB
Kotlin
package dev.inmo.kmppscriptbuilder.desktop.views
|
|
|
|
import androidx.compose.foundation.*
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
import androidx.compose.material.*
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.draw.shadow
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.compose.ui.unit.dp
|
|
import dev.inmo.kmppscriptbuilder.core.models.Config
|
|
import dev.inmo.kmppscriptbuilder.desktop.utils.*
|
|
|
|
class BuilderView : View() {
|
|
private val projectTypeView = ProjectTypeView()
|
|
private val mavenInfoView = MavenInfoView()
|
|
private val licensesView = LicensesView()
|
|
private var saveAvailableState by mutableStateOf(false)
|
|
|
|
override val defaultModifier: Modifier = Modifier.fillMaxSize()
|
|
|
|
var config: Config
|
|
get() = Config(licensesView.licenses, mavenInfoView.mavenConfig, projectTypeView.projectType)
|
|
set(value) {
|
|
licensesView.licenses = value.licenses
|
|
mavenInfoView.mavenConfig = value.mavenConfig
|
|
projectTypeView.projectType = value.type
|
|
saveAvailableState = true
|
|
}
|
|
|
|
@OptIn(ExperimentalFoundationApi::class)
|
|
@Composable
|
|
private fun createIcon(
|
|
tooltip: String,
|
|
resource: String,
|
|
onClick: () -> Unit
|
|
) {
|
|
TooltipArea(
|
|
tooltip = {
|
|
Surface(
|
|
modifier = Modifier.shadow(4.dp),
|
|
color = MaterialTheme.colors.primarySurface,
|
|
shape = RoundedCornerShape(4.dp)
|
|
) {
|
|
Text(tooltip, modifier = Modifier.padding(10.dp), color = MaterialTheme.colors.onPrimary)
|
|
}
|
|
}
|
|
) {
|
|
IconButton(onClick) {
|
|
Image(
|
|
painter = painterResource(resource),
|
|
contentDescription = tooltip
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
@OptIn(ExperimentalFoundationApi::class)
|
|
@Composable
|
|
override fun build() {
|
|
Box(Modifier.fillMaxSize()) {
|
|
Column() {
|
|
TopAppBar(
|
|
@Composable {
|
|
CommonText("Kotlin publication scripts builder", Modifier.clickable { println(config) })
|
|
},
|
|
actions = {
|
|
createIcon("Open file", "images/open_file.svg") {
|
|
loadConfig()?.also {
|
|
config = it
|
|
}
|
|
}
|
|
|
|
if (saveAvailableState) {
|
|
createIcon("Save", "images/save_file.svg") {
|
|
saveConfig(config)
|
|
}
|
|
}
|
|
|
|
if (saveAvailableState) {
|
|
createIcon("Export Gradle script", "images/export_gradle.svg") {
|
|
exportGradle(config)
|
|
}
|
|
}
|
|
|
|
createIcon("Save as", "images/save_as.svg") {
|
|
if (saveAs(config)) {
|
|
saveAvailableState = true
|
|
}
|
|
}
|
|
}
|
|
)
|
|
Column(Modifier.padding(8.dp)) {
|
|
projectTypeView.init()
|
|
Divider()
|
|
licensesView.init()
|
|
Divider()
|
|
mavenInfoView.init()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|