IDEA-67763, IDEA-133381 allow to drop files/tabs into tab row

This commit is contained in:
Dmitry Batrak
2014-12-08 17:48:19 +03:00
parent c07ba38252
commit d363916737
2 changed files with 21 additions and 19 deletions
@@ -31,6 +31,7 @@ import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
import com.intellij.openapi.fileEditor.impl.text.FileDropHandler;
import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Queryable; import com.intellij.openapi.ui.Queryable;
@@ -61,6 +62,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
@@ -86,6 +89,7 @@ public final class EditorTabbedContainer implements Disposable, CloseAction.Clos
myProject = project; myProject = project;
final ActionManager actionManager = ActionManager.getInstance(); final ActionManager actionManager = ActionManager.getInstance();
myTabs = new JBEditorTabs(project, actionManager, IdeFocusManager.getInstance(project), this); myTabs = new JBEditorTabs(project, actionManager, IdeFocusManager.getInstance(project), this);
myTabs.setTransferHandler(new MyTransferHandler());
myTabs.setDataProvider(new MyDataProvider()).setPopupGroup(new Getter<ActionGroup>() { myTabs.setDataProvider(new MyDataProvider()).setPopupGroup(new Getter<ActionGroup>() {
@Override @Override
public ActionGroup get() { public ActionGroup get() {
@@ -718,4 +722,21 @@ public final class EditorTabbedContainer implements Disposable, CloseAction.Clos
} }
} }
private final class MyTransferHandler extends TransferHandler {
private final FileDropHandler myFileDropHandler = new FileDropHandler(null);
@Override
public boolean importData(JComponent comp, Transferable t) {
if (myFileDropHandler.canHandleDrop(t.getTransferDataFlavors())) {
myFileDropHandler.handleDrop(t, myProject, myWindow);
return true;
}
return false;
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
return myFileDropHandler.canHandleDrop(transferFlavors);
}
}
} }
@@ -95,7 +95,6 @@ public class EditorsSplitters extends IdePanePanel implements UISettingsListener
myManager = manager; myManager = manager;
myFocusWatcher = new MyFocusWatcher(); myFocusWatcher = new MyFocusWatcher();
setFocusTraversalPolicy(new MyFocusTraversalPolicy()); setFocusTraversalPolicy(new MyFocusTraversalPolicy());
setTransferHandler(new MyTransferHandler());
clear(); clear();
if (createOwnDockableContainer) { if (createOwnDockableContainer) {
@@ -768,24 +767,6 @@ public class EditorsSplitters extends IdePanePanel implements UISettingsListener
} }
} }
private final class MyTransferHandler extends TransferHandler {
private final FileDropHandler myFileDropHandler = new FileDropHandler(null);
@Override
public boolean importData(JComponent comp, Transferable t) {
if (myFileDropHandler.canHandleDrop(t.getTransferDataFlavors())) {
myFileDropHandler.handleDrop(t, myManager.getProject(), myCurrentWindow);
return true;
}
return false;
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
return myFileDropHandler.canHandleDrop(transferFlavors);
}
}
private abstract static class ConfigTreeReader<T> { private abstract static class ConfigTreeReader<T> {
@Nullable @Nullable
public T process(@Nullable Element element, @Nullable T context) { public T process(@Nullable Element element, @Nullable T context) {