diff --git a/demetra-dotstat-desktop/src/main/java/internal/sdmx/OnDemandMenuBuilder.java b/demetra-dotstat-desktop/src/main/java/internal/sdmx/OnDemandMenuBuilder.java index be07f41..2ead2ef 100644 --- a/demetra-dotstat-desktop/src/main/java/internal/sdmx/OnDemandMenuBuilder.java +++ b/demetra-dotstat-desktop/src/main/java/internal/sdmx/OnDemandMenuBuilder.java @@ -1,8 +1,8 @@ package internal.sdmx; -import j2html.TagCreator; import j2html.tags.DomContent; import j2html.tags.UnescapedText; +import j2html.tags.specialized.SpanTag; import javax.swing.*; import java.awt.*; @@ -12,6 +12,8 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; import static j2html.TagCreator.*; @@ -27,7 +29,7 @@ public OnDemandMenuBuilder copyToClipboard(String textMenu, String clipboardCont public static void addCopyToClipboard(JMenu menu, String textMenu, String clipboardContent) { JMenuItem item = menu.add(copyToClipboard(clipboardContent)); item.setText(html(text(textMenu), SEPARATOR, preview(clipboardContent)).render()); - item.setToolTipText(html(clipboardContent).render()); + item.setToolTipText(clipboardContent); } public OnDemandMenuBuilder openFolder(String textMenu, File folder) { @@ -38,7 +40,7 @@ public OnDemandMenuBuilder openFolder(String textMenu, File folder) { public static void addOpenFolder(JMenu menu, String textMenu, File folder) { JMenuItem item = menu.add(openFolder(folder)); item.setText(html(text(textMenu), SEPARATOR, preview(folder.getPath())).render()); - item.setToolTipText(html(folder.getPath()).render()); + item.setToolTipText(folder.getPath()); } public OnDemandMenuBuilder addSeparator() { @@ -63,12 +65,25 @@ public static void showMenuAsPopup(Component invoker, JMenu menu) { } private static DomContent preview(String text) { - return TagCreator.span(text.length() > CHAR_LIMIT ? text.substring(0, CHAR_LIMIT) + "…" : text) - .withStyle("color:#0A84FF"); + SpanTag result = span(text.length() > CHAR_LIMIT ? text.substring(0, CHAR_LIMIT - 1) + "…" : text); + return lookupColor("MenuItem.acceleratorForeground", "MenuItem.disabledForeground", "Label.disabledForeground") + .map(color -> result.withStyle("color:" + getHexString(color))) + .orElse(result); + } + + private static Optional lookupColor(String... keys) { + return Stream.of(keys) + .map(UIManager::getColor) + .filter(Objects::nonNull) + .findFirst(); + } + + private static String getHexString(Color color) { + return Integer.toHexString((color.getRGB() & 0xffffff) | 0x1000000).substring(1); } private static final int CHAR_LIMIT = 30; - private static final UnescapedText SEPARATOR = rawHtml("     "); + private static final UnescapedText SEPARATOR = rawHtml(" ⇒ "); private static AbstractAction copyToClipboard(String text) { return new AbstractAction() {