From f849b8aca5fa9896f34160e4b66ee792b54b9cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Bart=C3=B3k?= Date: Thu, 23 May 2024 13:24:16 +0300 Subject: [PATCH 1/4] Add horizontal scroll bar to model content panes --- .../client/ui/connected/ConnectedContent.kt | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt index 5928729..3a1d5f4 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt @@ -1,6 +1,10 @@ package org.gradle.client.ui.connected +import androidx.compose.foundation.HorizontalScrollbar +import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.rememberScrollbarAdapter import androidx.compose.foundation.selection.selectable import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayCircle @@ -9,6 +13,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp import com.arkivanov.decompose.extensions.compose.subscribeAsState import org.gradle.client.ui.composables.FailureContent import org.gradle.client.ui.composables.Loading @@ -87,7 +92,9 @@ private fun ConnectedMainContent(component: ConnectedComponent, model: Connectio val action = component.actionFor(outcome.model) if (action != null) { action.run { - ModelContent(outcome.model) + verticalScrollContent { + ModelContent(outcome.model) + } } } else { Text( @@ -105,3 +112,32 @@ private fun ConnectedMainContent(component: ConnectedComponent, model: Connectio ) } } + +@Composable +fun verticalScrollContent( + content: @Composable ColumnScope.() -> Unit, +) { + Box( + modifier = Modifier.fillMaxSize() + ) { + val stateHorizontal = rememberScrollState(0) + + Box( + modifier = Modifier + .fillMaxSize() + .padding(bottom = 12.dp) + .horizontalScroll(stateHorizontal) + ) { + Column { + content() + } + } + + HorizontalScrollbar( + modifier = Modifier + .align(Alignment.BottomStart) + .fillMaxWidth(), + adapter = rememberScrollbarAdapter(stateHorizontal) + ) + } +} From c791eb7967e4e31aaaf2d36a48c398268b525da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Bart=C3=B3k?= Date: Mon, 8 Jul 2024 14:32:54 +0300 Subject: [PATCH 2/4] Limit the horizontal scroll bar to the more basic text windows --- .../client/ui/connected/ConnectedContent.kt | 6 +-- .../connected/actions/GetBuildEnvironment.kt | 51 ++++++++++--------- .../ui/connected/actions/GetGradleBuild.kt | 35 +++++++------ .../ui/connected/actions/GetGradleProject.kt | 35 +++++++------ 4 files changed, 67 insertions(+), 60 deletions(-) diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt index 3a1d5f4..4d52f1f 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt @@ -92,9 +92,7 @@ private fun ConnectedMainContent(component: ConnectedComponent, model: Connectio val action = component.actionFor(outcome.model) if (action != null) { action.run { - verticalScrollContent { - ModelContent(outcome.model) - } + ModelContent(outcome.model) } } else { Text( @@ -114,7 +112,7 @@ private fun ConnectedMainContent(component: ConnectedComponent, model: Connectio } @Composable -fun verticalScrollContent( +fun horizontalScrollContent( content: @Composable ColumnScope.() -> Unit, ) { Box( diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt index 7ab5b69..f9b7068 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import org.gradle.client.ui.connected.horizontalScrollContent import org.gradle.tooling.model.build.BuildEnvironment class GetBuildEnvironment : GetModelAction { @@ -15,29 +16,31 @@ class GetBuildEnvironment : GetModelAction { @Composable override fun ColumnScope.ModelContent(model: BuildEnvironment) { - Text( - text = "Build Environment", - style = MaterialTheme.typography.titleMedium - ) - Text( - text = "Build Identifier: ${model.buildIdentifier.rootDir}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Java Home: ${model.java.javaHome}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "JVM Arguments: ${model.java.jvmArguments}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Gradle Version: ${model.gradle.gradleVersion}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Gradle User Home: ${model.gradle.gradleUserHome}", - style = MaterialTheme.typography.labelSmall - ) + horizontalScrollContent { + Text( + text = "Build Environment", + style = MaterialTheme.typography.titleMedium + ) + Text( + text = "Build Identifier: ${model.buildIdentifier.rootDir}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Java Home: ${model.java.javaHome}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "JVM Arguments: ${model.java.jvmArguments}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Gradle Version: ${model.gradle.gradleVersion}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Gradle User Home: ${model.gradle.gradleUserHome}", + style = MaterialTheme.typography.labelSmall + ) + } } } diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt index 60ee27b..da8da15 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import org.gradle.client.ui.connected.horizontalScrollContent import org.gradle.tooling.model.gradle.GradleBuild class GetGradleBuild : GetModelAction { @@ -15,21 +16,23 @@ class GetGradleBuild : GetModelAction { @Composable override fun ColumnScope.ModelContent(model: GradleBuild) { - Text( - text = "Gradle Build", - style = MaterialTheme.typography.titleMedium - ) - Text( - text = "Build Identifier: ${model.buildIdentifier.rootDir}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Root Project Identifier: ${model.rootProject.projectIdentifier}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Root Project Name: ${model.rootProject.name}", - style = MaterialTheme.typography.labelSmall - ) + horizontalScrollContent { + Text( + text = "Gradle Build", + style = MaterialTheme.typography.titleMedium + ) + Text( + text = "Build Identifier: ${model.buildIdentifier.rootDir}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Root Project Identifier: ${model.rootProject.projectIdentifier}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Root Project Name: ${model.rootProject.name}", + style = MaterialTheme.typography.labelSmall + ) + } } } diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt index da0928d..7b42eda 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import org.gradle.client.ui.connected.horizontalScrollContent import org.gradle.tooling.model.GradleProject class GetGradleProject : GetModelAction { @@ -15,21 +16,23 @@ class GetGradleProject : GetModelAction { @Composable override fun ColumnScope.ModelContent(model: GradleProject) { - Text( - text = "Gradle Project", - style = MaterialTheme.typography.titleMedium - ) - Text( - text = "Root Project Identifier: ${model.projectIdentifier}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Root Project Name: ${model.name}", - style = MaterialTheme.typography.labelSmall - ) - Text( - text = "Root Project Description: ${model.description}", - style = MaterialTheme.typography.labelSmall - ) + horizontalScrollContent { + Text( + text = "Gradle Project", + style = MaterialTheme.typography.titleMedium + ) + Text( + text = "Root Project Identifier: ${model.projectIdentifier}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Root Project Name: ${model.name}", + style = MaterialTheme.typography.labelSmall + ) + Text( + text = "Root Project Description: ${model.description}", + style = MaterialTheme.typography.labelSmall + ) + } } } From a68a602e54b87f5b9605a9272a1d807ad23a3c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Bart=C3=B3k?= Date: Fri, 12 Jul 2024 12:36:20 +0300 Subject: [PATCH 3/4] Add horizontal scroll to FailureContent --- .../client/ui/composables/FailureContent.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt index 4b30eb9..d9ff24d 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt @@ -10,18 +10,19 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily +import org.gradle.client.ui.connected.horizontalScrollContent @Composable fun FailureContent(exception: Exception) { - Column( - modifier = Modifier.fillMaxSize().horizontalScroll(rememberScrollState()) - ) { - SelectionContainer { - Text( - text = exception.stackTraceToString(), - style = MaterialTheme.typography.labelSmall.copy(fontFamily = FontFamily.Monospace), - color = MaterialTheme.colorScheme.error, - ) + Column { + horizontalScrollContent { + SelectionContainer { + Text( + text = exception.stackTraceToString(), + style = MaterialTheme.typography.labelSmall.copy(fontFamily = FontFamily.Monospace), + color = MaterialTheme.colorScheme.error, + ) + } } } } From 7adb6e1fb01aedd56d36da68f17d2fd7dce90d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Bart=C3=B3k?= Date: Fri, 12 Jul 2024 12:41:14 +0300 Subject: [PATCH 4/4] Move scroll related function --- .../client/ui/composables/FailureContent.kt | 5 --- .../gradle/client/ui/composables/Scroll.kt | 41 +++++++++++++++++++ .../client/ui/connected/ConnectedContent.kt | 34 --------------- .../connected/actions/GetBuildEnvironment.kt | 2 +- .../ui/connected/actions/GetGradleBuild.kt | 2 +- .../ui/connected/actions/GetGradleProject.kt | 2 +- 6 files changed, 44 insertions(+), 42 deletions(-) create mode 100644 gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/Scroll.kt diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt index d9ff24d..104b995 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/FailureContent.kt @@ -1,16 +1,11 @@ package org.gradle.client.ui.composables -import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily -import org.gradle.client.ui.connected.horizontalScrollContent @Composable fun FailureContent(exception: Exception) { diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/Scroll.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/Scroll.kt new file mode 100644 index 0000000..506d04b --- /dev/null +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/Scroll.kt @@ -0,0 +1,41 @@ +package org.gradle.client.ui.composables + +import androidx.compose.foundation.HorizontalScrollbar +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.rememberScrollbarAdapter +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + + +@Composable +fun horizontalScrollContent( + content: @Composable ColumnScope.() -> Unit, +) { + Box( + modifier = Modifier.fillMaxSize() + ) { + val stateHorizontal = rememberScrollState(0) + + Box( + modifier = Modifier + .fillMaxSize() + .padding(bottom = 12.dp) + .horizontalScroll(stateHorizontal) + ) { + Column { + content() + } + } + + HorizontalScrollbar( + modifier = Modifier + .align(Alignment.BottomStart) + .fillMaxWidth(), + adapter = rememberScrollbarAdapter(stateHorizontal) + ) + } +} diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt index 4d52f1f..5928729 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/ConnectedContent.kt @@ -1,10 +1,6 @@ package org.gradle.client.ui.connected -import androidx.compose.foundation.HorizontalScrollbar -import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.* -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.rememberScrollbarAdapter import androidx.compose.foundation.selection.selectable import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayCircle @@ -13,7 +9,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp import com.arkivanov.decompose.extensions.compose.subscribeAsState import org.gradle.client.ui.composables.FailureContent import org.gradle.client.ui.composables.Loading @@ -110,32 +105,3 @@ private fun ConnectedMainContent(component: ConnectedComponent, model: Connectio ) } } - -@Composable -fun horizontalScrollContent( - content: @Composable ColumnScope.() -> Unit, -) { - Box( - modifier = Modifier.fillMaxSize() - ) { - val stateHorizontal = rememberScrollState(0) - - Box( - modifier = Modifier - .fillMaxSize() - .padding(bottom = 12.dp) - .horizontalScroll(stateHorizontal) - ) { - Column { - content() - } - } - - HorizontalScrollbar( - modifier = Modifier - .align(Alignment.BottomStart) - .fillMaxWidth(), - adapter = rememberScrollbarAdapter(stateHorizontal) - ) - } -} diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt index f9b7068..d6a3d37 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetBuildEnvironment.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import org.gradle.client.ui.connected.horizontalScrollContent +import org.gradle.client.ui.composables.horizontalScrollContent import org.gradle.tooling.model.build.BuildEnvironment class GetBuildEnvironment : GetModelAction { diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt index da8da15..3ebda97 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleBuild.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import org.gradle.client.ui.connected.horizontalScrollContent +import org.gradle.client.ui.composables.horizontalScrollContent import org.gradle.tooling.model.gradle.GradleBuild class GetGradleBuild : GetModelAction { diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt index 7b42eda..11e150a 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/connected/actions/GetGradleProject.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import org.gradle.client.ui.connected.horizontalScrollContent +import org.gradle.client.ui.composables.horizontalScrollContent import org.gradle.tooling.model.GradleProject class GetGradleProject : GetModelAction {