mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 09:03:31 +07:00
IDEA-723
This commit is contained in:
@@ -66,14 +66,14 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp
|
||||
ourAbstractUrlProviders.add(new MethodUrl(null, null));
|
||||
}
|
||||
|
||||
private final AbstractTreeNode myRoot;
|
||||
private final AbstractTreeNode<String> myRoot;
|
||||
|
||||
private Set<AbstractTreeNode> myFavorites = new HashSet<AbstractTreeNode>();
|
||||
private HashMap<AbstractUrl, String> myAbstractUrls = new HashMap<AbstractUrl, String>();
|
||||
private FavoritesTreeViewConfiguration myFavoritesConfiguration = new FavoritesTreeViewConfiguration();
|
||||
public FavoritesTreeStructure(Project project) {
|
||||
super(project);
|
||||
myRoot = new AbstractTreeNode(myProject, "") {
|
||||
myRoot = new AbstractTreeNode<String>(myProject, "") {
|
||||
public Collection<AbstractTreeNode> getChildren() {
|
||||
return myFavorites;
|
||||
}
|
||||
@@ -103,18 +103,18 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp
|
||||
final AbstractTreeNode favoritesTreeElement = (AbstractTreeNode)element;
|
||||
try {
|
||||
if (element == myRoot) {
|
||||
if (myFavorites.isEmpty()){
|
||||
return new Object [] {new AbstractTreeNode<String>(myProject, "There is nothing to display. Add node to favorites list."){
|
||||
public Collection<AbstractTreeNode> getChildren() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void update(final PresentationData presentation) {
|
||||
presentation.setPresentableText(getValue());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//todo
|
||||
Set<AbstractTreeNode> result = new HashSet<AbstractTreeNode>();
|
||||
for (Iterator<AbstractTreeNode> iterator = myFavorites.iterator(); iterator.hasNext();) {
|
||||
AbstractTreeNode abstractTreeNode = iterator.next();
|
||||
final Object val = abstractTreeNode.getValue();
|
||||
if (val != null && (!(val instanceof PsiElement) || ((PsiElement)val).isValid())){
|
||||
result.add(abstractTreeNode);
|
||||
}
|
||||
}
|
||||
myFavorites = result;
|
||||
if (myFavorites.isEmpty()) {
|
||||
return new Object[]{getEmptyScreen()};
|
||||
}
|
||||
return myFavorites.toArray(new Object[myFavorites.size()]);
|
||||
}
|
||||
@@ -126,6 +126,18 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp
|
||||
return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
}
|
||||
|
||||
private AbstractTreeNode<String> getEmptyScreen() {
|
||||
return new AbstractTreeNode<String>(myProject, "There is nothing to display. Add node to favorites list."){
|
||||
public Collection<AbstractTreeNode> getChildren() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void update(final PresentationData presentation) {
|
||||
presentation.setPresentableText(getValue());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public Object getParentElement(Object element) {
|
||||
AbstractTreeNode parent = null;
|
||||
if (element instanceof AbstractTreeNode) {
|
||||
@@ -223,6 +235,9 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp
|
||||
for (Iterator<AbstractUrl> iterator = myAbstractUrls.keySet().iterator(); iterator.hasNext();) {
|
||||
AbstractUrl abstractUrl = iterator.next();
|
||||
final Object[] path = abstractUrl.createPath(myProject);
|
||||
if (path == null || path.length < 1){
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
if (abstractUrl instanceof FormUrl){
|
||||
final PsiManager psiManager = PsiManager.getInstance(myProject);
|
||||
@@ -268,9 +283,10 @@ public class FavoritesTreeStructure extends ProjectAbstractTreeStructureBase imp
|
||||
for (Iterator<Element> iterator = element.getChildren("favorite_root").iterator(); iterator.hasNext();) {
|
||||
Element favorite = iterator.next();
|
||||
final String klass = favorite.getAttributeValue("klass");
|
||||
|
||||
final AbstractUrl abstractUrl = readUrlFromElement(favorite);
|
||||
myAbstractUrls.put(abstractUrl, klass);
|
||||
if (abstractUrl != null) {
|
||||
myAbstractUrls.put(abstractUrl, klass);
|
||||
}
|
||||
}
|
||||
myFavoritesConfiguration.readExternal(element);
|
||||
}
|
||||
|
||||
@@ -24,12 +24,14 @@ import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.util.EditSourceOnDoubleClickHandler;
|
||||
import com.intellij.util.OpenSourceUtil;
|
||||
import com.intellij.util.ui.Tree;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
|
||||
@@ -40,6 +42,10 @@ import javax.swing.tree.TreePath;
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.dnd.*;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
@@ -191,6 +197,21 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider {
|
||||
add(createActionsToolbar(), BorderLayout.NORTH);
|
||||
|
||||
EditSourceOnDoubleClickHandler.install(myTree);
|
||||
myTree.addMouseListener(new MouseAdapter() {
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (!e.isPopupTrigger() && e.getClickCount() == 2) {
|
||||
OpenSourceUtil.openSourcesFrom(DataManager.getInstance().getDataContext(FavoritesTreeViewPanel.this), true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
myTree.addKeyListener(new KeyAdapter() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
OpenSourceUtil.openSourcesFrom(DataManager.getInstance().getDataContext(FavoritesTreeViewPanel.this), false);
|
||||
}
|
||||
}
|
||||
});
|
||||
myCopyPasteDelegator = new CopyPasteManagerEx.CopyPasteDelegator(myProject, this) {
|
||||
protected PsiElement[] getSelectedElements() {
|
||||
return getSelectedPsiElements();
|
||||
@@ -251,6 +272,11 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider {
|
||||
final FavoritesTreeNodeDescriptor[] selectedNodeDescriptors = getSelectedNodeDescriptors();
|
||||
return selectedNodeDescriptors != null && selectedNodeDescriptors.length == 1 ? selectedNodeDescriptors[0].getElement() : null;
|
||||
}
|
||||
if (DataConstants.NAVIGATABLE_ARRAY.equals(dataId)) {
|
||||
final List<Navigatable> selectedElements = getSelectedElements(Navigatable.class);
|
||||
return selectedElements.toArray(new Navigatable[selectedElements.size()]);
|
||||
}
|
||||
|
||||
if (DataConstantsEx.CUT_PROVIDER.equals(dataId)) {
|
||||
return myCopyPasteDelegator.getCutProvider();
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import javax.swing.tree.DefaultTreeModel;
|
||||
|
||||
public class FavoritesViewTreeBuilder extends BaseProjectTreeBuilder {
|
||||
private ProjectViewPsiTreeChangeListener myPsiTreeChangeListener;
|
||||
private final PsiTreeChangeListener myPsiTreeChangeAdapter;
|
||||
private ModuleRootListener myModuleRootListener;
|
||||
private FileStatusListener myFileStatusListener;
|
||||
private MyCopyPasteListener myCopyPasteListener;
|
||||
@@ -94,6 +95,8 @@ public class FavoritesViewTreeBuilder extends BaseProjectTreeBuilder {
|
||||
}
|
||||
};
|
||||
PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeListener);
|
||||
myPsiTreeChangeAdapter = new MyPsiTreeChangeListener();
|
||||
PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeAdapter);
|
||||
ProjectRootManager.getInstance(myProject).addModuleRootListener(myModuleRootListener);
|
||||
myFileStatusListener = new MyFileStatusListener();
|
||||
FileStatusManager.getInstance(myProject).addFileStatusListener(myFileStatusListener);
|
||||
@@ -120,6 +123,7 @@ public class FavoritesViewTreeBuilder extends BaseProjectTreeBuilder {
|
||||
public final void dispose() {
|
||||
super.dispose();
|
||||
PsiManager.getInstance(myProject).removePsiTreeChangeListener(myPsiTreeChangeListener);
|
||||
PsiManager.getInstance(myProject).removePsiTreeChangeListener(myPsiTreeChangeAdapter);
|
||||
ProjectRootManager.getInstance(myProject).removeModuleRootListener(myModuleRootListener);
|
||||
FileStatusManager.getInstance(myProject).removeFileStatusListener(myFileStatusListener);
|
||||
CopyPasteManager.getInstance().removeContentChangedListener(myCopyPasteListener);
|
||||
@@ -155,6 +159,32 @@ public class FavoritesViewTreeBuilder extends BaseProjectTreeBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private final class MyPsiTreeChangeListener extends PsiTreeChangeAdapter {
|
||||
public final void childAdded(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
|
||||
public final void childRemoved(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
|
||||
public final void childReplaced(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
|
||||
public final void childMoved(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
|
||||
public final void childrenChanged(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
|
||||
public final void propertyChanged(final PsiTreeChangeEvent event) {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
}
|
||||
}
|
||||
|
||||
private final class MyCopyPasteListener implements CopyPasteManager.ContentChangedListener {
|
||||
public void contentChanged() {
|
||||
myUpdater.addSubtreeToUpdate(myRootNode);
|
||||
|
||||
Reference in New Issue
Block a user