Added option to refresh repository

This commit is contained in:
Abdelilah El Aissaoui 2022-02-10 00:18:15 +01:00
parent 93a1ef3240
commit a3f233d363
7 changed files with 84 additions and 17 deletions

View File

@ -21,10 +21,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import app.theme.primaryTextColor import app.theme.primaryTextColor
import app.ui.context_menu.DropDownContent import app.ui.context_menu.*
import app.ui.context_menu.DropDownContentData
import app.ui.context_menu.pullContextMenuItems
import app.ui.context_menu.pushContextMenuItems
import app.viewmodels.MenuViewModel import app.viewmodels.MenuViewModel
// TODO Add tooltips to all the buttons // TODO Add tooltips to all the buttons
@ -34,6 +31,8 @@ fun Menu(
onRepositoryOpen: () -> Unit, onRepositoryOpen: () -> Unit,
onCreateBranch: () -> Unit, onCreateBranch: () -> Unit,
) { ) {
var showAdditionalOptionsDropDownMenu by remember { mutableStateOf(false) }
Row( Row(
modifier = Modifier modifier = Modifier
.padding(vertical = 4.dp) .padding(vertical = 4.dp)
@ -93,6 +92,7 @@ fun Menu(
icon = painterResource("stash.svg"), icon = painterResource("stash.svg"),
onClick = { menuViewModel.stash() }, onClick = { menuViewModel.stash() },
) )
MenuButton( MenuButton(
title = "Pop", title = "Pop",
icon = painterResource("apply_stash.svg"), icon = painterResource("apply_stash.svg"),
@ -101,11 +101,33 @@ fun Menu(
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
IconMenuButton( Box {
modifier = Modifier.padding(end = 8.dp), IconMenuButton(
icon = painterResource("source.svg"), modifier = Modifier.padding(end = 8.dp),
onClick = { menuViewModel.openFolderInFileExplorer() }, icon = painterResource("more_vert.svg"),
) onClick = {
showAdditionalOptionsDropDownMenu = true
},
)
DropdownMenu(
expanded = showAdditionalOptionsDropDownMenu,
content = {
val menuOptions = remember {
repositoryAdditionalOptionsMenu(
onOpenRepositoryOnFileExplorer = { menuViewModel.openFolderInFileExplorer() },
onForceRepositoryRefresh = { menuViewModel.refresh() },
)
}
for (item in menuOptions) {
DropDownContent(
dropDownContentData = item,
onDismiss = { showAdditionalOptionsDropDownMenu = false }
)
}
},
onDismissRequest = { showAdditionalOptionsDropDownMenu = false }
)
}
} }
} }
@ -240,9 +262,8 @@ fun IconMenuButton(
MaterialTheme.colors.secondaryVariant MaterialTheme.colors.secondaryVariant
} }
OutlinedButton( IconButton(
modifier = modifier modifier = modifier,
.padding(horizontal = 2.dp),
enabled = enabled, enabled = enabled,
onClick = onClick, onClick = onClick,
) { ) {

View File

@ -1,10 +1,15 @@
package app.ui.context_menu package app.ui.context_menu
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material.DropdownMenuItem import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
@Composable @Composable
@ -20,12 +25,23 @@ fun DropDownContent(
onDismiss() onDismiss()
} }
) { ) {
Row { Row(
verticalAlignment = Alignment.CenterVertically,
) {
if (dropDownContentData.icon != null) { if (dropDownContentData.icon != null) {
Icon(imageVector = dropDownContentData.icon, contentDescription = null) Icon(
painter = painterResource(dropDownContentData.icon),
contentDescription = null,
modifier = Modifier.padding(end = 8.dp),
)
} }
Text(dropDownContentData.label, fontSize = 14.sp) Text(
text = dropDownContentData.label,
fontSize = 13.sp,
modifier = Modifier.padding(end = 8.dp),
maxLines = 1,
)
} }
} }
} }

View File

@ -1,9 +1,9 @@
package app.ui.context_menu package app.ui.context_menu
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.painter.Painter
data class DropDownContentData( data class DropDownContentData(
val label: String, val label: String,
val icon: ImageVector? = null, val icon: String? = null,
val onClick: () -> Unit, val onClick: () -> Unit,
) )

View File

@ -0,0 +1,22 @@
package app.ui.context_menu
import androidx.compose.foundation.ExperimentalFoundationApi
@OptIn(ExperimentalFoundationApi::class)
fun repositoryAdditionalOptionsMenu(
onOpenRepositoryOnFileExplorer: () -> Unit,
onForceRepositoryRefresh: () -> Unit,
): List<DropDownContentData> {
return mutableListOf(
DropDownContentData(
label = "Open repository folder",
icon = "source.svg",
onClick = onOpenRepositoryOnFileExplorer,
),
DropDownContentData(
label = "Refresh repository",
icon = "refresh.svg",
onClick = onForceRepositoryRefresh,
),
)
}

View File

@ -51,4 +51,10 @@ class MenuViewModel @Inject constructor(
) { git -> ) { git ->
Desktop.getDesktop().open(git.repository.directory.parentFile) Desktop.getDesktop().open(git.repository.directory.parentFile)
} }
fun refresh() = tabState.safeProcessing(
refreshType = RefreshType.ALL_DATA,
){
// Nothing to do here
}
} }

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>

After

Width:  |  Height:  |  Size: 302 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/></svg>

After

Width:  |  Height:  |  Size: 359 B