AwtVisitor -> uiTraverser()

This commit is contained in:
Gregory.Shrago
2016-05-24 21:47:14 +03:00
parent c2c3b563c6
commit 3e377e0fc4
8 changed files with 73 additions and 201 deletions
@@ -29,7 +29,7 @@ import com.intellij.ui.components.panels.NonOpaquePanel;
import com.intellij.ui.components.panels.VerticalBox;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.util.containers.HashMap;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -201,26 +201,19 @@ class TrafficProgressPanel extends JPanel {
}
private void resetProgressBars(final boolean enabled, @Nullable final Boolean completed) {
new AwtVisitor(myPassStatuses) {
@Override
public boolean visit(Component component) {
if (component instanceof JProgressBar) {
JProgressBar progress = (JProgressBar)component;
progress.setEnabled(enabled);
if (completed != null) {
if (completed) {
progress.setValue(TrafficLightRenderer.MAX);
myProgressToText.get(progress).setText(MAX_TEXT);
}
else {
progress.setValue(0);
myProgressToText.get(progress).setText(MIN_TEXT);
}
}
for (JProgressBar progress : UIUtil.uiTraverser(myPassStatuses).traverse().filter(JProgressBar.class)) {
progress.setEnabled(enabled);
if (completed != null) {
if (completed) {
progress.setValue(TrafficLightRenderer.MAX);
myProgressToText.get(progress).setText(MAX_TEXT);
}
else {
progress.setValue(0);
myProgressToText.get(progress).setText(MIN_TEXT);
}
return false;
}
};
}
}
private void rebuildPassesProgress(@NotNull TrafficLightRenderer.DaemonCodeAnalyzerStatus status) {
@@ -48,7 +48,6 @@ import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.Alarm;
import com.intellij.util.ArrayUtil;
import com.intellij.util.TimeoutUtil;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.DialogUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
@@ -898,32 +897,24 @@ public abstract class DialogWrapper {
}
public static void unregisterKeyboardActions(final JRootPane rootPane) {
new AwtVisitor(rootPane) {
@Override
public boolean visit(final Component component) {
if (component instanceof JComponent) {
final JComponent eachComp = (JComponent)component;
final ActionMap actionMap = eachComp.getActionMap();
final KeyStroke[] strokes = eachComp.getRegisteredKeyStrokes();
for (KeyStroke eachStroke : strokes) {
boolean remove = true;
if (actionMap != null) {
for (int i : new int[]{JComponent.WHEN_FOCUSED, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, JComponent.WHEN_IN_FOCUSED_WINDOW}) {
final InputMap inputMap = eachComp.getInputMap(i);
final Object key = inputMap.get(eachStroke);
if (key != null) {
final Action action = actionMap.get(key);
if (action instanceof UIResource) remove = false;
}
}
for (JComponent eachComp : UIUtil.uiTraverser(rootPane).traverse().filter(JComponent.class)) {
ActionMap actionMap = eachComp.getActionMap();
KeyStroke[] strokes = eachComp.getRegisteredKeyStrokes();
for (KeyStroke eachStroke : strokes) {
boolean remove = true;
if (actionMap != null) {
for (int i : new int[]{JComponent.WHEN_FOCUSED, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, JComponent.WHEN_IN_FOCUSED_WINDOW}) {
final InputMap inputMap = eachComp.getInputMap(i);
final Object key = inputMap.get(eachStroke);
if (key != null) {
final Action action = actionMap.get(key);
if (action instanceof UIResource) remove = false;
}
if (remove) eachComp.unregisterKeyboardAction(eachStroke);
}
}
return false;
if (remove) eachComp.unregisterKeyboardAction(eachStroke);
}
};
}
}
@@ -18,9 +18,7 @@ package com.intellij.openapi.ui;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.util.Ref;
import com.intellij.ui.switcher.QuickActionProvider;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
@@ -107,25 +105,8 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider
}
public List<AnAction> getActions(boolean originalProvider) {
final Ref<ActionToolbar> toolbar = new Ref<ActionToolbar>();
if (myToolbar != null) {
new AwtVisitor(myToolbar) {
@Override
public boolean visit(Component component) {
if (component instanceof ActionToolbar) {
toolbar.set((ActionToolbar)component);
return true;
}
return false;
}
};
}
if (toolbar.get() != null) {
return toolbar.get().getActions(originalProvider);
}
return null;
ActionToolbar toolbar = UIUtil.uiTraverser(myToolbar).traverse().filter(ActionToolbar.class).first();
return toolbar == null ? null : toolbar.getActions(originalProvider);
}
public JComponent getComponent() {
@@ -58,7 +58,6 @@ import com.intellij.ui.tabs.impl.JBEditorTabs;
import com.intellij.ui.tabs.impl.JBTabsImpl;
import com.intellij.util.BitUtil;
import com.intellij.util.Consumer;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.TimedDeadzone;
import com.intellij.util.ui.UIUtil;
@@ -74,7 +73,6 @@ import java.awt.datatransfer.Transferable;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -581,43 +579,26 @@ public final class EditorTabbedContainer implements Disposable, CloseAction.Clos
private class MySwitchProvider implements SwitchProvider {
@Override
public List<SwitchTarget> getTargets(final boolean onlyVisible, boolean originalProvider) {
final ArrayList<SwitchTarget> result = new ArrayList<SwitchTarget>();
TabInfo selected = myTabs.getSelectedInfo();
new AwtVisitor(selected.getComponent()) {
@Override
public boolean visit(Component component) {
if (component instanceof JBTabs) {
JBTabs tabs = (JBTabs)component;
if (tabs != myTabs) {
result.addAll(tabs.getTargets(onlyVisible, false));
return true;
}
}
return false;
}
};
return result;
if (selected == null) return null;
return UIUtil.uiTraverser(selected.getComponent())
.traverse()
.filter(JBTabs.class)
.filter(Conditions.notEqualTo(myTabs))
.flatten(o -> o.getTargets(onlyVisible, false))
.toList();
}
@Override
public SwitchTarget getCurrentTarget() {
TabInfo selected = myTabs.getSelectedInfo();
final Ref<SwitchTarget> targetRef = new Ref<SwitchTarget>();
new AwtVisitor(selected.getComponent()) {
@Override
public boolean visit(Component component) {
if (component instanceof JBTabs) {
JBTabs tabs = (JBTabs)component;
if (tabs != myTabs) {
targetRef.set(tabs.getCurrentTarget());
return true;
}
}
return false;
}
};
return targetRef.get();
if (selected == null) return null;
JBTabs tabs = UIUtil.uiTraverser(selected.getComponent())
.traverse()
.filter(JBTabs.class)
.filter(Conditions.notEqualTo(myTabs))
.first();
return tabs == null ? null : tabs.getCurrentTarget();
}
@Override
@@ -339,26 +339,22 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui {
MnemonicHelper.init(content);
if (!myDialogMode) {
new AwtVisitor(content) {
@Override
public boolean visit(Component component) {
if (component instanceof JLabel) {
JLabel label = (JLabel)component;
if (label.getDisplayedMnemonic() != '\0' || label.getDisplayedMnemonicIndex() >= 0) {
myDialogMode = true;
return true;
}
for (Component component : UIUtil.uiTraverser(myContent)) {
if (component instanceof JLabel) {
JLabel label = (JLabel)component;
if (label.getDisplayedMnemonic() != '\0' || label.getDisplayedMnemonicIndex() >= 0) {
myDialogMode = true;
break;
}
else if (component instanceof JCheckBox) {
JCheckBox checkBox = (JCheckBox)component;
if (checkBox.getMnemonic() >= 0 || checkBox.getDisplayedMnemonicIndex() >= 0) {
myDialogMode = true;
return true;
}
}
return false;
}
};
else if (component instanceof JCheckBox) {
JCheckBox checkBox = (JCheckBox)component;
if (checkBox.getMnemonic() >= 0 || checkBox.getDisplayedMnemonicIndex() >= 0) {
myDialogMode = true;
break;
}
}
}
}
myShadow = shadow;
@@ -369,13 +365,9 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui {
myAnimationCycle = animationCycle;
if (smallVariant) {
new AwtVisitor(myContent) {
@Override
public boolean visit(Component component) {
UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, component);
return false;
}
};
for (Component component : UIUtil.uiTraverser(myContent)) {
UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, component);
}
}
}
@@ -584,19 +576,9 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui {
}
if (myHideOnLinkClick) {
final Ref<JEditorPane> ref = Ref.create(null);
new AwtVisitor(myContent) {
@Override
public boolean visit(Component component) {
if (component instanceof JEditorPane) {
ref.set((JEditorPane)component);
return true;
}
return false;
}
};
if (!ref.isNull()) {
ref.get().addHyperlinkListener(new HyperlinkAdapter() {
JEditorPane editorPane = UIUtil.uiTraverser(myContent).traverse().filter(JEditorPane.class).first();
if (editorPane != null) {
editorPane.addHyperlinkListener(new HyperlinkAdapter() {
@Override
protected void hyperlinkActivated(HyperlinkEvent e) {
hide();
@@ -19,7 +19,7 @@ import com.intellij.ide.IdeTooltipManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
@@ -171,14 +171,11 @@ public class HintHint {
public void initStyle(Component c, boolean includeChildren) {
if (includeChildren) {
new AwtVisitor(c) {
@Override
public boolean visit(Component component) {
doInit(component);
return false;
}
};
} else {
for (Component component : UIUtil.uiTraverser(c)) {
doInit(component);
}
}
else {
doInit(c);
}
}
@@ -26,7 +26,7 @@ import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.SeparatorWithText;
import com.intellij.ui.components.panels.VerticalBox;
import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -299,15 +299,11 @@ public class QuickAccessConfigurable extends JPanel implements SearchableConfigu
}
private void processEnabled() {
new AwtVisitor(this) {
@Override
public boolean visit(Component component) {
if (component != myEnabled) {
component.setEnabled(myQaEnabled);
}
return false;
for (Component component : UIUtil.uiTraverser(this)) {
if (component != myEnabled) {
component.setEnabled(myQaEnabled);
}
};
}
}
private class ModifierBox extends JCheckBox {
@@ -1,49 +0,0 @@
/*
* Copyright 2000-2009 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.util.ui;
import java.awt.*;
/**
* AWT components hierarchy visitor
*
* @author spleaner
*/
public abstract class AwtVisitor {
protected AwtVisitor(Component component) {
_accept(component);
}
private boolean _accept(Component component) {
boolean shouldStop = visit(component);
if (shouldStop) return shouldStop;
if (component instanceof Container) {
Component[] kids = ((Container) component).getComponents();
for (Component each : kids) {
shouldStop = _accept(each);
if (shouldStop) return shouldStop;
}
}
return false;
}
public abstract boolean visit(Component component);
}