This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7f7834ed211e537254f87ceadd881a351482c030 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jul 2 21:04:28 2026 +0200 CAMEL-23831: Move theme toggle from F4 to F2 Actions popup in camel-tui Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../camel/dsl/jbang/core/commands/tui/ActionsPopup.java | 12 ++++++++++-- .../camel/dsl/jbang/core/commands/tui/CamelMonitor.java | 5 ----- .../camel/dsl/jbang/core/commands/tui/OverviewTab.java | 3 +-- .../camel/dsl/jbang/core/commands/tui/TuiMcpServer.java | 4 ++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java index a1231aa24502..95cd5c8c9d88 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java @@ -82,6 +82,7 @@ class ActionsPopup { DOCTOR, RESET_STATS, RESET_SCREEN, + TOGGLE_THEME, STOP_ALL, SCREENSHOT, TAPE_RECORDING, @@ -95,7 +96,7 @@ class ActionsPopup { SHELL } - private static final int[] GROUP_SIZES = { 1, 5, 4, 5 }; + private static final int[] GROUP_SIZES = { 1, 5, 5, 5 }; private static final int MCP_GROUP_SIZE = 4; private static final int SHELL_GROUP_SIZE = 1; @@ -296,7 +297,7 @@ class ActionsPopup { flat.addAll(List.of( Action.SEND_MESSAGE, Action.RUN_EXAMPLE, Action.RUN_FOLDER, Action.RUN_INFRA, Action.BROWSE_FILES)); flat.add(null); - flat.addAll(List.of(Action.DOCTOR, Action.RESET_STATS, Action.RESET_SCREEN, Action.STOP_ALL)); + flat.addAll(List.of(Action.DOCTOR, Action.RESET_STATS, Action.RESET_SCREEN, Action.TOGGLE_THEME, Action.STOP_ALL)); flat.add(null); flat.addAll(List.of( Action.SCREENSHOT, Action.TAPE_RECORDING, Action.TAPE_INSTRUCTIONS, Action.CAPTION, @@ -385,6 +386,7 @@ class ActionsPopup { labels.add("Run Doctor"); labels.add("Reset Stats"); labels.add("Reset Screen"); + labels.add("dark".equals(Theme.mode()) ? "Light Theme" : "Dark Theme"); labels.add("Stop All"); labels.add("โโโ"); // Group 3: Recording & Presentation @@ -693,6 +695,9 @@ class ActionsPopup { if (resetScreenAction != null) { resetScreenAction.run(); } + } else if (action == Action.TOGGLE_THEME) { + showActionsMenu = false; + Theme.toggle(); } else if (action == Action.STOP_ALL) { showActionsMenu = false; stopAllPopup.open(); @@ -964,6 +969,8 @@ class ActionsPopup { items.add(ListItem.from(" ๐ฉบ Run Doctor")); items.add(ListItem.from(" ๐ Reset Stats")); items.add(ListItem.from(" ๐งน Reset Screen")); + String themeLabel = "dark".equals(Theme.mode()) ? " ๐ Light Theme" : " ๐ Dark Theme"; + items.add(ListItem.from(themeLabel)); items.add(ListItem.from(stopLabel)); items.add(ListItem.from(divider).style(Style.EMPTY.dim())); // Group 3: Recording & Presentation @@ -2338,6 +2345,7 @@ class ActionsPopup { resetScreenAction.run(); } } + case TOGGLE_THEME -> Theme.toggle(); case SCREENSHOT -> screenshotAction.run(); case SHOW_KEYSTROKES -> toggleKeystrokes.run(); case TAPE_RECORDING -> toggleTapeRecording.run(); diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java index 0b45b55c4727..9cf2a2b38a14 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java @@ -641,10 +641,6 @@ public class CamelMonitor extends CamelCommand { } return true; } - if (!textEditing && ke.isKey(KeyCode.F4)) { - Theme.toggle(); - return true; - } if (ke.isKey(KeyCode.F5) && ke.hasShift()) { recordingManager.takeScreenshot(); return true; @@ -1754,7 +1750,6 @@ public class CamelMonitor extends CamelCommand { } hint(fKeySpans, "F6", "shell"); hint(fKeySpans, "F8", "AI"); - hint(fKeySpans, "F4", "theme"); spans.addAll(insertPos, fKeySpans); // Return total F-key span count. The footer drop loop uses this to remove pairs from // the tail (F6, then F3, F2), stopping before the first pair (F1 help when present). diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java index 8b859518a76b..66b4ed035447 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java @@ -947,9 +947,8 @@ class OverviewTab extends AbstractTab { - `Enter` โ view routes for selected integration - `s` โ cycle sort column - `S` โ reverse sort order - - `F2` โ actions menu + - `F2` โ actions menu (includes theme toggle, go to tab, etc.) - `F3` โ switch integration - - `F4` โ toggle light/dark theme """; } diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java index c3a7436c38c8..f8805af0363d 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java +++ b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java @@ -399,7 +399,7 @@ class TuiMcpServer { "tui_action", "Invokes a TUI action by name, bypassing fragile key sequences. " + "Actions: reset-stats, reset-screen, screenshot, show-keystrokes, " - + "tape-recording, doctor, caption, mcp-info, mcp-log.", + + "tape-recording, doctor, caption, mcp-info, mcp-log, toggle-theme.", Map.of("action", propDef("string", "Action name in kebab-case (e.g. 'reset-stats', 'screenshot')")), List.of("action"))); toolList.add(toolDef( @@ -1167,7 +1167,7 @@ class TuiMcpServer { } return "Unknown or unsupported action: " + action + ". Available: reset-stats, reset-screen, screenshot, show-keystrokes, " - + "tape-recording, doctor, caption, mcp-info, mcp-log"; + + "tape-recording, doctor, caption, mcp-info, mcp-log, toggle-theme"; } private String callGetLog(Map<String, Object> args) {
