DockableEditorTabbedContainer shouldn't return root pane as accept area as it makes impossible to add any other dockable container. It is better to return root pane in the special fallback method after we checked all containers.

This commit is contained in:
Dmitry Trofimov
2013-11-10 19:37:02 +01:00
parent 4b2204574d
commit e0ff96dc2c
6 changed files with 52 additions and 21 deletions
@@ -449,6 +449,11 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
return new RelativeRectangle(myTabs.getComponent());
}
@Override
public RelativeRectangle getAcceptAreaFallback() {
return getAcceptArea();
}
@NotNull
@Override
public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) {
@@ -796,6 +796,11 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider, Dock
return new RelativeRectangle(myTree);
}
@Override
public RelativeRectangle getAcceptAreaFallback() {
return getAcceptArea();
}
@NotNull
@Override
public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) {
@@ -33,6 +33,11 @@ public interface DockContainer extends Disposable, Activatable {
RelativeRectangle getAcceptArea();
/**
* This area is used when nothing was found with getAcceptArea
*/
RelativeRectangle getAcceptAreaFallback();
@NotNull
ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point);
@@ -88,6 +88,10 @@ public class DockableEditorTabbedContainer implements DockContainer.Persistent {
@Override
public RelativeRectangle getAcceptArea() {
return new RelativeRectangle(mySplitters);
}
public RelativeRectangle getAcceptAreaFallback() {
JRootPane root = mySplitters.getRootPane();
return root != null ? new RelativeRectangle(root) : new RelativeRectangle(mySplitters);
}
@@ -346,6 +346,13 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo
}
}
for (DockContainer each : myContainers) {
RelativeRectangle rec = each.getAcceptAreaFallback();
if (rec.contains(point) && each.getContentResponse(content, point).canAccept()) {
return each;
}
}
return null;
}
@@ -252,27 +252,32 @@ public class TerminalView {
*/
public class TerminalDockContainer implements DockContainer {
private ToolWindow myTerminalToolWindow;
public TerminalDockContainer(ToolWindow toolWindow) {
myTerminalToolWindow = toolWindow;
}
@Override
public RelativeRectangle getAcceptArea() {
return new RelativeRectangle(myTerminalToolWindow.getComponent());
}
@Override
public RelativeRectangle getAcceptAreaFallback() {
return getAcceptArea();
}
@NotNull
@Override
public ContentResponse getContentResponse(@NotNull DockableContent content, RelativePoint point) {
return ContentResponse.ACCEPT_MOVE;
}
@Override
public JComponent getContainerComponent() {
return myTerminalToolWindow.getComponent();
}
@Override
public void add(@NotNull DockableContent content, RelativePoint dropTarget) {
if (content.getKey() instanceof TerminalSessionVirtualFileImpl) {
@@ -280,57 +285,57 @@ public class TerminalView {
myTerminalWidget.addTab(terminalFile.getName(), terminalFile.getTerminal());
}
}
@Override
public void closeAll() {
}
@Override
public void addListener(Listener listener, Disposable parent) {
}
@Override
public boolean isEmpty() {
return false;
}
@Nullable
@Override
public Image startDropOver(@NotNull DockableContent content, RelativePoint point) {
return null;
}
@Nullable
@Override
public Image processDropOver(@NotNull DockableContent content, RelativePoint point) {
return null;
}
@Override
public void resetDropOver(@NotNull DockableContent content) {
}
@Override
public boolean isDisposeWhenEmpty() {
return false;
}
@Override
public void showNotify() {
}
@Override
public void hideNotify() {
}
@Override
public void dispose() {
}
}
}