Java源码示例:com.intellij.util.ui.tree.TreeUtil

示例1
public JsonTreeTableView(TreeNode rootNode, ColumnInfo[] columnInfos) {
    super(new ListTreeTableModelOnColumns(rootNode, columnInfos));
    this.columns = columnInfos;

    final TreeTableTree tree = getTree();

    tree.setShowsRootHandles(true);
    tree.setRootVisible(false);
    UIUtil.setLineStyleAngled(tree);
    setTreeCellRenderer(new KeyCellRenderer());

    TreeUtil.expand(tree, 2);

    new TreeTableSpeedSearch(this, new Convertor<TreePath, String>() {
        @Override
        public String convert(final TreePath path) {
            final NoSqlTreeNode node = (NoSqlTreeNode) path.getLastPathComponent();
            NodeDescriptor descriptor = node.getDescriptor();
            return descriptor.getFormattedKey();
        }
    });
}
 
示例2
public void addWatchExpression(@Nullable XStackFrame stackFrame,
                               @Nonnull XExpression expression,
                               int index,
                               boolean navigateToWatchNode) {
  WatchNodeImpl message = new WatchNodeImpl(myTree, this, expression, stackFrame);
  if (index == -1) {
    myChildren.add(message);
    index = myChildren.size() - 1;
  }
  else {
    myChildren.add(index, message);
  }
  fireNodeInserted(index);
  TreeUtil.selectNode(myTree, message);
  if (navigateToWatchNode) {
    myTree.scrollPathToVisible(message.getPath());
  }
}
 
示例3
public void addKey(String key, Object value) {

        List<TreeNode> node = new LinkedList<TreeNode>();
        NoSqlTreeNode treeNode = new NoSqlTreeNode(MongoKeyValueDescriptor.createDescriptor(key, value));

        if (value instanceof DBObject) {
            JsonTreeModel.processDbObject(treeNode, (DBObject) value);
        }

        node.add(treeNode);

        DefaultTreeModel treeModel = (DefaultTreeModel) editTableView.getTree().getModel();
        NoSqlTreeNode parentNode = getParentNode();
        if (parentNode == null) {
            parentNode = (NoSqlTreeNode) treeModel.getRoot();
        }
        TreeUtil.addChildrenTo(parentNode, node);
        treeModel.reload(parentNode);
    }
 
示例4
@RequiredUIAccess
@Override
public void actionPerformed(final AnActionEvent e) {
  TreeNode defaults = TreeUtil.findNodeWithObject(DEFAULTS, myTree.getModel(), myRoot);
  if (defaults != null) {
    final ConfigurationType configurationType = getSelectedConfigurationType();
    if (configurationType != null) {
      defaults = TreeUtil.findNodeWithObject(configurationType, myTree.getModel(), defaults);
    }
    final DefaultMutableTreeNode defaultsNode = (DefaultMutableTreeNode)defaults;
    if (defaultsNode == null) {
      return;
    }
    final TreePath path = TreeUtil.getPath(myRoot, defaultsNode);
    myTree.expandPath(path);
    TreeUtil.selectInTree(defaultsNode, true, myTree);
    myTree.scrollPathToVisible(path);
  }
}
 
示例5
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
  if (e.getKeyCode() == KeyEvent.VK_ENTER && e.getModifiers() == 0 && pressed) {
    if (myTree.isEditing()) {
      myTree.stopEditing();
    }
    else {
      DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
      if (node != null) {
        myTree.startEditingAtPath(TreeUtil.getPathFromRoot(node));
      }
    }
    return true;
  }
  if (myAllowSyncStrategy && e.getKeyCode() == KeyEvent.VK_F2 && e.getModifiers() == InputEvent.ALT_MASK && pressed) {
    startSyncEditing();
    return true;
  }
  return super.processKeyBinding(ks, e, condition, pressed);
}
 
