This commit is contained in:
Alexey Kudravtsev
2012-10-16 19:08:59 +04:00
parent b7244a22b7
commit f2298c83e8
13 changed files with 180 additions and 86 deletions
@@ -47,7 +47,7 @@ public interface RunnerLayoutUi {
Content addContent(@NotNull Content content);
@NotNull
Content addContent(@NotNull Content content, int defaultTabId, PlaceInGrid defaultPlace, boolean defaultIsMinimized);
Content addContent(@NotNull Content content, int defaultTabId, @NotNull PlaceInGrid defaultPlace, boolean defaultIsMinimized);
@NotNull
Content createContent(@NotNull String contentId, @NotNull JComponent component, @NotNull String displayName, @Nullable Icon icon, @Nullable JComponent toFocus);
@@ -60,15 +60,18 @@ public interface RunnerLayoutUi {
@Nullable
Content findContent(@NotNull String contentId);
@NotNull
ActionCallback selectAndFocus(@Nullable Content content, boolean requestFocus, final boolean forced);
@NotNull
ActionCallback selectAndFocus(@Nullable Content content, boolean requestFocus, final boolean forced, final boolean implicit);
@NotNull
RunnerLayoutUi addListener(@NotNull ContentManagerListener listener, @NotNull Disposable parent);
void removeListener(@NotNull final ContentManagerListener listener);
void attractBy(@NotNull String condition);
void clearAttractionBy(final String condition);
void clearAttractionBy(@NotNull String condition);
void setBouncing(@NotNull Content content, final boolean activate);
@@ -79,6 +82,7 @@ public interface RunnerLayoutUi {
void updateActionsNow();
@NotNull
Content[] getContents();
abstract class Factory {
@@ -89,6 +93,7 @@ public interface RunnerLayoutUi {
return ServiceManager.getService(project, Factory.class);
}
@NotNull
public abstract RunnerLayoutUi create(@NotNull String runnerId, @NotNull String runnerTitle, @NotNull String sessionName, @NotNull Disposable parent);
}
@@ -20,14 +20,17 @@ import com.intellij.execution.ui.layout.ViewContext;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Toggleable;
import com.intellij.ui.content.Content;
import org.jetbrains.annotations.NotNull;
public class AbstractFocusOnAction extends BaseViewAction implements Toggleable {
@NotNull
private final String myCondition;
public AbstractFocusOnAction(String condition) {
public AbstractFocusOnAction(@NotNull String condition) {
myCondition = condition;
}
@Override
protected void update(final AnActionEvent e, final ViewContext context, final Content[] content) {
final boolean visible = content.length == 1;
e.getPresentation().setVisible(visible);
@@ -40,6 +43,7 @@ public class AbstractFocusOnAction extends BaseViewAction implements Toggleable
return context.getRunnerLayoutUi().getOptions().isToFocus(content[0], myCondition);
}
@Override
protected void actionPerformed(final AnActionEvent e, final ViewContext context, final Content[] content) {
final boolean toFocus = isToFocus(context, content);
context.getRunnerLayoutUi().getOptions().setToFocus(toFocus ? null : content[0], myCondition);
@@ -22,11 +22,12 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public interface LayoutStateDefaults {
@NotNull //this
LayoutStateDefaults initTabDefaults(int tabId, @Nullable String defaultTabText, @Nullable Icon defaultTabIcon);
LayoutStateDefaults initFocusContent(@NotNull String id, final String condition);
LayoutStateDefaults initFocusContent(@NotNull String id, final String condition, @NotNull final LayoutAttractionPolicy policy);
@NotNull // this
LayoutStateDefaults initFocusContent(@NotNull String id, @NotNull String condition);
@NotNull //this
LayoutStateDefaults initFocusContent(@NotNull String id, @NotNull String condition, @NotNull final LayoutAttractionPolicy policy);
}
@@ -29,6 +29,7 @@ public interface LayoutViewOptions {
@NotNull
LayoutViewOptions setTopToolbar(@NotNull ActionGroup actions, @NotNull String place);
@NotNull
LayoutViewOptions setLeftToolbar(@NotNull ActionGroup leftToolbar, @NotNull String place);
@NotNull
@@ -39,17 +40,23 @@ public interface LayoutViewOptions {
@NotNull
LayoutViewOptions setAttractionPolicy(@NotNull String contentId, LayoutAttractionPolicy policy);
@NotNull
LayoutViewOptions setConditionAttractionPolicy(@NotNull String condition, LayoutAttractionPolicy policy);
boolean isToFocus(Content content, final String condition);
boolean isToFocus(@NotNull Content content, @NotNull String condition);
LayoutViewOptions setToFocus(@Nullable Content content, final String condition);
@NotNull
LayoutViewOptions setToFocus(@Nullable Content content, @NotNull String condition);
AnAction getLayoutActions();
@NotNull
AnAction[] getLayoutActionsList();
LayoutViewOptions setAdditionalFocusActions(ActionGroup group);
@NotNull
LayoutViewOptions setAdditionalFocusActions(@NotNull ActionGroup group);
AnAction getSettingsActions();
@NotNull
AnAction[] getSettingsActionsList();
}
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable;
public class ToggleToolbarLayoutAction extends ToggleAction {
@Override
public void update(final AnActionEvent e) {
if (getRunnerUi(e) == null) {
e.getPresentation().setEnabled(false);
@@ -31,11 +32,13 @@ public class ToggleToolbarLayoutAction extends ToggleAction {
}
}
@Override
public boolean isSelected(final AnActionEvent e) {
final RunnerContentUi ui = getRunnerUi(e);
return ui != null ? ui.isHorizontalToolbar() : false;
return ui != null && ui.isHorizontalToolbar();
}
@Override
public void setSelected(final AnActionEvent e, final boolean state) {
getRunnerUi(e).setHorizontalToolbar(state);
}
@@ -69,18 +69,19 @@ import java.util.concurrent.CopyOnWriteArraySet;
public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Facade, ViewContextEx, PropertyChangeListener, SwitchProvider,
QuickActionProvider, DockContainer.Dialog {
public static final DataKey<RunnerContentUi> KEY = DataKey.create("DebuggerContentUI");
@NonNls public static final String LAYOUT = "Runner.Layout";
@NonNls public static final String SETTINGS = "XDebugger.Settings";
@NonNls public static final String VIEW_POPUP = "Runner.View.Popup";
@NonNls public static final String VIEW_TOOLBAR = "Runner.View.Toolbar";
@NonNls private static final String LAYOUT = "Runner.Layout";
@NonNls private static final String SETTINGS = "XDebugger.Settings";
@NonNls private static final String VIEW_POPUP = "Runner.View.Popup";
@NonNls static final String VIEW_TOOLBAR = "Runner.View.Toolbar";
ContentManager myManager;
RunnerLayout myLayoutSettings;
private ContentManager myManager;
private final RunnerLayout myLayoutSettings;
ActionManager myActionManager;
String mySessionName;
MyComponent myComponent = new MyComponent();
private final ActionManager myActionManager;
private final String mySessionName;
private final MyComponent myComponent = new MyComponent();
private final Wrapper myToolbar = new Wrapper();
final MyDragOutDelegate myDragOutDelegate = new MyDragOutDelegate();
@@ -96,20 +97,19 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return index1 - index2;
}
};
Project myProject;
private final Project myProject;
ActionGroup myTopActions = new DefaultActionGroup();
private ActionGroup myTopActions = new DefaultActionGroup();
DefaultActionGroup myMinimizedViewActions = new DefaultActionGroup();
private final DefaultActionGroup myMinimizedViewActions = new DefaultActionGroup();
Map<GridImpl, Wrapper> myMinimizedButtonsPlaceholder = new HashMap<GridImpl, Wrapper>();
Map<GridImpl, Wrapper> myCommonActionsPlaceholder = new HashMap<GridImpl, Wrapper>();
Map<GridImpl, AnAction[]> myContextActions = new HashMap<GridImpl, AnAction[]>();
private final Map<GridImpl, Wrapper> myMinimizedButtonsPlaceholder = new HashMap<GridImpl, Wrapper>();
private final Map<GridImpl, Wrapper> myCommonActionsPlaceholder = new HashMap<GridImpl, Wrapper>();
private final Map<GridImpl, AnAction[]> myContextActions = new HashMap<GridImpl, AnAction[]>();
boolean myUiLastStateWasRestored;
private boolean myUiLastStateWasRestored;
private final Set<Object> myRestoreStateRequestors = new HashSet<Object>();
public static final DataKey<RunnerContentUi> KEY = DataKey.create("DebuggerContentUI");
private String myActionsPlace = ActionPlaces.UNKNOWN;
private final IdeFocusManager myFocusManager;
@@ -132,8 +132,8 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private Image myCurrentOverImg;
private TabInfo myCurrentOverInfo;
private RunnerContentUi myOriginal;
private CopyOnWriteArraySet<Listener> myDockingListeners = new CopyOnWriteArraySet<Listener>();
private Set<RunnerContentUi> myChildren = new TreeSet<RunnerContentUi>(new Comparator<RunnerContentUi>() {
private final CopyOnWriteArraySet<Listener> myDockingListeners = new CopyOnWriteArraySet<Listener>();
private final Set<RunnerContentUi> myChildren = new TreeSet<RunnerContentUi>(new Comparator<RunnerContentUi>() {
@Override
public int compare(RunnerContentUi o1, RunnerContentUi o2) {
return o1.myWindow - o2.myWindow;
@@ -142,12 +142,12 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
private int myWindow;
private boolean myDisposing;
public RunnerContentUi(Project project,
RunnerLayoutUi ui,
ActionManager actionManager,
IdeFocusManager focusManager,
RunnerLayout settings,
String sessionName) {
public RunnerContentUi(@NotNull Project project,
@NotNull RunnerLayoutUi ui,
@NotNull ActionManager actionManager,
@NotNull IdeFocusManager focusManager,
@NotNull RunnerLayout settings,
@NotNull String sessionName) {
myProject = project;
myRunnerUi = ui;
myLayoutSettings = settings;
@@ -156,7 +156,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
myFocusManager = focusManager;
}
public RunnerContentUi(RunnerContentUi ui, RunnerContentUi original, int window) {
public RunnerContentUi(@NotNull RunnerContentUi ui, @NotNull RunnerContentUi original, int window) {
this(ui.myProject, ui.myRunnerUi, ui.myActionManager, ui.myFocusManager, ui.myLayoutSettings, ui.mySessionName);
myOriginal = original;
original.myChildren.add(this);
@@ -1282,7 +1282,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
processAttraction(content.getUserData(ViewImpl.ID), myAttractions, new LayoutAttractionPolicy.Bounce(), afterInitialized, true);
}
public void attractByCondition(String condition, boolean afterInitialized) {
public void attractByCondition(@NotNull String condition, boolean afterInitialized) {
processAttraction(myLayoutSettings.getToFocus(condition), myConditionAttractions, myLayoutSettings.getAttractionPolicy(condition),
afterInitialized, true);
}
@@ -1639,8 +1639,8 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
}
class DockableGrid implements DockableContent<List<Content>> {
final Image myImg;
private Presentation myPresentation;
private final Image myImg;
private final Presentation myPresentation;
private final Dimension myPreferredSize;
private final List<Content> myContents;
private final int myWindow;
@@ -1653,6 +1653,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
myWindow = window;
}
@NotNull
@Override
public List<Content> getKey() {
return myContents;
@@ -1686,6 +1687,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return myOriginal != null ? myOriginal : RunnerContentUi.this;
}
@NotNull
public List<Content> getContents() {
return myContents;
}
@@ -52,7 +52,7 @@ public class RunnerLayout {
private final Map<String, Pair<String, LayoutAttractionPolicy>> myDefaultFocus = new HashMap<String, Pair<String, LayoutAttractionPolicy>>();
public RunnerLayout(final String ID) {
public RunnerLayout(@NotNull String ID) {
myID = ID;
}
@@ -72,17 +72,17 @@ public class RunnerLayout {
return tab;
}
@NotNull
private TabImpl createNewTab(final int index) {
final TabImpl tab;
final TabImpl.Default defaultTab = getOrCreateDefaultTab(index);
tab = defaultTab.createTab();
final TabImpl tab = defaultTab.createTab();
myTabs.add(tab);
return tab;
}
@NotNull
private TabImpl.Default getOrCreateDefaultTab(final int index) {
TabImpl.Default tab = myDefaultTabs.get(index);
if (tab == null) {
@@ -92,6 +92,7 @@ public class RunnerLayout {
return tab;
}
@NotNull
public TabImpl createNewTab() {
int index = 0;
for (TabImpl each : myTabs) {
@@ -108,7 +109,7 @@ public class RunnerLayout {
return createNewTab(index);
}
private boolean isUsed(TabImpl tab) {
private boolean isUsed(@NotNull TabImpl tab) {
for (ViewImpl each : myViews.values()) {
if (each.getTab() == tab) return true;
}
@@ -125,15 +126,17 @@ public class RunnerLayout {
return null;
}
@NotNull
public Element getState() {
return write(new Element("layout"));
}
public void loadState(final Element state) {
public void loadState(@NotNull Element state) {
read(state);
}
public Element read(final Element parentNode) {
@NotNull
public Element read(@NotNull Element parentNode) {
List tabs = parentNode.getChildren(StringUtil.getShortName(TabImpl.class.getName()));
for (Object eachTabElement : tabs) {
TabImpl eachTab = new TabImpl((Element)eachTabElement);
@@ -151,7 +154,8 @@ public class RunnerLayout {
return parentNode;
}
public Element write(final Element parentNode) {
@NotNull
public Element write(@NotNull Element parentNode) {
for (ViewImpl eachState : myViews.values()) {
eachState.write(parentNode);
}
@@ -181,11 +185,12 @@ public class RunnerLayout {
myGeneral.horizontalToolbar = horizontal;
}
public ViewImpl getStateFor(Content content) {
@NotNull
public ViewImpl getStateFor(@NotNull Content content) {
return getOrCreateView(getOrCreateContentId(content));
}
public void clearStateFor(Content content) {
public void clearStateFor(@NotNull Content content) {
final ViewImpl view = myViews.remove(getOrCreateContentId(content));
if (view != null) {
final Tab tab = view.getTab();
@@ -195,7 +200,8 @@ public class RunnerLayout {
}
}
private static String getOrCreateContentId(final Content content) {
@NotNull
private static String getOrCreateContentId(@NotNull Content content) {
@NonNls String id = content.getUserData(ViewImpl.ID);
if (id == null) {
id = "UnknownView-" + content.getDisplayName();
@@ -204,71 +210,71 @@ public class RunnerLayout {
return id;
}
private ViewImpl getOrCreateView(String id) {
@NotNull
private ViewImpl getOrCreateView(@NotNull String id) {
if (myViews.containsKey(id)) {
return myViews.get(id);
} else {
final ViewImpl.Default defaultView = getOrCreateDefault(id);
final ViewImpl view = defaultView.createView(this);
myViews.put(id, view);
return view;
}
final ViewImpl.Default defaultView = getOrCreateDefault(id);
final ViewImpl view = defaultView.createView(this);
myViews.put(id, view);
return view;
}
private ViewImpl.Default getOrCreateDefault(String id) {
@NotNull
private ViewImpl.Default getOrCreateDefault(@NotNull String id) {
if (myDefaultViews.containsKey(id)) {
return myDefaultViews.get(id);
} else {
return setDefault(id, Integer.MAX_VALUE, PlaceInGrid.bottom, false);
}
return setDefault(id, Integer.MAX_VALUE, PlaceInGrid.bottom, false);
}
@NotNull
public TabImpl.Default setDefault(int tabID, String displayName, Icon icon) {
final TabImpl.Default tab = new TabImpl.Default(tabID, displayName, icon);
myDefaultTabs.put(tabID, tab);
return tab;
}
public ViewImpl.Default setDefault(String id, int tabIndex, PlaceInGrid placeInGrid, boolean isMinimized) {
@NotNull
public ViewImpl.Default setDefault(@NotNull String id, int tabIndex, @NotNull PlaceInGrid placeInGrid, boolean isMinimized) {
final ViewImpl.Default view = new ViewImpl.Default(id, tabIndex, placeInGrid, isMinimized);
myDefaultViews.put(id, view);
return view;
}
public PlaceInGrid getDefaultGridPlace(final Content content) {
@NotNull
public PlaceInGrid getDefaultGridPlace(@NotNull Content content) {
return getOrCreateDefault(getOrCreateContentId(content)).getPlaceInGrid();
}
public int getDefaultSelectedTabIndex() {
return 0;
}
public boolean isToFocus(final String id, final String condition) {
public boolean isToFocus(final String id, @NotNull String condition) {
return Comparing.equal(id, getToFocus(condition));
}
public void setToFocus(final String id, final String condition) {
public void setToFocus(final String id, @NotNull String condition) {
myGeneral.focusOnCondition.put(condition, id);
}
public void setDefaultToFocus(String id, final String condition, @NotNull final LayoutAttractionPolicy policy) {
public void setDefaultToFocus(@NotNull String id, @NotNull String condition, @NotNull final LayoutAttractionPolicy policy) {
myDefaultFocus.put(condition, Pair.create(id, policy));
}
@Nullable
public String getToFocus(final String condition) {
return myGeneral.focusOnCondition.containsKey(condition) ? myGeneral.focusOnCondition.get(condition) : (myDefaultFocus.containsKey(condition) ? myDefaultFocus.get(condition).getFirst() : null);
public String getToFocus(@NotNull String condition) {
return myGeneral.focusOnCondition.containsKey(condition) ? myGeneral.focusOnCondition.get(condition) :
myDefaultFocus.containsKey(condition) ? myDefaultFocus.get(condition).getFirst() : null;
}
public LayoutAttractionPolicy getAttractionPolicy(final String condition) {
@NotNull
public LayoutAttractionPolicy getAttractionPolicy(@NotNull String condition) {
final Pair<String, LayoutAttractionPolicy> pair = myDefaultFocus.get(condition);
return pair == null ? new LayoutAttractionPolicy.FocusOnce() : pair.getSecond();
}
public static class General {
public volatile boolean horizontalToolbar = false;
public volatile int selectedTab = 0;
public volatile Map<String, String> focusOnCondition = new HashMap<String, String>();
}
}
@@ -18,6 +18,7 @@ package com.intellij.execution.ui.layout.impl;
import com.intellij.openapi.components.*;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap;
import java.util.List;
@@ -34,7 +35,7 @@ public class RunnerLayoutSettings implements PersistentStateComponent<Element> {
private final Map<String, RunnerLayout> myRunnerId2Settings = new LinkedHashMap<String, RunnerLayout>();
public RunnerLayout getLayout(String id) {
public RunnerLayout getLayout(@NotNull String id) {
RunnerLayout layout = myRunnerId2Settings.get(id);
if (layout == null) {
layout = new RunnerLayout(id);
@@ -44,6 +45,7 @@ public class RunnerLayoutSettings implements PersistentStateComponent<Element> {
return layout;
}
@Override
public Element getState() {
final Element runners = new Element("runners");
for (String eachID : myRunnerId2Settings.keySet()) {
@@ -56,6 +58,7 @@ public class RunnerLayoutSettings implements PersistentStateComponent<Element> {
return runners;
}
@Override
public void loadState(final Element state) {
final List runners = state.getChildren("runner");
for (Object each : runners) {
@@ -28,6 +28,8 @@ public class RunnerLayoutUiFactoryImpl extends RunnerLayoutUi.Factory {
myProject = project;
}
@NotNull
@Override
public RunnerLayoutUi create(@NotNull final String runnerId, @NotNull final String runnerTitle, @NotNull final String sessionName, @NotNull final Disposable parent) {
return new RunnerLayoutUiImpl(myProject, parent, runnerId, runnerTitle, sessionName);
}
@@ -54,7 +54,11 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
private final ContentManager myViewsContentManager;
public static final Key<String> CONTENT_TYPE = Key.create("ContentType");
public RunnerLayoutUiImpl(Project project, Disposable parent, String runnerId, String runnerTitle, String sessionName) {
public RunnerLayoutUiImpl(@NotNull Project project,
@NotNull Disposable parent,
@NotNull String runnerId,
@NotNull String runnerTitle,
@NotNull String sessionName) {
myLayout = RunnerLayoutSettings.getInstance().getLayout(runnerId);
Disposer.register(parent, this);
@@ -69,6 +73,7 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
myContentPanel.add(myViewsContentManager.getComponent(), BorderLayout.CENTER);
}
@Override
@NotNull
public LayoutViewOptions setTopToolbar(@NotNull ActionGroup actions, @NotNull String place) {
myContentUI.setTopActions(actions, place);
@@ -76,31 +81,39 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
}
@NotNull
@Override
public LayoutStateDefaults initTabDefaults(int id, String text, Icon icon) {
getLayout().setDefault(id, text, icon);
return this;
}
@NotNull
@Override
public LayoutStateDefaults initFocusContent(@NotNull final String id, @NotNull final String condition) {
return initFocusContent(id, condition, new LayoutAttractionPolicy.FocusOnce());
}
@NotNull
@Override
public LayoutStateDefaults initFocusContent(@NotNull final String id, @NotNull final String condition, @NotNull final LayoutAttractionPolicy policy) {
getLayout().setDefaultToFocus(id, condition, policy);
return this;
}
@Override
@NotNull
public Content addContent(@NotNull Content content) {
return addContent(content, false, -1, PlaceInGrid.center, false);
}
@Override
@NotNull
public Content addContent(@NotNull Content content, int defaultTabId, PlaceInGrid defaultPlace, boolean defaultIsMinimized) {
public Content addContent(@NotNull Content content, int defaultTabId, @NotNull PlaceInGrid defaultPlace, boolean defaultIsMinimized) {
return addContent(content, true, defaultTabId, defaultPlace, defaultIsMinimized);
}
public Content addContent(Content content, boolean applyDefaults, int defaultTabId, PlaceInGrid defaultPlace, boolean defaultIsMinimized) {
public Content addContent(@NotNull Content content, boolean applyDefaults, int defaultTabId, @NotNull PlaceInGrid defaultPlace, boolean defaultIsMinimized) {
final String id = content.getUserData(CONTENT_TYPE);
assert id != null : "Content id is missing, use RunnerLayoutUi to create content instances";
@@ -113,11 +126,13 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return content;
}
@Override
@NotNull
public Content createContent(@NotNull String id, @NotNull JComponent component, @NotNull String displayName, @Nullable Icon icon, @Nullable JComponent focusable) {
return createContent(id, new ComponentWithActions.Impl(component), displayName, icon, focusable);
}
@Override
@NotNull
public Content createContent(@NotNull final String contentId, @NotNull final ComponentWithActions withActions, @NotNull final String displayName,
@Nullable final Icon icon,
@@ -138,6 +153,7 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return content;
}
@Override
@NotNull
public JComponent getComponent() {
return myContentPanel;
@@ -151,6 +167,7 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return myLayout;
}
@Override
public void updateActionsNow() {
myContentUI.updateActionsImmediately();
}
@@ -160,18 +177,24 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
myContentUI.saveUiState();
}
@Override
public void dispose() {
}
@Override
@NotNull
public ContentManager getContentManager() {
return myViewsContentManager;
}
@NotNull
@Override
public ActionCallback selectAndFocus(@Nullable final Content content, boolean requestFocus, final boolean forced) {
return selectAndFocus(content, requestFocus, forced, false);
}
@NotNull
@Override
public ActionCallback selectAndFocus(@Nullable final Content content, boolean requestFocus, final boolean forced, boolean implicit) {
if (content == null) return new ActionCallback.Rejected();
return getContentManager(content).setSelectedContent(content, requestFocus || shouldRequestFocus(), forced, implicit);
@@ -186,59 +209,73 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return focused != null && SwingUtilities.isDescendingFrom(focused, getContentManager().getComponent());
}
public boolean removeContent(final Content content, final boolean dispose) {
if (content == null) return false;
return getContentManager().removeContent(content, dispose);
@Override
public boolean removeContent(@Nullable Content content, final boolean dispose) {
return content != null && getContentManager().removeContent(content, dispose);
}
public boolean isToFocus(final Content content, final String condition) {
@Override
public boolean isToFocus(@NotNull final Content content, @NotNull final String condition) {
final String id = content.getUserData(ViewImpl.ID);
return getLayout().isToFocus(id, condition);
}
public LayoutViewOptions setToFocus(@Nullable final Content content, final String condition) {
@NotNull
@Override
public LayoutViewOptions setToFocus(@Nullable final Content content, @NotNull final String condition) {
getLayout().setToFocus(content != null ? content.getUserData(ViewImpl.ID) : null, condition);
return this;
}
@Override
public void attractBy(@NotNull final String condition) {
myContentUI.attractByCondition(condition, true);
}
public void clearAttractionBy(final String condition) {
@Override
public void clearAttractionBy(@NotNull final String condition) {
myContentUI.clearAttractionByCondition(condition, true);
}
public void removeContent(String id, final boolean dispose) {
public void removeContent(@NotNull String id, final boolean dispose) {
final Content content = findContent(id);
if (content != null) {
getContentManager().removeContent(content, dispose);
}
}
@Override
public AnAction getLayoutActions() {
return myContentUI.getLayoutActions();
}
@NotNull
@Override
public AnAction[] getLayoutActionsList() {
final ActionGroup group = (ActionGroup)getLayoutActions();
return group.getChildren(null);
}
@NotNull
@Override
public LayoutViewOptions setLeftToolbar(@NotNull final ActionGroup leftToolbar, @NotNull final String place) {
myContentUI.setLeftToolbar(leftToolbar, place);
return this;
}
@Override
@Nullable
public Content findContent(@NotNull final String key) {
return myContentUI.findContent(key);
}
@NotNull
@Override
public RunnerLayoutUi addListener(@NotNull final ContentManagerListener listener, @NotNull final Disposable parent) {
final ContentManager mgr = getContentManager();
mgr.addContentManagerListener(listener);
Disposer.register(parent, new Disposable() {
@Override
public void dispose() {
mgr.removeContentManagerListener(listener);
}
@@ -246,19 +283,23 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return this;
}
@Override
public void removeListener(@NotNull final ContentManagerListener listener) {
getContentManager().removeContentManagerListener(listener);
}
@Override
public void setBouncing(@NotNull final Content content, final boolean activate) {
myContentUI.processBounce(content, activate);
}
@Override
public boolean isDisposed() {
return getContentManager().isDisposed();
}
@Override
@NotNull
public LayoutViewOptions setMinimizeActionEnabled(final boolean enabled) {
myContentUI.setMinimizeActionEnabled(enabled);
@@ -270,34 +311,42 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return this;
}
@Override
@NotNull
public LayoutViewOptions setMoveToGridActionEnabled(final boolean enabled) {
myContentUI.setMovetoGridActionEnabled(enabled);
return this;
}
@Override
@NotNull
public LayoutViewOptions setAttractionPolicy(@NotNull final String contentId, final LayoutAttractionPolicy policy) {
myContentUI.setPolicy(contentId, policy);
return this;
}
@NotNull
@Override
public LayoutViewOptions setConditionAttractionPolicy(@NotNull final String condition, final LayoutAttractionPolicy policy) {
myContentUI.setConditionPolicy(condition, policy);
return this;
}
@Override
@NotNull
public LayoutStateDefaults getDefaults() {
return this;
}
@Override
@NotNull
public LayoutViewOptions getOptions() {
return this;
}
public LayoutViewOptions setAdditionalFocusActions(final ActionGroup group) {
@NotNull
@Override
public LayoutViewOptions setAdditionalFocusActions(@NotNull final ActionGroup group) {
myContentUI.setAdditionalFocusActions(group);
return this;
}
@@ -307,11 +356,15 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
return myContentUI.getSettingsActions();
}
@NotNull
@Override
public AnAction[] getSettingsActionsList() {
final ActionGroup group = (ActionGroup)getSettingsActions();
return group.getChildren(null);
}
@NotNull
@Override
public Content[] getContents() {
Content[] contents = new Content[getContentManager().getContentCount()];
for (int i = 0; i < contents.length; i++) {
@@ -325,6 +378,7 @@ public class RunnerLayoutUiImpl implements Disposable.Parent, RunnerLayoutUi, La
super(new BorderLayout());
}
@Override
public Object getData(@NonNls String dataId) {
if (SwitchProvider.KEY.getName().equals(dataId)) {
return myContentUI;
@@ -36,10 +36,12 @@ public class TabImpl extends AbstractTab implements Tab {
TabImpl() {
}
@Override
public int getIndex() {
return myIndex;
}
@Override
public int getDefaultIndex() {
return myDefaultIndex >= 0 ? myDefaultIndex : myIndex;
}
@@ -129,10 +131,12 @@ public class TabImpl extends AbstractTab implements Tab {
myBottomDetached = bottomDetached;
}
@Override
public boolean isDefault() {
return myIndex == 0;
}
@Override
public boolean isDetached(PlaceInGrid place) {
switch (place) {
case bottom:
@@ -148,6 +152,7 @@ public class TabImpl extends AbstractTab implements Tab {
return false;
}
@Override
public void setDetached(PlaceInGrid place, boolean detached) {
switch (place) {
case bottom:
@@ -16,11 +16,12 @@
package com.intellij.ui.docking;
import com.intellij.openapi.actionSystem.Presentation;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
public interface DockableContent<T> {
@NotNull
T getKey();
Image getPreviewImage();
@@ -642,6 +642,7 @@ final class EditorTabbedContainer implements Disposable, CloseAction.CloseTarget
myPinned = window.isFilePinned(file);
}
@NotNull
@Override
public VirtualFile getKey() {
return myFile;