Tool tip handler refactoring
authorAnton Makeev <Anton.Makeev@jetbrains.com>
Mon, 28 Jun 2010 09:59:01 +0000 (13:59 +0400)
committerAnton Makeev <Anton.Makeev@jetbrains.com>
Tue, 29 Jun 2010 09:46:45 +0000 (13:46 +0400)
JTree->Tree

63 files changed:
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTree.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java
java/idea-ui/src/com/intellij/peer/impl/PeerFactoryImpl.java
java/java-impl/src/com/intellij/cyclicDependencies/ui/CyclicDependenciesPanel.java
java/java-impl/src/com/intellij/refactoring/typeMigration/ui/MigrationPanel.java
java/java-impl/src/com/intellij/slicer/SlicePanel.java
java/java-tests/testSrc/com/intellij/projectView/ToDoTreeStructureTest.java
java/openapi/src/com/intellij/ui/UIHelper.java
platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionTree.java
platform/lang-impl/src/com/intellij/execution/impl/BaseExecuteBeforeRunDialog.java
platform/lang-impl/src/com/intellij/execution/impl/DefaultConfigurationSettingsEditor.java
platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java
platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java
platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FileTemplateTabAsTree.java
platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserBase.java
platform/lang-impl/src/com/intellij/ide/projectView/impl/AbstractProjectViewPSIPane.java
platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java
platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
platform/lang-impl/src/com/intellij/ide/util/MemberChooser.java
platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java
platform/lang-impl/src/com/intellij/moduleDependencies/ModulesDependenciesPanel.java
platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ContentEntryTreeEditor.java
platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java
platform/lvcs-impl/src/com/intellij/history/integration/ui/views/RevisionsList.java
platform/platform-api/src/com/intellij/openapi/ui/DetailsComponent.java
platform/platform-api/src/com/intellij/ui/TableCell.java [moved from platform/platform-impl/src/com/intellij/ui/TableCellKey.java with 57% similarity]
platform/platform-api/src/com/intellij/ui/ToolTipHandler.java [new file with mode: 0644]
platform/platform-api/src/com/intellij/ui/ToolTipHandlerFactory.java [moved from platform/platform-api/src/com/intellij/ui/ToolTipHandlerProvider.java with 62% similarity]
platform/platform-api/src/com/intellij/ui/TreeUIHelper.java
platform/platform-api/src/com/intellij/ui/components/JBList.java
platform/platform-api/src/com/intellij/ui/table/JBTable.java
platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsTest.java
platform/platform-api/src/com/intellij/ui/treeStructure/SimpleTree.java
platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java
platform/platform-impl/src/com/intellij/ide/dnd/DnDDemo.java
platform/platform-impl/src/com/intellij/ide/ui/customization/CustomizableActionsPanel.java
platform/platform-impl/src/com/intellij/ide/ui/customization/CustomizationUtil.java
platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/FileSystemTreeImpl.java
platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ActionsTree.java
platform/platform-impl/src/com/intellij/openapi/options/ex/ExplorerSettingsEditor.java
platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsTree.java
platform/platform-impl/src/com/intellij/ui/AbstractToolTipHandler.java
platform/platform-impl/src/com/intellij/ui/BalloonImpl.java
platform/platform-impl/src/com/intellij/ui/CheckboxTree.java
platform/platform-impl/src/com/intellij/ui/ListToolTipHandler.java
platform/platform-impl/src/com/intellij/ui/TableToolTipHandler.java
platform/platform-impl/src/com/intellij/ui/ToolTipHandlerFactoryImpl.java [moved from platform/platform-impl/src/com/intellij/ui/ToolTipHandlerProviderImpl.java with 53% similarity]
platform/platform-impl/src/com/intellij/ui/TreeToolTipHandler.java
platform/platform-impl/src/com/intellij/ui/TreeUIHelperImpl.java
platform/platform-impl/testSrc/com/intellij/util/ui/tree/TreeUtilTest.java
platform/platform-resources/src/META-INF/PlatformExtensions.xml
platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java
platform/vcs-impl/src/com/intellij/openapi/vcs/update/UpdateInfoTree.java
plugins/ant/src/com/intellij/lang/ant/config/explorer/AntExplorer.java
plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java
plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsBrowser/CvsTree.java
plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsBrowser/ui/BrowserPanel.java
plugins/git4idea/src/git4idea/history/browser/GitLogTree.java
plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryBrowserComponent.java
plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/ComponentTree.java
xml/dom-openapi/src/com/intellij/util/xml/ui/EmptyPane.java

index d02ff9dab51086f6cdd9f5d09bf78a5472ece151..414ca3ea03f4f50a0785fb6049b41c900acced11 100644 (file)
@@ -253,7 +253,6 @@ public class ArtifactEditorImpl implements ArtifactEditorEx {
     final LayoutTree tree = myLayoutTreeComponent.getLayoutTree();
     new ShowAddPackagingElementPopupAction(this).registerCustomShortcutSet(CommonShortcuts.getNew(), tree);
     PopupHandler.installPopupHandler(tree, createPopupActionGroup(), ActionPlaces.UNKNOWN, ActionManager.getInstance());
-    TreeToolTipHandler.install(tree);
     ToolTipManager.sharedInstance().registerComponent(tree);
     rebuildTries();
     return getMainComponent();
index 0e340cf52e9968c1e294345e618cd36eb97608ab..da0f90ae031a6fd7218b1c7fc68b095ceafd9457 100644 (file)
@@ -83,7 +83,6 @@ public class LayoutTree extends SimpleDnDAwareTree implements AdvancedDnDSource
       }
     };
     new TreeSpeedSearch(this, convertor, true);
-    helper.installToolTipHandler(this);
   }
 
   private List<PackagingElementNode<?>> getNodesToDrag() {
index 589ca1fe4f444a1b735e0e48372f857d3196bbcc..b8b45cb8182feced99339e735e69582912186e5b 100644 (file)
@@ -154,7 +154,6 @@ public abstract class BaseStructureConfigurable extends MasterDetailsComponent i
         return ((MyNode)treePath.getLastPathComponent()).getDisplayName();
       }
     }, true);