示例6
private static void sortSubTree(final DefaultMutableTreeNode root) {
  TreeUtil.sort(root, new Comparator() {
    @Override
    public int compare(final Object o1, final Object o2) {
      DefaultMutableTreeNode node1 = (DefaultMutableTreeNode)o1;
      DefaultMutableTreeNode node2 = (DefaultMutableTreeNode)o2;
      if (!(node1.getUserObject() instanceof MyUserObject)){
        return 1;
      }
      else if (!(node2.getUserObject() instanceof MyUserObject)){
        return -1;
      }
      return (node1.getUserObject().toString().compareToIgnoreCase(node2.getUserObject().toString()));
    }
  });
}
 
示例7
private void applyConfiguration(DefaultMutableTreeNode typeNode, SingleConfigurationConfigurable<?> configurable) throws ConfigurationException {
  try {
    if (configurable != null) {
      configurable.apply();
      RunManagerImpl.getInstanceImpl(myProject).fireRunConfigurationChanged(configurable.getSettings());
    }
  }
  catch (ConfigurationException e) {
    for (int i = 0; i < typeNode.getChildCount(); i++) {
      final DefaultMutableTreeNode node = (DefaultMutableTreeNode)typeNode.getChildAt(i);
      if (Comparing.equal(configurable, node.getUserObject())) {
        TreeUtil.selectNode(myTree, node);
        break;
      }
    }
    throw e;
  }
}
 
示例8
@Nonnull
private Promise<TreePath> rebuildAndSelect(boolean refilterOnly, Object selection) {
  AsyncPromise<TreePath> result = new AsyncPromise<>();
  myStructureTreeModel.getInvoker().runOrInvokeLater(() -> {
    if (refilterOnly) {
      myFilteringStructure.refilter();
      myStructureTreeModel.invalidate().onSuccess(
              res -> (selection == null ? myAsyncTreeModel.accept(o -> TreeVisitor.Action.CONTINUE) : select(selection)).onError(ignore2 -> result.setError("rejected")).onSuccess(p -> UIUtil.invokeLaterIfNeeded(() -> {
                TreeUtil.expand(getTree(), myTreeModel instanceof StructureViewCompositeModel ? 3 : 2);
                TreeUtil.ensureSelection(myTree);
                mySpeedSearch.refreshSelection();
                result.setResult(p);
              })));
    }
    else {
      myTreeStructure.rebuildTree();
      myStructureTreeModel.invalidate().onSuccess(res -> rebuildAndSelect(true, selection).processed(result));
    }
  });
  return result;
}
 
示例9
@Override
public void treeNodesInserted(TreeModelEvent e) {
  TreePath parentPath = e.getTreePath();
  if (Boolean.TRUE.equals(UIUtil.getClientProperty(tree, STRUCTURE_VIEW_STATE_RESTORED_KEY))) return;
  if (parentPath == null || parentPath.getPathCount() > autoExpandDepth.asInteger() - 1) return;
  Object[] children = e.getChildren();
  if (smartExpand && children.length == 1) {
    expandLater(parentPath, children[0]);
  }
  else {
    for (Object o : children) {
      NodeDescriptor descriptor = TreeUtil.getUserObject(NodeDescriptor.class, o);
      if (descriptor != null && isAutoExpandNode(descriptor)) {
        expandLater(parentPath, o);
      }
    }
  }
}
 
示例10
private int findRowContainingFile(@Nonnull TreeNode root, @Nonnull final VirtualFile toSelect) {
  final Ref<Integer> row = Ref.create(-1);
  TreeUtil.traverse(root, node -> {
    if (node instanceof DefaultMutableTreeNode) {
      Object userObject = ((DefaultMutableTreeNode)node).getUserObject();
      if (userObject instanceof Change) {
        if (matches((Change)userObject, toSelect)) {
          TreeNode[] path = ((DefaultMutableTreeNode)node).getPath();
          row.set(getRowForPath(new TreePath(path)));
        }
      }
    }

    return row.get() == -1;
  });
  return row.get();
}
 
