From b58a8061af9affaa2c3bb42039dbbac4b56ccada Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 10 Aug 2011 17:06:01 +0400 Subject: [PATCH] show separator above 'detection' item in facet types tree --- .../FacetStructureConfigurable.java | 8 +- .../projectRoot/FacetsTreeCellRenderer.java | 73 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetsTreeCellRenderer.java diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetStructureConfigurable.java index 514177f54dfe..f8b9ec7d8df7 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetStructureConfigurable.java @@ -71,9 +71,15 @@ public class FacetStructureConfigurable extends BaseStructureConfigurable { return FacetTypeRegistry.getInstance().getFacetTypes().length > 0 || !InvalidFacetManager.getInstance(myProject).getInvalidFacets().isEmpty(); } + @Override + protected void initTree() { + super.initTree(); + myTree.setCellRenderer(new FacetsTreeCellRenderer()); + } + protected void loadTree() { myTree.setRootVisible(false); - myTree.setShowsRootHandles(true); + myTree.setShowsRootHandles(false); for (FacetType facetType : FacetTypeRegistry.getInstance().getFacetTypes()) { final FacetTypeEditor editor = getOrCreateFacetTypeEditor(facetType); if (editor.isVisible() || ProjectFacetManager.getInstance(myProject).hasFacets(facetType.getId())) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetsTreeCellRenderer.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetsTreeCellRenderer.java new file mode 100644 index 000000000000..a5ec63f9afcc --- /dev/null +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetsTreeCellRenderer.java @@ -0,0 +1,73 @@ +/* + * Copyright 2000-2011 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.openapi.roots.ui.configuration.projectRoot; + +import com.intellij.openapi.ui.MasterDetailsComponent; +import com.intellij.openapi.ui.NamedConfigurable; +import com.intellij.ui.ErrorLabel; +import com.intellij.ui.GroupedElementsRenderer; + +import javax.swing.*; +import javax.swing.tree.TreeCellRenderer; +import java.awt.*; + +/** + * @author nik + */ +public class FacetsTreeCellRenderer extends GroupedElementsRenderer.Tree implements TreeCellRenderer { + @Override + protected JComponent createItemComponent() { + myTextLabel = new ErrorLabel(); + return myTextLabel; + } + + @Override + protected void layout() { + myRendererComponent.setOpaqueActive(false); + myRendererComponent.add(mySeparatorComponent, BorderLayout.NORTH); + myRendererComponent.add(myComponent, BorderLayout.CENTER); + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, + Object value, + boolean selected, + boolean expanded, + boolean leaf, + int row, + boolean hasFocus) { + if (value instanceof MasterDetailsComponent.MyNode) { + final MasterDetailsComponent.MyNode node = (MasterDetailsComponent.MyNode)value; + final NamedConfigurable configurable = node.getConfigurable(); + if (configurable != null) { + final Icon icon = configurable.getIcon(expanded); + final boolean showSeparator = icon == null; + int width = -1; + if (showSeparator) { + final int treeWidth = tree.getSize().width; + if (treeWidth > 0) { + width = treeWidth; + } + } + final JComponent component = configureComponent(configurable.getDisplayName(), null, icon, icon, selected, showSeparator, null, + width); + myTextLabel.setOpaque(selected); + return component; + } + } + return myRendererComponent; + } +}