-    TreeToolTipHandler.install(myTree);
     ToolTipManager.sharedInstance().registerComponent(myTree);
     myTree.setCellRenderer(new ColoredTreeCellRenderer(){
       public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
index 86ffcacadda737538a20e0458c7eaa79656658dc..0939325800e8746b638eb067971b6614c783942a 100644 (file)
@@ -107,11 +107,11 @@ public class PeerFactoryImpl extends PeerFactory {
 
   private static class MyUIHelper implements UIHelper {
     public void installToolTipHandler(JTree tree) {
-      TreeToolTipHandler.install(tree);
+      TreeUIHelper.getInstance().installToolTipHandler(tree);
     }
 
     public void installToolTipHandler(JTable table) {
-      TableToolTipHandler.install(table);
+      TreeUIHelper.getInstance().installToolTipHandler(table);
     }
 
     public void installEditSourceOnDoubleClick(JTree tree) {
index 1c1c16876dc11e7f7de49004353ed4e34ccc19ff..ee37cf4755b07bc0bba813ec2c1d75276324970c 100644 (file)
@@ -243,7 +243,6 @@ public class CyclicDependenciesPanel extends JPanel implements Disposable, DataP
     tree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(tree);
 
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     SmartExpander.installOn(tree);
     EditSourceOnDoubleClickHandler.install(tree);
index 03b8036f4b8a81c8de0973060f19cebe1204233f..4175a847d99acbef30d6a7ab410e422a6878436e 100644 (file)
@@ -247,7 +247,6 @@ public class MigrationPanel extends JPanel implements Disposable {
     tree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(tree);
 
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     TreeUtil.expandAll(tree);
     SmartExpander.installOn(tree);
index 46d086c555e630af3d9cb79ce6a3a65a1199e593..ce61ed9e8b37a734a4a2e5dc9207747094c6ed33 100644 (file)
@@ -164,7 +164,7 @@ public abstract class SlicePanel extends JPanel implements TypeSafeDataProvider,
 
   private JTree createTree() {
     DefaultMutableTreeNode root = new DefaultMutableTreeNode();
-    final JTree tree = new Tree(new DefaultTreeModel(root)){
+    final Tree tree = new Tree(new DefaultTreeModel(root)){
       protected void paintComponent(Graphics g) {
         DuplicateNodeRenderer.paintDuplicateNodesBackground(g, this);
         super.paintComponent(g);
@@ -188,7 +188,6 @@ public abstract class SlicePanel extends JPanel implements TypeSafeDataProvider,
 
     new TreeSpeedSearch(tree);
     TreeUtil.installActions(tree);
-    TreeToolTipHandler.install(tree);
     ToolTipManager.sharedInstance().registerComponent(tree);
 
     myAutoScrollToSourceHandler.install(tree);
index f89eb8602dd4c0078cfc43103825675562d2ec97..2d697694f65a3eec45cf6f956a74880abf2d9766 100644 (file)
@@ -7,6 +7,7 @@ import com.intellij.ide.todo.nodes.TodoItemNode;
 import com.intellij.openapi.ui.Queryable;
 import com.intellij.testFramework.IdeaTestUtil;
 import com.intellij.openapi.util.Disposer;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.ui.tree.TreeUtil;
 
 import javax.swing.*;
@@ -22,7 +23,7 @@ public class ToDoTreeStructureTest extends BaseProjectViewTestCase {
   }
 
   public void testToDo1() throws Exception {
-    AllTodosTreeBuilder all = new AllTodosTreeBuilder(new JTree(), new DefaultTreeModel(new DefaultMutableTreeNode()), myProject);
+    AllTodosTreeBuilder all = new AllTodosTreeBuilder(new Tree(), new DefaultTreeModel(new DefaultMutableTreeNode()), myProject);
     all.init();
 
     myStructure = all.getTreeStructure();
@@ -40,7 +41,7 @@ public class ToDoTreeStructureTest extends BaseProjectViewTestCase {
 
   //todo kirillk
   public void testToDo() throws Exception {
-    AllTodosTreeBuilder all = new AllTodosTreeBuilder(new JTree(), new DefaultTreeModel(new DefaultMutableTreeNode()), myProject);
+    AllTodosTreeBuilder all = new AllTodosTreeBuilder(new Tree(), new DefaultTreeModel(new DefaultMutableTreeNode()), myProject);
     all.init();
 
     myStructure = all.getTreeStructure();
@@ -67,7 +68,7 @@ public class ToDoTreeStructureTest extends BaseProjectViewTestCase {
 
 
     final DefaultTreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode());
-    final JTree currentFileTree = new JTree(treeModel);
+    final JTree currentFileTree = new Tree(treeModel);
     CurrentFileTodosTreeBuilder builder = new CurrentFileTodosTreeBuilder(currentFileTree,
                                                                           treeModel,
                                                                           myProject);
index f6198d1de4cb38df5d13e1c23e00d9fb338ecf91..51a2f271a9542cf6bcd80f1b1420de91c94efaf5 100644 (file)
@@ -35,8 +35,14 @@ import java.awt.*;
  * @see com.intellij.peer.PeerFactory#getUIHelper()
  */
 public interface UIHelper {
+  /**
+   * @deprecated use JBTree class instead, it will automatically configure tool tips
+   */
   void installToolTipHandler(JTree tree);
 
+  /**
+   * @deprecated use JBTable class instead, it will automatically configure tool tips
+   */
   void installToolTipHandler(JTable table);
 
   void installEditSourceOnDoubleClick(JTree tree);
index b8a075130ae88f80ec46b74aa260ad4464aad07f..6258773c8f6433e3bf4b8aff202aa8fe99638062 100644 (file)
@@ -74,7 +74,6 @@ public class InspectionTree extends Tree {
     myExpandedUserObjects = new HashSet<Object>();
     myExpandedUserObjects.add(project);
 
-    TreeToolTipHandler.install(this);
     TreeUtil.installActions(this);
     new TreeSpeedSearch(this, new Convertor<TreePath, String>() {
       public String convert(TreePath o) {
index b0b4fd2aca93158904451beb3f6fda707d8e3657..a4cbb0efee051ffe0be7b99fea4dbad883711228 100644 (file)
@@ -71,7 +71,6 @@ public abstract class BaseExecuteBeforeRunDialog<T extends BeforeRunTask> extend
     tree.setRootVisible(false);
     tree.setShowsRootHandles(true);
     tree.setLineStyleAngled();
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     new TreeSpeedSearch(tree);
 
index 028982320183f2e5fdba298b2a5a112ed4cc1718..7eb9466e0b94b57314f066117967ad2de376aa05 100644 (file)
@@ -24,6 +24,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.ui.ScrollPaneFactory;
 import com.intellij.ui.TreeToolTipHandler;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.ui.tree.TreeUtil;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.Nullable;
@@ -46,7 +47,7 @@ import java.util.Map;
 public class DefaultConfigurationSettingsEditor implements Configurable {
 
   @NonNls private final DefaultMutableTreeNode myRoot = new DefaultMutableTreeNode("Root");
-  private final JTree myTree = new JTree(myRoot);
+  private final Tree myTree = new Tree(myRoot);
   private final Project myProject;
   private final Map<ConfigurationType, Configurable> myStoredComponents = new HashMap<ConfigurationType, Configurable>();
   private final ConfigurationType mySelection;
@@ -68,7 +69,6 @@ public class DefaultConfigurationSettingsEditor implements Configurable {
       myRoot.add(new DefaultMutableTreeNode(type));
     }
     myTree.setRootVisible(false);
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     myTree.setCellRenderer(new DefaultTreeCellRenderer() {
       public Component getTreeCellRendererComponent(JTree tree,
index d2e407efbd2cc13c677e76a41b1e5ae1df162644..ffce688156dedbbd56702cd72b04560e731c43eb 100644 (file)
@@ -105,7 +105,6 @@ class RunConfigurable extends BaseConfigurable {
     myTree.setRootVisible(false);
     myTree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(myTree);
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     PopupHandler.installFollowingSelectionTreePopup(myTree, createActionsGroup(), ActionPlaces.UNKNOWN, ActionManager.getInstance());
     myTree.setCellRenderer(new ColoredTreeCellRenderer() {
index 80996b34990957b5a0cacd2724c3769041d78306..440a5115f9945b527856733eccee4685ad1ab45f 100644 (file)
@@ -116,7 +116,6 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider {
     myTree.setLargeModel(true);
     new TreeSpeedSearch(myTree);
     ToolTipManager.sharedInstance().registerComponent(myTree);
-    TreeToolTipHandler.install(myTree);
     myTree.setCellRenderer(new NodeRenderer() {
       public void customizeCellRenderer(JTree tree,
                                         Object value,
index 0fea2d66bf0178f4062bb8932bafd2179221b3af..50aba2f4af88c9f574c48ac0e6126cfc0b8815db 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.ide.fileTemplates.FileTemplate;
 import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
 import com.intellij.ide.fileTemplates.FileTemplateGroupDescriptor;
 import com.intellij.ide.fileTemplates.FileTemplateManager;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.UIUtil;
@@ -46,7 +47,7 @@ abstract class FileTemplateTabAsTree extends FileTemplateTab {
     super(title);
     myRoot = initModel();
     myTreeModel = new MyTreeModel(myRoot);
-    myTree = new JTree(myTreeModel);
+    myTree = new Tree(myTreeModel);
     myTree.setRootVisible(false);
     myTree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(myTree);
index bc6f7554e463cbc1946ea6eff1f3be002fba0066..690eafa410315fcaa1f95109198610b8cc37813d 100644 (file)
@@ -230,7 +230,6 @@ public abstract class HierarchyBrowserBase extends SimpleToolWindowPanel impleme
     UIUtil.setLineStyleAngled(tree);
     new TreeSpeedSearch(tree);
     TreeUtil.installActions(tree);
-    TreeToolTipHandler.install(tree);
     myAutoScrollToSourceHandler.install(tree);
   }
 
index 2582c67cdb0c14ce35d96f59a4de2b21b42d7e0a..3af5c63aa9ed76144aa3e43c9c0468173667ef2c 100644 (file)
@@ -94,7 +94,6 @@ public abstract class AbstractProjectViewPSIPane extends AbstractProjectViewPane
     EditSourceOnDoubleClickHandler.install(myTree);
 
     ToolTipManager.sharedInstance().registerComponent(myTree);
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
 
     myTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
index f26ebded14f6f80d71798ee60a12dd330c113fef..2675de475bc0a848180092da3947fc85f80abd2e 100644 (file)
@@ -185,7 +185,6 @@ public class ScopeTreeViewPanel extends JPanel implements JDOMExternalizable, Di
     myTree.setRootVisible(false);
     myTree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(myTree);
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     EditSourceOnDoubleClickHandler.install(myTree);
     new TreeSpeedSearch(myTree);
index 2fef940b3b237c4a47bfd25ef7fd7873b6dfa047..0136b4cf7ec2ef06d8358733b21facc4baadc3b5 100644 (file)
@@ -87,7 +87,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
   private final Project myProject;
   private final StructureViewModel myTreeModel;
   private static int ourSettingsModificationCount;
-  private JTree myTree;
+  private Tree myTree;
 
   public StructureViewComponent(FileEditor editor, StructureViewModel structureViewModel, Project project) {
     this(editor, structureViewModel, project, true);
@@ -165,7 +165,6 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
     myAutoScrollToSourceHandler.install(getTree());
     myAutoScrollFromSourceHandler.install();
 
-    TreeToolTipHandler.install(getTree());
     TreeUtil.installActions(getTree());
     new TreeSpeedSearch(getTree());
 
@@ -562,10 +561,9 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
   }
 
   public JTree getTree() {
-    return myAbstractTreeBuilder == null ? null : myAbstractTreeBuilder.getTree();
+    return myTree;
   }
 
   private final class MyAutoScrollToSourceHandler extends AutoScrollToSourceHandler {
     private boolean myShouldAutoScroll = true;
 
index 8270e260e752cd7ba56e7a822a82c5ef4f198bc4..ecf2e5c893cf3248418f43a750b5053e906526a5 100644 (file)
@@ -313,7 +313,6 @@ public class MemberChooser<T extends ClassMember> extends DialogWrapper implemen
         }
       }
     );
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     JScrollPane scrollPane = new JScrollPane(myTree);
     scrollPane.setPreferredSize(new Dimension(350, 450));
index adeae19c037ecc2b92ec60638d633b91d5b2609f..45c23a93bbef4b616e701e1841163f578990f769 100644 (file)
@@ -335,7 +335,6 @@ public class ScopeEditorPanel {
     tree.setShowsRootHandles(true);
     tree.setLineStyleAngled();
 
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     SmartExpander.installOn(tree);
     new TreeSpeedSearch(tree);
index 30533a7d754ccf929e2e59632974e32f861d9370..0458d111d1e166705feb01c8e28ca889538924ed 100644 (file)
@@ -387,7 +387,6 @@ public class ModulesDependenciesPanel extends JPanel implements ModuleRootListen
     tree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(tree);
 
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     new TreeSpeedSearch(tree, new Convertor<TreePath, String>() {
       public String convert(TreePath o) {
index 98e79bb80782d49b7444dd01dcb28ca740f8b641..89769dd2d3281db76b281ad01ea5a6aaaaafec6b 100644 (file)
@@ -84,7 +84,6 @@ public class ContentEntryTreeEditor {
 
     myEditingActionsGroup = new DefaultActionGroup();
 
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     new TreeSpeedSearch(myTree);
 
index 43ddae0e7e08676215588e5c39ff96e7ad46a15a..b48e9f3f2828ef318c1b439a9dc2074866d789cb 100644 (file)
@@ -318,7 +318,6 @@ public class DependenciesPanel extends JPanel implements Disposable, DataProvide
     tree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(tree);
 
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     SmartExpander.installOn(tree);
     EditSourceOnDoubleClickHandler.install(tree);
index ad3b8aa5eb0a0f5c9338238a2a0de56ce7cd58be..65e9977934f428db4ade6a19c3ea1e2b604966de 100644 (file)
@@ -459,7 +459,6 @@ public class SingleInspectionProfilePanel extends JPanel {
     myTree.setRootVisible(false);
     myTree.setShowsRootHandles(true);
     UIUtil.setLineStyleAngled(myTree);
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
 
 
index 38853159ac17022f8e7a26b36b305c40860f50b7..789bed15b52c72f0d9ad664d55b061b1583a52b4 100644 (file)
@@ -25,7 +25,7 @@ import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vcs.VcsBundle;
 import com.intellij.ui.SeparatorWithText;
-import com.intellij.ui.TableCellKey;
+import com.intellij.ui.TableCell;
 import com.intellij.ui.TableToolTipHandler;
 import com.intellij.ui.table.JBTable;
 import com.intellij.util.ui.AbstractLayoutManager;
@@ -41,8 +41,6 @@ import javax.swing.table.AbstractTableModel;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.TableCellRenderer;
 import java.awt.*;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionAdapter;
 import java.util.*;
 import java.util.List;
 
@@ -61,7 +59,7 @@ public class RevisionsList {
 
     table.resetDefaultFocusTraversalKeys();
 
-    TableToolTipHandler toolTipHandler = TableToolTipHandler.install(table);
+    TableToolTipHandler toolTipHandler = TableToolTipHandler.installAndGet(table);
     table.setDefaultRenderer(Object.class, new MyCellRenderer(table, toolTipHandler));
 
     table.setEmptyText(VcsBundle.message("history.empty"));
@@ -339,7 +337,7 @@ public class RevisionsList {
 
       myItemPanel.setBackground(bg);
 
-      isToolTipShown = new TableCellKey(row, column).equals(myToolTipHandler.getCurrentCellKey());
+      isToolTipShown = new TableCell(row, column).equals(myToolTipHandler.getCurrentItem());
 
       myWrapperPanel.doLayout();
       table.setRowHeight(row, myWrapperPanel.getPreferredSize().height);
index be099b7ebd6bd503228a42062aaa3412add7f60a..1fedc010c035e3f6e6ca9a71dd31225bb07e9a75 100644 (file)
@@ -19,6 +19,7 @@ package com.intellij.openapi.ui;
 import com.intellij.openapi.wm.impl.content.GraphicsConfig;
 import com.intellij.ui.components.panels.NonOpaquePanel;
 import com.intellij.ui.components.panels.Wrapper;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NonNls;
@@ -250,7 +251,7 @@ public class DetailsComponent {
     content.add(d.getComponent(), BorderLayout.CENTER);
 
     d.setText("This is a Tree");
-    final JTree c = new JTree();
+    final JTree c = new Tree();
     c.setBorder(new LineBorder(Color.red));
     d.setContent(c);
 
similarity index 57%
rename from platform/platform-impl/src/com/intellij/ui/TableCellKey.java
rename to platform/platform-api/src/com/intellij/ui/TableCell.java
index 84d48b0af0691b4c21a804419be096804575ce30..351e4c92bbc9cd2ff8637b82dd84172569e5c815 100644 (file)
  */
 package com.intellij.ui;
 
-/**
- * (rowIndex, columnIndex) is a unique key to identify cell inside JTable
- */
-public final class TableCellKey{
-  public final int myRowIndex;
-  public final int myColumnIndex;
+public final class TableCell {
+  public final int row;
+  public final int column;
 
-  public TableCellKey(int rowIndex, int columnIndex) {
-    myRowIndex = rowIndex;
-    myColumnIndex = columnIndex;
+  public TableCell(int rowIndex, int columnIndex) {
+    row = rowIndex;
+    column = columnIndex;
   }
 
   public boolean equals(Object o) {
     if (this == o) return true;
-    if (!(o instanceof TableCellKey)) return false;
+    if (!(o instanceof TableCell)) return false;
 
-    final TableCellKey myKey = (TableCellKey)o;
+    final TableCell myKey = (TableCell)o;
 
-    if (myColumnIndex != myKey.myColumnIndex) return false;
-    if (myRowIndex != myKey.myRowIndex) return false;
+    if (column != myKey.column) return false;
+    if (row != myKey.row) return false;
 
     return true;
   }
 
   public int hashCode() {
     int result;
-    result = myRowIndex;
-    result = 29 * result + myColumnIndex;
+    result = row;
+    result = 29 * result + column;
     return result;
   }
 }
diff --git a/platform/platform-api/src/com/intellij/ui/ToolTipHandler.java b/platform/platform-api/src/com/intellij/ui/ToolTipHandler.java
new file mode 100644 (file)
index 0000000..a546790
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.ui;
+
+import org.jetbrains.annotations.Nullable;
+
+public interface ToolTipHandler<T> {
+  @Nullable
+  T getCurrentItem();
+}
\ No newline at end of file
similarity index 62%
rename from platform/platform-api/src/com/intellij/ui/ToolTipHandlerProvider.java
rename to platform/platform-api/src/com/intellij/ui/ToolTipHandlerFactory.java
index f605730527c348bbd45b7d7d80956b7b24920766..e6682a0ed7153de8b85be60278f33f18bec31f04 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.intellij.ui;
 
 import com.intellij.openapi.components.ServiceManager;
 
 import javax.swing.*;
 
-public abstract class ToolTipHandlerProvider {
-  public static ToolTipHandlerProvider getToolTipHandlerProvider() {
-    return ServiceManager.getService(ToolTipHandlerProvider.class);
+public abstract class ToolTipHandlerFactory {
+  public static ToolTipHandlerFactory getInstance() {
+    return ServiceManager.getService(ToolTipHandlerFactory.class);
   }
 
-  public abstract void install(JComponent component);
-}
+  public abstract ToolTipHandler<Integer> install(JList list);
+  public abstract ToolTipHandler<Integer> install(JTree tree);
+  public abstract ToolTipHandler<TableCell> install(JTable table);
+}
\ No newline at end of file
index 35c8b263a694c539e9ffeadfbd791bd3a7d1932b..ebc0dcd78ade0e1be5d371011992e256e2cd2791 100644 (file)
@@ -27,8 +27,18 @@ public abstract class TreeUIHelper {
     return ServiceManager.getService(TreeUIHelper.class);
   }
 
+  /**
+   * @deprecated use JBTree class instead, it will automatically configure tool tips 
+   */
   public abstract void installToolTipHandler(JTree tree);
+  /**
+   * @deprecated use JBTable class instead, it will automatically configure tool tips
+   */
   public abstract void installToolTipHandler(JTable table);
+  /**
+   * @deprecated use JBLIst class instead, it will automatically configure tool tips 
+   */
+  public abstract void installToolTipHandler(JList list);
 
   public abstract void installEditSourceOnDoubleClick(JTree tree);
 
index 12552f1ec59d01bd74bad600271e23184153f750..e1c85875589853c2b89b6ede282fe347b0cc6187 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.ui.components;
 
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.TreeUIHelper;
 import com.intellij.util.ui.ComponentWithEmptyText;
 import com.intellij.util.ui.EmptyTextHelper;
 
@@ -53,6 +54,8 @@ public class JBList extends JList implements ComponentWithEmptyText{
         return JBList.this.isEmpty();
       }
     };
+
+    TreeUIHelper.getInstance().installToolTipHandler(this);
   }
 
   public boolean isEmpty() {
index 63a096c6e746c77fbb23b062d8700b6ed9c2fe22..eb265c30ac4f19fbe1913662441b08c37570479a 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.ui.table;
 
 import com.intellij.Patches;
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.TreeUIHelper;
 import com.intellij.util.ui.ComponentWithEmptyText;
 import com.intellij.util.ui.EmptyTextHelper;
 import com.intellij.util.ui.UIUtil;
@@ -61,6 +62,8 @@ public class JBTable extends JTable implements ComponentWithEmptyText {
       }
     };
 
+    TreeUIHelper.getInstance().installToolTipHandler(this);
+
     addMouseListener(new MyMouseListener());
     getColumnModel().addColumnModelListener(new TableColumnModelListener() {
       public void columnMarginChanged(ChangeEvent e) {
index ddf1a0014e19a98f24563cc32786569298ad2459..27ee8512c15f7210002b15401eb439e681591173 100644 (file)
@@ -24,6 +24,7 @@ import com.intellij.ui.tabs.JBTabsPosition;
 import com.intellij.ui.tabs.TabInfo;
 import com.intellij.ui.tabs.TabsListener;
 import com.intellij.ui.tabs.UiDecorator;
+import com.intellij.ui.treeStructure.Tree;
 
 import javax.swing.*;
 import javax.swing.border.EmptyBorder;
@@ -136,7 +137,7 @@ public class JBTabsTest {
       }
     });
 
-    final JTree someTree = new JTree() {
+    final JTree someTree = new Tree() {
       public void addNotify() {
         super.addNotify();    //To change body of overridden methods use File | Settings | File Templates.
         System.out.println("JBTabs.addNotify");
@@ -151,7 +152,7 @@ public class JBTabsTest {
     tabs.addTab(new TabInfo(someTree)).setText("Tree1").setActions(new DefaultActionGroup(), null)
         .setIcon(IconLoader.getIcon("/debugger/frame.png"));
 
-    final JTree component = new JTree();
+    final JTree component = new Tree();
     final TabInfo toAnimate1 = new TabInfo(component);
     //toAnimate1.setIcon(IconLoader.getIcon("/debugger/console.png"));
     final JCheckBox attract1 = new JCheckBox("Attract 1");
index 5e714e77dfabe0e20504eeed534fb969c72e96b6..e93d41446a5703698d1edf9ca8d79959a653920e 100644 (file)
@@ -110,7 +110,6 @@ public class SimpleTree extends Tree implements CellEditorListener {
 
   protected void configureUiHelper(final TreeUIHelper helper) {
     helper.installTreeSpeedSearch(this);
-    helper.installToolTipHandler(this);
   }
 
   @Override
index d3e22d1356c0eb591a938ed596dde81f843b4f81..45a913a50d4bd84717113dacc3370378d24289cd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +22,8 @@ import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.util.SystemInfo;
 import com.intellij.openapi.wm.impl.content.GraphicsConfig;
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.ToolTipHandler;
+import com.intellij.ui.ToolTipHandlerFactory;
 import com.intellij.util.ui.AsyncProcessIcon;
 import com.intellij.util.ui.ComponentWithEmptyText;
 import com.intellij.util.ui.EmptyTextHelper;
@@ -43,6 +45,7 @@ import java.util.Map;
 
 public class Tree extends JTree implements ComponentWithEmptyText, Autoscroll, Queryable {
   private EmptyTextHelper myEmptyTextHelper;
+  private ToolTipHandler<Integer> myToolTipHandler;
 
   private AsyncProcessIcon myBusyIcon;
   private boolean myBusy;
@@ -73,6 +76,8 @@ public class Tree extends JTree implements ComponentWithEmptyText, Autoscroll, Q
       }
     };
 
+    myToolTipHandler = ToolTipHandlerFactory.getInstance().install(this);
+
     addMouseListener(new MyMouseListener());
     if (Patches.SUN_BUG_ID_4893787) {
       addFocusListener(new MyFocusListener());
@@ -132,6 +137,10 @@ public class Tree extends JTree implements ComponentWithEmptyText, Autoscroll, Q
     myEmptyTextHelper.appendEmptyText(text, attrs, listener);
   }
 
+  public ToolTipHandler<Integer> getToolTipHandler() {
+    return myToolTipHandler;
+  }
+
   @Override
   public void addNotify() {
     super.addNotify();
index 5da848ec18059fea39d4ddeae463606d6c597469..e43f68ee7882c2ee43aa60c054c577dba44e3a23 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.ide.dnd;
 
 import com.intellij.openapi.util.Pair;
+import com.intellij.ui.treeStructure.Tree;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
@@ -31,7 +32,7 @@ public class DnDDemo implements DnDEvent.DropTargetHighlightingType {
     frame.getContentPane().setLayout(new BorderLayout());
 
     JPanel panel = new JPanel(new BorderLayout());
-    final JTree source = new JTree();
+    final JTree source = new Tree();
     panel.add(source, BorderLayout.WEST);
     final DnDManager dndManager = new DnDManagerImpl(null);
     dndManager.registerSource(new DnDSource() {
index a477d2ac3934bec2c086fddd5b37731647626540..7518435cd1c2ea6c0842d69482b0b0d0160c1f62 100644 (file)
@@ -43,6 +43,7 @@ import com.intellij.packageDependencies.ui.TreeExpansionMonitor;
 import com.intellij.ui.DocumentAdapter;
 import com.intellij.ui.InsertPathAction;
 import com.intellij.ui.ScrollPaneFactory;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.ImageLoader;
 import com.intellij.util.ui.EmptyIcon;
 import com.intellij.util.ui.UIUtil;
@@ -619,7 +620,7 @@ public class CustomizableActionsPanel {
       Group rootGroup = ActionsTreeUtil.createMainGroup(null, null, QuickListsManager.getInstance().getAllQuickLists());
       DefaultMutableTreeNode root = ActionsTreeUtil.createNode(rootGroup);
       DefaultTreeModel model = new DefaultTreeModel(root);
-      myTree = new JTree();
+      myTree = new Tree();
       myTree.setModel(model);
       myTree.setCellRenderer(new MyTreeCellRenderer());
       final ActionManager actionManager = ActionManager.getInstance();
index 789456c390eb3c8f5f26779ca76e580b83073fbc..05a7b3512f6a88d0e28700a188a9e15010f66a43 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.keymap.impl.ui.Group;
 import com.intellij.openapi.util.Pair;
 import com.intellij.ui.PopupHandler;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.diff.Diff;
 import com.intellij.util.ui.tree.TreeUtil;
 import org.jetbrains.annotations.NotNull;
@@ -143,7 +144,7 @@ public class CustomizationUtil {
     DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootGroup);
     root.removeAllChildren();
     schema.fillActionGroups(root);
-    final JTree defaultTree = new JTree(new DefaultTreeModel(root));
+    final JTree defaultTree = new Tree(new DefaultTreeModel(root));
 
     final ArrayList<ActionUrl> actions = new ArrayList<ActionUrl>();
 
index 13f63577ac6beaf5a26e9f2effdf9be96a58136b..b4653e5c884b98ecb7eaecfca48602698993a0b1 100644 (file)
@@ -114,7 +114,6 @@ public class FileSystemTreeImpl implements FileSystemTree {
 
     new TreeSpeedSearch(myTree);
     myTree.setLineStyleAngled();
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
 
     myTree.getSelectionModel().setSelectionMode(
index ce1e240a233898f5ed20e5ce28e9cac010221d76..30531a735a3aa0d4e53c36033ddbf0dd88aa5a26 100644 (file)
@@ -29,6 +29,7 @@ import com.intellij.openapi.util.IconLoader;
 import com.intellij.ui.ColoredTreeCellRenderer;
 import com.intellij.ui.LayeredIcon;
 import com.intellij.ui.ScrollPaneFactory;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.ui.treeStructure.treetable.TreeTableModel;
 import com.intellij.util.Alarm;
 import com.intellij.util.ui.EmptyIcon;
@@ -66,7 +67,7 @@ public class ActionsTree {
   public ActionsTree() {
     myRoot = new DefaultMutableTreeNode(ROOT);
 
-    myTree = new JTree(new MyModel(myRoot));
+    myTree = new Tree(new MyModel(myRoot));
     myTree.setCellRenderer(new ColoredTreeCellRenderer(){
       public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
         Keymap originalKeymap = myKeymap != null ? myKeymap.getParent() : null;
index 167783d962f340d515c16705a31cf24de2cd46f3..1181f92cbfab0a4179930c3c6a2c2e1b24866e01 100644 (file)
@@ -38,6 +38,7 @@ import com.intellij.ui.ColoredTreeCellRenderer;
 import com.intellij.ui.DocumentAdapter;
 import com.intellij.ui.ScrollPaneFactory;
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.Alarm;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.Consumer;
@@ -352,7 +353,7 @@ public class ExplorerSettingsEditor extends DialogWrapper {
   }
 
   private void initTree() {
-    myTree = new JTree(myRoot){
+    myTree = new Tree(myRoot){
       public Dimension getPreferredScrollableViewportSize() {
         Dimension size = super.getPreferredScrollableViewportSize();
         size = new Dimension(size.width + 10, size.height);
index 942d07f5a5e7c15f1b176d40aa2b4d3671a9e217..f78bf6fd338bf98acaf1cd8b1e7215e3b186b3a7 100644 (file)
@@ -608,7 +608,6 @@ public class OptionsTree extends JPanel implements Disposable, OptionsEditorColl
 
     @Override
     protected void configureUiHelper(final TreeUIHelper helper) {
-      helper.installToolTipHandler(this);
     }
 
     @Override
index 1afa23790d1103bf1f8d901c3363322f1f747ded..6a074ec712c3d8f49e0146926aed90737efcf3c0 100644 (file)
@@ -26,7 +26,7 @@ import java.awt.*;
 import java.awt.event.*;
 import java.awt.image.BufferedImage;
 
-abstract public class AbstractToolTipHandler <KeyType, ComponentType extends JComponent>{
+abstract public class AbstractToolTipHandler <KeyType, ComponentType extends JComponent> implements ToolTipHandler<KeyType> {
   private static final Logger LOG = Logger.getInstance("#com.intellij.ui.AbstractToolTipHandler");
 
   protected final ComponentType myComponent;
@@ -138,7 +138,8 @@ abstract public class AbstractToolTipHandler <KeyType, ComponentType extends JCo
    */
   protected abstract KeyType getCellKeyForPoint(Point point);
 
-  public KeyType getCurrentCellKey() {
+  @Override
+  public KeyType getCurrentItem() {
     return myKey;
   }
 
index 9ddbacef647ae07cde91ee14e4461d8e40e33149..66f4bb4e71a23fb3eb7d4bc414b60ce0b2daa664 100644 (file)
@@ -846,7 +846,7 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi
     frame.getContentPane().add(content, BorderLayout.CENTER);
 
 
-    final JTree tree = new JTree();
+    final JTree tree = new Tree();
     content.add(tree);
 
 
index d2453cf2da1435922078d4979c6ca29f7557c2e0..460cae818062eb8f8052535e65e4b0e0d3385fee 100644 (file)
@@ -40,13 +40,11 @@ public class CheckboxTree extends CheckboxTreeBase {
   public CheckboxTree(final CheckboxTreeCellRenderer cellRenderer, CheckedTreeNode root) {
     super(cellRenderer, root);
 
-    TreeToolTipHandler.install(this);
-    installSpeedSearch();    
+    installSpeedSearch();
   }
   public CheckboxTree(final CheckboxTreeCellRenderer cellRenderer, CheckedTreeNode root, final CheckPolicy checkPolicy) {
     super(cellRenderer, root, checkPolicy);
 
-    TreeToolTipHandler.install(this);
     installSpeedSearch();
   }
 
index dd609b6917a0ea38389cbb9dd9d76e8451c6c7a8..a4f58309f689036afaa7692463245735ac58bdb0 100644 (file)
@@ -20,29 +20,48 @@ import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.tree.TreeSelectionModel;
 import java.awt.*;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
 public class ListToolTipHandler extends AbstractToolTipHandler<Integer, JList>{
-  public static ListToolTipHandler install(JList list) {
+  public static void install(JList list) {
+    install(list);
+  }
+
+  public static ListToolTipHandler installAndGet(JList list) {
     return new ListToolTipHandler(list);
   }
 
   protected ListToolTipHandler(final JList list) {
     super(list);
 
-    list.getSelectionModel().addListSelectionListener(
-      new ListSelectionListener() {
-        public void valueChanged(ListSelectionEvent e) {
-          if (e.getValueIsAdjusting()) return;
+    final ListSelectionListener selectionListener = new ListSelectionListener() {
+      public void valueChanged(ListSelectionEvent e) {
+        if (e.getValueIsAdjusting()) return;
+
+        updateSelection(list);
+      }
+    };
+    list.getSelectionModel().addListSelectionListener( selectionListener );
+
+    list.addPropertyChangeListener("selectionModel", new PropertyChangeListener() {
+      @Override
+      public void propertyChange(PropertyChangeEvent evt) {
+        updateSelection(list);
 
-          updateSelection(list);
+        if (evt.getOldValue() != null) {
+          ((ListSelectionModel)evt.getOldValue()).removeListSelectionListener(selectionListener);
+        }
+        if (evt.getNewValue() != null) {
+          ((ListSelectionModel)evt.getNewValue()).addListSelectionListener(selectionListener);
         }
       }
-    );
+    });
+
 
-    final ListDataListener l = new ListDataListener() {
+    final ListDataListener modelListener = new ListDataListener() {
       public void intervalAdded(ListDataEvent e) {
         updateSelection(list);
       }
@@ -56,17 +75,17 @@ public class ListToolTipHandler extends AbstractToolTipHandler<Integer, JList>{
       }
     };
 
-    list.getModel().addListDataListener(l);
+    list.getModel().addListDataListener(modelListener);
     list.addPropertyChangeListener("model", new PropertyChangeListener() {
       @Override
       public void propertyChange(PropertyChangeEvent evt) {
         updateSelection(list);
 
         if (evt.getOldValue() != null) {
-          ((ListModel)evt.getOldValue()).removeListDataListener(l);
+          ((ListModel)evt.getOldValue()).removeListDataListener(modelListener);
         }
         if (evt.getNewValue() != null) {
-          ((ListModel)evt.getNewValue()).addListDataListener(l);
+          ((ListModel)evt.getNewValue()).addListDataListener(modelListener);
         }
       }
     });
index 9bebee0395439793f72baeea13c21a1ed3c64084..916bb0c42d196c75bb67a71049900bc60da1ca00 100644 (file)
@@ -20,29 +20,56 @@ import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.event.TableModelEvent;
 import javax.swing.event.TableModelListener;
+import javax.swing.table.TableColumnModel;
 import javax.swing.table.TableModel;
 import java.awt.*;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
-public class TableToolTipHandler extends AbstractToolTipHandler<TableCellKey, JTable> {
-  public static TableToolTipHandler install(JTable table) {
+public class TableToolTipHandler extends AbstractToolTipHandler<TableCell, JTable> {
+  public static void install(JTable table) {
+    installAndGet(table);
+  }
+  
+  public static TableToolTipHandler installAndGet(JTable table) {
     return new TableToolTipHandler(table);
   }
 
   protected TableToolTipHandler(final JTable table) {
     super(table);
 
-    ListSelectionListener l = new ListSelectionListener() {
+    final ListSelectionListener selectionListener = new ListSelectionListener() {
       @Override
       public void valueChanged(ListSelectionEvent e) {
         if (e.getValueIsAdjusting()) return;
         updateSelection(table);
       }
     };
-    table.getSelectionModel().addListSelectionListener(l);
-    table.getColumnModel().getSelectionModel().addListSelectionListener(l);
+    table.getSelectionModel().addListSelectionListener(selectionListener);
+    table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
 
+    table.addPropertyChangeListener("selectionModel", new PropertyChangeListener() {
+      @Override
+      public void propertyChange(PropertyChangeEvent evt) {
+        if (evt.getOldValue() != null) {
+          ((ListSelectionModel)evt.getOldValue()).removeListSelectionListener(selectionListener);
+        }
+        if (evt.getNewValue() != null) {
+          ((ListSelectionModel)evt.getNewValue()).addListSelectionListener(selectionListener);
+        }
+      }
+    });
+    table.addPropertyChangeListener("columnModel", new PropertyChangeListener() {
+      @Override
+      public void propertyChange(PropertyChangeEvent evt) {
+        if (evt.getOldValue() != null) {
+          ((TableColumnModel)evt.getOldValue()).getSelectionModel().removeListSelectionListener(selectionListener);
+        }
+        if (evt.getNewValue() != null) {
+          ((TableColumnModel)evt.getNewValue()).getSelectionModel().addListSelectionListener(selectionListener);
+        }
+      }
+    });
 
     final TableModelListener modelListener = new TableModelListener() {
       @Override
@@ -70,35 +97,35 @@ public class TableToolTipHandler extends AbstractToolTipHandler<TableCellKey, JT
   private void updateSelection(JTable table) {
     int row = table.getSelectedRow();
     int column = table.getSelectedColumn();
-    handleSelectionChange((row == -1  || column == -1) ? null : new TableCellKey(row, column));
+    handleSelectionChange((row == -1  || column == -1) ? null : new TableCell(row, column));
   }
 
-  public Rectangle getCellBounds(TableCellKey tableCellKey, Component rendererComponent) {
+  public Rectangle getCellBounds(TableCell tableCellKey, Component rendererComponent) {
     Rectangle cellRect = getCellRect(tableCellKey);
     cellRect.width = rendererComponent.getPreferredSize().width;
     return cellRect;
   }
 
-  private Rectangle getCellRect(TableCellKey tableCellKey) {
-    return myComponent.getCellRect(tableCellKey.myRowIndex, tableCellKey.myColumnIndex, false);
+  private Rectangle getCellRect(TableCell tableCellKey) {
+    return myComponent.getCellRect(tableCellKey.row, tableCellKey.column, false);
   }
 
-  public Component getRendererComponent(TableCellKey key) {
-    int modelColumnIndex = myComponent.convertColumnIndexToModel(key.myColumnIndex);
+  public Component getRendererComponent(TableCell key) {
+    int modelColumnIndex = myComponent.convertColumnIndexToModel(key.column);
     final TableModel model = myComponent.getModel();
-    if (key.myRowIndex < 0 || key.myRowIndex >= model.getRowCount()
-        || key.myColumnIndex < 0 || key.myColumnIndex >= model.getColumnCount()) return null;
+    if (key.row < 0 || key.row >= model.getRowCount()
+        || key.column < 0 || key.column >= model.getColumnCount()) return null;
 
-    return myComponent.getCellRenderer(key.myRowIndex, key.myColumnIndex).
+    return myComponent.getCellRenderer(key.row, key.column).
       getTableCellRendererComponent(myComponent,
-                                    myComponent.getModel().getValueAt(key.myRowIndex, modelColumnIndex),
-                                    myComponent.getSelectionModel().isSelectedIndex(key.myRowIndex),
+                                    myComponent.getModel().getValueAt(key.row, modelColumnIndex),
+                                    myComponent.getSelectionModel().isSelectedIndex(key.row),
                                     myComponent.hasFocus(),
-                                    key.myRowIndex,key.myColumnIndex
+                                    key.row,key.column
       );
   }
 
-  public Rectangle getVisibleRect(TableCellKey key) {
+  public Rectangle getVisibleRect(TableCell key) {
     Rectangle columnVisibleRect = myComponent.getVisibleRect();
     Rectangle cellRect = getCellRect(key);
     int visibleRight = Math.min(columnVisibleRect.x + columnVisibleRect.width, cellRect.x + cellRect.width);
@@ -122,7 +149,7 @@ public class TableToolTipHandler extends AbstractToolTipHandler<TableCellKey, JT
   //  r.width = cm.getColumn(column).getWidth();
   //}
 
-  public TableCellKey getCellKeyForPoint(Point point) {
+  public TableCell getCellKeyForPoint(Point point) {
     int rowIndex = myComponent.rowAtPoint(point);
     if (rowIndex == -1) {
       return null;
@@ -133,6 +160,6 @@ public class TableToolTipHandler extends AbstractToolTipHandler<TableCellKey, JT
       return null;
     }
 
-    return new TableCellKey(rowIndex, columnIndex);
+    return new TableCell(rowIndex, columnIndex);
   }
 }
similarity index 53%
rename from platform/platform-impl/src/com/intellij/ui/ToolTipHandlerProviderImpl.java
rename to platform/platform-impl/src/com/intellij/ui/ToolTipHandlerFactoryImpl.java
index 4e9ada2142f56419ed27699e3cf1ae4a329d0bb2..8c861ceee38d87c2d1ae77f241284f9110534469 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2010 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.intellij.ui;
 
 import javax.swing.*;
 
-public class ToolTipHandlerProviderImpl extends ToolTipHandlerProvider {
-  public void install(JComponent component) {
-    if (component instanceof JTree) {
-      TreeToolTipHandler.install((JTree)component);
-    }
-    else if (component instanceof JTable) {
-      TableToolTipHandler.install((JTable)component);
-    }
-    else if (component instanceof JList) {
-      ListToolTipHandler.install((JList)component);
-    }
-    else {
-      ToolTipManager.sharedInstance().registerComponent(component);
-    }
+public class ToolTipHandlerFactoryImpl extends ToolTipHandlerFactory {
+  @Override
+  public ToolTipHandler<Integer> install(JList list) {
+    return new ListToolTipHandler(list);
   }
 
+  @Override
+  public ToolTipHandler<Integer> install(JTree tree) {
+    return new TreeToolTipHandler(tree);
+  }
 
+  @Override
+  public ToolTipHandler<TableCell> install(JTable table) {
+    return new TableToolTipHandler(table);
+  }
 }
index a52b64e5da2842bb8349fe084920dbc669f3e5ad..6a37aa7f58a57154171402c2de7385b637d4cdf6 100644 (file)
@@ -26,33 +26,50 @@ import javax.swing.plaf.TreeUI;
 import javax.swing.tree.TreeCellRenderer;
 import javax.swing.tree.TreeModel;
 import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
 public class TreeToolTipHandler extends AbstractToolTipHandler<Integer, JTree> {
-  public static TreeToolTipHandler install(JTree tree) {
+  public static void install(JTree tree) {
+    installAndGet(tree);
+  }
+
+  public static TreeToolTipHandler installAndGet(JTree tree) {
     return new TreeToolTipHandler(tree);
   }
 
   protected TreeToolTipHandler(final JTree tree) {
     super(tree);
-    tree.getSelectionModel().addTreeSelectionListener(
-      new TreeSelectionListener() {
-        public void valueChanged(TreeSelectionEvent e) {
-          try {
-            updateSelection(tree);
-          }
-          catch (Exception e1) {
-            // Workaround for some race conditions in Swing, see
-            // http://www.intellij.net/tracker/idea/viewSCR?publicId=53961
-          }
+    final TreeSelectionListener selectionListener = new TreeSelectionListener() {
+      public void valueChanged(TreeSelectionEvent e) {
+        try {
+          updateSelection(tree);
+        }
+        catch (Exception e1) {
+          // Workaround for some race conditions in Swing, see
+          // http://www.intellij.net/tracker/idea/viewSCR?publicId=53961
+        }
+      }
+    };
+    tree.getSelectionModel().addTreeSelectionListener(selectionListener);
+    tree.addPropertyChangeListener(JTree.SELECTION_MODEL_PROPERTY, new PropertyChangeListener() {
+      @Override
+      public void propertyChange(PropertyChangeEvent evt) {
+        updateSelection(tree);
+
+        if (evt.getOldValue() != null) {
+          ((TreeSelectionModel)evt.getOldValue()).removeTreeSelectionListener(selectionListener);
+        }
+        if (evt.getNewValue() != null) {
+          ((TreeSelectionModel)evt.getNewValue()).addTreeSelectionListener(selectionListener);
         }
       }
-    );
+    });
 
-    final TreeModelListener l = new TreeModelListener() {
+    final TreeModelListener modelListener = new TreeModelListener() {
       @Override
       public void treeNodesChanged(TreeModelEvent e) {
         updateSelection(tree);
@@ -74,17 +91,17 @@ public class TreeToolTipHandler extends AbstractToolTipHandler<Integer, JTree> {
       }
     };
     
-    tree.getModel().addTreeModelListener(l);
+    tree.getModel().addTreeModelListener(modelListener);
     tree.addPropertyChangeListener("model", new PropertyChangeListener() {
       @Override
       public void propertyChange(PropertyChangeEvent evt) {
         updateSelection(tree);
 
         if (evt.getOldValue() != null) {
-          ((TreeModel)evt.getOldValue()).removeTreeModelListener(l);
+          ((TreeModel)evt.getOldValue()).removeTreeModelListener(modelListener);
         }
         if (evt.getNewValue() != null) {
-          ((TreeModel)evt.getNewValue()).addTreeModelListener(l);
+          ((TreeModel)evt.getNewValue()).addTreeModelListener(modelListener);
         }
       }
     });
index 55c4944cf0f6f8582e3b28159fa512db870c13cb..40a316fd83bf674ea3bcc3d7191c149d58763679 100644 (file)
@@ -15,6 +15,9 @@
  */
 package com.intellij.ui;
 
+import com.intellij.ui.components.JBList;
+import com.intellij.ui.table.JBTable;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.EditSourceOnDoubleClickHandler;
 import com.intellij.util.EditSourceOnEnterKeyHandler;
 
@@ -25,13 +28,21 @@ import javax.swing.*;
  */
 public class TreeUIHelperImpl extends TreeUIHelper {
   public void installToolTipHandler(final JTree tree) {
+    if (tree instanceof Tree) return;
     TreeToolTipHandler.install(tree);
   }
 
   public void installToolTipHandler(final JTable table) {
+    if (table instanceof JBTable) return;
     TableToolTipHandler.install(table);
   }
 
+  @Override
+  public void installToolTipHandler(JList list) {
+    if (list instanceof JBList) return;
+    ListToolTipHandler.install(list);
+  }
+
   public void installEditSourceOnDoubleClick(final JTree tree) {
     EditSourceOnDoubleClickHandler.install(tree);
   }
index 96784caa41cc796987de209b37be159fa4fbd5c2..e4b2243952970c39329eeb514cb32c3fdfaaf980 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.util.ui.tree;
 
 import com.intellij.ui.TreeExpandCollapse;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.Assertion;
 import junit.framework.TestCase;
 
@@ -46,7 +47,7 @@ public class TreeUtilTest extends TestCase {
     model.insertNodeInto(child2, root, 1);
     DefaultMutableTreeNode child11 = new DefaultMutableTreeNode("11");
     model.insertNodeInto(child11, child1, 0);
-    JTree tree = new JTree(model);
+    JTree tree = new Tree(model);
     TreeExpandCollapse.expandAll(tree);
     tree.clearSelection();
     TreeUtil.removeSelected(tree);
@@ -75,7 +76,7 @@ public class TreeUtilTest extends TestCase {
     model.insertNodeInto(node1, root, 0);
     DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("2");
     model.insertNodeInto(node2, node1, 0);
-    JTree tree = new JTree(model);
+    JTree tree = new Tree(model);
     TreeExpandCollapse.expandAll(tree);
     tree.setSelectionPath(TreeUtil.getPathFromRoot(node2));
     TreeUtil.removeSelected(tree);
@@ -91,7 +92,7 @@ public class TreeUtilTest extends TestCase {
     model.insertNodeInto(middle, root, 1);
     DefaultMutableTreeNode last = new DefaultMutableTreeNode("3");
     model.insertNodeInto(last, root, 2);
-    JTree tree = new JTree(model);
+    JTree tree = new Tree(model);
     tree.setSelectionPath(TreeUtil.getPathFromRoot(last));
     TreeUtil.removeSelected(tree);
     assertSame(middle, tree.getSelectionPath().getLastPathComponent());
index 4f9d065bdca28be36fd0eba35cea53a970886b7c..170426322ca182abfb648c955c5cc6eb4f6d8a36 100644 (file)
@@ -33,8 +33,6 @@
                       serviceImplementation="com.intellij.ide.CopyPasteManagerEx"/>
   <applicationService serviceInterface="com.intellij.openapi.ui.popup.JBPopupFactory"
                       serviceImplementation="com.intellij.ui.popup.PopupFactoryImpl"/>
-  <applicationService serviceInterface="com.intellij.ui.ToolTipHandlerProvider"
-                      serviceImplementation="com.intellij.ui.ToolTipHandlerProviderImpl"/>
   <applicationService serviceInterface="com.intellij.openapi.diff.DiffManager"
                       serviceImplementation="com.intellij.openapi.diff.impl.external.DiffManagerImpl"/>
   <applicationService serviceInterface="com.intellij.openapi.fileEditor.ex.FileEditorProviderManager"
@@ -59,6 +57,8 @@
                       serviceImplementation="com.intellij.ui.content.ContentFactoryImpl"/>
   <applicationService serviceInterface="com.intellij.ui.TreeUIHelper"
                       serviceImplementation="com.intellij.ui.TreeUIHelperImpl"/>
+  <applicationService serviceInterface="com.intellij.ui.ToolTipHandlerFactory"
+                      serviceImplementation="com.intellij.ui.ToolTipHandlerFactoryImpl"/>
   <applicationService serviceInterface="com.intellij.openapi.diff.DiffRequestFactory"
                       serviceImplementation="com.intellij.openapi.diff.impl.mergeTool.DiffRequestFactoryImpl"/>
   <applicationService serviceInterface="com.intellij.ui.SystemNotifications"
index 71e5f47f693eef240aff3805e5c691fb7ca23610..1317c93a47933cd08acbb8d9667f50bd203c0c50 100644 (file)
@@ -90,7 +90,6 @@ public abstract class TestTreeView extends Tree implements DataProvider {
         return testProxy.getName();
       }
     });
-    TreeToolTipHandler.install(this);
     TreeUtil.installActions(this);
     PopupHandler.installPopupHandler(this, IdeActions.GROUP_TESTTREE_POPUP, ActionPlaces.TESTTREE_VIEW_POPUP);
   }
index 0da5456f440b68725033de1158e45d4efcc0c705..aa73300074e8c3911cf85e5cf63cd687848854c7 100644 (file)
@@ -180,7 +180,6 @@ public class UpdateInfoTree extends PanelWithActionsAndCloseButton implements Di
       }
     });
     myTree.setCellRenderer(new UpdateTreeCellRenderer());
-    TreeUIHelper.getInstance().installToolTipHandler(myTree);
     TreeUtil.installActions(myTree);
     new TreeSpeedSearch(myTree, new Convertor<TreePath, String>() {
       public String convert(TreePath path) {
index 38ebad57599a89e686f15cdb2d93b6c04a0a4e55..df40d66fc619c32ce395f339a2529b8b40103d65 100644 (file)
@@ -112,7 +112,6 @@ public class AntExplorer extends SimpleToolWindowPanel implements DataProvider {
     myTree.setCellRenderer(new NodeRenderer());
     myBuilder = new AntExplorerTreeBuilder(project, myTree, model);
     myBuilder.setTargetsFiltered(AntConfigurationBase.getInstance(project).isFilterTargets());
-    TreeToolTipHandler.install(myTree);
     TreeUtil.installActions(myTree);
     new TreeSpeedSearch(myTree);
     myTree.addMouseListener(new PopupHandler() {
index 96829249c3452a337cf436364edd2de78c7a705e..079a48e95f7bd62df89a410ecd2dc44e7b7e36c1 100644 (file)
@@ -107,7 +107,6 @@ public class TargetChooserDialog extends DialogWrapper {
     tree.setRootVisible(false);
     tree.setShowsRootHandles(true);
     tree.setLineStyleAngled();
-    TreeToolTipHandler.install(tree);
     TreeUtil.installActions(tree);
     new TreeSpeedSearch(tree, new Convertor<TreePath, String>() {
       public String convert(final TreePath path) {
index 5d5b19c07ddfbfe0ab58d707e2ba822d348a8953..acdde1dd06edf3973a50c2de7a27dec7dd309ad2 100644 (file)
@@ -107,7 +107,7 @@ public class CvsTree extends JPanel implements CvsTabbedWindow.DeactivateListene
     mySelectionObservable.addObserver(observer);
   }
 
-  public JTree getTree() {
+  public Tree getTree() {
     return myTree;
   }
 
@@ -138,7 +138,6 @@ public class CvsTree extends JPanel implements CvsTabbedWindow.DeactivateListene
     addSelectionListener();
 
     TreeUIHelper uiHelper = TreeUIHelper.getInstance();
-    uiHelper.installToolTipHandler(myTree);
     uiHelper.installTreeSpeedSearch(myTree);
     TreeUtil.installActions(myTree);
 
index ba052525938205c0083a855c62c4f19e05b4bcc7..87c4fc0fc076351b15aba713486363ea9899f3a9 100644 (file)
@@ -75,7 +75,6 @@ public class BrowserPanel extends JPanel implements DataProvider, CvsTabbedWindo
 
     TreeUIHelper uiHelper = TreeUIHelper.getInstance();
 
-    uiHelper.installToolTipHandler(myTree.getTree());
     uiHelper.installEditSourceOnDoubleClick(myTree.getTree());
     TreeUtil.installActions(myTree.getTree());
 
index 91e13fd0442b0feff61051b146baebca2c23c9de..3a03b2e3af8187a0f939c9aca7e63e6869a51da3 100644 (file)
@@ -45,6 +45,7 @@ import com.intellij.ui.ColoredListCellRenderer;
 import com.intellij.ui.ListSpeedSearch;
 import com.intellij.ui.PopupHandler;
 import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.*;
 import com.intellij.util.containers.Convertor;
 import com.intellij.util.ui.UIUtil;
@@ -1065,7 +1066,7 @@ public class GitLogTree implements GitTreeViewI {
 
     private void initView(Icon childrenIcon) {
       myStructure = new MyTreeStructure(myCommonData, myFiltering, myProject, childrenIcon, myRootFile);
-      myTree = new JTree();
+      myTree = new Tree();
 
       myAtb = new AbstractTreeBuilder(myTree, new DefaultTreeModel(new DefaultMutableTreeNode()), myStructure, null);
       myAtb.initRootNode();
index c68e071aaec4bf16e1f28ed79603f3ce5dcf3965..1c30e88548ff0f5dd8836fa890d8dbbc17ceddfc 100644 (file)
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.vcs.vfs.VcsFileSystem;
 import com.intellij.openapi.vcs.vfs.VcsVirtualFile;
 import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.EditSourceOnDoubleClickHandler;
 import com.intellij.util.NotNullFunction;
 import org.jetbrains.annotations.NonNls;
@@ -187,7 +188,7 @@ public class RepositoryBrowserComponent extends JPanel implements Disposable, Da
 
   private void createComponent() {
     setLayout(new BorderLayout());
-    myRepositoryTree = new JTree();
+    myRepositoryTree = new Tree();
     myRepositoryTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
     myRepositoryTree.setRootVisible(false);
     myRepositoryTree.setShowsRootHandles(true);
index 814d7a9f4dd51c5b4af6c159b33e34eda7a824ab..af285bba686901421169b08fb35b92622cc21313 100644 (file)
@@ -112,9 +112,6 @@ public final class ComponentTree extends Tree implements DataProvider {
     // Install convenient keyboard navigation
     TreeUtil.installActions(this);
 
-    // Install advanced tooltips
-    TreeToolTipHandler.install(this);
-
     // Popup menu
     PopupHandler.installPopupHandler(
       this,
index 657ac638d94784daa94851da171a824d0ebb5fe4..6fe940ddcf1634cde2b61320e3c88960e68eee4c 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.intellij.util.xml.ui;
 
+import com.intellij.ui.treeStructure.Tree;
 import com.intellij.util.ui.UIUtil;
 
 import javax.swing.*;
@@ -33,7 +34,7 @@ public class EmptyPane {
     final Color color = UIUtil.getSeparatorShadow();
     myLabel.setForeground(color);
     myLabel.setText(text);
-    myPanel.setBackground(new JTree().getBackground());
+    myPanel.setBackground(new Tree().getBackground());
   }
 
   public JComponent getComponent() {