import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.Set;
public class GridCellImpl implements GridCell, Disposable {
}
}).setSideComponentVertical(!context.getLayoutSettings().isToolbarHorizontal())
.setStealthTabMode(true)
- .setFocusCycle(false).setPaintFocus(true);
+ .setFocusCycle(false).setPaintFocus(true).setProvideSwitchTargets(false);
myTabs.addTabMouseListener(new MouseAdapter() {
public void mousePressed(final MouseEvent e) {
}
public java.util.List<SwitchTarget> getTargets(boolean onlyVisible) {
- return myTabs.getTargets(onlyVisible);
+ return myTabs.getTargets(onlyVisible, false);
}
public SwitchTarget getTargetForSelection() {
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.ToolWindow;
-import com.intellij.ui.awt.RelativeRectangle;
import com.intellij.ui.components.panels.NonOpaquePanel;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.ui.content.*;
}
return null;
}
- }).setInnerInsets(new Insets(1, 0, 0, 0)).setToDrawBorderIfTabsHidden(false).setUiDecorator(new UiDecorator() {
+ }).setProvideSwitchTargets(false).setInnerInsets(new Insets(1, 0, 0, 0)).setToDrawBorderIfTabsHidden(false).setUiDecorator(new UiDecorator() {
@NotNull
public UiDecoration getDecoration() {
return new UiDecoration(null, new Insets(1, 8, 1, 8));
return cell != null ? cell : myTabs.getCurrentTarget();
}
- public List<SwitchTarget> getTargets(boolean onlyVisible) {
+ public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) {
List<SwitchTarget> result = new ArrayList<SwitchTarget>();
- result.addAll(myTabs.getTargets(true));
+ result.addAll(myTabs.getTargets(true, false));
result.addAll(getSelectedGrid().getTargets(onlyVisible));
Iterator<Wrapper> toolbars = myMinimizedButtonsPlaceholder.values().iterator();
JComponent target = each.getTargetComponent();
if (target instanceof ActionToolbar) {
ActionToolbar tb = (ActionToolbar)target;
- result.addAll(tb.getTargets(onlyVisible));
+ result.addAll(tb.getTargets(onlyVisible, false));
}
}
DataKey<SwitchProvider> KEY = DataKey.create("SwitchProvider");
- List<SwitchTarget> getTargets(boolean onlyVisible);
+ List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider);
SwitchTarget getCurrentTarget();
JComponent getComponent();
package com.intellij.ui.switcher;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.AbstractPainter;
-import com.intellij.openapi.ui.Painter;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.IdeGlassPane;
import com.intellij.openapi.wm.IdeGlassPaneUtil;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.List;
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
- myTargets = myProvider.getTargets(true);
+ myTargets = myProvider.getTargets(true, true);
Component eachParent = myProvider.getComponent();
eachParent = eachParent.getParent();
while (eachParent != null) {
if (eachParent instanceof SwitchProvider) {
SwitchProvider eachProvider = (SwitchProvider)eachParent;
- myTargets.addAll(eachProvider.getTargets(true));
+ myTargets.addAll(eachProvider.getTargets(true, false));
if (eachProvider.isCycleRoot()) {
break;
}
JBTabs setNavigationActionsEnabled(boolean enabled);
boolean isDisposed();
+
+ JBTabs setAdditinalSwitchProviderWhenOriginal(SwitchProvider delegate);
}
private boolean myUseBufferedPaint = true;
private boolean myOwnSwitchProvider = true;
+ private SwitchProvider mySwitchDelegate;
public JBTabsImpl(@NotNull Project project) {
this(project, project);
return myDisposed;
}
+ public JBTabs setAdditinalSwitchProviderWhenOriginal(SwitchProvider delegate) {
+ mySwitchDelegate = delegate;
+ return this;
+ }
+
public void dispose() {
myDisposed = true;
mySelectedInfo = null;
repaint();
}
- public List<SwitchTarget> getTargets(boolean onlyVisible) {
+ public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) {
ArrayList<SwitchTarget> result = new ArrayList<SwitchTarget>();
for (TabInfo each : myVisibleInfos) {
result.add(new TabTarget(each));
}
+
+ if (originalProvider && mySwitchDelegate != null) {
+ List<SwitchTarget> additional = mySwitchDelegate.getTargets(onlyVisible, false);
+ if (additional != null) {
+ result.addAll(additional);
+ }
+ }
+
return result;
}
public SwitchTarget getCurrentTarget() {
+ if (mySwitchDelegate != null) {
+ SwitchTarget selection = mySwitchDelegate.getCurrentTarget();
+ if (selection != null) return selection;
+ }
+
return new TabTarget(getSelectedInfo());
}
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.awt.RelativeRectangle;
-import com.intellij.ui.switcher.SwitchProvider;
import com.intellij.ui.switcher.SwitchTarget;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.update.UiNotifyConnector;
}
}
- public List<SwitchTarget> getTargets(boolean onlyVisible) {
+ public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) {
ArrayList<SwitchTarget> result = new ArrayList<SwitchTarget>();
if ((getBounds().width * getBounds().height) <= 0) return result;
import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.switcher.SwitchProvider;
+import com.intellij.ui.switcher.SwitchTarget;
import com.intellij.ui.tabs.*;
import com.intellij.ui.tabs.impl.JBTabsImpl;
+import com.intellij.util.ui.AwtVisitor;
import com.intellij.util.ui.TimedDeadzone;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
newEditor.selectNotify();
}
}
- });
+ }).setAdditinalSwitchProviderWhenOriginal(new MySwitchProvider());
setTabPlacement(UISettings.getInstance().EDITOR_TAB_PLACEMENT);
public void setBackgroundColorAt(final int index, final Color color) {
myTabs.getTabAt(index).setTabColor(color);
}
-
+
public void setTabLayoutPolicy(final int policy) {
switch (policy) {
case JTabbedPane.SCROLL_TAB_LAYOUT:
TabInfo tab = myTabs.findInfo(file);
if (tab != null) return;
- tab = new TabInfo(comp).setText(calcTabTitle(myProject, file)).setIcon(icon).setTooltipText(tooltip).setObject(file).setTabColor(calcTabColor(myProject, file));
+ tab = new TabInfo(comp).setText(calcTabTitle(myProject, file)).setIcon(icon).setTooltipText(tooltip).setObject(file)
+ .setTabColor(calcTabColor(myProject, file));
tab.setTestableUi(new MyQueryable(tab));
final DefaultActionGroup tabActions = new DefaultActionGroup();
final VirtualFile file = (VirtualFile)myTabInfo.getObject();
if (ActionPlaces.EDITOR_TAB.equals(e.getPlace())) {
window = myWindow;
- } else {
+ }
+ else {
window = mgr.getCurrentWindow();
}
}
}
}
+
+ private class MySwitchProvider implements SwitchProvider {
+ 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;
+ }
+
+ 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();
+ }
+
+ public JComponent getComponent() {
+ return null;
+ }
+
+ public boolean isCycleRoot() {
+ return false;
+ }
+ }
}
}
- public List<SwitchTarget> getTargets(boolean onlyVisible) {
+ public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) {
List<SwitchTarget> result = new ArrayList<SwitchTarget>();
if (myType == ToolWindowContentUiType.TABBED) {
return null;
}
- public List<SwitchTarget> getTargets(boolean onlyVisible) {
+ public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) {
if (myUI instanceof SwitchProvider) {
- return ((SwitchProvider)myUI).getTargets(onlyVisible);
+ return ((SwitchProvider)myUI).getTargets(onlyVisible, false);
}
return new ArrayList<SwitchTarget>();
}