示例11
public void buildTree(@Nonnull Collection<? extends BreakpointItem> breakpoints) {
  final TreeState state = TreeState.createOn(myTreeView, myRoot);
  myRoot.removeAllChildren();
  myNodes.clear();
  for (BreakpointItem breakpoint : breakpoints) {
    BreakpointItemNode node = new BreakpointItemNode(breakpoint);
    CheckedTreeNode parent = getParentNode(breakpoint);
    parent.add(node);
    myNodes.put(breakpoint, node);
  }
  TreeUtil.sortRecursively(myRoot, COMPARATOR);
  myInBuild = true;
  ((DefaultTreeModel)(myTreeView.getModel())).nodeStructureChanged(myRoot);
  state.applyTo(myTreeView, myRoot);
  myInBuild = false;
}
 
示例12
protected void clearChildren() {
  TreeUtil.traverseDepth(myRoot, new TreeUtil.Traverse() {
    @Override
    public boolean accept(Object node) {
      if (node instanceof MyNode) {
        final MyNode treeNode = ((MyNode)node);
        treeNode.getConfigurable().disposeUIResources();
        if (!(treeNode instanceof MyRootNode)) {
          treeNode.setUserObject(null);
        }
      }
      return true;
    }
  });
  myRoot.removeAllChildren();
}
 
示例13
private void reloadTree() {
  myRoot.removeAllChildren();
  loadScopes(mySharedScopesManager);
  loadScopes(myLocalScopesManager);

  if (isModified()) {
    loadStateOrder();
  }


  final List<String> order = getScopesState().myOrder;
  TreeUtil.sort(myRoot, new Comparator<DefaultMutableTreeNode>() {
    @Override
    public int compare(final DefaultMutableTreeNode o1, final DefaultMutableTreeNode o2) {
      final int idx1 = order.indexOf(((MyNode)o1).getDisplayName());
      final int idx2 = order.indexOf(((MyNode)o2).getDisplayName());
      return idx1 - idx2;
    }
  });
}
 
示例14
public void reset() {
  List<ToolsGroup<T>> groups = getToolsGroups();

  for (ToolsGroup group : groups) {
    insertNewGroup((ToolsGroup)group.copy());
  }

  if ((getTreeRoot()).getChildCount() > 0) {
    myTree.setSelectionInterval(0, 0);
  }
  else {
    myTree.getSelectionModel().clearSelection();
  }
  (getModel()).nodeStructureChanged(null);

  TreeUtil.expand(myTree, 5);

  myIsModified = false;

  update();
}
 
示例15
@RequiredUIAccess
@Override
public void update(AnActionEvent e) {
  boolean isEnabled = TreeUtil.findNodeWithObject(DEFAULTS, myTree.getModel(), myRoot) != null;
  TreePath path = myTree.getSelectionPath();
  if (path != null) {
    Object o = path.getLastPathComponent();
    if (o instanceof DefaultMutableTreeNode && ((DefaultMutableTreeNode)o).getUserObject().equals(DEFAULTS)) {
      isEnabled = false;
    }
    o = path.getParentPath().getLastPathComponent();
    if (o instanceof DefaultMutableTreeNode && ((DefaultMutableTreeNode)o).getUserObject().equals(DEFAULTS)) {
      isEnabled = false;
    }
  }
  e.getPresentation().setEnabled(isEnabled);
}
 
示例16
@Nonnull
private Runnable wrapScrollTo(Runnable onDone, @Nonnull Object element, @Nonnull DefaultMutableTreeNode node, boolean addToSelection, boolean canBeCentered, boolean scroll) {
  return new TreeRunnable("AbstractTreeUi.wrapScrollTo") {
    @Override
    public void perform() {
      int row = getRowIfUnderSelection(element);
      if (row == -1) row = myTree.getRowForPath(new TreePath(node.getPath()));
      int top = row - 2;
      int bottom = row + 2;
      if (canBeCentered && Registry.is("ide.tree.autoscrollToVCenter")) {
        int count = TreeUtil.getVisibleRowCount(myTree) - 1;
        top = count > 0 ? row - count / 2 : row;
        bottom = count > 0 ? top + count : row;
      }
      TreeUtil.showAndSelect(myTree, top, bottom, row, -1, addToSelection, scroll).doWhenDone(wrapDone(onDone, "AbstractTreeUi.wrapScrollTo.onDone"));
    }
  };
}
 
