use of javax.swing.tree.DefaultMutableTreeNode in project intellij-plugins by StepicOrg.
the class NavigationUtils method collapseNonSelected.
private static void collapseNonSelected(@NotNull PsiFileSystemItem file) {
ProjectView projectView = ProjectView.getInstance(file.getProject());
if (projectView == null) {
return;
}
AbstractProjectViewPane projectViewPane = projectView.getCurrentProjectViewPane();
if (projectViewPane == null) {
return;
}
JTree tree = projectViewPane.getTree();
Set<TreePath> paths = new HashSet<>(TreeUtil.collectExpandedPaths(tree));
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
DefaultMutableTreeNode selectionNode = findNodeWithObject(root, file);
if (selectionNode != null) {
List<TreePath> toCollapse = new ArrayList<>();
TreePath selectedPath = getPathFromRoot(selectionNode);
for (TreePath treePath : paths) {
if (treePath.isDescendant(selectedPath)) {
continue;
}
TreePath currPath = treePath;
TreePath parent = treePath.getParentPath();
while (parent != null) {
if (parent.isDescendant(selectedPath)) {
toCollapse.add(currPath);
break;
}
currPath = parent;
parent = parent.getParentPath();
}
}
for (TreePath path : toCollapse) {
tree.collapsePath(path);
tree.fireTreeCollapsed(path);
}
}
}
use of javax.swing.tree.DefaultMutableTreeNode in project intellij-plugins by StepicOrg.
the class NavigationUtils method findNodeWithObject.
@Nullable
private static DefaultMutableTreeNode findNodeWithObject(@NotNull TreeNode root, PsiFileSystemItem file) {
for (int i = 0; i < root.getChildCount(); i++) {
TreeNode child = root.getChildAt(i);
if (child instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) child;
Object userObject = node.getUserObject();
if (userObject instanceof PsiDirectoryNode) {
PsiDirectoryNode directoryNode = (PsiDirectoryNode) userObject;
PsiDirectory value = directoryNode.getValue();
if (file.equals(value)) {
return node;
}
}
node = findNodeWithObject(child, file);
if (node != null) {
return node;
}
}
}
return null;
}
use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.
the class MavenSelectProjectPopup method attachToButton.
public static void attachToButton(@NotNull final MavenProjectsManager projectsManager, @NotNull final JButton button, @NotNull final Consumer<MavenProject> callback) {
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<MavenProject> projectList = projectsManager.getProjects();
if (projectList.isEmpty()) {
JBPopupFactory.getInstance().createMessage("Maven projects not found").showUnderneathOf(button);
return;
}
DefaultMutableTreeNode root = buildTree(projectList);
final Map<MavenProject, String> projectsNameMap = MavenProjectNamer.generateNameMap(projectList);
final Tree projectTree = new Tree(root);
projectTree.setRootVisible(false);
projectTree.setCellRenderer(new NodeRenderer() {
@Override
public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
if (value instanceof DefaultMutableTreeNode) {
MavenProject mavenProject = (MavenProject) ((DefaultMutableTreeNode) value).getUserObject();
value = projectsNameMap.get(mavenProject);
setIcon(MavenIcons.MavenProject);
}
super.customizeCellRenderer(tree, value, selected, expanded, leaf, row, hasFocus);
}
});
new TreeSpeedSearch(projectTree, new Convertor<TreePath, String>() {
@Override
public String convert(TreePath o) {
Object lastPathComponent = o.getLastPathComponent();
if (!(lastPathComponent instanceof DefaultMutableTreeNode))
return null;
Object userObject = ((DefaultMutableTreeNode) lastPathComponent).getUserObject();
//noinspection SuspiciousMethodCalls
return projectsNameMap.get(userObject);
}
});
final Ref<JBPopup> popupRef = new Ref<>();
final Runnable clickCallBack = () -> {
TreePath path = projectTree.getSelectionPath();
if (path == null)
return;
Object lastPathComponent = path.getLastPathComponent();
if (!(lastPathComponent instanceof DefaultMutableTreeNode))
return;
Object object = ((DefaultMutableTreeNode) lastPathComponent).getUserObject();
// may be it's the root
if (object == null)
return;
callback.consume((MavenProject) object);
popupRef.get().closeOk(null);
};
projectTree.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
clickCallBack.run();
e.consume();
}
}
});
JBPopup popup = new PopupChooserBuilder(projectTree).setTitle("Select maven project").setResizable(true).setItemChoosenCallback(clickCallBack).setAutoselectOnMouseMove(true).setCloseOnEnter(false).createPopup();
popupRef.set(popup);
popup.showUnderneathOf(button);
}
private DefaultMutableTreeNode buildTree(List<MavenProject> projectList) {
MavenProject[] projects = projectList.toArray(new MavenProject[projectList.size()]);
Arrays.sort(projects, new MavenProjectNamer.MavenProjectComparator());
Map<MavenProject, DefaultMutableTreeNode> projectsToNode = new HashMap<>();
for (MavenProject mavenProject : projects) {
projectsToNode.put(mavenProject, new DefaultMutableTreeNode(mavenProject));
}
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
for (MavenProject mavenProject : projects) {
DefaultMutableTreeNode parent;
MavenProject aggregator = projectsManager.findAggregator(mavenProject);
if (aggregator != null) {
parent = projectsToNode.get(aggregator);
} else {
parent = root;
}
parent.add(projectsToNode.get(mavenProject));
}
return root;
}
});
}
use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.
the class ComponentTree method extractComponent.
@Nullable
public RadComponent extractComponent(Object value) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObject = node.getUserObject();
if (myDesigner != null && userObject instanceof TreeNodeDescriptor) {
TreeNodeDescriptor descriptor = (TreeNodeDescriptor) userObject;
Object element = descriptor.getElement();
if (element instanceof RadComponent) {
return (RadComponent) element;
}
}
return null;
}
use of javax.swing.tree.DefaultMutableTreeNode in project intellij-community by JetBrains.
the class GeneratedStructureModel method getFilteredChildren.
private static List getFilteredChildren(DefaultMutableTreeNode node, boolean checkOnly) {
if (node.getChildCount() == 0) {
return Collections.emptyList();
}
final List<DefaultMutableTreeNode> nodes = checkOnly ? new SmartList<>() : new ArrayList<>(node.getChildCount());
DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getFirstChild();
while (child != null) {
if (child instanceof StructureNode) {
final OutputEventQueue.NodeEvent event = (OutputEventQueue.NodeEvent) child.getUserObject();
if (event != null && event.getType() == OutputEventQueue.CHARACTERS) {
if (event.getValue().trim().length() == 0) {
child = child.getNextSibling();
continue;
}
}
}
nodes.add(child);
if (checkOnly)
return nodes;
child = child.getNextSibling();
}
return nodes;
}
Aggregations