From 35ef8f426e9e02c646f552b3df92a40ea792a16f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 25 Feb 2005 16:20:50 +0300 Subject: [PATCH] selectIn favorites view + send to favorites --- resources/src/idea/ActionManager.xml | 2 +- .../AddToFavoritesAction.java | 15 ++- .../DeleteFromFavoritesAction.java | 25 ++-- .../FavoritesTreeStructure.java | 81 +++++++++++- .../FavoritesTreeViewPanel.java | 13 +- .../favoritesTreeView/FavoritesViewImpl.java | 25 ++-- .../FavoritesViewSelectInTarget.java | 115 ++++++++++++++++++ .../SendToFavoritesAction.java | 7 +- .../SendToFavoritesGroup.java | 6 +- .../projectView/BaseProjectTreeBuilder.java | 7 +- .../ide/projectView/impl/ProjectViewImpl.java | 2 +- 11 files changed, 256 insertions(+), 42 deletions(-) create mode 100644 source/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java diff --git a/resources/src/idea/ActionManager.xml b/resources/src/idea/ActionManager.xml index b21747ce1cea..2971e4723660 100644 --- a/resources/src/idea/ActionManager.xml +++ b/resources/src/idea/ActionManager.xml @@ -19,7 +19,7 @@ - + diff --git a/source/com/intellij/ide/favoritesTreeView/AddToFavoritesAction.java b/source/com/intellij/ide/favoritesTreeView/AddToFavoritesAction.java index 71b01e42f5c6..0002dacb0e22 100644 --- a/source/com/intellij/ide/favoritesTreeView/AddToFavoritesAction.java +++ b/source/com/intellij/ide/favoritesTreeView/AddToFavoritesAction.java @@ -21,6 +21,8 @@ import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.uiDesigner.compiler.Utils; @@ -47,11 +49,16 @@ public class AddToFavoritesAction extends AnAction { final DataContext dataContext = e.getDataContext(); Project project = (Project)dataContext.getData(DataConstants.PROJECT); final AbstractTreeNode[] nodes = createNodes(dataContext); + final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(project); if (nodes != null) { + final FavoritesTreeViewPanel favoritesTreeViewPanel = favoritesView.getFavoritesTreeViewPanel(myFavoritesList); for (int i = 0; i < nodes.length; i++) { AbstractTreeNode node = nodes[i]; - FavoritesViewImpl.getInstance(project).getFavoritesTreeViewPanel(myFavoritesList).addToFavorites(node); + favoritesTreeViewPanel.addToFavorites(node); } + final ToolWindowManager windowManager = ToolWindowManager.getInstance(project); + windowManager.getToolWindow(ToolWindowId.FAVORITES_VIEW).activate(null); + favoritesView.setSelectedContent(favoritesView.getContent(favoritesTreeViewPanel)); } } @@ -66,14 +73,10 @@ public class AddToFavoritesAction extends AnAction { } } - protected boolean isEnabled() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - private AbstractTreeNode[] createNodes(DataContext dataContext) { ArrayList result = new ArrayList(); Project project = (Project)dataContext.getData(DataConstants.PROJECT); - final FavoritesTreeViewConfiguration favoritesConfig = FavoritesViewImpl.getInstance(project).getCurrentTreeViewPanel().getFavoritesTreeStructure().getFavoritesConfiguration(); + final FavoritesTreeViewConfiguration favoritesConfig = FavoritesViewImpl.getInstance(project).getFavoritesTreeViewPanel(myFavoritesList).getFavoritesTreeStructure().getFavoritesConfiguration(); final PsiManager psiManager = PsiManager.getInstance(project); final String currentViewId = ProjectView.getInstance(project).getCurrentViewId(); diff --git a/source/com/intellij/ide/favoritesTreeView/DeleteFromFavoritesAction.java b/source/com/intellij/ide/favoritesTreeView/DeleteFromFavoritesAction.java index e9692f9d733f..fc9a3dcdec48 100644 --- a/source/com/intellij/ide/favoritesTreeView/DeleteFromFavoritesAction.java +++ b/source/com/intellij/ide/favoritesTreeView/DeleteFromFavoritesAction.java @@ -21,22 +21,29 @@ public class DeleteFromFavoritesAction extends AnAction { return; } if (e.getPlace().equals(ActionPlaces.FAVORITES_VIEW_POPUP) || e.getPlace().equals(ActionPlaces.FAVORITES_VIEW_TOOLBAR)) { - FavoritesTreeNodeDescriptor[] selectedNodeDescriptors = FavoritesViewImpl.getInstance(project).getCurrentTreeViewPanel() + final FavoritesTreeViewPanel currentTreeViewPanel = FavoritesViewImpl.getInstance(project).getCurrentTreeViewPanel(); + FavoritesTreeNodeDescriptor[] selectedNodeDescriptors = currentTreeViewPanel .getSelectedNodeDescriptors(); - for (int i = 0; i < selectedNodeDescriptors.length; i++) { - FavoritesTreeNodeDescriptor selectedNodeDescriptor = selectedNodeDescriptors[i]; - selectedNodeDescriptor = getFavoritesRoot(selectedNodeDescriptor, project); - if (selectedNodeDescriptor != null) { - FavoritesViewImpl.getInstance(project).getCurrentTreeViewPanel().removeFromFavorites((AbstractTreeNode)selectedNodeDescriptor.getElement()); - } + removeNodes(selectedNodeDescriptors, project, currentTreeViewPanel.getName()); + } + } + + public void removeNodes(final FavoritesTreeNodeDescriptor[] selectedNodeDescriptors, final Project project, String favoritesViewPane) { + final FavoritesTreeViewPanel favoritesTreeViewPanel = FavoritesViewImpl.getInstance(project).getFavoritesTreeViewPanel(favoritesViewPane); + for (int i = 0; selectedNodeDescriptors != null && i < selectedNodeDescriptors.length; i++) { + FavoritesTreeNodeDescriptor selectedNodeDescriptor = selectedNodeDescriptors[i]; + selectedNodeDescriptor = getFavoritesRoot(selectedNodeDescriptor, project, favoritesViewPane); + if (selectedNodeDescriptor != null) { + favoritesTreeViewPanel.removeFromFavorites((AbstractTreeNode)selectedNodeDescriptor.getElement()); } } } - private FavoritesTreeNodeDescriptor getFavoritesRoot(FavoritesTreeNodeDescriptor node, Project project) { + private FavoritesTreeNodeDescriptor getFavoritesRoot(FavoritesTreeNodeDescriptor node, Project project, String favoritesViewPane) { + final FavoritesTreeViewPanel favoritesTreeViewPanel = FavoritesViewImpl.getInstance(project).getFavoritesTreeViewPanel(favoritesViewPane); while (node.getParentDescriptor() != null && node.getParentDescriptor() instanceof FavoritesTreeNodeDescriptor) { FavoritesTreeNodeDescriptor favoritesDescriptor = (FavoritesTreeNodeDescriptor)node.getParentDescriptor(); - if (favoritesDescriptor.getElement() == FavoritesViewImpl.getInstance(project).getCurrentTreeViewPanel().getFavoritesTreeStructure().getRootElement()) { + if (favoritesDescriptor.getElement() == favoritesTreeViewPanel.getFavoritesTreeStructure().getRootElement()) { return node; } node = favoritesDescriptor; diff --git a/source/com/intellij/ide/favoritesTreeView/FavoritesTreeStructure.java b/source/com/intellij/ide/favoritesTreeView/FavoritesTreeStructure.java index 364ab166b9e9..d8536acd0909 100644 --- a/source/com/intellij/ide/favoritesTreeView/FavoritesTreeStructure.java +++ b/source/com/intellij/ide/favoritesTreeView/FavoritesTreeStructure.java @@ -3,7 +3,7 @@ package com.intellij.ide.favoritesTreeView; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.ProjectViewNode; import com.intellij.ide.projectView.impl.*; -import com.intellij.ide.projectView.impl.nodes.FormNode; +import com.intellij.ide.projectView.impl.nodes.*; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.NodeDescriptor; import com.intellij.j2ee.module.components.J2EEModuleUrl; @@ -15,11 +15,17 @@ import com.intellij.j2ee.module.view.web.FilterUrl; import com.intellij.j2ee.module.view.web.ListenerUrl; import com.intellij.j2ee.module.view.web.ServletUrl; import com.intellij.j2ee.module.view.web.WebRootFileUrl; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.impl.ModuleUtil; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.*; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.util.ArrayUtil; import org.jdom.Element; @@ -70,7 +76,7 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp super(project); myRoot = new AbstractTreeNode(myProject, "Root") { public Collection getChildren() { - return null; + return myFavorites; } public void update(final PresentationData presentation) { @@ -129,6 +135,77 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp myFavorites.remove(element); } + public boolean contains(final VirtualFile vFile){ + final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); + final ContentIterator contentIterator = new ContentIterator() { + public boolean processFile(VirtualFile fileOrDir) { + if (fileOrDir == null ? vFile == null : fileOrDir.equals(vFile)) { + return true; + } + return false; + } + }; + for (Iterator iterator = myRoot.getChildren().iterator(); iterator.hasNext();) { + AbstractTreeNode node = iterator.next(); + boolean find = false; + if (node.getValue() instanceof PsiElement){ + final VirtualFile virtualFile = BasePsiNode.getVirtualFile(((PsiElement)node.getValue())); + if (vFile == null ? virtualFile == null : vFile.equals(virtualFile)){ + return true; + } + if (!virtualFile.isDirectory()){ + continue; + } + final Module module = ModuleUtil.findModuleForPsiElement(((PsiElement)node.getValue())); + if (module != null){ + find = ModuleRootManager.getInstance(module).getFileIndex().iterateContentUnderDirectory(virtualFile, contentIterator); + } else { + find = projectFileIndex.iterateContentUnderDirectory(virtualFile, contentIterator); + } + } + if (node.getValue() instanceof Module){ + find = ModuleRootManager.getInstance(((Module)node.getValue())).getFileIndex().iterateContent(contentIterator); + } + if (node.getValue() instanceof LibraryGroupElement){ + find = ModuleRootManager.getInstance(((LibraryGroupElement)node.getValue()).getModule()).getFileIndex().isInContent(vFile) && + projectFileIndex.isInLibraryClasses(vFile); + } + if (node.getValue() instanceof NamedLibraryElement){ + NamedLibraryElement namedLibraryElement = (NamedLibraryElement)node.getValue(); + final VirtualFile[] files = namedLibraryElement.getOrderEntry().getFiles(OrderRootType.CLASSES); + if (files != null){ + find = ArrayUtil.find(files, vFile) > -1; + } + } + if (node.getValue() instanceof Form){ + Form form = (Form) node.getValue(); + PsiFile[] forms = form.getClassToBind().getManager().getSearchHelper().findFormsBoundToClass(form.getClassToBind().getQualifiedName()); + for (int i = 0; i < forms.length; i++) { + PsiFile psiFile = forms[i]; + final VirtualFile virtualFile = psiFile.getVirtualFile(); + if (virtualFile == null ? vFile == null : virtualFile.equals(vFile)){ + return true; + } + } + } + if (find){ + return true; + } + if (node.getValue() instanceof ModuleGroup){ + ModuleGroup group = (ModuleGroup) node.getValue(); + final Module[] modules = group.modulesInGroup(myProject, true); + for (int i = 0; i < modules.length; i++) { + Module module = modules[i]; + find = ModuleRootManager.getInstance(module).getFileIndex().iterateContent(contentIterator); + if (find){ + return true; + } + } + } + } + return false; + } + public void initFavoritesList() { for (Iterator iterator = myAbstractUrls.keySet().iterator(); iterator.hasNext();) { AbstractUrl abstractUrl = iterator.next(); diff --git a/source/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java b/source/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java index e016c9bf7302..edb172290675 100644 --- a/source/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java +++ b/source/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java @@ -26,10 +26,7 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.ui.AutoScrollToSourceHandler; -import com.intellij.ui.PopupHandler; -import com.intellij.ui.ScrollPaneFactory; -import com.intellij.ui.SimpleTextAttributes; +import com.intellij.ui.*; import com.intellij.util.EditSourceOnDoubleClickHandler; import com.intellij.util.ui.Tree; import com.intellij.util.ui.tree.TreeUtil; @@ -106,6 +103,7 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { myTree.setRootVisible(false); myTree.setShowsRootHandles(true); myTree.setLargeModel(true); + new TreeSpeedSearch(myTree); myTree.setCellRenderer(new NodeRenderer() { public void customizeCellRenderer(JTree tree, Object value, @@ -143,8 +141,6 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree); PopupHandler.installPopupHandler(myTree, (ActionGroup)ActionManager.getInstance().getAction(IdeActions.GROUP_FAVORITES_VIEW_POPUP), ActionPlaces.FAVORITES_VIEW_POPUP, ActionManager.getInstance()); - - /* mySplitter = new Splitter(true); mySplitter.setHonorComponentsMinimumSize(true); mySplitter.setFirstComponent(myCenterPanel); @@ -166,6 +162,9 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { }; } + public void selectElement(final Object selector, final VirtualFile file){ + myBuilder.select(selector, file, true, myBuilder); + } /*public void selectElement(final AbstractTreeNode element) { myBuilder.updateFromRoot(); DefaultMutableTreeNode node = myBuilder.getNodeForElement(element); @@ -253,7 +252,7 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider { result.add(element); } } - return result.toArray(new PsiElement[result.size()]); + return result.isEmpty() ? null : result.toArray(new PsiElement[result.size()]); } if (DataConstantsEx.TARGET_PSI_ELEMENT.equals(dataId)) { return null; diff --git a/source/com/intellij/ide/favoritesTreeView/FavoritesViewImpl.java b/source/com/intellij/ide/favoritesTreeView/FavoritesViewImpl.java index 09f096ad1421..5ad7b99a98fe 100644 --- a/source/com/intellij/ide/favoritesTreeView/FavoritesViewImpl.java +++ b/source/com/intellij/ide/favoritesTreeView/FavoritesViewImpl.java @@ -1,5 +1,7 @@ package com.intellij.ide.favoritesTreeView; +import com.intellij.ide.SelectInManager; +import com.intellij.ide.SelectInTarget; import com.intellij.ide.impl.ContentManagerWatcher; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.DefaultActionGroup; @@ -10,10 +12,7 @@ import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.JDOMExternalizable; -import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.*; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowId; @@ -28,7 +27,7 @@ import java.util.*; public class FavoritesViewImpl extends ContentManagerImpl implements ProjectComponent, JDOMExternalizable { private Project myProject; private Map myName2FavoritesListSet = new HashMap(); - private String myCurrentFavoritesList; + public String myCurrentFavoritesList; private Map myActions = new HashMap(); public static FavoritesViewImpl getInstance(Project project) { return project.getComponent(FavoritesViewImpl.class); @@ -58,6 +57,12 @@ public class FavoritesViewImpl extends ContentManagerImpl implements ProjectComp } } }); + SelectInManager selectInManager = SelectInManager.getInstance(myProject); + selectInManager.addTarget(createSelectInTarget()); + } + + private SelectInTarget createSelectInTarget() { + return new FavoritesViewSelectInTarget(myProject); } public void initComponent() { @@ -133,6 +138,10 @@ public class FavoritesViewImpl extends ContentManagerImpl implements ProjectComp return temp.isEmpty() ? null : temp.toArray(new String[temp.size()]); } + public String [] getAllAddActionNames(){ + return myActions.keySet().toArray(new String[myActions.keySet().size()]); + } + public AddToFavoritesAction getAddToFavoritesAction(String name){ return myActions.get(name); } @@ -159,7 +168,7 @@ public class FavoritesViewImpl extends ContentManagerImpl implements ProjectComp ((DefaultActionGroup)ActionManager.getInstance().getAction(IdeActions.ADD_TO_FAVORITES)).add(addAction); favoritesPanel.getFavoritesTreeStructure().readExternal(el); } - myCurrentFavoritesList = element.getAttributeValue("current"); + DefaultJDOMExternalizer.readExternal(this, element); } public void writeExternal(Element element) throws WriteExternalException { @@ -171,8 +180,6 @@ public class FavoritesViewImpl extends ContentManagerImpl implements ProjectComp favoritesTreeViewPanel.getFavoritesTreeStructure().writeExternal(el); element.addContent(el); } - if (myCurrentFavoritesList != null) { - element.setAttribute("current", myCurrentFavoritesList); - } + DefaultJDOMExternalizer.writeExternal(this, element); } } diff --git a/source/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java b/source/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java new file mode 100644 index 000000000000..c3fb4bcdc6e8 --- /dev/null +++ b/source/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java @@ -0,0 +1,115 @@ +package com.intellij.ide.favoritesTreeView; + +import com.intellij.ide.impl.SelectInTargetPsiWrapper; +import com.intellij.ide.projectView.impl.nodes.BasePsiNode; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiJavaFile; + +/** + * User: anna + * Date: Feb 25, 2005 + */ +public class FavoritesViewSelectInTarget extends SelectInTargetPsiWrapper{ + public FavoritesViewSelectInTarget(final Project project) { + super(project); + } + + public String toString() { + return "Favorites"; + } + + protected boolean canSelect(final PsiFile file) { + return findSuitableFavoritesList(file.getVirtualFile()) != null; + } + + protected void select(PsiElement element, boolean requestFocus) { + while (true) { + if (element instanceof PsiFile) { + break; + } + if (element instanceof PsiClass && element.getParent() instanceof PsiFile) { + break; + } + element = element.getParent(); + } + + if (element instanceof PsiJavaFile) { + final PsiClass[] classes = ((PsiJavaFile)element).getClasses(); + if (classes.length > 0) { + element = classes[0]; + } + } + + final PsiElement _element = element.getOriginalElement(); + + selectElement(new Runnable() { + public void run() { + final VirtualFile virtualFile = BasePsiNode.getVirtualFile(_element); + final FavoritesTreeViewPanel suitableFavoritesList = findSuitableFavoritesList(virtualFile); + if (suitableFavoritesList != null){ + suitableFavoritesList.selectElement(_element, virtualFile); + final ToolWindowManager windowManager = ToolWindowManager.getInstance(myProject); + windowManager.getToolWindow(ToolWindowId.FAVORITES_VIEW).activate(null); + final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(myProject); + favoritesView.setSelectedContent(favoritesView.getContent(suitableFavoritesList)); + } + } + }, requestFocus); + } + + private void selectElement(final Runnable runnable, final boolean requestFocus) { + final ToolWindowManager windowManager = ToolWindowManager.getInstance(myProject); + if (requestFocus) { + windowManager.getToolWindow(ToolWindowId.FAVORITES_VIEW).activate(runnable); + } + else { + runnable.run(); + } + } + + private FavoritesTreeViewPanel findSuitableFavoritesList(VirtualFile file){ + final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(myProject); + final String[] allAddActionNames = favoritesView.getAllAddActionNames(); + for (int i = 0; i < allAddActionNames.length; i++) { + String actionName = allAddActionNames[i]; + final FavoritesTreeViewPanel favoritesTreeViewPanel = favoritesView.getFavoritesTreeViewPanel(actionName); + if (favoritesTreeViewPanel.getFavoritesTreeStructure().contains(file)){ + return favoritesTreeViewPanel; + } + } + return null; + } + + protected void select(final Object selector, final VirtualFile virtualFile, final boolean requestFocus) { + selectElement(new Runnable() { + public void run() { + final FavoritesTreeViewPanel suitableFavoritesList = findSuitableFavoritesList(virtualFile); + if (suitableFavoritesList != null){ + suitableFavoritesList.selectElement(selector, virtualFile); + final ToolWindowManager windowManager = ToolWindowManager.getInstance(myProject); + windowManager.getToolWindow(ToolWindowId.FAVORITES_VIEW).activate(null); + final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(myProject); + favoritesView.setSelectedContent(favoritesView.getContent(suitableFavoritesList)); + } + } + }, requestFocus); + } + + protected boolean canWorkWithCustomObjects() { + return true; + } + + public String getToolWindowId() { + return ToolWindowId.FAVORITES_VIEW; + } + + public String getMinorViewId() { + return null; + } +} diff --git a/source/com/intellij/ide/favoritesTreeView/SendToFavoritesAction.java b/source/com/intellij/ide/favoritesTreeView/SendToFavoritesAction.java index 4ef2bf97cba3..4a1c30f9acc4 100644 --- a/source/com/intellij/ide/favoritesTreeView/SendToFavoritesAction.java +++ b/source/com/intellij/ide/favoritesTreeView/SendToFavoritesAction.java @@ -15,10 +15,13 @@ public class SendToFavoritesAction extends AnAction{ } public void actionPerformed(AnActionEvent e) { - Project project = (Project)e.getDataContext().getData(DataConstants.PROJECT); + final DataContext dataContext = e.getDataContext(); + Project project = (Project)dataContext.getData(DataConstants.PROJECT); final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(project); + final FavoritesTreeViewPanel currentTreeViewPanel = favoritesView.getCurrentTreeViewPanel(); + final FavoritesTreeNodeDescriptor[] selectedNodeDescriptors = currentTreeViewPanel.getSelectedNodeDescriptors(); favoritesView.getAddToFavoritesAction(myName).actionPerformed(e); - ((DeleteFromFavoritesAction)ActionManager.getInstance().getAction(IdeActions.REMOVE_FROM_FAVORITES)).actionPerformed(e); + ((DeleteFromFavoritesAction)ActionManager.getInstance().getAction(IdeActions.REMOVE_FROM_FAVORITES)).removeNodes(selectedNodeDescriptors, project, currentTreeViewPanel.getName()); } public void update(AnActionEvent e) { diff --git a/source/com/intellij/ide/favoritesTreeView/SendToFavoritesGroup.java b/source/com/intellij/ide/favoritesTreeView/SendToFavoritesGroup.java index 4a058780a925..95c0e804829f 100644 --- a/source/com/intellij/ide/favoritesTreeView/SendToFavoritesGroup.java +++ b/source/com/intellij/ide/favoritesTreeView/SendToFavoritesGroup.java @@ -11,10 +11,7 @@ import com.intellij.openapi.project.Project; * Date: Feb 24, 2005 */ public class SendToFavoritesGroup extends DefaultActionGroup{ - public SendToFavoritesGroup() { - super("Send To Other Favorites List", true); - } - + public void update(AnActionEvent e) { Project project = (Project)e.getDataContext().getData(DataConstants.PROJECT); final FavoritesViewImpl favoritesView = FavoritesViewImpl.getInstance(project); @@ -23,6 +20,7 @@ public class SendToFavoritesGroup extends DefaultActionGroup{ e.getPresentation().setEnabled(e.getPlace().equals(ActionPlaces.FAVORITES_VIEW_POPUP) && selectedNodeDescriptors != null && allAddActionNamesButThis != null); + removeAll(); for (int i = 0; i < allAddActionNamesButThis.length; i++) { String addAction = allAddActionNamesButThis[i]; add(new SendToFavoritesAction(addAction)); diff --git a/source/com/intellij/ide/projectView/BaseProjectTreeBuilder.java b/source/com/intellij/ide/projectView/BaseProjectTreeBuilder.java index 16b95c5a4ec3..6571ece70475 100644 --- a/source/com/intellij/ide/projectView/BaseProjectTreeBuilder.java +++ b/source/com/intellij/ide/projectView/BaseProjectTreeBuilder.java @@ -1,12 +1,13 @@ package com.intellij.ide.projectView; +import com.intellij.ide.favoritesTreeView.FavoritesTreeNodeDescriptor; import com.intellij.ide.projectView.impl.ProjectAbstractTreeStructureBase; import com.intellij.ide.util.treeView.AbstractTreeBuilder; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.NodeDescriptor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.intellij.util.ui.tree.TreeUtil; @@ -78,7 +79,11 @@ public abstract class BaseProjectTreeBuilder extends AbstractTreeBuilder { if (defaultMutableTreeNode.getUserObject() instanceof AbstractTreeNode) { ProjectViewNode treeNode = (ProjectViewNode)defaultMutableTreeNode.getUserObject(); result.add(treeNode); + } else if (defaultMutableTreeNode.getUserObject() instanceof FavoritesTreeNodeDescriptor){ + AbstractTreeNode treeNode = ((FavoritesTreeNodeDescriptor)defaultMutableTreeNode.getUserObject()).getElement(); + result.add(treeNode); } + } return result; diff --git a/source/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/source/com/intellij/ide/projectView/impl/ProjectViewImpl.java index fd3eb4b2c01e..66501b6fb044 100644 --- a/source/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/source/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -720,7 +720,7 @@ public final class ProjectViewImpl extends ProjectView implements JDOMExternaliz it.remove(); } } - return elements.toArray(new PsiElement[elements.size()]); + return elements.isEmpty() ? null : elements.toArray(new PsiElement[elements.size()]); } if (DataConstantsEx.TARGET_PSI_ELEMENT.equals(dataId)) { return null;