示例17
private TreePath removeNode(DefaultMutableTreeNode node) {
  DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
  if (parent != null) {
    IndexTreePathState state = new IndexTreePathState(TreeUtil.getPathFromRoot(node));
    removeNodeFromParent(node);
    if (parent.isLeaf()) {
      return removeNode(parent);
    }
    return state.getRestoredPath();
  }
  return null;
}
 
示例18
private void filterTreeByShortcut(final ShortcutTextField firstShortcut, final JCheckBox enable2Shortcut, final ShortcutTextField secondShortcut) {
  final KeyStroke keyStroke = firstShortcut.getKeyStroke();
  if (keyStroke != null) {
    if (!myTreeExpansionMonitor.isFreeze()) myTreeExpansionMonitor.freeze();
    myActionsTree.filterTree(new KeyboardShortcut(keyStroke, enable2Shortcut.isSelected() ? secondShortcut.getKeyStroke() : null), getCurrentQuickListIds());
    final JTree tree = myActionsTree.getTree();
    TreeUtil.expandAll(tree);
  }
}
 
示例19
private void sortChildren(InspectionTreeNode node) {
  final List<TreeNode> children = TreeUtil.listChildren(node);
  Collections.sort(children, InspectionResultsViewComparator.getInstance());
  node.removeAllChildren();
  TreeUtil.addChildrenTo(node, children);
  ((DefaultTreeModel)getModel()).reload(node);
}
 
示例20
private void selectTemplate(final String lastSelectedGroup, final String lastSelectedKey) {
  TreeUtil.traverseDepth(myTreeRoot, new TreeUtil.Traverse() {
    @Override
    public boolean accept(Object node) {
      Object o = ((DefaultMutableTreeNode)node).getUserObject();
      if (lastSelectedKey == null && o instanceof TemplateGroup && Comparing.equal(lastSelectedGroup, ((TemplateGroup)o).getName()) ||
          o instanceof TemplateImpl && Comparing.equal(lastSelectedKey, ((TemplateImpl)o).getKey()) && Comparing.equal(lastSelectedGroup, ((TemplateImpl)o).getGroupName())) {
        setSelectedNode((DefaultMutableTreeNode)node);
        return false;
      }

      return true;
    }
  });
}
 
示例21
public void selectIntention(String familyName) {
  final CheckedTreeNode child = findChildRecursively(getRoot(), familyName);
  if (child != null) {
    final TreePath path = new TreePath(child.getPath());
    TreeUtil.selectPath(myTree, path);
  }
}
 
示例22
int getFilteredFilesCount() {
  Pair<PackageSetBase, NamedScopesHolder> scopeFilter = getScopeFilter();
  int[] result = new int[1];
  TreeUtil.traverse(myRoot, node -> {
    if (node instanceof FileTreeNode) {
      if (((FileTreeNode)node).acceptFilter(scopeFilter, true)) {
        result[0]++;
      }
    }
    return true;
  });
  return result[0];
}
 
示例23
@Override
public void centerSelectedRow() {
  TreePath path = getTree().getSelectionPath();
  if (path == null) return;

  myAutoScrollToSourceHandler.setShouldAutoScroll(false);
  TreeUtil.showRowCentered(getTree(), getTree().getRowForPath(path), false);
  myAutoScrollToSourceHandler.setShouldAutoScroll(true);
}
 
