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;