Skip to content

Commit

Permalink
Improve copy path rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
charphi committed Feb 4, 2025
1 parent f3305e8 commit c1348d0
Showing 1 changed file with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -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.*;
Expand All @@ -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.*;

Expand All @@ -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) {
Expand All @@ -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() {
Expand All @@ -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<Color> 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("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
private static final UnescapedText SEPARATOR = rawHtml("&emsp;⇒&emsp;");

private static AbstractAction copyToClipboard(String text) {
return new AbstractAction() {
Expand Down

0 comments on commit c1348d0

Please sign in to comment.