}
});
private int myWindow;
+ private boolean myDisposing;
public RunnerContentUi(Project project,
RunnerLayoutUi ui,
}
final GridCellImpl gridCell = (GridCellImpl)cell;
final Content[] contents = gridCell.getContents();
+ storeDefaultIndices(contents);
+ for (Content content : contents) {
+ content.putUserData(RunnerLayout.DROP_INDEX, getStateFor(content).getTab().getIndex());
+ }
Dimension size = gridCell.getSize();
if (size == null) {
size = new Dimension(200, 200);
return new ActionCallback.Done();
}
+ private void storeDefaultIndices(Content[] contents) {
+ for (Content content : contents) {
+ content.putUserData(RunnerLayout.DEFAULT_INDEX, getStateFor(content).getTab().getDefaultIndex());
+ }
+ }
+
@Override
public RelativeRectangle getAcceptArea() {
return new RelativeRectangle(myTabs.getComponent());
@Override
public boolean isEmpty() {
- return myTabs.isEmptyVisible();
+ return myTabs.isEmptyVisible() || myDisposing;
}
@Override
@Override
public boolean isDisposeWhenEmpty() {
- return true;
+ return myOriginal != null;
}
public boolean isCycleRoot() {
grid = new GridImpl(this, mySessionName);
grid.setBorder(new EmptyBorder(1, 0, 0, 0));
- if (myCurrentOver != null) {
- final int index = ((JBRunnerTabs)myCurrentOver).getDropInfoIndex() + (myOriginal != null ? myOriginal.getTabOffsetFor(this) : 0);
- for (TabInfo info : myTabs.getTabs()) {
- final TabImpl tab = getTabFor(info);
- if (tab != null && tab.getIndex() >= index) {
- tab.setIndex(tab.getIndex() + 1);
- }
- }
- getStateFor(content).assignTab(myLayoutSettings.getOrCreateTab(index));
+ if (myCurrentOver != null || myOriginal != null) {
+ Integer forcedDropIndex = content.getUserData(RunnerLayout.DROP_INDEX);
+ final int index = myTabs.getDropInfoIndex() + (myOriginal != null ? myOriginal.getTabOffsetFor(this) : 0);
+ final TabImpl tab = myLayoutSettings.getOrCreateTab(-1);
+ final Integer defaultIndex = content.getUserData(RunnerLayout.DEFAULT_INDEX);
+ tab.setDefaultIndex(defaultIndex != null ? defaultIndex : -1);
+ tab.setIndex(forcedDropIndex != null ? forcedDropIndex : index);
+ getStateFor(content).assignTab(tab);
}
TabInfo tab = new TabInfo(grid).setObject(getStateFor(content).getTab()).setText("Tab");
doSaveUiState();
}
- private int updateTabsIndices(final JBRunnerTabs tabs, int offset) {
+ private static int updateTabsIndices(final JBRunnerTabs tabs, int offset) {
for (TabInfo each : tabs.getTabs()) {
- final int index = myTabs.getIndexOf(each);
+ final int index = tabs.getIndexOf(each);
final TabImpl tab = getTabFor(each);
if (tab != null) tab.setIndex(index + offset);
}
saveUiState();
}
if (myOriginal != null) {
- myManager.removeAllContents(true);
+ myDisposing = true;
+ fireContentClosed(null);
}
}
final Content[] data = CONTENT_KEY.getData((DataProvider)component);
final List<Content> contents = Arrays.asList(data);
+ storeDefaultIndices(data);
+
final Dimension size = info.getComponent().getSize();
final Image image = myTabs.getComponentImage(info);
if (component instanceof Grid) {
import com.intellij.execution.ui.layout.PlaceInGrid;
import com.intellij.execution.ui.layout.Tab;
import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.content.Content;
import java.util.*;
public class RunnerLayout {
-
+ public static final Key<Integer> DEFAULT_INDEX = Key.create("RunnerLayoutDefaultIndex");
+ public static final Key<Integer> DROP_INDEX = Key.create("RunnerLayoutDropIndex");
private final String myID;
protected Map<String, ViewImpl> myViews = new HashMap<String, ViewImpl>();
return tab;
}
- public TabImpl getDefaultTab() {
- return getOrCreateTab(0);
- }
-
private TabImpl createNewTab(final int index) {
final TabImpl tab;
}
for (TabImpl eachTab : myTabs) {
- eachTab.write(parentNode);
+ if (isUsed(eachTab)) {
+ eachTab.write(parentNode);
+ }
}
parentNode.addContent(XmlSerializer.serialize(myGeneral));
myViews.clear();
for (TabImpl each : myTabs) {
- final TabImpl.Default defaultTab = getOrCreateDefaultTab(each.getIndex());
+ final TabImpl.Default defaultTab = getOrCreateDefaultTab(each.getDefaultIndex());
each.copyFrom(defaultTab);
}
}