This is an automated email from the ASF dual-hosted git repository.
bamaer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 9f43302a11 Fixes #8624 : Fix scrolling on pipeline run configuration
screen (#8656)
9f43302a11 is described below
commit 9f43302a11de65222ce204c7c8086e6dacabfda8
Author: Matt Casters <[email protected]>
AuthorDate: Tue Sep 29 09:23:20 2026 +0200
Fixes #8624 : Fix scrolling on pipeline run configuration screen (#8656)
* Fixes #8624 : Fix scrolling on pipeline run configuration screen and
update composite scroll size
* Fix NPE in OpenExecutionShortcutTest by guarding executionGuiSession
against null
---
.../ui/core/gui/GuiCompositeWidgetsGroupTest.java | 30 ++++++++++++++++++++++
.../hop/ui/core/gui/GuiCompositeWidgets.java | 4 ++-
.../hopgui/file/pipeline/HopGuiPipelineGraph.java | 6 ++++-
.../hopgui/file/workflow/HopGuiWorkflowGraph.java | 6 ++++-
.../config/PipelineRunConfigurationEditor.java | 29 ++++++++++-----------
5 files changed, 57 insertions(+), 18 deletions(-)
diff --git
a/rcp/src/test/java/org/apache/hop/ui/core/gui/GuiCompositeWidgetsGroupTest.java
b/rcp/src/test/java/org/apache/hop/ui/core/gui/GuiCompositeWidgetsGroupTest.java
index 0d785d948e..c19e4ac4c0 100644
---
a/rcp/src/test/java/org/apache/hop/ui/core/gui/GuiCompositeWidgetsGroupTest.java
+++
b/rcp/src/test/java/org/apache/hop/ui/core/gui/GuiCompositeWidgetsGroupTest.java
@@ -44,6 +44,7 @@ import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
@@ -99,6 +100,35 @@ class GuiCompositeWidgetsGroupTest extends SwtBotTestBase {
}
}
+ @Test
+ void flatWidgetsInScrolledCompositeUpdateMinSize() {
+ Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ try {
+ ScrolledComposite scrolled = new ScrolledComposite(shell, SWT.V_SCROLL |
SWT.H_SCROLL);
+ scrolled.setLayout(new FillLayout());
+ Composite content = new Composite(scrolled, SWT.NONE);
+ content.setLayout(new FormLayout());
+ scrolled.setContent(content);
+ scrolled.setExpandHorizontal(true);
+ scrolled.setExpandVertical(true);
+
+ assertEquals(0, scrolled.getMinHeight());
+
+ FlatSample source = new FlatSample();
+ source.setName("alpha");
+ source.setNote("beta");
+ GuiCompositeWidgets widgets = new GuiCompositeWidgets(new Variables());
+ widgets.createCompositeWidgets(source, null, content, FLAT_PARENT, null);
+ widgets.setWidgetsContents(source, content, FLAT_PARENT);
+
+ assertTrue(scrolled.getMinHeight() > 0, "ScrolledComposite minimum
height should be updated");
+ assertTrue(scrolled.getMinWidth() > 0, "ScrolledComposite minimum width
should be updated");
+ } finally {
+ shell.dispose();
+ }
+ }
+
@Test
void emptyTextWidgetLeavesNullFieldNull() {
Shell shell = new Shell(display);
diff --git
a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiCompositeWidgets.java
b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiCompositeWidgets.java
index dbf11f6390..c7167489cf 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiCompositeWidgets.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiCompositeWidgets.java
@@ -196,6 +196,7 @@ public class GuiCompositeWidgets {
// Force re-layout
//
parent.layout(true, true);
+ updateScrolledMinSize(parent);
}
/**
@@ -384,7 +385,7 @@ public class GuiCompositeWidgets {
* with expand on, the scrolled composite holds the content at the old
minimum, so hiding a row
* would not shrink the range.
*/
- private void updateScrolledMinSize(Composite content) {
+ public static void updateScrolledMinSize(Composite content) {
if (content == null
|| content.isDisposed()
|| !(content.getParent() instanceof ScrolledComposite scrolled)
@@ -1458,6 +1459,7 @@ public class GuiCompositeWidgets {
if (parentComposite != null && !parentComposite.isDisposed()) {
parentComposite.layout(true, true);
+ updateScrolledMinSize(parentComposite);
}
}
diff --git
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
index 634efa57c4..8df0a09c55 100644
---
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
+++
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
@@ -6854,7 +6854,11 @@ public class HopGuiPipelineGraph extends
HopGuiAbstractGraph
* Publish {@code engine} as the pipeline on screen, together with the
session the timers check.
*/
private void setDisplayedPipeline(IPipelineEngine<PipelineMeta> engine) {
- executionGuiSession.adopt(engine, () -> this.pipeline = engine);
+ if (executionGuiSession != null) {
+ executionGuiSession.adopt(engine, () -> this.pipeline = engine);
+ } else {
+ this.pipeline = engine;
+ }
}
public ExecutionGuiSession getExecutionGuiSession() {
diff --git
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
index a45c2cca1c..a40115d6b1 100644
---
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
+++
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
@@ -4221,7 +4221,11 @@ public class HopGuiWorkflowGraph extends
HopGuiAbstractGraph
}
public synchronized void setWorkflow(IWorkflowEngine<WorkflowMeta> workflow)
{
- executionGuiSession.adopt(workflow, () -> this.workflow = workflow);
+ if (executionGuiSession != null) {
+ executionGuiSession.adopt(workflow, () -> this.workflow = workflow);
+ } else {
+ this.workflow = workflow;
+ }
}
public void paintControl(PaintEvent e) {
diff --git
a/ui/src/main/java/org/apache/hop/ui/pipeline/config/PipelineRunConfigurationEditor.java
b/ui/src/main/java/org/apache/hop/ui/pipeline/config/PipelineRunConfigurationEditor.java
index 48adffd655..9c8f306429 100644
---
a/ui/src/main/java/org/apache/hop/ui/pipeline/config/PipelineRunConfigurationEditor.java
+++
b/ui/src/main/java/org/apache/hop/ui/pipeline/config/PipelineRunConfigurationEditor.java
@@ -286,7 +286,7 @@ public class PipelineRunConfigurationEditor extends
MetadataEditor<PipelineRunCo
// Add a composite area
//
wsPluginSpecificComp = new ScrolledComposite(wMainComp, SWT.V_SCROLL |
SWT.H_SCROLL);
- wsPluginSpecificComp.setLayout(new FormLayout());
+ wsPluginSpecificComp.setLayout(new FillLayout());
FormData fdsPluginSpecificComp = new FormData();
fdsPluginSpecificComp.left = new FormAttachment(0, 0);
fdsPluginSpecificComp.top = new FormAttachment(lastControl, margin);
@@ -296,27 +296,19 @@ public class PipelineRunConfigurationEditor extends
MetadataEditor<PipelineRunCo
wPluginSpecificComp = new Composite(wsPluginSpecificComp, SWT.BACKGROUND);
PropsUi.setLook(wPluginSpecificComp);
- wPluginSpecificComp.setLayout(new FormLayout());
- FormData fdPluginSpecificComp = new FormData();
- fdPluginSpecificComp.left = new FormAttachment(0, 0);
- fdPluginSpecificComp.right = new FormAttachment(100, 0);
- fdPluginSpecificComp.top = new FormAttachment(lastControl, margin);
- fdPluginSpecificComp.bottom = new FormAttachment(100, 0);
- wPluginSpecificComp.setLayoutData(fdPluginSpecificComp);
+ FormLayout pluginSpecificLayout = new FormLayout();
+ pluginSpecificLayout.marginWidth = PropsUi.getFormMargin();
+ pluginSpecificLayout.marginHeight = PropsUi.getFormMargin();
+ wPluginSpecificComp.setLayout(pluginSpecificLayout);
wsPluginSpecificComp.setContent(wPluginSpecificComp);
+ wsPluginSpecificComp.setExpandHorizontal(true);
+ wsPluginSpecificComp.setExpandVertical(true);
// Add the plugin specific widgets
//
addGuiCompositeWidgets();
- wPluginSpecificComp.layout();
- wsPluginSpecificComp.setExpandHorizontal(true);
- wsPluginSpecificComp.setExpandVertical(true);
- Rectangle bounds = wPluginSpecificComp.getBounds();
- wsPluginSpecificComp.setMinWidth(bounds.width);
- wsPluginSpecificComp.setMinHeight(bounds.height);
-
FormData fdMainComp = new FormData();
fdMainComp.left = new FormAttachment(0, 0);
fdMainComp.top = new FormAttachment(0, 0);
@@ -490,11 +482,17 @@ public class PipelineRunConfigurationEditor extends
MetadataEditor<PipelineRunCo
wPluginSpecificComp,
PipelineRunConfiguration.GUI_PLUGIN_ELEMENT_PARENT_ID);
wPluginSpecificComp.layout(true, true);
+ updatePluginSpecificMinSize();
}
setChanged();
}
});
}
+ updatePluginSpecificMinSize();
+ }
+
+ private void updatePluginSpecificMinSize() {
+ GuiCompositeWidgets.updateScrolledMinSize(wPluginSpecificComp);
}
private AtomicBoolean busyChangingPluginType = new AtomicBoolean(false);
@@ -587,6 +585,7 @@ public class PipelineRunConfigurationEditor extends
MetadataEditor<PipelineRunCo
workingConfiguration.getEngineRunConfiguration(),
wPluginSpecificComp,
PipelineRunConfiguration.GUI_PLUGIN_ELEMENT_PARENT_ID);
+ updatePluginSpecificMinSize();
}
if (loadBalancingWidgets != null
&& workingConfiguration.getEngineRunConfiguration()