From f1271801138e5a719a64c66aaabbf15f89fba6ee Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 4 Feb 2010 09:34:12 +0300 Subject: [PATCH] IDEA-50718: Artifact editor: starting the drag and drop of multiple selection drags the single item --- .../artifacts/ArtifactEditorImpl.java | 2 +- .../sourceItems/SourceItemsTree.java | 39 +++++++++---------- .../actions/SourceItemFindUsagesAction.java | 2 +- .../actions/SourceItemNavigateAction.java | 2 +- .../openapi/ui/MasterDetailsComponent.java | 1 - 5 files changed, 21 insertions(+), 25 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java index 14b084792a09..6da7af64f4e7 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java @@ -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); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/SourceItemsTree.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/SourceItemsTree.java index 615542cd1d46..a7597efd4d1a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/SourceItemsTree.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/SourceItemsTree.java @@ -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 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() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemFindUsagesAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemFindUsagesAction.java index 44ec77dc7da2..b6a6bc66e296 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemFindUsagesAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemFindUsagesAction.java @@ -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; } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemNavigateAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemNavigateAction.java index 9f914d974145..e066771f45aa 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemNavigateAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/actions/SourceItemNavigateAction.java @@ -29,7 +29,7 @@ public class SourceItemNavigateAction extends ArtifactEditorNavigateActionBase { private final SourceItemsTree mySourceItemsTree; public SourceItemNavigateAction(SourceItemsTree sourceItemsTree) { - super(sourceItemsTree.getTree()); + super(sourceItemsTree); mySourceItemsTree = sourceItemsTree; } diff --git a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java index b013d99037d3..a1f8687aefda 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java @@ -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();