IDEA-242476 Filter icon becomes a line of checkboxes when the icon does not fit on the toolbar

GitOrigin-RevId: b634459cef41c097bbc9957995b1edcd82582422
This commit is contained in:
Vassiliy.Kudryashov
2021-04-13 00:30:30 +03:00
committed by intellij-monorepo-bot
parent 620bfc152b
commit 012fd12b15
5 changed files with 65 additions and 97 deletions

View File

@@ -41,6 +41,7 @@ import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.update.Activatable;
import com.intellij.util.ui.update.UiNotifyConnector;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -103,8 +104,6 @@ public class EditorSearchSession implements SearchSession,
myComponent = SearchReplaceComponent
.buildFor(project, myEditor.getContentComponent())
.addPrimarySearchActions(createPrimarySearchActions())
.addSecondarySearchActions(createSecondarySearchActions())
.addPrimarySearchActions(new ToggleSelectionOnlyAction())
.addExtraSearchActions(new ToggleMatchCase(),
new ToggleWholeWordsOnlyAction(),
new ToggleRegex(),
@@ -119,7 +118,6 @@ public class EditorSearchSession implements SearchSession,
.withDataProvider(this)
.withCloseAction(this::close)
.withReplaceAction(this::replaceCurrent)
.withSecondarySearchActionsIsModifiedGetter(() -> myFindModel.getSearchContext() != FindModel.SearchContext.ANY)
.build();
myComponent.addListener(this);
@@ -211,20 +209,20 @@ public class EditorSearchSession implements SearchSession,
new AddOccurrenceAction(),
new RemoveOccurrenceAction(),
new SelectAllAction(),
new Separator()
new Separator(),
new ToggleSelectionOnlyAction(),
new ShowFilterPopupGroup()
};
}
/**
* @deprecated Won't be used anymore
*/
@ApiStatus.ScheduledForRemoval(inVersion = "2020.3")
@Deprecated
@NotNull
protected AnAction[] createSecondarySearchActions() {
return new AnAction[] {
new ToggleAnywhereAction(),
new ToggleInCommentsAction(),
new ToggleInLiteralsOnlyAction(),
new ToggleExceptCommentsAction(),
new ToggleExceptLiteralsAction(),
new ToggleExceptCommentsAndLiteralsAction()
};
return AnAction.EMPTY_ARRAY;
}
private void saveInitialSelection() {

View File

@@ -1,7 +1,6 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.find;
import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.find.editorHeaderActions.*;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
@@ -16,7 +15,6 @@ import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.util.BooleanGetter;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
@@ -66,7 +64,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
private final ActionToolbarImpl mySearchActionsToolbar;
private final List<AnAction> myEmbeddedSearchActions = new ArrayList<>();
private final List<Component> myExtraSearchButtons = new ArrayList<>();
private final BooleanGetter mySearchToolbarModifiedFlagGetter;
private final DefaultActionGroup myReplaceFieldActions;
private final ActionToolbarImpl myReplaceActionsToolbar;
@@ -101,7 +98,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
private SearchReplaceComponent(@Nullable Project project,
@NotNull JComponent targetComponent,
@NotNull DefaultActionGroup searchToolbar1Actions,
@NotNull final BooleanGetter searchToolbar1ModifiedFlagGetter,
@NotNull DefaultActionGroup searchToolbar2Actions,
@NotNull DefaultActionGroup searchFieldActions,
@NotNull DefaultActionGroup replaceToolbar1Actions,
@@ -117,7 +113,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
boolean useSearchField) {
myProject = project;
myTargetComponent = targetComponent;
mySearchToolbarModifiedFlagGetter = searchToolbar1ModifiedFlagGetter;
mySearchFieldActions = searchFieldActions;
myReplaceFieldActions = replaceFieldActions;
myReplaceAction = replaceAction;
@@ -180,7 +175,7 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
searchToolbar1Actions.addAll(searchToolbar2Actions.getChildren(null));
replaceToolbar1Actions.addAll(replaceToolbar2Actions.getChildren(null));
mySearchActionsToolbar = createSearchToolbar1(searchToolbar1Actions);
mySearchActionsToolbar = createToolbar(searchToolbar1Actions);
mySearchActionsToolbar.setForceShowFirstComponent(true);
JPanel searchPair = new NonOpaquePanel(new BorderLayout());
searchPair.add(mySearchActionsToolbar, BorderLayout.CENTER);
@@ -630,31 +625,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
}
@NotNull
private ActionToolbarImpl createSearchToolbar1(@NotNull DefaultActionGroup group) {
ActionToolbarImpl toolbar = createToolbar(group);
toolbar.setSecondaryActionsTooltip(FindBundle.message("find.popup.show.filter.popup"));
toolbar.setSecondaryActionsIcon(AllIcons.General.Filter, true);
toolbar.setNoGapMode();
toolbar.setSecondaryButtonPopupStateModifier(new ActionToolbarImpl.SecondaryGroupUpdater() {
@Override
public void update(@NotNull AnActionEvent e) {
Icon icon = e.getPresentation().getIcon();
if (icon != null && mySearchToolbarModifiedFlagGetter.get()) {
e.getPresentation().setIcon(ExecutionUtil.getLiveIndicator(icon));
}
}
});
KeyboardShortcut keyboardShortcut = ActionManager.getInstance().getKeyboardShortcut("ShowFilterPopup");
if (keyboardShortcut != null) {
toolbar.setSecondaryActionsShortcut(KeymapUtil.getShortcutText(keyboardShortcut));
}
new ShowMoreOptions(toolbar, mySearchFieldWrapper);
return toolbar;
}
@NotNull
private ActionToolbarImpl createReplaceToolbar1(@NotNull DefaultActionGroup group) {
ActionToolbarImpl toolbar = createToolbar(group);
@@ -694,7 +664,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
private final DefaultActionGroup mySearchActions = DefaultActionGroup.createFlatGroup(() -> "search bar 1");
private final DefaultActionGroup myExtraSearchActions = DefaultActionGroup.createFlatGroup(() -> "search bar 2");
private final DefaultActionGroup mySearchFieldActions = DefaultActionGroup.createFlatGroup(() -> "search field actions");
private BooleanGetter mySearchToolbarModifiedFlagGetter = BooleanGetter.FALSE;
private final DefaultActionGroup myReplaceActions = DefaultActionGroup.createFlatGroup(() -> "replace bar 1");
private final DefaultActionGroup myExtraReplaceActions = DefaultActionGroup.createFlatGroup(() -> "replace bar 1");
@@ -755,12 +724,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
return this;
}
@NotNull
public Builder withSecondarySearchActionsIsModifiedGetter(@NotNull BooleanGetter getter) {
mySearchToolbarModifiedFlagGetter = getter;
return this;
}
@NotNull
public Builder addExtraSearchActions(AnAction @NotNull ... actions) {
myExtraSearchActions.addAll(actions);
@@ -796,7 +759,6 @@ public final class SearchReplaceComponent extends EditorHeaderComponent implemen
return new SearchReplaceComponent(myProject,
myTargetComponent,
mySearchActions,
mySearchToolbarModifiedFlagGetter,
myExtraSearchActions,
mySearchFieldActions,
myReplaceActions,

View File

@@ -0,0 +1,53 @@
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.find.editorHeaderActions;
import com.intellij.execution.runners.ExecutionUtil;
import com.intellij.find.FindBundle;
import com.intellij.find.FindModel;
import com.intellij.find.SearchSession;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class ShowFilterPopupGroup extends DefaultActionGroup implements ShortcutProvider {
public ShowFilterPopupGroup() {
super(new ToggleAnywhereAction(),
new ToggleInCommentsAction(),
new ToggleInLiteralsOnlyAction(),
new ToggleExceptCommentsAction(),
new ToggleExceptLiteralsAction(),
new ToggleExceptCommentsAndLiteralsAction());
setPopup(true);
getTemplatePresentation().setText(FindBundle.message("find.popup.show.filter.popup"));
getTemplatePresentation().setIcon(AllIcons.General.Filter);
getTemplatePresentation().putClientProperty(ActionButton.HIDE_DROPDOWN_ICON, Boolean.TRUE);
}
@Override
public void update(@NotNull AnActionEvent e) {
SearchSession session = e.getData(SearchSession.KEY);
if (session == null) {
e.getPresentation().setEnabled(false);
return;
}
Icon icon = getTemplatePresentation().getIcon();
if (icon != null && session.getFindModel().getSearchContext() != FindModel.SearchContext.ANY) {
e.getPresentation().setIcon(ExecutionUtil.getLiveIndicator(icon));
}
else {
e.getPresentation().setIcon(icon);
}
}
@Override
public @Nullable ShortcutSet getShortcut() {
KeyboardShortcut keyboardShortcut = ActionManager.getInstance().getKeyboardShortcut("ShowFilterPopup");
if (keyboardShortcut != null)
return new CustomShortcutSet(keyboardShortcut);
return null;
}
}

View File

@@ -1,45 +0,0 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.find.editorHeaderActions;
import com.intellij.ide.lightEdit.LightEditCompatible;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CustomShortcutSet;
import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
import com.intellij.openapi.project.DumbAwareAction;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class ShowMoreOptions extends DumbAwareAction implements LightEditCompatible {
private final ActionToolbarImpl myToolbarComponent;
//placeholder for keymap
public ShowMoreOptions() {
myToolbarComponent = null;
}
public ShowMoreOptions(ActionToolbarImpl toolbarComponent, JComponent shortcutHolder) {
this.myToolbarComponent = toolbarComponent;
KeyboardShortcut keyboardShortcut = ActionManager.getInstance().getKeyboardShortcut("ShowFilterPopup");
if (keyboardShortcut != null) {
registerCustomShortcutSet(new CustomShortcutSet(keyboardShortcut), shortcutHolder);
}
}
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
final ActionButton secondaryActions = myToolbarComponent.getSecondaryActionsButton();
if (secondaryActions != null) {
secondaryActions.click();
}
}
@Override
public void update(@NotNull AnActionEvent e) {
e.getPresentation().setEnabled(myToolbarComponent != null && myToolbarComponent.getSecondaryActionsButton() != null);
}
}

View File

@@ -1289,7 +1289,7 @@
<action id="CopySettingsPath" class="com.intellij.openapi.options.newEditor.CopySettingsPathAction"/>
<action id="ShowFilterPopup" class="com.intellij.find.editorHeaderActions.ShowMoreOptions"/>
<action id="ShowFilterPopup" class="com.intellij.find.editorHeaderActions.ShowFilterPopupGroup"/>
<action id="ShowSearchHistory" class="com.intellij.find.actions.ShowSearchHistoryAction"/>
<action id="HidpiInfo" class="com.intellij.internal.HidpiInfo"/>