From 30f9843ef32353ed09409cee31aeefeb7da81047 Mon Sep 17 00:00:00 2001 From: Eugene Petrenko Date: Mon, 22 Mar 2021 13:21:11 +0100 Subject: [PATCH] ComponentWithBrowseButton - add API to hide browse button or browse icon GitOrigin-RevId: 69fbf2bcd78998c69691206cb8c584f7025a2275 --- .../openapi/ui/ComponentWithBrowseButton.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java index 60a565ecf842..af85daa45234 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java @@ -44,6 +44,7 @@ import static com.intellij.openapi.actionSystem.PlatformDataKeys.UI_DISPOSABLE; public class ComponentWithBrowseButton extends JPanel implements Disposable { private final Comp myComponent; private final FixedSizeButton myBrowseButton; + private final ExtendableTextComponent.Extension myInlineButtonExtension; private boolean myButtonEnabled = true; @ApiStatus.Internal @@ -59,7 +60,7 @@ public class ComponentWithBrowseButton extends JPanel i setFocusable(false); boolean inlineBrowseButton = myComponent instanceof ExtendableTextComponent && isUseInlineBrowserButton(); if (inlineBrowseButton) { - ((ExtendableTextComponent)myComponent).addExtension(ExtendableTextComponent.Extension.create( + ((ExtendableTextComponent)myComponent).addExtension(myInlineButtonExtension = ExtendableTextComponent.Extension.create( getDefaultIcon(), getHoveredIcon(), getIconTooltip(), this::notifyActionListeners)); new DumbAwareAction() { @Override @@ -67,6 +68,8 @@ public class ComponentWithBrowseButton extends JPanel i notifyActionListeners(); } }.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_DOWN_MASK)), myComponent); + } else { + myInlineButtonExtension = null; } add(myComponent, BorderLayout.CENTER); @@ -149,6 +152,17 @@ public class ComponentWithBrowseButton extends JPanel i setEnabled(isEnabled()); } + public void setButtonVisible(boolean buttonVisible) { + myBrowseButton.setVisible(buttonVisible); + if (myInlineButtonExtension != null && myComponent instanceof ExtendableTextComponent) { + if (buttonVisible) { + ((ExtendableTextComponent)myComponent).addExtension(myInlineButtonExtension); + } else { + ((ExtendableTextComponent)myComponent).removeExtension(myInlineButtonExtension); + } + } + } + public void setButtonIcon(@NotNull Icon icon) { myBrowseButton.setIcon(icon); myBrowseButton.setDisabledIcon(IconLoader.getDisabledIcon(icon)); @@ -209,6 +223,13 @@ public class ComponentWithBrowseButton extends JPanel i } } + /** + * @deprecated The implementation may attach the button via the + * {@link ExtendableTextComponent#addExtension(ExtendableTextComponent.Extension)} + * so that the returned button may not be visible to the users. Instead, + * please use the class APIs without using the implementation details. + */ + @Deprecated public FixedSizeButton getButton() { return myBrowseButton; }