示例24
private static ActionGroup createTreePopupActions(final boolean isRightTree, final Tree tree) {
  DefaultActionGroup group = new DefaultActionGroup();
  final TreeExpander treeExpander = new TreeExpander() {
    @Override
    public void expandAll() {
      TreeUtil.expandAll(tree);
    }

    @Override
    public boolean canExpand() {
      return isRightTree;
    }

    @Override
    public void collapseAll() {
      TreeUtil.collapseAll(tree, 3);
    }

    @Override
    public boolean canCollapse() {
      return true;
    }
  };

  final CommonActionsManager actionManager = CommonActionsManager.getInstance();
  if (isRightTree){
    group.add(actionManager.createExpandAllAction(treeExpander, tree));
  }
  group.add(actionManager.createCollapseAllAction(treeExpander, tree));
  final ActionManager globalActionManager = ActionManager.getInstance();
  group.add(globalActionManager.getAction(IdeActions.ACTION_EDIT_SOURCE));
  group.add(AnSeparator.getInstance());
  group.add(globalActionManager.getAction(IdeActions.ACTION_ANALYZE_DEPENDENCIES));
  group.add(globalActionManager.getAction(IdeActions.ACTION_ANALYZE_BACK_DEPENDENCIES));
  //non exists in platform group.add(globalActionManager.getAction(IdeActions.ACTION_ANALYZE_CYCLIC_DEPENDENCIES));
  return group;
}
 
示例25
@Override
public JScrollPane createScrollPane() {
  TreeUtil.expandAll(myTree);

  JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree);

  scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

  if (myTree.getSelectionCount() == 0) {
    myTree.setSelectionRow(0);
  }

  if (myTree.getRowCount() >= 20) {
    scrollPane.getViewport().setPreferredSize(new Dimension(myTree.getPreferredScrollableViewportSize().width, 300));
  }
  else {
    scrollPane.getViewport().setPreferredSize(myTree.getPreferredSize());
  }

  if (myBuilder.isAutoselectOnMouseMove()) {
    myTree.addMouseMotionListener(new MouseMotionAdapter() {
      boolean myIsEngaged = false;

      @Override
      public void mouseMoved(MouseEvent e) {
        if (myIsEngaged) {
          final Point p = e.getPoint();
          int index = myTree.getRowForLocation(p.x, p.y);
          myTree.setSelectionRow(index);
        }
        else {
          myIsEngaged = true;
        }
      }
    });
  }

  return scrollPane;
}
 
示例26
public void show() {
  JComponent panel = createCenterPanel();
  MnemonicHelper.init(panel);
  myTree.addTreeSelectionListener(__ -> {
    if (myPopup.isVisible()) {
      PopupUpdateProcessor updateProcessor = myPopup.getUserData(PopupUpdateProcessor.class);
      if (updateProcessor != null) {
        AbstractTreeNode node = getSelectedNode();
        updateProcessor.updatePopup(node);
      }
    }
  });

  myPopup = JBPopupFactory.getInstance().createComponentPopupBuilder(panel, myTree).setTitle(myTitle).setResizable(true).setModalContext(false).setFocusable(true).setRequestFocus(true)
          .setMovable(true).setBelongsToGlobalPopupStack(true)
          //.setCancelOnClickOutside(false) //for debug and snapshots
          .setCancelOnOtherWindowOpen(true).setCancelKeyEnabled(false).setDimensionServiceKey(null, getDimensionServiceKey(), true).setCancelCallback(() -> myCanClose).setNormalWindowLevel(true)
          .createPopup();

  Disposer.register(myPopup, this);
  Disposer.register(myPopup, () -> {
    if (!myTreeHasBuilt.isDone()) {
      myTreeHasBuilt.setRejected();
    }
  });
  myTree.getEmptyText().setText("Loading...");
  myPopup.showCenteredInCurrentWindow(myProject);

  ((AbstractPopup)myPopup).setShowHints(true);

  IdeFocusManager.getInstance(myProject).requestFocus(myTree, true);

  rebuildAndSelect(false, myInitialElement).onProcessed(path -> UIUtil.invokeLaterIfNeeded(() -> {
    TreeUtil.ensureSelection(myTree);
    myTreeHasBuilt.setDone();
    installUpdater();
  }));
}
 
