Package com.dci.intellij.dbn.common.ui.tree

Source Code of com.dci.intellij.dbn.common.ui.tree.TreeUtil

package com.dci.intellij.dbn.common.ui.tree;

import com.dci.intellij.dbn.common.LoggerFactory;
import com.dci.intellij.dbn.common.thread.ConditionalLaterInvocator;
import com.intellij.openapi.diagnostic.Logger;

import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class TreeUtil {
    private static final Logger LOGGER = LoggerFactory.createLogger();

    public static TreePath createTreePath(TreeNode treeNode) {
        List<TreeNode> list =  new ArrayList<TreeNode>();
        list.add(treeNode);
        TreeNode parent = treeNode.getParent();
        while (parent != null) {
            list.add(0, parent);
            parent = parent.getParent();
        }
        return new TreePath(list.toArray());
    }

    public static void collapseAll(JTree tree) {
        int row = tree.getRowCount() - 1;
        while (row >= 0) {
            tree.collapseRow(row);
            row--;
        }
    }

    public static void expandAll(JTree tree) {
        tree.expandPath(new TreePath(tree.getModel().getRoot()));
        int oldRowCount = 0;
        do {
            int rowCount = tree.getRowCount();
            if (rowCount == oldRowCount) break;
            oldRowCount = rowCount;
            for (int i = 0; i < rowCount; i++) {
                tree.expandRow(i);
            }
        }
        while (true);
    }

    public static void notifyTreeModelListeners(Object source, Set<TreeModelListener> treeModelListeners, TreePath path, TreeEventType eventType) {
        TreeModelEvent event = new TreeModelEvent(source, path);
        notifyTreeModelListeners(treeModelListeners, eventType, event);
    }

    private static void notifyTreeModelListeners(final Set<TreeModelListener> treeModelListeners, final TreeEventType eventType, final TreeModelEvent event) {
        new ConditionalLaterInvocator() {
            @Override
            public void execute() {
                try {
                    for (TreeModelListener treeModelListener : treeModelListeners) {
                        switch (eventType) {
                            case NODES_ADDED:       treeModelListener.treeNodesInserted(event);    break;
                            case NODES_REMOVED:     treeModelListener.treeNodesRemoved(event);     break;
                            case NODES_CHANGED:     treeModelListener.treeNodesChanged(event);     break;
                            case STRUCTURE_CHANGED: treeModelListener.treeStructureChanged(event); break;
                        }
                    }
                } catch (Exception e) {
                    LOGGER.error("Error notifying tree model listeners", e);
                }
            }
        }.start();
    }
}
TOP

Related Classes of com.dci.intellij.dbn.common.ui.tree.TreeUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.