From a3f233d363c3e3fce3286a999d075ddd11ead10d Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Thu, 10 Feb 2022 00:18:15 +0100 Subject: [PATCH] Added option to refresh repository --- src/main/kotlin/app/ui/Menu.kt | 45 ++++++++++++++----- .../app/ui/context_menu/DropDownContent.kt | 22 +++++++-- .../ui/context_menu/DropDownContentData.kt | 4 +- .../RepositoryAdditionalOptionsMenu.kt | 22 +++++++++ .../kotlin/app/viewmodels/MenuViewModel.kt | 6 +++ src/main/resources/more_vert.svg | 1 + src/main/resources/refresh.svg | 1 + 7 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 src/main/kotlin/app/ui/context_menu/RepositoryAdditionalOptionsMenu.kt create mode 100644 src/main/resources/more_vert.svg create mode 100644 src/main/resources/refresh.svg diff --git a/src/main/kotlin/app/ui/Menu.kt b/src/main/kotlin/app/ui/Menu.kt index d73b91e..2b31b76 100644 --- a/src/main/kotlin/app/ui/Menu.kt +++ b/src/main/kotlin/app/ui/Menu.kt @@ -21,10 +21,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import app.theme.primaryTextColor -import app.ui.context_menu.DropDownContent -import app.ui.context_menu.DropDownContentData -import app.ui.context_menu.pullContextMenuItems -import app.ui.context_menu.pushContextMenuItems +import app.ui.context_menu.* import app.viewmodels.MenuViewModel // TODO Add tooltips to all the buttons @@ -34,6 +31,8 @@ fun Menu( onRepositoryOpen: () -> Unit, onCreateBranch: () -> Unit, ) { + var showAdditionalOptionsDropDownMenu by remember { mutableStateOf(false) } + Row( modifier = Modifier .padding(vertical = 4.dp) @@ -93,6 +92,7 @@ fun Menu( icon = painterResource("stash.svg"), onClick = { menuViewModel.stash() }, ) + MenuButton( title = "Pop", icon = painterResource("apply_stash.svg"), @@ -101,11 +101,33 @@ fun Menu( Spacer(modifier = Modifier.weight(1f)) - IconMenuButton( - modifier = Modifier.padding(end = 8.dp), - icon = painterResource("source.svg"), - onClick = { menuViewModel.openFolderInFileExplorer() }, - ) + Box { + IconMenuButton( + modifier = Modifier.padding(end = 8.dp), + 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 } - OutlinedButton( - modifier = modifier - .padding(horizontal = 2.dp), + IconButton( + modifier = modifier, enabled = enabled, onClick = onClick, ) { diff --git a/src/main/kotlin/app/ui/context_menu/DropDownContent.kt b/src/main/kotlin/app/ui/context_menu/DropDownContent.kt index 02a6d30..ad50b96 100644 --- a/src/main/kotlin/app/ui/context_menu/DropDownContent.kt +++ b/src/main/kotlin/app/ui/context_menu/DropDownContent.kt @@ -1,10 +1,15 @@ package app.ui.context_menu import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding import androidx.compose.material.DropdownMenuItem import androidx.compose.material.Icon import androidx.compose.material.Text 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 @Composable @@ -20,12 +25,23 @@ fun DropDownContent( onDismiss() } ) { - Row { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { 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, + ) } } } \ No newline at end of file diff --git a/src/main/kotlin/app/ui/context_menu/DropDownContentData.kt b/src/main/kotlin/app/ui/context_menu/DropDownContentData.kt index 8c9a82d..3ca695e 100644 --- a/src/main/kotlin/app/ui/context_menu/DropDownContentData.kt +++ b/src/main/kotlin/app/ui/context_menu/DropDownContentData.kt @@ -1,9 +1,9 @@ package app.ui.context_menu -import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.painter.Painter data class DropDownContentData( val label: String, - val icon: ImageVector? = null, + val icon: String? = null, val onClick: () -> Unit, ) diff --git a/src/main/kotlin/app/ui/context_menu/RepositoryAdditionalOptionsMenu.kt b/src/main/kotlin/app/ui/context_menu/RepositoryAdditionalOptionsMenu.kt new file mode 100644 index 0000000..3e57092 --- /dev/null +++ b/src/main/kotlin/app/ui/context_menu/RepositoryAdditionalOptionsMenu.kt @@ -0,0 +1,22 @@ +package app.ui.context_menu + +import androidx.compose.foundation.ExperimentalFoundationApi + +@OptIn(ExperimentalFoundationApi::class) +fun repositoryAdditionalOptionsMenu( + onOpenRepositoryOnFileExplorer: () -> Unit, + onForceRepositoryRefresh: () -> Unit, +): List { + return mutableListOf( + DropDownContentData( + label = "Open repository folder", + icon = "source.svg", + onClick = onOpenRepositoryOnFileExplorer, + ), + DropDownContentData( + label = "Refresh repository", + icon = "refresh.svg", + onClick = onForceRepositoryRefresh, + ), + ) +} diff --git a/src/main/kotlin/app/viewmodels/MenuViewModel.kt b/src/main/kotlin/app/viewmodels/MenuViewModel.kt index 683e61d..823c50e 100644 --- a/src/main/kotlin/app/viewmodels/MenuViewModel.kt +++ b/src/main/kotlin/app/viewmodels/MenuViewModel.kt @@ -51,4 +51,10 @@ class MenuViewModel @Inject constructor( ) { git -> Desktop.getDesktop().open(git.repository.directory.parentFile) } + + fun refresh() = tabState.safeProcessing( + refreshType = RefreshType.ALL_DATA, + ){ + // Nothing to do here + } } \ No newline at end of file diff --git a/src/main/resources/more_vert.svg b/src/main/resources/more_vert.svg new file mode 100644 index 0000000..f226ebf --- /dev/null +++ b/src/main/resources/more_vert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/refresh.svg b/src/main/resources/refresh.svg new file mode 100644 index 0000000..e217f03 --- /dev/null +++ b/src/main/resources/refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file