Search in sources :

Example 6 with NodeDescriptor

use of com.intellij.ide.util.treeView.NodeDescriptor in project intellij-community by JetBrains.

the class ContentEntryTreeCellRenderer method customizeCellRenderer.

@Override
public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    super.customizeCellRenderer(tree, value, selected, expanded, leaf, row, hasFocus);
    final ContentEntryEditor editor = myTreeEditor.getContentEntryEditor();
    if (editor != null) {
        final Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
        if (userObject instanceof NodeDescriptor) {
            final Object element = ((NodeDescriptor) userObject).getElement();
            if (element instanceof FileElement) {
                final VirtualFile file = ((FileElement) element).getFile();
                if (file != null && file.isDirectory()) {
                    final ContentEntry contentEntry = editor.getContentEntry();
                    if (contentEntry != null) {
                        final String prefix = getPresentablePrefix(contentEntry, file);
                        if (!prefix.isEmpty()) {
                            append(" (" + prefix + ")", new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, JBColor.GRAY));
                        }
                        setIcon(updateIcon(contentEntry, file, getIcon()));
                    }
                }
            }
        }
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) ContentEntry(com.intellij.openapi.roots.ContentEntry) SimpleTextAttributes(com.intellij.ui.SimpleTextAttributes) NodeDescriptor(com.intellij.ide.util.treeView.NodeDescriptor) FileElement(com.intellij.openapi.fileChooser.FileElement)

Example 7 with NodeDescriptor

use of com.intellij.ide.util.treeView.NodeDescriptor in project intellij-community by JetBrains.

the class ContentEntryTreeEditor method setContentEntryEditor.

/**
   * @param contentEntryEditor : null means to clear the editor
   */
public void setContentEntryEditor(final ContentEntryEditor contentEntryEditor) {
    if (myContentEntryEditor != null && myContentEntryEditor.equals(contentEntryEditor)) {
        return;
    }
    if (myFileSystemTree != null) {
        Disposer.dispose(myFileSystemTree);
        myFileSystemTree = null;
    }
    if (myContentEntryEditor != null) {
        myContentEntryEditor.removeContentEntryEditorListener(myContentEntryEditorListener);
        myContentEntryEditor = null;
    }
    if (contentEntryEditor == null) {
        ((DefaultTreeModel) myTree.getModel()).setRoot(EMPTY_TREE_ROOT);
        myTreePanel.setVisible(false);
        if (myFileSystemTree != null) {
            Disposer.dispose(myFileSystemTree);
        }
        return;
    }
    myTreePanel.setVisible(true);
    myContentEntryEditor = contentEntryEditor;
    myContentEntryEditor.addContentEntryEditorListener(myContentEntryEditorListener);
    final ContentEntry entry = contentEntryEditor.getContentEntry();
    assert entry != null : contentEntryEditor;
    final VirtualFile file = entry.getFile();
    if (file != null) {
        myDescriptor.setRoots(file);
    } else {
        String path = VfsUtilCore.urlToPath(entry.getUrl());
        myDescriptor.setTitle(FileUtil.toSystemDependentName(path));
    }
    final Runnable init = () -> {
        //noinspection ConstantConditions
        myFileSystemTree.updateTree();
        myFileSystemTree.select(file, null);
    };
    myFileSystemTree = new FileSystemTreeImpl(myProject, myDescriptor, myTree, getContentEntryCellRenderer(), init, null) {

        @Override
        protected AbstractTreeBuilder createTreeBuilder(JTree tree, DefaultTreeModel treeModel, AbstractTreeStructure treeStructure, Comparator<NodeDescriptor> comparator, FileChooserDescriptor descriptor, final Runnable onInitialized) {
            return new MyFileTreeBuilder(tree, treeModel, treeStructure, comparator, descriptor, onInitialized);
        }
    };
    myFileSystemTree.showHiddens(true);
    Disposer.register(myProject, myFileSystemTree);
    final NewFolderAction newFolderAction = new MyNewFolderAction();
    final DefaultActionGroup mousePopupGroup = new DefaultActionGroup();
    mousePopupGroup.add(myEditingActionsGroup);
    mousePopupGroup.addSeparator();
    mousePopupGroup.add(newFolderAction);
    myFileSystemTree.registerMouseListener(mousePopupGroup);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) FileChooserDescriptor(com.intellij.openapi.fileChooser.FileChooserDescriptor) AbstractTreeBuilder(com.intellij.ide.util.treeView.AbstractTreeBuilder) NodeDescriptor(com.intellij.ide.util.treeView.NodeDescriptor) FileSystemTreeImpl(com.intellij.openapi.fileChooser.ex.FileSystemTreeImpl) NewFolderAction(com.intellij.openapi.fileChooser.actions.NewFolderAction) DefaultActionGroup(com.intellij.openapi.actionSystem.DefaultActionGroup) ContentEntry(com.intellij.openapi.roots.ContentEntry) AbstractTreeStructure(com.intellij.ide.util.treeView.AbstractTreeStructure)

Example 8 with NodeDescriptor

use of com.intellij.ide.util.treeView.NodeDescriptor in project intellij-community by JetBrains.

the class LibraryTreeRenderer method customizeCellRenderer.

