From 48124d159f6f5b8880bc8621d579b2e80761a6f2 Mon Sep 17 00:00:00 2001 From: Vasily Pisar Date: Thu, 21 Jul 2016 19:52:00 +0300 Subject: [PATCH] CPP-7228 CMake console doesn't display broken configurations on Windows - supporting icons in tab names - and using icons in CMake console tabs --- .../intellij/ui/content/TabbedContent.java | 3 +++ .../impl/content/TabbedContentTabLabel.java | 25 +++++++++++++++++-- .../ui/content/impl/TabbedContentImpl.java | 11 ++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/content/TabbedContent.java b/platform/platform-api/src/com/intellij/ui/content/TabbedContent.java index f473229b6c46..b901178c3311 100644 --- a/platform/platform-api/src/com/intellij/ui/content/TabbedContent.java +++ b/platform/platform-api/src/com/intellij/ui/content/TabbedContent.java @@ -17,6 +17,7 @@ package com.intellij.ui.content; import com.intellij.openapi.util.Pair; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.List; @@ -35,5 +36,7 @@ public interface TabbedContent extends Content { List> getTabs(); String getTitlePrefix(); void setTitlePrefix(String titlePrefix); + @Nullable + String getTabNameWithoutPrefix(String fullTabName); void split(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/TabbedContentTabLabel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/TabbedContentTabLabel.java index dcf8d26dd7a9..cd68c24a1ab5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/TabbedContentTabLabel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/content/TabbedContentTabLabel.java @@ -19,6 +19,7 @@ import com.intellij.ide.IdeEventQueue; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.Pair; import com.intellij.reference.SoftReference; import com.intellij.ui.ClickListener; @@ -27,6 +28,7 @@ import com.intellij.ui.content.TabbedContent; import com.intellij.util.NotNullFunction; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -52,7 +54,7 @@ public class TabbedContentTabLabel extends ContentTabLabel { } }; private final TabbedContent myContent; - private Reference myPopupReference = null; + @Nullable private Reference myPopupReference = null; public TabbedContentTabLabel(TabbedContent content, TabContentLayout layout) { super(content, layout); @@ -82,6 +84,7 @@ public class TabbedContentTabLabel extends ContentTabLabel { @Override public JComponent fun(Object dom) { label.setText(dom.toString()); + setTabIconInLabel(dom.toString(), label); return label; } }); @@ -90,6 +93,10 @@ public class TabbedContentTabLabel extends ContentTabLabel { int index = list.getSelectedIndex(); if (index != -1) { myContent.selectContent(index); + JComponent tabComponent = myContent.getTabs().get(index).getSecond(); + if (tabComponent instanceof Iconable) { + setIcon(((Iconable)tabComponent).getIcon(Iconable.ICON_FLAG_VISIBILITY)); + } } }).createPopup(); myPopupReference = new WeakReference(popup); @@ -100,11 +107,25 @@ public class TabbedContentTabLabel extends ContentTabLabel { public void update() { super.update(); if (myContent != null) { - setText(myContent.getTabName()); + String tabName = myContent.getTabName(); + setText(tabName); + setTabIconInLabel(tabName, this); } setHorizontalAlignment(LEFT); } + private void setTabIconInLabel(String tabName, JLabel jLabel) { + for (Pair nextTabWithName : myContent.getTabs()) { + if (nextTabWithName.getFirst().equals(tabName) + || nextTabWithName.getFirst().equals(myContent.getTabNameWithoutPrefix(tabName))) { + JComponent tab = nextTabWithName.getSecond(); + if (tab instanceof Iconable) { + jLabel.setIcon(((Iconable)tab).getIcon(Iconable.ICON_FLAG_VISIBILITY)); + } + } + } + } + @Override public Dimension getPreferredSize() { final Dimension size = super.getPreferredSize(); diff --git a/platform/platform-impl/src/com/intellij/ui/content/impl/TabbedContentImpl.java b/platform/platform-impl/src/com/intellij/ui/content/impl/TabbedContentImpl.java index 380e149e45bc..2bc1e66883a6 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/impl/TabbedContentImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/content/impl/TabbedContentImpl.java @@ -22,6 +22,7 @@ import com.intellij.ui.content.ContentManager; import com.intellij.ui.content.TabbedContent; import com.intellij.util.ContentUtilEx; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; @@ -158,6 +159,16 @@ public class TabbedContentImpl extends ContentImpl implements TabbedContent { myPrefix = titlePrefix; } + @Nullable + @Override + public String getTabNameWithoutPrefix(String fullTabName) { + int titlePrefixLength = getTitlePrefix().length() + 2; + if (fullTabName.startsWith(getTitlePrefix())) { + return fullTabName.substring(titlePrefixLength); + } + return null; + } + @Override public void split() { List> copy = new ArrayList>(myTabs);