243 lines
7.0 KiB
Kotlin
243 lines
7.0 KiB
Kotlin
@file:OptIn(ExperimentalComposeUiApi::class)
|
|
|
|
package app.ui
|
|
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
import androidx.compose.foundation.lazy.items
|
|
import androidx.compose.material.*
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.BiasAlignment
|
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.ColorFilter
|
|
import androidx.compose.ui.graphics.painter.Painter
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.sp
|
|
import app.extensions.dirName
|
|
import app.extensions.dirPath
|
|
import app.viewmodels.TabViewModel
|
|
import app.theme.primaryTextColor
|
|
import app.theme.secondaryTextColor
|
|
import app.ui.dialogs.CloneDialog
|
|
import app.ui.dialogs.MaterialDialog
|
|
import openRepositoryDialog
|
|
import java.awt.Desktop
|
|
import java.net.URI
|
|
|
|
|
|
@OptIn(ExperimentalMaterialApi::class)
|
|
@Composable
|
|
fun WelcomePage(
|
|
tabViewModel: TabViewModel,
|
|
) {
|
|
val appStateManager = tabViewModel.appStateManager
|
|
var showCloneView by remember { mutableStateOf(false) }
|
|
|
|
// Crossfade(showCloneView) {
|
|
// if(it) {
|
|
|
|
|
|
// } else {
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.background(MaterialTheme.colors.background),
|
|
horizontalArrangement = Arrangement.Center,
|
|
verticalAlignment = BiasAlignment.Vertical(-0.5f),
|
|
|
|
) {
|
|
Column(
|
|
modifier = Modifier
|
|
.padding(end = 32.dp),
|
|
verticalArrangement = Arrangement.Center,
|
|
) {
|
|
Text(
|
|
text = "Gitnuro",
|
|
fontSize = 32.sp,
|
|
color = MaterialTheme.colors.primaryTextColor,
|
|
modifier = Modifier
|
|
.padding(bottom = 16.dp),
|
|
)
|
|
|
|
ButtonTile(
|
|
modifier = Modifier
|
|
.padding(bottom = 8.dp),
|
|
title = "Open a repository",
|
|
painter = painterResource("open.svg"),
|
|
onClick = { openRepositoryDialog(tabViewModel) }
|
|
)
|
|
|
|
ButtonTile(
|
|
modifier = Modifier
|
|
.padding(bottom = 8.dp),
|
|
title = "Clone a repository",
|
|
painter = painterResource("download.svg"),
|
|
onClick = {
|
|
showCloneView = true
|
|
}
|
|
)
|
|
|
|
ButtonTile(
|
|
modifier = Modifier
|
|
.padding(bottom = 8.dp),
|
|
title = "Start a local repository",
|
|
painter = painterResource("open.svg"),
|
|
onClick = { }
|
|
)
|
|
|
|
Text(
|
|
text = "About Gitnuro",
|
|
fontSize = 18.sp,
|
|
color = MaterialTheme.colors.primaryTextColor,
|
|
modifier = Modifier
|
|
.padding(top = 16.dp, bottom = 8.dp),
|
|
)
|
|
|
|
IconTextButton(
|
|
title = "Source code",
|
|
painter = painterResource("code.svg"),
|
|
onClick = {
|
|
Desktop.getDesktop().browse(URI("https://github.com/aeab13/Gitnuro"))
|
|
}
|
|
)
|
|
|
|
IconTextButton(
|
|
title = "Report a bug",
|
|
painter = painterResource("bug.svg"),
|
|
onClick = {
|
|
Desktop.getDesktop().browse(URI("https://github.com/aeab13/Gitnuro/issues"))
|
|
}
|
|
)
|
|
}
|
|
|
|
Column(
|
|
modifier = Modifier
|
|
.padding(start = 32.dp),
|
|
) {
|
|
Text(
|
|
text = "Recent",
|
|
fontSize = 18.sp,
|
|
modifier = Modifier
|
|
.padding(top = 16.dp, bottom = 8.dp),
|
|
color = MaterialTheme.colors.primaryTextColor,
|
|
)
|
|
LazyColumn {
|
|
items(items = appStateManager.latestOpenedRepositoriesPaths) { repo ->
|
|
val repoDirName = repo.dirName
|
|
val repoDirPath = repo.dirPath
|
|
|
|
Row(
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
) {
|
|
TextButton(
|
|
onClick = {
|
|
tabViewModel.openRepository(repo)
|
|
}
|
|
) {
|
|
Text(
|
|
text = repoDirName,
|
|
fontSize = 14.sp,
|
|
color = MaterialTheme.colors.primary,
|
|
)
|
|
}
|
|
|
|
Text(
|
|
text = repoDirPath,
|
|
fontSize = 14.sp,
|
|
modifier = Modifier.padding(start = 4.dp),
|
|
color = MaterialTheme.colors.secondaryTextColor
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (showCloneView)
|
|
MaterialDialog {
|
|
CloneDialog(tabViewModel, onClose = { showCloneView = false })
|
|
}
|
|
// Popup(focusable = true, onDismissRequest = { showCloneView = false }, alignment = Alignment.Center) {
|
|
//
|
|
// }
|
|
|
|
// PopupAlertDialogProvider.AlertDialog(onDismissRequest = {}) {
|
|
//
|
|
// CloneDialog(gitManager, onClose = { showCloneView = false })
|
|
// }
|
|
|
|
// }
|
|
// }
|
|
|
|
}
|
|
|
|
@Composable
|
|
fun ButtonTile(
|
|
modifier: Modifier = Modifier,
|
|
title: String,
|
|
painter: Painter,
|
|
onClick: () -> Unit,
|
|
) {
|
|
OutlinedButton(
|
|
onClick = onClick,
|
|
modifier = modifier.size(width = 280.dp, height = 56.dp)
|
|
) {
|
|
Row(
|
|
modifier = Modifier.fillMaxSize(),
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
) {
|
|
Image(
|
|
modifier = Modifier
|
|
.padding(end = 8.dp)
|
|
.size(24.dp),
|
|
painter = painter,
|
|
contentDescription = null,
|
|
colorFilter = ColorFilter.tint(MaterialTheme.colors.primary),
|
|
)
|
|
|
|
Text(
|
|
text = title,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun IconTextButton(
|
|
modifier: Modifier = Modifier,
|
|
title: String,
|
|
painter: Painter,
|
|
onClick: () -> Unit,
|
|
) {
|
|
TextButton(
|
|
onClick = onClick,
|
|
modifier = modifier.size(width = 280.dp, height = 40.dp)
|
|
) {
|
|
Row(
|
|
modifier = Modifier
|
|
.fillMaxSize(),
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
) {
|
|
Image(
|
|
modifier = Modifier
|
|
.padding(end = 8.dp)
|
|
.size(24.dp),
|
|
painter = painter,
|
|
contentDescription = null,
|
|
colorFilter = ColorFilter.tint(MaterialTheme.colors.primary),
|
|
)
|
|
|
|
Text(
|
|
text = title,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|