示例27
@Test
public void copyMongoResults() throws Exception {
    mongoResultPanel.updateResultTableTree(createCollectionResults("arrayOfDocuments.json", "mycollec"));

    TreeUtil.expandAll(mongoResultPanel.resultTableView.getTree());

    frameFixture.table("resultTreeTable").cellReader(new TableCellReader())
            .requireContents(new String[][]{
                    {"[0]", "{ \"id\" : 0 , \"label\" : \"toto\" , \"visible\" : false , \"doc\" : { \"title\" : \"hello\" , \"nbPages\" : 10 , \"keyWord\" : [ \"toto\" , true , 10]}}"},
                    {"id", "0"},
                    {"label", "\"toto\""},
                    {"visible", "false"},
                    {"doc", "{ \"title\" : \"hello\" , \"nbPages\" : 10 , \"keyWord\" : [ \"toto\" , true , 10]}"},
                    {"title", "\"hello\""},
                    {"nbPages", "10"},
                    {"keyWord", "[ \"toto\" , true , 10]"},
                    {"[0]", "\"toto\""},
                    {"[1]", "true"},
                    {"[2]", "10"},
                    {"[1]", "{ \"id\" : 1 , \"label\" : \"tata\" , \"visible\" : true , \"doc\" : { \"title\" : \"ola\" , \"nbPages\" : 1 , \"keyWord\" : [ \"tutu\" , false , 10]}}"},
                    {"id", "1"},
                    {"label", "\"tata\""},
                    {"visible", "true"},
                    {"doc", "{ \"title\" : \"ola\" , \"nbPages\" : 1 , \"keyWord\" : [ \"tutu\" , false , 10]}"},
                    {"title", "\"ola\""},
                    {"nbPages", "1"},
                    {"keyWord", "[ \"tutu\" , false , 10]"},
                    {"[0]", "\"tutu\""},
                    {"[1]", "false"},
                    {"[2]", "10"},
            });

    assertEquals("[ " +
            "{ \"id\" : 0 , \"label\" : \"toto\" , \"visible\" : false , \"doc\" : { \"title\" : \"hello\" , \"nbPages\" : 10 , \"keyWord\" : [ \"toto\" , true , 10]}} , " +
            "{ \"id\" : 1 , \"label\" : \"tata\" , \"visible\" : true , \"doc\" : { \"title\" : \"ola\" , \"nbPages\" : 1 , \"keyWord\" : [ \"tutu\" , false , 10]}}" +
            " ]",
            mongoResultPanel.getSelectedNodeStringifiedValue());
}
 
示例28
@Nonnull
public static SelectionInfo create(final AbstractProjectViewPane viewPane) {
  List<Object> selectedElements = Collections.emptyList();
  if (viewPane != null) {
    final TreePath[] selectionPaths = viewPane.getSelectionPaths();
    if (selectionPaths != null) {
      selectedElements = new ArrayList<>();
      for (TreePath path : selectionPaths) {
        NodeDescriptor descriptor = TreeUtil.getLastUserObject(NodeDescriptor.class, path);
        if (descriptor != null) selectedElements.add(descriptor.getElement());
      }
    }
  }
  return new SelectionInfo(selectedElements.toArray());
}
 
示例29
@TestOnly
public AsyncPromise<Void> rebuildAndUpdate() {
  AsyncPromise<Void> result = new AsyncPromise<>();
  TreeVisitor visitor = path -> {
    AbstractTreeNode node = TreeUtil.getLastUserObject(AbstractTreeNode.class, path);
    if (node != null) node.update();
    return TreeVisitor.Action.CONTINUE;
  };
  rebuild(false).onProcessed(ignore1 -> myAsyncTreeModel.accept(visitor).onProcessed(ignore2 -> result.setResult(null)));
  return result;
}
 
示例30
private void filterTree(@Nullable String filter) {
  if (myTreeTable != null) {
    getExpandedNodes(mySelectedProfile).saveVisibleState(myTreeTable.getTree());
    fillTreeData(filter, true);
    reloadModel();
    restoreTreeState();
    if (myTreeTable.getTree().getSelectionPath() == null) {
      TreeUtil.selectFirstNode(myTreeTable.getTree());
    }
  }
}