@Override
public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
    Object userObject = node.getUserObject();
    if (userObject instanceof NodeDescriptor) {
        final NodeDescriptor descriptor = (NodeDescriptor) userObject;
        setIcon(descriptor.getIcon());
        append(descriptor.toString(), new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, descriptor.getColor()));
    }
}
Also used : DefaultMutableTreeNode(javax.swing.tree.DefaultMutableTreeNode) SimpleTextAttributes(com.intellij.ui.SimpleTextAttributes) NodeDescriptor(com.intellij.ide.util.treeView.NodeDescriptor)

Example 9 with NodeDescriptor

use of com.intellij.ide.util.treeView.NodeDescriptor in project intellij-community by JetBrains.

the class AbstractListBuilder method updateList.

protected final void updateList() {
    if (myIsDisposed || myCurrentParent == null) {
        return;
    }
    if (myTreeStructure.hasSomethingToCommit()) {
        myTreeStructure.commit();
    }
    AbstractTreeNode parentDescriptor = myCurrentParent;
    while (true) {
        parentDescriptor.update();
        if (parentDescriptor.getValue() != null)
            break;
        parentDescriptor = parentDescriptor.getParent();
    }
    final Object[] children = getChildren(parentDescriptor);
    final HashMap<Object, Integer> elementToIndexMap = new HashMap<>();
    for (int i = 0; i < children.length; i++) {
        elementToIndexMap.put(children[i], Integer.valueOf(i));
    }
    final List<NodeDescriptor> resultDescriptors = new ArrayList<>();
    final Object[] listChildren = myModel.toArray();
    for (final Object child : listChildren) {
        if (!(child instanceof NodeDescriptor)) {
            continue;
        }
        final NodeDescriptor descriptor = (NodeDescriptor) child;
        descriptor.update();
        final Object newElement = descriptor.getElement();
        final Integer index = newElement != null ? elementToIndexMap.get(newElement) : null;
        if (index != null) {
            resultDescriptors.add(descriptor);
            descriptor.setIndex(index.intValue());
            elementToIndexMap.remove(newElement);
        }
    }
    for (final Object child : elementToIndexMap.keySet()) {
        final Integer index = elementToIndexMap.get(child);
        if (index != null) {
            final NodeDescriptor childDescr = myTreeStructure.createDescriptor(child, parentDescriptor);
            childDescr.setIndex(index.intValue());
            childDescr.update();
            resultDescriptors.add(childDescr);
        }
    }
    final SelectionInfo selection = storeSelection();
    if (myComparator != null) {
        Collections.sort(resultDescriptors, myComparator);
    } else {
        Collections.sort(resultDescriptors, IndexComparator.INSTANCE);
    }
    if (shouldAddTopElement()) {
        final List elems = new ArrayList();
        elems.add(new TopLevelNode(myProject, parentDescriptor.getValue()));
        elems.addAll(resultDescriptors);
        myModel.replaceElements(elems);
    } else {
        myModel.replaceElements(resultDescriptors);
    }
    restoreSelection(selection);
    updateParentTitle();
}
Also used : HashMap(com.intellij.util.containers.HashMap) NodeDescriptor(com.intellij.ide.util.treeView.NodeDescriptor) AbstractTreeNode(com.intellij.ide.util.treeView.AbstractTreeNode) List(java.util.List)

Example 10 with NodeDescriptor

use of com.intellij.ide.util.treeView.NodeDescriptor in project intellij-community by JetBrains.

the class BaseProjectTreeBuilder method expandNodeChildren.

@Override
protected final void expandNodeChildren(@NotNull final DefaultMutableTreeNode node) {
    final NodeDescriptor userObject = (NodeDescriptor) node.getUserObject();
    if (userObject == null)
        return;
    Object element = userObject.getElement();
    VirtualFile virtualFile = getFileToRefresh(element);
    super.expandNodeChildren(node);
    if (virtualFile != null) {
        virtualFile.refresh(true, false);
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) FavoritesTreeNodeDescriptor(com.intellij.ide.favoritesTreeView.FavoritesTreeNodeDescriptor) NodeDescriptor(com.intellij.ide.util.treeView.NodeDescriptor)

Aggregations

NodeDescriptor (com.intellij.ide.util.treeView.NodeDescriptor)25 DefaultMutableTreeNode (javax.swing.tree.DefaultMutableTreeNode)9 VirtualFile (com.intellij.openapi.vfs.VirtualFile)5 PsiFile (com.intellij.psi.PsiFile)4 SimpleTextAttributes (com.intellij.ui.SimpleTextAttributes)4 TreePath (javax.swing.tree.TreePath)4 TodoItemNode (com.intellij.ide.todo.nodes.TodoItemNode)3 AbstractTreeNode (com.intellij.ide.util.treeView.AbstractTreeNode)3 DirectoryGroupNode (com.android.tools.idea.navigator.nodes.DirectoryGroupNode)2 PackageElement (com.intellij.ide.projectView.impl.nodes.PackageElement)2 FileElement (com.intellij.openapi.fileChooser.FileElement)2 Module (com.intellij.openapi.module.Module)2 Project (com.intellij.openapi.project.Project)2 ContentEntry (com.intellij.openapi.roots.ContentEntry)2 PsiDirectory (com.intellij.psi.PsiDirectory)2 PsiElement (com.intellij.psi.PsiElement)2 ArrayList (java.util.ArrayList)2 Nullable (org.jetbrains.annotations.Nullable)2 FolderConfiguration (com.android.ide.common.resources.configuration.FolderConfiguration)1 FileGroupNode (com.android.tools.idea.navigator.nodes.FileGroupNode)1