Merge branch 'tree-ui'
[idea/community.git] / platform / lang-impl / src / com / intellij / ide / projectView / impl / ProjectViewTree.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.ide.projectView.impl;
18
19 import com.intellij.ide.dnd.aware.DnDAwareTree;
20 import com.intellij.ide.util.treeView.NodeDescriptor;
21 import com.intellij.ide.util.treeView.NodeRenderer;
22 import com.intellij.openapi.util.SystemInfo;
23 import com.intellij.util.ui.UIUtil;
24
25 import javax.swing.plaf.TreeUI;
26 import javax.swing.tree.DefaultMutableTreeNode;
27 import javax.swing.tree.TreeModel;
28 import javax.swing.tree.TreePath;
29 import java.awt.event.KeyEvent;
30
31 /**
32  * @author Eugene Zhuravlev
33  * Date: Sep 17, 2003
34  * Time: 7:44:22 PM
35  */
36 public abstract class ProjectViewTree extends DnDAwareTree {
37   protected ProjectViewTree(TreeModel newModel) {
38     super(newModel);
39
40     if (SystemInfo.isMac) setUI(new UIUtil.LeglessTreeUi());
41
42     final NodeRenderer renderer = new NodeRenderer();
43     renderer.setOpaque(false);
44     renderer.setIconOpaque(false);
45     setCellRenderer(renderer);
46
47     //setOpaque(false);
48   }
49
50   @Override
51   public void setUI(final TreeUI ui) {
52     TreeUI actualUI = ui;
53     if (SystemInfo.isMac && !(ui instanceof UIUtil.LeglessTreeUi)) {
54       actualUI = new UIUtil.LeglessTreeUi();
55     }
56
57     super.setUI(actualUI);
58   }
59
60   @Override
61   public void processKeyEvent(final KeyEvent e) {
62     TreePath path = getSelectionPath();
63     if (path != null) {
64       if (e.getKeyCode() == KeyEvent.VK_LEFT) {
65         if (isExpanded(path)) {
66           collapsePath(path);
67           return;
68         }
69       } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
70         if (isCollapsed(path)) {
71           expandPath(path);
72           return;
73         }
74       }
75     }
76
77     super.processKeyEvent(e);
78   }
79
80   public final int getToggleClickCount() {
81     DefaultMutableTreeNode node = getSelectedNode();
82     if (node != null) {
83       Object userObject = node.getUserObject();
84       if (userObject instanceof NodeDescriptor) {
85         NodeDescriptor descriptor = (NodeDescriptor)userObject;
86         if (!descriptor.expandOnDoubleClick()) return -1;
87       }
88     }
89     return super.getToggleClickCount();
90   }
91
92   public abstract DefaultMutableTreeNode getSelectedNode();
93 }