mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-50718: Artifact editor: starting the drag and drop of multiple selection drags the single item
This commit is contained in:
+1
-1
@@ -203,7 +203,7 @@ public class ArtifactEditorImpl implements ArtifactEditorEx {
|
||||
final JPanel rightTopPanel = new JPanel(new BorderLayout());
|
||||
rightTopPanel.add(new JLabel("Available Elements (drag'n'drop to layout tree)"), BorderLayout.SOUTH);
|
||||
rightPanel.add(rightTopPanel, BorderLayout.NORTH);
|
||||
rightPanel.add(ScrollPaneFactory.createScrollPane(mySourceItemsTree.getTree()), BorderLayout.CENTER);
|
||||
rightPanel.add(ScrollPaneFactory.createScrollPane(mySourceItemsTree), BorderLayout.CENTER);
|
||||
rightPanel.setBorder(border);
|
||||
splitter.setSecondComponent(rightPanel);
|
||||
|
||||
|
||||
+18
-21
@@ -17,10 +17,10 @@ package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
|
||||
|
||||
import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.DefaultTreeExpander;
|
||||
import com.intellij.ide.dnd.AdvancedDnDSource;
|
||||
import com.intellij.ide.dnd.DnDAction;
|
||||
import com.intellij.ide.dnd.DnDDragStartBean;
|
||||
import com.intellij.ide.dnd.DnDManager;
|
||||
import com.intellij.ide.dnd.DnDSource;
|
||||
import com.intellij.ide.dnd.aware.DnDAwareTree;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
@@ -37,7 +37,6 @@ import com.intellij.packaging.ui.PackagingSourceItem;
|
||||
import com.intellij.ui.PopupHandler;
|
||||
import com.intellij.ui.treeStructure.SimpleTreeBuilder;
|
||||
import com.intellij.ui.treeStructure.SimpleTreeStructure;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.ui.treeStructure.WeightBasedComparator;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
|
||||
@@ -49,22 +48,24 @@ import java.util.List;
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class SourceItemsTree implements DnDSource, Disposable{
|
||||
private SimpleDnDAwareTree myTree;
|
||||
public class SourceItemsTree extends SimpleDnDAwareTree implements AdvancedDnDSource, Disposable{
|
||||
private final ArtifactEditorImpl myArtifactsEditor;
|
||||
private SimpleTreeBuilder myBuilder;
|
||||
|
||||
public SourceItemsTree(ArtifactEditorContext editorContext, ArtifactEditorImpl artifactsEditor) {
|
||||
myArtifactsEditor = artifactsEditor;
|
||||
myTree = new SimpleDnDAwareTree();
|
||||
myBuilder = new SimpleTreeBuilder(myTree, myTree.getBuilderModel(), new SourceItemsTreeStructure(editorContext, artifactsEditor), new WeightBasedComparator(true));
|
||||
myTree.setRootVisible(false);
|
||||
myTree.setShowsRootHandles(true);
|
||||
myBuilder = new SimpleTreeBuilder(this, this.getBuilderModel(), new SourceItemsTreeStructure(editorContext, artifactsEditor), new WeightBasedComparator(true));
|
||||
setRootVisible(false);
|
||||
setShowsRootHandles(true);
|
||||
Disposer.register(this, myBuilder);
|
||||
PopupHandler.installPopupHandler(this, createPopupGroup(), ActionPlaces.UNKNOWN, ActionManager.getInstance());
|
||||
installDnD();
|
||||
}
|
||||
|
||||
private void installDnD() {
|
||||
if (!ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
DnDManager.getInstance().registerSource(this, myTree);
|
||||
DnDManager.getInstance().registerSource(this);
|
||||
}
|
||||
PopupHandler.installPopupHandler(myTree, createPopupGroup(), ActionPlaces.UNKNOWN, ActionManager.getInstance());
|
||||
}
|
||||
|
||||
private ActionGroup createPopupGroup() {
|
||||
@@ -77,11 +78,11 @@ public class SourceItemsTree implements DnDSource, Disposable{
|
||||
group.add(new SourceItemNavigateAction(this));
|
||||
group.add(new SourceItemFindUsagesAction(this, myArtifactsEditor.getContext().getProject(), myArtifactsEditor.getContext().getParent()));
|
||||
|
||||
DefaultTreeExpander expander = new DefaultTreeExpander(myTree);
|
||||
DefaultTreeExpander expander = new DefaultTreeExpander(this);
|
||||
final CommonActionsManager commonActionsManager = CommonActionsManager.getInstance();
|
||||
group.add(Separator.getInstance());
|
||||
group.addAction(commonActionsManager.createExpandAllAction(expander, myTree));
|
||||
group.addAction(commonActionsManager.createCollapseAllAction(expander, myTree));
|
||||
group.addAction(commonActionsManager.createExpandAllAction(expander, this));
|
||||
group.addAction(commonActionsManager.createCollapseAllAction(expander, this));
|
||||
return group;
|
||||
}
|
||||
|
||||
@@ -93,18 +94,14 @@ public class SourceItemsTree implements DnDSource, Disposable{
|
||||
myBuilder.initRootNode();
|
||||
}
|
||||
|
||||
public Tree getTree() {
|
||||
return myTree;
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
if (!ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
DnDManager.getInstance().unregisterSource(this, myTree);
|
||||
DnDManager.getInstance().unregisterSource(this);
|
||||
}
|
||||
}
|
||||
|
||||
private DefaultMutableTreeNode[] getSelectedTreeNodes() {
|
||||
return myTree.getSelectedNodes(DefaultMutableTreeNode.class, null);
|
||||
return getSelectedNodes(DefaultMutableTreeNode.class, null);
|
||||
}
|
||||
|
||||
public boolean canStartDragging(DnDAction action, Point dragOrigin) {
|
||||
@@ -141,9 +138,9 @@ public class SourceItemsTree implements DnDSource, Disposable{
|
||||
public Pair<Image, Point> createDraggedImage(DnDAction action, Point dragOrigin) {
|
||||
final DefaultMutableTreeNode[] nodes = getSelectedTreeNodes();
|
||||
if (nodes.length == 1) {
|
||||
return DnDAwareTree.getDragImage(myTree, TreeUtil.getPathFromRoot(nodes[0]), dragOrigin);
|
||||
return DnDAwareTree.getDragImage(this, TreeUtil.getPathFromRoot(nodes[0]), dragOrigin);
|
||||
}
|
||||
return DnDAwareTree.getDragImage(myTree, ProjectBundle.message("drag.n.drop.text.0.packaging.elements", nodes.length), dragOrigin);
|
||||
return DnDAwareTree.getDragImage(this, ProjectBundle.message("drag.n.drop.text.0.packaging.elements", nodes.length), dragOrigin);
|
||||
}
|
||||
|
||||
public void dragDropEnd() {
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ public class SourceItemFindUsagesAction extends ArtifactEditorFindUsagesActionBa
|
||||
private final SourceItemsTree myTree;
|
||||
|
||||
public SourceItemFindUsagesAction(SourceItemsTree tree, Project project, ArtifactsStructureConfigurableContext artifactContext) {
|
||||
super(tree.getTree(), project, artifactContext);
|
||||
super(tree, project, artifactContext);
|
||||
myTree = tree;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ public class SourceItemNavigateAction extends ArtifactEditorNavigateActionBase {
|
||||
private final SourceItemsTree mySourceItemsTree;
|
||||
|
||||
public SourceItemNavigateAction(SourceItemsTree sourceItemsTree) {
|
||||
super(sourceItemsTree.getTree());
|
||||
super(sourceItemsTree);
|
||||
mySourceItemsTree = sourceItemsTree;
|
||||
}
|
||||
|
||||
|
||||
@@ -273,7 +273,6 @@ public abstract class MasterDetailsComponent implements Configurable, Persistent
|
||||
|
||||
updateSelectionFromTree();
|
||||
|
||||
SwingUtilities.updateComponentTreeUI(myWholePanel);
|
||||
final JPanel panel = new JPanel(new BorderLayout()) {
|
||||
public Dimension getPreferredSize() {
|
||||
return getPanelPrefferedSize();
|
||||
|
||||
Reference in New Issue
Block a user