IDEA-142359 Find/Replace: move checkboxes back

This commit is contained in:
Vassiliy.Kudryashov
2015-07-15 21:02:14 +03:00
parent 591db8a785
commit 2b80a3f01b
37 changed files with 788 additions and 812 deletions
@@ -20,7 +20,6 @@ import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.util.Getter;
import com.intellij.testFramework.fixtures.EditorMouseFixture;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
@@ -140,7 +139,7 @@ public class FindInEditorMultiCaretTest extends LightPlatformCodeInsightFixtureT
private void setTextToFind(String text) {
EditorSearchComponent editorSearchComponent = getEditorSearchComponent();
assertNotNull(editorSearchComponent);
JTextComponent searchField = editorSearchComponent.getSearchField();
JTextComponent searchField = editorSearchComponent.getSearchTextComponent();
assertNotNull(searchField);
for (int i = 0; i <= text.length(); i++) {
searchField.setText(text.substring(0, i)); // emulate typing chars one by one
@@ -149,22 +148,12 @@ public class FindInEditorMultiCaretTest extends LightPlatformCodeInsightFixtureT
private void nextOccurrence() {
final EditorSearchComponent editorSearchComponent = getEditorSearchComponent();
executeAction(new NextOccurrenceAction(editorSearchComponent, new Getter<JTextComponent>() {
@Override
public JTextComponent get() {
return editorSearchComponent.getSearchField();
}
}));
executeAction(new NextOccurrenceAction(editorSearchComponent, editorSearchComponent.getSearchTextComponent()));
}
private void prevOccurrence() {
final EditorSearchComponent editorSearchComponent = getEditorSearchComponent();
executeAction(new PrevOccurrenceAction(editorSearchComponent, new Getter<JTextComponent>() {
@Override
public JTextComponent get() {
return editorSearchComponent.getSearchField();
}
}));
executeAction(new PrevOccurrenceAction(editorSearchComponent, editorSearchComponent.getSearchTextComponent()));
}
private void addOccurrence() {
@@ -201,7 +190,7 @@ public class FindInEditorMultiCaretTest extends LightPlatformCodeInsightFixtureT
private void closeFind() {
EditorSearchComponent editorSearchComponent = getEditorSearchComponent();
executeAction(new CloseOnESCAction(editorSearchComponent, editorSearchComponent.getSearchField()));
executeAction(new CloseOnESCAction(editorSearchComponent, editorSearchComponent.getSearchTextComponent()));
}
private static void executeAction(EditorHeaderAction action) {
@@ -24,7 +24,6 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -105,7 +104,6 @@ public class FindModel extends UserDataHolderBase implements Cloneable {
if (!multiline) {
initStringToFindNoMultiline(this, getStringToFind());
}
isMultiline = multiline;
notifyObservers();
}
@@ -141,6 +139,7 @@ public class FindModel extends UserDataHolderBase implements Cloneable {
* @param model the model to copy settings from.
*/
public void copyFrom(FindModel model) {
boolean changed = !equals(model);
myStringToFind = model.myStringToFind;
myStringToReplace = model.myStringToReplace;
isReplaceState = model.isReplaceState;
@@ -166,10 +165,11 @@ public class FindModel extends UserDataHolderBase implements Cloneable {
customScope = model.customScope;
isCustomScope = model.isCustomScope;
isFindAll = model.isFindAll;
searchContext = model.searchContext;
isMultiline = model.isMultiline;
if (changed) {
notifyObservers();
}
}
@Override
@@ -946,20 +946,4 @@ public class FindModel extends UserDataHolderBase implements Cloneable {
return pattern;
}
public String getStateDescription() {
ArrayList<String> state = new ArrayList<String>();
if (isCaseSensitive()) state.add("Match Case");
if (isRegularExpressions()) state.add("Regex");
if (isWholeWordsOnly()) state.add("Words");
if (isInCommentsOnly()) state.add("In Comments Only");
if (isInStringLiteralsOnly()) state.add("In Literals Only");
if (isExceptComments()) state.add("Except Comments");
if (isExceptStringLiterals()) state.add("Except Literals");
if (isExceptCommentsAndStringLiterals()) state.add("Except Comments and Literals");
if (isPreserveCase()) state.add("Preserve Case");
if (!isGlobal()) state.add("In Selection");
String join = StringUtil.join(state, ", ");
return join.isEmpty()? "" : "(" + join+")";
}
}
@@ -197,9 +197,9 @@ public class HighlightUsagesHandler extends HighlightHandlerBase {
final EditorSearchComponent oldSearch = (EditorSearchComponent)oldHeader;
if (oldSearch.hasMatches()) {
String oldText = oldSearch.getTextInField();
if (!oldSearch.isRegexp()) {
if (!oldSearch.getFindModel().isRegularExpressions()) {
oldText = StringUtil.escapeToRegexp(oldText);
oldSearch.setRegexp(true);
oldSearch.getFindModel().setRegularExpressions(true);
}
String newText = oldText + '|' + StringUtil.escapeToRegexp(text);
@@ -209,7 +209,7 @@ public class HighlightUsagesHandler extends HighlightHandlerBase {
}
final EditorSearchComponent header = new EditorSearchComponent(editor, project);
header.setRegexp(false);
header.getFindModel().setRegularExpressions(false);
editor.setHeaderComponent(header);
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,114 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.find;
import com.intellij.ide.ui.laf.darcula.DarculaUIUtil;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import com.intellij.openapi.actionSystem.impl.InplaceActionButtonLook;
import com.intellij.ui.Gray;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.components.panels.NonOpaquePanel;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
class SearchWrapper extends NonOpaquePanel implements PropertyChangeListener, FocusListener {
private final JTextComponent myToWrap;
public SearchWrapper(JTextComponent toWrap, AnAction showHistoryAction) {
myToWrap = toWrap;
setBorder(JBUI.Borders.empty(6, 6, 6, 8));
setLayout(new BorderLayout(JBUI.scale(4), 0));
myToWrap.addPropertyChangeListener("background", this);
myToWrap.addFocusListener(this);
myToWrap.setBorder(null);
myToWrap.setOpaque(false);
JBScrollPane scrollPane = new JBScrollPane(myToWrap,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.getVerticalScrollBar().setBackground(UIUtil.TRANSPARENT_COLOR);
scrollPane.getViewport().setBorder(null);
scrollPane.getViewport().setOpaque(false);
scrollPane.setBorder(JBUI.Borders.empty(0, 0, 0, 2));
scrollPane.setOpaque(false);
ActionButton button =
new ActionButton(showHistoryAction, showHistoryAction.getTemplatePresentation(), ActionPlaces.UNKNOWN, new Dimension(JBUI.scale(16), JBUI.scale(16)));
button.setLook(new InplaceActionButtonLook());
JPanel p = new NonOpaquePanel(new BorderLayout());
p.add(button, BorderLayout.NORTH);
add(p, BorderLayout.WEST);
add(scrollPane, BorderLayout.CENTER);
}
@Override
public Dimension getMinimumSize() {
return getPreferredSize();//myToWrap.getPreferredScrollableViewportSize();
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
repaint();
}
@Override
public void focusGained(FocusEvent e) {
repaint();
}
@Override
public void focusLost(FocusEvent e) {
repaint();
}
@Override
public void paint(Graphics graphics) {
Graphics2D g = (Graphics2D)graphics.create();
try {
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
Rectangle r = new Rectangle(getSize());
r.x += JBUI.scale(4);
r.y += JBUI.scale(3);
r.width -= JBUI.scale(9);
r.height -= JBUI.scale(6);
int arcSize = Math.min(25, r.height - 1) - 6;
g.setColor(myToWrap.getBackground());
boolean hasFocus = myToWrap.hasFocus();
g.fillRoundRect(r.x, r.y + 1, r.width, r.height - 2, arcSize, arcSize);
g.setColor(myToWrap.isEnabled() ? Gray._100 : Gray._83);
if (hasFocus) {
DarculaUIUtil.paintSearchFocusRing(g, r, arcSize + 6);
}
else {
g.drawRoundRect(r.x, r.y, r.width, r.height - 1, arcSize, arcSize);
}
}
finally {
g.dispose();
}
super.paint(graphics);
}
}
@@ -29,18 +29,18 @@ public class AddOccurrenceAction extends EditorHeaderAction implements DumbAware
copyFrom(ActionManager.getInstance().getAction(IdeActions.ACTION_SELECT_NEXT_OCCURENCE));
getTemplatePresentation().setIcon(AllIcons.Actions.AddMulticaret);
registerShortcutsForComponent(Arrays.asList(getShortcutSet().getShortcuts()), editorSearchComponent.getSearchField());
registerShortcutsForComponent(Arrays.asList(getShortcutSet().getShortcuts()), editorSearchComponent.getSearchTextComponent());
}
@Override
public void actionPerformed(AnActionEvent e) {
getEditorSearchComponent().addNextOccurrence();
myEditorSearchComponent.addNextOccurrence();
}
@Override
public void update(AnActionEvent e) {
boolean isFind = !getEditorSearchComponent().getFindModel().isReplaceState();
boolean hasMatches = getEditorSearchComponent().hasMatches();
boolean isFind = !myEditorSearchComponent.getFindModel().isReplaceState();
boolean hasMatches = myEditorSearchComponent.hasMatches();
e.getPresentation().setVisible(isFind);
e.getPresentation().setEnabled(isFind && hasMatches);
}}
@@ -37,6 +37,6 @@ public class CloseOnESCAction extends EditorHeaderAction implements DumbAware {
@Override
public void actionPerformed(AnActionEvent e) {
getEditorSearchComponent().close();
myEditorSearchComponent.close();
}
}
@@ -25,21 +25,16 @@ import javax.swing.*;
import java.util.List;
public abstract class EditorHeaderAction extends AnAction {
private final EditorSearchComponent myEditorSearchComponent;
protected final EditorSearchComponent myEditorSearchComponent;
protected EditorHeaderAction(EditorSearchComponent editorSearchComponent) {
myEditorSearchComponent = editorSearchComponent;
}
protected void registerShortcutsForComponent(List<Shortcut> shortcuts, JComponent component) {
registerCustomShortcutSet(
new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])),
component);
}
public EditorSearchComponent getEditorSearchComponent() {
return myEditorSearchComponent;
}
protected EditorHeaderAction(EditorSearchComponent editorSearchComponent) {
myEditorSearchComponent = editorSearchComponent;
}
}
@@ -10,15 +10,18 @@ import javax.swing.*;
public abstract class EditorHeaderToggleAction extends CheckboxAction implements DumbAware {
protected final EditorSearchComponent myEditorSearchComponent;
protected EditorHeaderToggleAction(EditorSearchComponent editorSearchComponent, String text) {
super(text);
myEditorSearchComponent = editorSearchComponent;
}
@Override
public boolean displayTextInToolbar() {
return true;
}
public EditorSearchComponent getEditorSearchComponent() {
return myEditorSearchComponent;
}
@Override
public void update(AnActionEvent e) {
super.update(e);
@@ -31,11 +34,4 @@ public abstract class EditorHeaderToggleAction extends CheckboxAction implements
customComponent.setOpaque(false);
return customComponent;
}
private final EditorSearchComponent myEditorSearchComponent;
protected EditorHeaderToggleAction(EditorSearchComponent editorSearchComponent, String text) {
super(text);
myEditorSearchComponent = editorSearchComponent;
}
}
@@ -20,10 +20,7 @@ import com.intellij.find.FindManager;
import com.intellij.find.FindModel;
import com.intellij.find.FindUtil;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
@@ -56,29 +53,28 @@ public class FindAllAction extends EditorHeaderAction implements DumbAware {
final AnAction findUsages = ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_USAGES);
if (findUsages != null) {
registerCustomShortcutSet(findUsages.getShortcutSet(),
editorSearchComponent.getSearchField());
editorSearchComponent.getSearchTextComponent());
}
}
@Override
public void update(final AnActionEvent e) {
super.update(e);
Editor editor = getEditorSearchComponent().getEditor();
Project project = editor.getProject();
Editor editor = e.getData(CommonDataKeys.EDITOR_EVEN_IF_INACTIVE);
Project project = e.getProject();
if (project != null && !project.isDisposed()) {
e.getPresentation().setEnabled(getEditorSearchComponent().hasMatches() &&
e.getPresentation().setEnabled(editor != null && myEditorSearchComponent.hasMatches() &&
PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()) != null);
}
}
@Override
public void actionPerformed(final AnActionEvent e) {
Editor editor = getEditorSearchComponent().getEditor();
Project project = editor.getProject();
if (project != null && !project.isDisposed()) {
Editor editor = e.getData(CommonDataKeys.EDITOR_EVEN_IF_INACTIVE);
Project project = e.getProject();
if (editor != null && project != null && !project.isDisposed()) {
final FindModel model = FindManager.getInstance(project).getFindInFileModel();
final FindModel realModel = (FindModel)model.clone();
String text = getEditorSearchComponent().getTextInField();
String text = myEditorSearchComponent.getTextInField();
if (StringUtil.isEmpty(text)) return;
realModel.setStringToFind(text);
FindUtil.findAllAndShow(project, editor, realModel);
@@ -18,12 +18,9 @@ package com.intellij.find.editorHeaderActions;
import com.intellij.find.EditorSearchComponent;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
@@ -35,11 +32,8 @@ import java.util.ArrayList;
* To change this template use File | Settings | File Templates.
*/
public class NextOccurrenceAction extends EditorHeaderAction implements DumbAware {
private final Getter<JTextComponent> myTextField;
public NextOccurrenceAction(EditorSearchComponent editorSearchComponent, Getter<JTextComponent> editorTextField) {
public NextOccurrenceAction(EditorSearchComponent editorSearchComponent, JComponent shortcutHolder) {
super(editorSearchComponent);
myTextField = editorTextField;
copyFrom(ActionManager.getInstance().getAction(IdeActions.ACTION_NEXT_OCCURENCE));
ArrayList<Shortcut> shortcuts = new ArrayList<Shortcut>();
ContainerUtil.addAll(shortcuts, ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_NEXT).getShortcutSet().getShortcuts());
@@ -50,16 +44,16 @@ public class NextOccurrenceAction extends EditorHeaderAction implements DumbAwar
shortcuts.add(new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), null));
}
registerShortcutsForComponent(shortcuts, editorTextField.get());
registerShortcutsForComponent(shortcuts, shortcutHolder);
}
@Override
public void actionPerformed(final AnActionEvent e) {
getEditorSearchComponent().searchForward();
myEditorSearchComponent.searchForward();
}
@Override
public void update(final AnActionEvent e) {
e.getPresentation().setEnabled(getEditorSearchComponent().hasMatches() && !StringUtil.isEmpty(myTextField.get().getText()));
e.getPresentation().setEnabled(myEditorSearchComponent.hasMatches());
}
}
@@ -18,11 +18,9 @@ package com.intellij.find.editorHeaderActions;
import com.intellij.find.EditorSearchComponent;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.Getter;
import com.intellij.util.containers.ContainerUtil;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
@@ -36,7 +34,7 @@ import java.util.ArrayList;
*/
public class PrevOccurrenceAction extends EditorHeaderAction implements DumbAware {
public PrevOccurrenceAction(EditorSearchComponent editorSearchComponent, Getter<JTextComponent> editorTextField) {
public PrevOccurrenceAction(EditorSearchComponent editorSearchComponent, JComponent shortcutHolder) {
super(editorSearchComponent);
copyFrom(ActionManager.getInstance().getAction(IdeActions.ACTION_PREVIOUS_OCCURENCE));
@@ -49,16 +47,16 @@ public class PrevOccurrenceAction extends EditorHeaderAction implements DumbAwar
shortcuts.add(new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_DOWN_MASK), null));
}
registerShortcutsForComponent(shortcuts, editorTextField.get());
registerShortcutsForComponent(shortcuts, shortcutHolder);
}
@Override
public void actionPerformed(final AnActionEvent e) {
getEditorSearchComponent().searchBackward();
myEditorSearchComponent.searchBackward();
}
@Override
public void update(final AnActionEvent e) {
e.getPresentation().setEnabled(getEditorSearchComponent().hasMatches());
e.getPresentation().setEnabled(myEditorSearchComponent.hasMatches());
}
}
@@ -31,18 +31,18 @@ public class RemoveOccurrenceAction extends EditorHeaderAction implements DumbAw
copyFrom(ActionManager.getInstance().getAction(IdeActions.ACTION_UNSELECT_PREVIOUS_OCCURENCE));
getTemplatePresentation().setIcon(AllIcons.Actions.RemoveMulticaret);
registerShortcutsForComponent(Arrays.asList(getShortcutSet().getShortcuts()), editorSearchComponent.getSearchField());
registerShortcutsForComponent(Arrays.asList(getShortcutSet().getShortcuts()), editorSearchComponent.getSearchTextComponent());
}
@Override
public void actionPerformed(AnActionEvent e) {
getEditorSearchComponent().removeOccurrence();
myEditorSearchComponent.removeOccurrence();
}
@Override
public void update(AnActionEvent e) {
boolean isFind = !getEditorSearchComponent().getFindModel().isReplaceState();
boolean hasMatches = getEditorSearchComponent().hasMatches();
boolean isFind = !myEditorSearchComponent.getFindModel().isReplaceState();
boolean hasMatches = myEditorSearchComponent.hasMatches();
e.getPresentation().setVisible(isFind);
e.getPresentation().setEnabled(isFind && hasMatches);
}
@@ -11,16 +11,16 @@ import java.awt.event.KeyEvent;
import java.util.ArrayList;
public class ReplaceOnEnterAction extends EditorHeaderAction {
public ReplaceOnEnterAction(EditorSearchComponent editorSearchComponent, JComponent textField) {
public ReplaceOnEnterAction(EditorSearchComponent editorSearchComponent, JComponent shortcutHolder) {
super(editorSearchComponent);
ArrayList<Shortcut> shortcuts = new ArrayList<Shortcut>();
shortcuts.add(new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), null));
registerCustomShortcutSet(new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])), textField);
registerCustomShortcutSet(new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])), shortcutHolder);
}
@Override
public void actionPerformed(AnActionEvent e) {
getEditorSearchComponent().replaceCurrent();
myEditorSearchComponent.replaceCurrent();
}
}
@@ -16,6 +16,8 @@
package com.intellij.find.editorHeaderActions;
import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindManager;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.DumbAware;
@@ -44,12 +46,18 @@ public class RestorePreviousSettingsAction extends EditorHeaderAction implements
@Override
public void actionPerformed(final AnActionEvent e) {
getEditorSearchComponent().restoreFindModel();
final FindModel model = FindManager.getInstance(e.getProject()).getPreviousFindModel();
if (model != null) {
myEditorSearchComponent.getFindModel().copyFrom(model);
}
}
@Override
public void update(final AnActionEvent e) {
e.getPresentation().setEnabled(myTextField.getText().isEmpty());
e.getPresentation().setEnabled(
e.getProject() != null
&& myTextField.getText().isEmpty()
&& FindManager.getInstance(e.getProject()).getPreviousFindModel() != null);
}
public static String getAd() {
@@ -1,11 +0,0 @@
package com.intellij.find.editorHeaderActions;
/**
* Created by IntelliJ IDEA.
* User: zajac
* Date: 02.04.11
* Time: 14:43
* To change this template use File | Settings | File Templates.
*/
public interface SecondaryHeaderAction {
}
@@ -34,19 +34,19 @@ public class SelectAllAction extends EditorHeaderAction implements DumbAware {
List<Shortcut> shortcuts = new ArrayList<Shortcut>();
ContainerUtil.addAll(shortcuts, getShortcutSet().getShortcuts());
ContainerUtil.addAll(shortcuts, CommonShortcuts.ALT_ENTER.getShortcuts());
registerShortcutsForComponent(shortcuts, editorSearchComponent.getSearchField());
registerShortcutsForComponent(shortcuts, editorSearchComponent.getSearchTextComponent());
}
@Override
public void actionPerformed(AnActionEvent e) {
getEditorSearchComponent().selectAllOccurrences();
getEditorSearchComponent().close();
myEditorSearchComponent.selectAllOccurrences();
myEditorSearchComponent.close();
}
@Override
public void update(AnActionEvent e) {
boolean isFind = !getEditorSearchComponent().getFindModel().isReplaceState();
boolean hasMatches = getEditorSearchComponent().hasMatches();
boolean isFind = !myEditorSearchComponent.getFindModel().isReplaceState();
boolean hasMatches = myEditorSearchComponent.hasMatches();
e.getPresentation().setVisible(isFind);
e.getPresentation().setEnabled(isFind && hasMatches);
}
@@ -4,7 +4,6 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.IconLoader;
import com.intellij.util.containers.ContainerUtil;
@@ -15,46 +14,36 @@ import java.awt.event.KeyEvent;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* User: zajac
* Date: 05.03.11
* Time: 10:44
* To change this template use File | Settings | File Templates.
*/
* User: zajac
*/
public class ShowHistoryAction extends EditorHeaderAction implements DumbAware {
private final Getter<JTextComponent> myTextField;
private final JTextComponent myTextField;
public JTextComponent getTextField() {
return myTextField.get();
}
public ShowHistoryAction(final Getter<JTextComponent> textField, EditorSearchComponent editorSearchComponent) {
public ShowHistoryAction(final JTextComponent textField, EditorSearchComponent editorSearchComponent) {
super(editorSearchComponent);
myTextField = textField;
getTemplatePresentation().setIcon(IconLoader.findIcon("/com/intellij/ide/ui/laf/icons/search.png", DarculaTextFieldUI.class, true));
final String s = getTextField() == getEditorSearchComponent().getSearchField() ? "Search" : "Replace";
final String s = myTextField == myEditorSearchComponent.getSearchTextComponent() ? "Search" : "Replace";
getTemplatePresentation().setDescription(s + " history");
getTemplatePresentation().setText(s + " History");
ArrayList<Shortcut> shortcuts = new ArrayList<Shortcut>();
if (getTextField() == getEditorSearchComponent().getSearchField()) {
if (myTextField == myEditorSearchComponent.getSearchTextComponent()) {
//ContainerUtil.addAll(shortcuts, ActionManager.getInstance().getAction(IdeActions.ACTION_FIND).getShortcutSet().getShortcuts());
ContainerUtil.addAll(shortcuts, ActionManager.getInstance().getAction("IncrementalSearch").getShortcutSet().getShortcuts());
}
shortcuts.add(new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK), null));
registerCustomShortcutSet(new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])), getTextField());
registerCustomShortcutSet(new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])), myTextField);
}
@Override
public void update(AnActionEvent e) {
e.getPresentation().setVisible(getEditorSearchComponent().getFindModel().isMultiline());
e.getPresentation().setVisible(myEditorSearchComponent.getFindModel().isMultiline());
}
@Override
public void actionPerformed(final AnActionEvent e) {
getEditorSearchComponent().showHistory(false, getTextField());
myEditorSearchComponent.showHistory(false, myTextField);
}
}
@@ -6,7 +6,6 @@ import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
import com.intellij.openapi.project.DumbAware;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
@@ -18,17 +17,17 @@ import java.awt.event.KeyEvent;
* To change this template use File | Settings | File Templates.
*/
public class ShowMoreOptions extends AnAction implements DumbAware {
private final JComponent myToolbarComponent;
private final ActionToolbarImpl myToolbarComponent;
public static final Shortcut SHORT_CUT = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.ALT_DOWN_MASK), null);
public ShowMoreOptions(JComponent toolbarComponent, JTextComponent searchField) {
public ShowMoreOptions(ActionToolbarImpl toolbarComponent, JComponent shortcutHolder) {
this.myToolbarComponent = toolbarComponent;
registerCustomShortcutSet(new CustomShortcutSet(SHORT_CUT), searchField);
registerCustomShortcutSet(new CustomShortcutSet(SHORT_CUT), shortcutHolder);
}
@Override
public void actionPerformed(AnActionEvent e) {
final ActionButton secondaryActions = ((ActionToolbarImpl)myToolbarComponent).getSecondaryActionsButton();
final ActionButton secondaryActions = myToolbarComponent.getSecondaryActionsButton();
if (secondaryActions != null) {
secondaryActions.click();
}
@@ -37,9 +37,8 @@ public class SwitchToFind extends EditorHeaderAction implements DumbAware {
return;
}
EditorSearchComponent component = getEditorSearchComponent();
final FindModel findModel = component.getFindModel();
final FindModel findModel = myEditorSearchComponent.getFindModel();
FindUtil.configureFindModel(false, null, findModel, false);
component.selectAllText();
myEditorSearchComponent.getSearchTextComponent().selectAll();
}
}
@@ -17,8 +17,11 @@ import com.intellij.openapi.editor.Editor;
* To change this template use File | Settings | File Templates.
*/
public class SwitchToReplace extends EditorHeaderAction {
public SwitchToReplace(EditorSearchComponent editorSearchComponent) {
private final Editor myEditor;
public SwitchToReplace(EditorSearchComponent editorSearchComponent, Editor editor) {
super(editorSearchComponent);
myEditor = editor;
AnAction replaceAction = ActionManager.getInstance().getAction("Replace");
if (replaceAction != null) {
registerCustomShortcutSet(replaceAction.getShortcutSet(), editorSearchComponent);
@@ -27,15 +30,13 @@ public class SwitchToReplace extends EditorHeaderAction {
@Override
public void update(AnActionEvent e) {
final Editor editor = getEditorSearchComponent().getEditor();
e.getPresentation().setEnabled(!ConsoleViewUtil.isConsoleViewEditor(editor));
e.getPresentation().setEnabled(!ConsoleViewUtil.isConsoleViewEditor(myEditor));
}
@Override
public void actionPerformed(AnActionEvent e) {
EditorSearchComponent component = getEditorSearchComponent();
final FindModel findModel = component.getFindModel();
final FindModel findModel = myEditorSearchComponent.getFindModel();
FindUtil.configureFindModel(true, null, findModel, false);
component.selectAllText();
myEditorSearchComponent.getSearchTextComponent().selectAll();
}
}
@@ -19,7 +19,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class ToggleExceptCommentsAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class ToggleExceptCommentsAction extends EditorHeaderToggleAction {
private static final String TEXT = "Except C&omments";
public ToggleExceptCommentsAction(EditorSearchComponent editorSearchComponent) {
@@ -28,11 +28,11 @@ public class ToggleExceptCommentsAction extends EditorHeaderToggleAction impleme
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isExceptComments();
return myEditorSearchComponent.getFindModel().isExceptComments();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_COMMENTS : FindModel.SearchContext.ANY);
myEditorSearchComponent.getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_COMMENTS : FindModel.SearchContext.ANY);
}
}
@@ -19,7 +19,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class ToggleExceptCommentsAndLiteralsAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class ToggleExceptCommentsAndLiteralsAction extends EditorHeaderToggleAction {
private static final String TEXT = "Except Comments and Li&terals";
public ToggleExceptCommentsAndLiteralsAction(EditorSearchComponent editorSearchComponent) {
@@ -28,11 +28,11 @@ public class ToggleExceptCommentsAndLiteralsAction extends EditorHeaderToggleAct
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isExceptCommentsAndStringLiterals();
return myEditorSearchComponent.getFindModel().isExceptCommentsAndStringLiterals();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_COMMENTS_AND_STRING_LITERALS : FindModel.SearchContext.ANY);
myEditorSearchComponent.getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_COMMENTS_AND_STRING_LITERALS : FindModel.SearchContext.ANY);
}
}
@@ -19,7 +19,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class ToggleExceptLiteralsAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class ToggleExceptLiteralsAction extends EditorHeaderToggleAction {
private static final String TEXT = "Except L&iterals";
public ToggleExceptLiteralsAction(EditorSearchComponent editorSearchComponent) {
@@ -28,11 +28,11 @@ public class ToggleExceptLiteralsAction extends EditorHeaderToggleAction impleme
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isExceptStringLiterals();
return myEditorSearchComponent.getFindModel().isExceptStringLiterals();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_STRING_LITERALS : FindModel.SearchContext.ANY);
myEditorSearchComponent.getFindModel().setSearchContext(state ? FindModel.SearchContext.EXCEPT_STRING_LITERALS : FindModel.SearchContext.ANY);
}
}
@@ -4,7 +4,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class ToggleInCommentsAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class ToggleInCommentsAction extends EditorHeaderToggleAction {
private static final String TEXT = "In &Comments Only";
public ToggleInCommentsAction(EditorSearchComponent editorSearchComponent) {
@@ -13,11 +13,11 @@ public class ToggleInCommentsAction extends EditorHeaderToggleAction implements
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isInCommentsOnly();
return myEditorSearchComponent.getFindModel().isInCommentsOnly();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setSearchContext(state ? FindModel.SearchContext.IN_COMMENTS : FindModel.SearchContext.ANY);
myEditorSearchComponent.getFindModel().setSearchContext(state ? FindModel.SearchContext.IN_COMMENTS : FindModel.SearchContext.ANY);
}
}
@@ -4,7 +4,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class ToggleInLiteralsOnlyAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class ToggleInLiteralsOnlyAction extends EditorHeaderToggleAction {
private static final String TEXT = "In &Literals Only";
public ToggleInLiteralsOnlyAction(EditorSearchComponent editorSearchComponent) {
@@ -13,11 +13,11 @@ public class ToggleInLiteralsOnlyAction extends EditorHeaderToggleAction implem
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isInStringLiteralsOnly();
return myEditorSearchComponent.getFindModel().isInStringLiteralsOnly();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setSearchContext(state ? FindModel.SearchContext.IN_STRING_LITERALS : FindModel.SearchContext.ANY);
myEditorSearchComponent.getFindModel().setSearchContext(state ? FindModel.SearchContext.IN_STRING_LITERALS : FindModel.SearchContext.ANY);
}
}
@@ -28,12 +28,12 @@ public class ToggleMatchCase extends EditorHeaderToggleAction {
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isCaseSensitive();
return myEditorSearchComponent.getFindModel().isCaseSensitive();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setCaseSensitive(state);
myEditorSearchComponent.getFindModel().setCaseSensitive(state);
FindSettings.getInstance().setLocalCaseSensitive(state);
}
}
@@ -19,7 +19,7 @@ import com.intellij.find.EditorSearchComponent;
import com.intellij.find.FindModel;
import com.intellij.openapi.actionSystem.AnActionEvent;
public class TogglePreserveCaseAction extends EditorHeaderToggleAction implements SecondaryHeaderAction {
public class TogglePreserveCaseAction extends EditorHeaderToggleAction {
private static final String TEXT = "Pr&eserve Case";
public TogglePreserveCaseAction(EditorSearchComponent editorSearchComponent) {
@@ -28,19 +28,18 @@ public class TogglePreserveCaseAction extends EditorHeaderToggleAction implemen
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isPreserveCase();
return myEditorSearchComponent.getFindModel().isPreserveCase();
}
@Override
public void update(AnActionEvent e) {
super.update(e);
FindModel findModel = getEditorSearchComponent().getFindModel();
e.getPresentation().setVisible(findModel.isReplaceState() && !findModel.isMultiline());
FindModel findModel = myEditorSearchComponent.getFindModel();
e.getPresentation().setEnabled(!findModel.isRegularExpressions());
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setPreserveCase(state);
myEditorSearchComponent.getFindModel().setPreserveCase(state);
}
}
@@ -26,12 +26,12 @@ public class ToggleRegex extends EditorHeaderToggleAction {
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isRegularExpressions();
return myEditorSearchComponent.getFindModel().isRegularExpressions();
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
final FindModel findModel = getEditorSearchComponent().getFindModel();
final FindModel findModel = myEditorSearchComponent.getFindModel();
findModel.setRegularExpressions(state);
if (state) {
findModel.setWholeWordsOnly(false);
@@ -12,19 +12,19 @@ public class ToggleSelectionOnlyAction extends EditorHeaderToggleAction {
@Override
public boolean isSelected(AnActionEvent e) {
return !getEditorSearchComponent().getFindModel().isGlobal();
return !myEditorSearchComponent.getFindModel().isGlobal();
}
@Override
public void update(AnActionEvent e) {
super.update(e);
final boolean replaceState = getEditorSearchComponent().getFindModel().isReplaceState();
final boolean replaceState = myEditorSearchComponent.getFindModel().isReplaceState();
e.getPresentation().setVisible(replaceState);
e.getPresentation().setEnabled(replaceState);
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
getEditorSearchComponent().getFindModel().setGlobal(!state);
myEditorSearchComponent.getFindModel().setGlobal(!state);
}
}
@@ -13,19 +13,19 @@ public class ToggleWholeWordsOnlyAction extends EditorHeaderToggleAction {
@Override
public boolean isSelected(AnActionEvent e) {
return getEditorSearchComponent().getFindModel().isWholeWordsOnly();
return myEditorSearchComponent.getFindModel().isWholeWordsOnly();
}
@Override
public void update(AnActionEvent e) {
super.update(e);
e.getPresentation().setEnabled(!getEditorSearchComponent().getFindModel().isRegularExpressions());
e.getPresentation().setVisible(!getEditorSearchComponent().getFindModel().isMultiline());
e.getPresentation().setEnabled(!myEditorSearchComponent.getFindModel().isRegularExpressions());
e.getPresentation().setVisible(!myEditorSearchComponent.getFindModel().isMultiline());
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
FindSettings.getInstance().setLocalWholeWordsOnly(state);
getEditorSearchComponent().getFindModel().setWholeWordsOnly(state);
myEditorSearchComponent.getFindModel().setWholeWordsOnly(state);
}
}
@@ -4,6 +4,7 @@ import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.PopupChooserBuilder;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.util.ui.JBUI;
import javax.swing.*;
import javax.swing.text.JTextComponent;
@@ -50,16 +51,10 @@ public class Utils {
public static void setSmallerFont(final JComponent component) {
if (SystemInfo.isMac) {
Font f = new JLabel(" ").getFont();
Font font = smaller(f);
component.setFont(font);
component.setFont(JBUI.Fonts.smallFont());
}
}
static Font smaller(Font f) {
return f.deriveFont(f.getStyle(), f.getSize() - 2);
}
public static void setSmallerFontForChildren(JComponent component) {
for (Component c : component.getComponents()) {
if (c instanceof JComponent) {
@@ -16,14 +16,9 @@
package com.intellij.find.editorHeaderActions;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.find.EditorSearchComponent;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.codeStyle.NameUtil;
import com.intellij.psi.impl.cache.impl.id.IdTableBuilding;
@@ -44,29 +39,23 @@ import java.util.HashSet;
import java.util.Set;
public class VariantsCompletionAction extends AnAction {
private Getter<JTextComponent> myTextField;
private final EditorSearchComponent myEditorSearchComponent;
private final JTextComponent myTextField;
public EditorSearchComponent getEditorSearchComponent() {
return myEditorSearchComponent;
}
public VariantsCompletionAction(EditorSearchComponent editorSearchComponent, Getter<JTextComponent> textField) {
myEditorSearchComponent = editorSearchComponent;
public VariantsCompletionAction(JTextComponent textField) {
myTextField = textField;
final AnAction action = ActionManager.getInstance().getAction(IdeActions.ACTION_CODE_COMPLETION);
setTextField(textField);
if (action != null) {
registerCustomShortcutSet(action.getShortcutSet(), getTextField());
registerCustomShortcutSet(action.getShortcutSet(), myTextField);
}
}
@Override
public void actionPerformed(final AnActionEvent e) {
final String prefix = getPrefix();
final Editor editor = e.getData(CommonDataKeys.EDITOR_EVEN_IF_INACTIVE);
if (editor == null) return;
final String prefix = myTextField.getText().substring(0, myTextField.getCaretPosition());
if (StringUtil.isEmpty(prefix)) return;
Editor editor = getEditorSearchComponent().getEditor();
if (editor != null) {
final String[] array = calcWords(prefix, editor);
if (array.length == 0) {
return;
@@ -84,28 +73,8 @@ public class VariantsCompletionAction extends AnAction {
list.setFont(editor.getColorsScheme().getFont(EditorFontType.PLAIN));
Utils.showCompletionPopup(
e.getInputEvent() instanceof MouseEvent ? getEditorSearchComponent().getToolbarComponent() : null,
list, null, getTextField(), null);
}
}
@Nullable
private String getPrefix() {
//Editor editor = myTextField.getEditor();
//if (editor != null){
// int offset = editor.getCaretModel().getOffset();
// return myTextField.getText().substring(0, offset);
//}
int offset = getTextField().getCaretPosition();
return getTextField().getText().substring(0, offset);
}
public JTextComponent getTextField() {
return myTextField.get();
}
public void setTextField(Getter<JTextComponent> textField) {
myTextField = textField;
e.getInputEvent() instanceof MouseEvent ? myTextField: null,
list, null, myTextField, null);
}
private static String[] calcWords(final String prefix, Editor editor) {
@@ -243,7 +243,7 @@ public class LivePreviewController implements LivePreview.Delegate, FindUtil.Rep
mySuppressUpdate = false;
}
if (myComponent != null) {
myComponent.addTextToRecent(myComponent.getReplaceField());
myComponent.addTextToRecent(myComponent.getReplaceTextComponent());
myComponent.clearUndoInTextFields();
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.actionSystem.ex;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class DefaultCustomComponentAction extends AnAction implements CustomComponentAction {
@NotNull private final JComponent myComponent;
public DefaultCustomComponentAction(@NotNull final JComponent component) {
myComponent = component;
}
@Override
public void actionPerformed(AnActionEvent e) {
//do nothing
}
@Override
public JComponent createCustomComponent(Presentation presentation) {
return myComponent;
}
}
@@ -25,6 +25,9 @@ import java.awt.event.FocusListener;
public class Wrapper extends JPanel implements NullableComponent {
private JComponent myVerticalSizeReferent;
private JComponent myHorizontalSizeReferent;
public Wrapper() {
setLayout(new BorderLayout());
setOpaque(false);
@@ -112,6 +115,27 @@ public class Wrapper extends JPanel implements NullableComponent {
}
}
public final Wrapper setVerticalSizeReferent(JComponent verticalSizeReferent) {
myVerticalSizeReferent = verticalSizeReferent;
return this;
}
public final Wrapper setHorizontalSizeReferent(JComponent horizontalSizeReferent) {
myHorizontalSizeReferent = horizontalSizeReferent;
return this;
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
if (myHorizontalSizeReferent != null && myHorizontalSizeReferent.isShowing()) {
size.width = Math.max(size.width, myHorizontalSizeReferent.getPreferredSize().width);
}
if (myVerticalSizeReferent != null && myVerticalSizeReferent.isShowing()) {
size.height = Math.max(size.height, myVerticalSizeReferent.getPreferredSize().height);
}
return size;
}
public static class FocusHolder extends Wrapper implements FocusListener {
@@ -177,6 +201,7 @@ public class Wrapper extends JPanel implements NullableComponent {
@Override
public void focusLost(final FocusEvent e) {
}
}
public static class North extends Wrapper {
@@ -115,6 +115,8 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
private Rectangle myAutoPopupRec;
private final DefaultActionGroup mySecondaryActions = new DefaultActionGroup();
private PopupStateModifier mySecondaryButtonPopupStateModifier = null;
private boolean myForceMinimumSize = false;
private boolean myMinimalMode;
private boolean myForceUseMacEnhancements;
@@ -264,6 +266,10 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
}
}
public void setSecondaryButtonPopupStateModifier(PopupStateModifier popupStateModifier) {
mySecondaryButtonPopupStateModifier = popupStateModifier;
}
private void fillToolBar(final List<AnAction> actions, boolean layoutSecondaries) {
final List<AnAction> rightAligned = new ArrayList<AnAction>();
if (myAddSeparatorFirst) {
@@ -304,7 +310,15 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
}
if (mySecondaryActions.getChildrenCount() > 0) {
mySecondaryActionsButton = new ActionButton(mySecondaryActions, myPresentationFactory.getPresentation(mySecondaryActions), myPlace, getMinimumButtonSize());
mySecondaryActionsButton = new ActionButton(mySecondaryActions, myPresentationFactory.getPresentation(mySecondaryActions), myPlace, getMinimumButtonSize()) {
@Override
@ButtonState
public int getPopState() {
return mySecondaryButtonPopupStateModifier != null && mySecondaryButtonPopupStateModifier.willModify()
? mySecondaryButtonPopupStateModifier.getModifiedPopupState()
: super.getPopState();
}
};
mySecondaryActionsButton.setNoIconsInPopup(true);
add(mySecondaryActionsButton);
}
@@ -788,9 +802,15 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
return dimension;
}
public void setForceMinimumSize(boolean force) {
myForceMinimumSize = force;
}
@Override
public Dimension getMinimumSize() {
if (myForceMinimumSize) {
return getPreferredSize();
}
if (myLayoutPolicy == AUTO_LAYOUT_POLICY) {
final Insets i = getInsets();
return new Dimension(AllIcons.Ide.Link.getIconWidth() + i.left + i.right, myMinimumButtonSize.height + i.top + i.bottom);
@@ -1323,4 +1343,10 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar {
public Presentation getPresentation(AnAction action) {
return myPresentationFactory.getPresentation(action);
}
public interface PopupStateModifier {
@ActionButtonComponent.ButtonState
int getModifiedPopupState();
boolean willModify();
}
}