Merged SVN plugins
[idea/community.git] / platform / lang-impl / src / com / intellij / ide / projectView / impl / ProjectViewTree.java
1 package com.intellij.ide.projectView.impl;
2
3 import com.intellij.ide.dnd.aware.DnDAwareTree;
4 import com.intellij.ide.util.treeView.NodeDescriptor;
5 import com.intellij.ide.util.treeView.NodeRenderer;
6 import com.intellij.openapi.util.SystemInfo;
7 import com.intellij.util.ui.UIUtil;
8
9 import javax.swing.plaf.TreeUI;
10 import javax.swing.tree.DefaultMutableTreeNode;
11 import javax.swing.tree.TreeModel;
12 import javax.swing.tree.TreePath;
13 import java.awt.event.KeyEvent;
14
15 /**
16  * @author Eugene Zhuravlev
17  * Date: Sep 17, 2003
18  * Time: 7:44:22 PM
19  */
20 public abstract class ProjectViewTree extends DnDAwareTree {
21   protected ProjectViewTree(TreeModel newModel) {
22     super(newModel);
23
24     if (SystemInfo.isMac) setUI(new UIUtil.LeglessTreeUi());
25
26     final NodeRenderer renderer = new NodeRenderer();
27     renderer.setOpaque(false);
28     renderer.setIconOpaque(false);
29     setCellRenderer(renderer);
30
31     //setOpaque(false);
32   }
33
34   @Override
35   public void setUI(final TreeUI ui) {
36     TreeUI actualUI = ui;
37     if (SystemInfo.isMac && !(ui instanceof UIUtil.LeglessTreeUi)) {
38       actualUI = new UIUtil.LeglessTreeUi();
39     }
40
41     super.setUI(actualUI);
42   }
43
44   @Override
45   public void processKeyEvent(final KeyEvent e) {
46     TreePath path = getSelectionPath();
47     if (path != null) {
48       if (e.getKeyCode() == KeyEvent.VK_LEFT) {
49         if (isExpanded(path)) {
50           collapsePath(path);
51           return;
52         }
53       } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
54         if (isCollapsed(path)) {
55           expandPath(path);
56           return;
57         }
58       }
59     }
60
61     super.processKeyEvent(e);
62   }
63
64   public final int getToggleClickCount() {
65     DefaultMutableTreeNode node = getSelectedNode();
66     if (node != null) {
67       Object userObject = node.getUserObject();
68       if (userObject instanceof NodeDescriptor) {
69         NodeDescriptor descriptor = (NodeDescriptor)userObject;
70         if (!descriptor.expandOnDoubleClick()) return -1;
71       }
72     }
73     return super.getToggleClickCount();
74   }
75
76   public abstract DefaultMutableTreeNode getSelectedNode();
77 }