This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch tui-web-headless-defaults in repository https://gitbox.apache.org/repos/asf/camel.git
commit 98359536fc281b6f740edd3d662d6e66d7d00388 Author: Claus Ibsen <[email protected]> AuthorDate: Sun Oct 25 20:06:40 2026 +0100 chore: camel-jbang - the footer of the route diagram shows the keys of the go to node popup while it is open What is typed goes into the popup, so the diagram's keys (c source, +/- zoom, Space fold) did not apply while the footer still listed them. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../dsl/jbang/core/commands/tui/AbstractDiagramTab.java | 16 ++++++++++++++++ .../camel/dsl/jbang/core/commands/tui/DiagramTab.java | 3 +++ .../camel/dsl/jbang/core/commands/tui/RoutesTab.java | 3 +++ .../jbang/core/commands/tui/DiagramTabRenderTest.java | 13 +++++++++++++ 4 files changed, 35 insertions(+) diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java index 26dad2c67be3..668d0eb88c54 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/AbstractDiagramTab.java @@ -19,8 +19,10 @@ package org.apache.camel.dsl.jbang.core.commands.tui; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; +import java.util.List; import java.util.Map; +import dev.tamboui.text.Span; import dev.tamboui.tui.event.KeyCode; import dev.tamboui.tui.event.KeyEvent; import dev.tamboui.tui.event.MouseEvent; @@ -114,6 +116,20 @@ abstract class AbstractDiagramTab extends AbstractTab { return true; } + /** + * The footer of the go to node popup while it is open, in place of the diagram's: what is typed goes into the + * popup, so the keys of the diagram do not apply. + */ + protected final boolean renderGotoNodeFooter(List<Span> spans) { + if (!gotoNodePopup.isVisible()) { + return false; + } + TuiHelper.hint(spans, "type", "filter"); + TuiHelper.hint(spans, "Enter", "go to"); + TuiHelper.hintLast(spans, "Esc", "back"); + return true; + } + /** c: the source of the selected node of a route, or of the route selected in the topology. */ protected final boolean handleSourceKey(KeyEvent ke) { if (!diagram.isShowDiagram() || !ke.isChar('c')) { diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java index d4caf3728253..b643834187ca 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java @@ -683,6 +683,9 @@ class DiagramTab extends AbstractDiagramTab { @Override public void renderFooter(List<Span> spans) { + if (renderGotoNodeFooter(spans)) { + return; + } if (sourceViewer.isVisible()) { sourceViewer.renderFooter(spans); return; diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java index b3bafca9928d..9cfcc7dd5a90 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java @@ -757,6 +757,9 @@ class RoutesTab extends AbstractDiagramTab { @Override public void renderFooter(List<Span> spans) { + if (renderGotoNodeFooter(spans)) { + return; + } if (sourceViewer.isVisible()) { sourceViewer.renderFooter(spans); } else if (diagram.isShowDiagram()) { diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java index 66bc9a1a0131..6feca237f415 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTabRenderTest.java @@ -24,6 +24,7 @@ import dev.tamboui.text.Span; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; /** @@ -94,6 +95,18 @@ class DiagramTabRenderTest { "Footer should be empty (no diagram loaded) or contain diagram-related hints"); } + @Test + void theGoToNodePopupShowsItsOwnKeysInTheFooter() { + DiagramTab tab = new DiagramTab(ctx); + tab.gotoNodePopup.open(List.of(), -1); + List<Span> footerSpans = new ArrayList<>(); + tab.renderFooter(footerSpans); + + String footer = footerSpans.stream().map(Span::content).reduce("", String::concat); + assertEquals(" type filter Enter go to Esc back", footer, + "what is typed goes into the popup, so the keys of the diagram are not listed"); + } + @Test void renderShowsLoadingWhenNoRoutes() { DiagramTab tab = new DiagramTab(ctx);
