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()

Reply via email to