From 09c0a67d8b39a9b310c2bc7b4e316582ad75443f Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Thu, 31 Jan 2013 17:09:09 +0400 Subject: [PATCH 1/4] IDEA-97665 Provide an option to specify fall back fonts New fallback fonts-aware fonts infrastructure correctly handles Dialog fonts now --- .../options/colors/FontOptions.java | 2 +- .../editor/colors/FontPreferences.java | 90 +++++++++++++++---- .../colors/impl/AbstractColorsScheme.java | 23 ++--- .../impl/ComplementaryFontsRegistry.java | 2 +- .../openapi/editor/impl/EditorImpl.java | 3 +- 5 files changed, 85 insertions(+), 35 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java index ebe94f5bac8a..985520b091e0 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/FontOptions.java @@ -264,7 +264,7 @@ public class FontOptions extends JPanel implements OptionsPanel{ myLineSpacingField.setText(Float.toString(getLineSpacing())); mySelectedFontsModel.clear(); FontPreferences fontPreferences = getFontPreferences(); - List fontFamilies = fontPreferences.getFontFamilies(); + List fontFamilies = fontPreferences.getEffectiveFontFamilies(); Set selectedFonts = ContainerUtilRt.newHashSet(); Object selectedValue = mySelectedFontsList.getSelectedValue(); mySelectedFontsModel.clear(); diff --git a/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java b/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java index bc384e7b5bd7..ced2bf6867c4 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java @@ -21,6 +21,7 @@ import com.intellij.util.containers.ContainerUtilRt; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.awt.*; import java.util.List; @@ -41,7 +42,8 @@ public class FontPreferences { public static final int DEFAULT_FONT_SIZE = FontSize.SMALL.getSize(); @NotNull private final TObjectIntHashMap myFontSizes = new TObjectIntHashMap(); - @NotNull private final List myFontFamilies = ContainerUtilRt.newArrayList(); + @NotNull private final List myEffectiveFontFamilies = ContainerUtilRt.newArrayList(); + @NotNull private final List myRealFontFamilies = ContainerUtilRt.newArrayList(); /** * Font size to use by default. Default value is {@link #DEFAULT_FONT_SIZE}. @@ -49,12 +51,14 @@ public class FontPreferences { private int myTemplateFontSize = DEFAULT_FONT_SIZE; public void clear() { - myFontFamilies.clear(); + myEffectiveFontFamilies.clear(); + myRealFontFamilies.clear(); myFontSizes.clear(); } public void clearFonts() { - myFontFamilies.clear(); + myEffectiveFontFamilies.clear(); + myRealFontFamilies.clear(); } public boolean hasSize(@NotNull String fontName) { @@ -74,38 +78,69 @@ public class FontPreferences { myTemplateFontSize = size; } + /** + * This method might return results different from {@link #getRealFontFamilies()} when + * {@link #getFallbackName(String, int, EditorColorsScheme) a font family unavailable at current environment} + * has been {@link #register(String, int) registered} at the current font preferences object. + *

+ * Effective fonts will hold fallback values for such font families then (exposed by the current method), 'real fonts' will + * be available via {@link #getRealFontFamilies()}. + * + * @return effective font families to use + */ @NotNull - public List getFontFamilies() { - return myFontFamilies; + public List getEffectiveFontFamilies() { + return myEffectiveFontFamilies; } + /** + * @return 'real' font families + * @see #getEffectiveFontFamilies() + */ + @NotNull + public List getRealFontFamilies() { + return myRealFontFamilies; + } + public void register(@NotNull String fontFamily, int size) { - if (!myFontFamilies.contains(fontFamily)) { - myFontFamilies.add(fontFamily); + String fallbackFontFamily = getFallbackName(fontFamily, size, null); + if (!myRealFontFamilies.contains(fontFamily)) { + myRealFontFamilies.add(fontFamily); + } + String effectiveFontFamily = fallbackFontFamily == null ? fontFamily : fallbackFontFamily; + if (!myEffectiveFontFamilies.contains(effectiveFontFamily)) { + myEffectiveFontFamilies.add(effectiveFontFamily); } setSize(fontFamily, size); } /** - * @return first element of the {@link #getFontFamilies() registered font families} (if any); + * @return first element of the {@link #getEffectiveFontFamilies() registered font families} (if any); * {@link #DEFAULT_FONT_NAME} otherwise */ @NotNull public String getFontFamily() { - return myFontFamilies.isEmpty() ? DEFAULT_FONT_NAME : myFontFamilies.get(0); + return myEffectiveFontFamilies.isEmpty() ? DEFAULT_FONT_NAME : myEffectiveFontFamilies.get(0); } public void addFontFamily(@NotNull String fontFamily) { - if (!myFontFamilies.contains(fontFamily)) { - myFontFamilies.add(fontFamily); + String fallbackFontFamily = getFallbackName(fontFamily, DEFAULT_FONT_SIZE, null); + if (!myRealFontFamilies.contains(fontFamily)) { + myRealFontFamilies.add(fontFamily); + } + String effectiveFontFamily = fallbackFontFamily == null ? fontFamily : fallbackFontFamily; + if (!myEffectiveFontFamilies.contains(effectiveFontFamily)) { + myEffectiveFontFamilies.add(effectiveFontFamily); } } public void copyTo(@NotNull final FontPreferences preferences) { - preferences.myFontFamilies.clear(); - preferences.myFontFamilies.addAll(myFontFamilies); + preferences.myEffectiveFontFamilies.clear(); + preferences.myEffectiveFontFamilies.addAll(myEffectiveFontFamilies); + preferences.myRealFontFamilies.clear(); + preferences.myRealFontFamilies.addAll(myRealFontFamilies); preferences.myFontSizes.clear(); - for (String fontFamily : myFontFamilies) { + for (String fontFamily : myRealFontFamilies) { if (myFontSizes.containsKey(fontFamily)) { preferences.myFontSizes.put(fontFamily, myFontSizes.get(fontFamily)); } @@ -114,7 +149,7 @@ public class FontPreferences { @Override public int hashCode() { - return myFontFamilies.hashCode(); + return myRealFontFamilies.hashCode(); } @Override @@ -124,8 +159,8 @@ public class FontPreferences { FontPreferences that = (FontPreferences)o; - if (!myFontFamilies.equals(that.myFontFamilies)) return false; - for (String fontFamily : myFontFamilies) { + if (!myRealFontFamilies.equals(that.myRealFontFamilies)) return false; + for (String fontFamily : myRealFontFamilies) { if (myFontSizes.get(fontFamily) != that.myFontSizes.get(fontFamily)) { return false; } @@ -147,4 +182,25 @@ public class FontPreferences { return "Monospaced"; } + /** + * There is a possible case that particular font family is not available at particular environment (e.g. Monaco under *nix). + * However, java environment tries to mask that via 'Dialog' fonts, i.e. when we try to create font like + * {@code new Font("Monaco", style, size)}, it creates a font object which has font family "Monaco" but is a "Dialog" font. + *

+ * That's why we have a special check for such a situation. + * + * @param fontName font family name to check + * @param fontSize target font size + * @param fallbackScheme colors scheme to use for fallback fonts retrieval (if necessary); + * @return fallback font family to use if font family with the given name is not registered at current environment; + * null if font family with the given name is registered at the current environment + */ + @Nullable + public static String getFallbackName(@NotNull String fontName, int fontSize, @Nullable EditorColorsScheme fallbackScheme) { + Font plainFont = new Font(fontName, Font.PLAIN, fontSize); + if (plainFont.getFamily().equals("Dialog") && !"Dialog".equals(fontName)) { + return fallbackScheme == null ? DEFAULT_FONT_NAME : fallbackScheme.getEditorFontName(); + } + return fontName; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/AbstractColorsScheme.java b/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/AbstractColorsScheme.java index 9104b6fa4a56..d41e826c268c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/AbstractColorsScheme.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/AbstractColorsScheme.java @@ -208,17 +208,12 @@ public abstract class AbstractColorsScheme implements EditorColorsScheme { protected void initFonts() { String editorFontName = getEditorFontName(); int editorFontSize = getEditorFontSize(); - + + myFallbackFontName = FontPreferences.getFallbackName(editorFontName, editorFontSize, myParentScheme); + if (myFallbackFontName != null) { + editorFontName = myFallbackFontName; + } Font plainFont = new Font(editorFontName, Font.PLAIN, editorFontSize); - if (plainFont.getFamily().equals("Dialog") && !editorFontName.equals("Dialog")) { - editorFontName = myParentScheme != null ? myParentScheme.getEditorFontName() : FontPreferences.DEFAULT_FONT_NAME; - myFallbackFontName = editorFontName; - plainFont = new Font(editorFontName, Font.PLAIN, editorFontSize); - } - else { - myFallbackFontName = null; - } - Font boldFont = new Font(editorFontName, Font.BOLD, editorFontSize); Font italicFont = new Font(editorFontName, Font.ITALIC, editorFontSize); Font boldItalicFont = new Font(editorFontName, Font.BOLD | Font.ITALIC, editorFontSize); @@ -305,7 +300,7 @@ public abstract class AbstractColorsScheme implements EditorColorsScheme { } } - if (myConsoleFontPreferences.getFontFamilies().isEmpty()) { + if (myConsoleFontPreferences.getEffectiveFontFamilies().isEmpty()) { myFontPreferences.copyTo(myConsoleFontPreferences); } @@ -442,7 +437,7 @@ public abstract class AbstractColorsScheme implements EditorColorsScheme { // IJ has used a 'single customizable font' mode for ages. That's why we want to support that format now, when it's possible // to specify fonts sequence (see getFontPreferences()), there are big chances that many clients still will use a single font. // That's why we want to use old format when zero or one font is selected and 'extended' format otherwise. - boolean useOldFontFormat = myFontPreferences.getFontFamilies().size() <= 1; + boolean useOldFontFormat = myFontPreferences.getEffectiveFontFamilies().size() <= 1; if (useOldFontFormat) { element = new Element(OPTION_ELEMENT); element.setAttribute(NAME_ATTR, EDITOR_FONT_SIZE); @@ -454,7 +449,7 @@ public abstract class AbstractColorsScheme implements EditorColorsScheme { } if (!myFontPreferences.equals(myConsoleFontPreferences)) { - if (myConsoleFontPreferences.getFontFamilies().size() <= 1) { + if (myConsoleFontPreferences.getEffectiveFontFamilies().size() <= 1) { element = new Element(OPTION_ELEMENT); element.setAttribute(NAME_ATTR, CONSOLE_FONT_NAME); element.setAttribute(VALUE_ELEMENT, getConsoleFontName()); @@ -504,7 +499,7 @@ public abstract class AbstractColorsScheme implements EditorColorsScheme { } private static void writeFontPreferences(@NotNull String key, @NotNull Element parent, @NotNull FontPreferences preferences) { - for (String fontFamily : preferences.getFontFamilies()) { + for (String fontFamily : preferences.getRealFontFamilies()) { Element element = new Element(key); Element e = new Element(OPTION_ELEMENT); e.setAttribute(NAME_ATTR, EDITOR_FONT_NAME); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java index bf951719f926..1a9343f82a67 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java @@ -146,7 +146,7 @@ public class ComplementaryFontsRegistry { @NotNull public static FontInfo getFontAbleToDisplay(char c, @JdkConstants.FontStyle int style, @NotNull FontPreferences preferences) { boolean tryDefaultFont = true; - List fontFamilies = preferences.getFontFamilies(); + List fontFamilies = preferences.getEffectiveFontFamilies(); FontInfo result; for (String fontFamily : fontFamilies) { result = doGetFontAbleToDisplay(c, preferences.getSize(fontFamily), style, fontFamily); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index abcf5c5333e9..09e75b3f70f2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -83,7 +83,6 @@ import com.intellij.util.Producer; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.containers.Convertor; -import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.text.CharArrayUtil; import com.intellij.util.ui.ButtonlessScrollBarUI; @@ -5805,7 +5804,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @NotNull @Override public FontPreferences getFontPreferences() { - return myFontPreferences.getFontFamilies().isEmpty() ? getGlobal().getFontPreferences() : myFontPreferences; + return myFontPreferences.getEffectiveFontFamilies().isEmpty() ? getGlobal().getFontPreferences() : myFontPreferences; } @Override From 2467b934a7e456af2d72d5211ba84d858d77230b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 31 Jan 2013 14:47:55 +0100 Subject: [PATCH 2/4] handle escape sequences in LowLevelSearchUtil.searchWord() only in UsageSearchContext.IN_STRINGS --- .../intellij/psi/impl/search/LowLevelSearchUtil.java | 4 ++-- .../psi/impl/search/PsiSearchHelperImpl.java | 12 +++++++----- .../psi/impl/search/LowLevelSearchUtilTest.java | 2 +- .../src/com/intellij/util/text/StringSearcher.java | 10 ++++++++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java index 971f6e2b0171..44860d211e60 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java @@ -205,11 +205,11 @@ public class LowLevelSearchUtil { if (index > startOffset) { char c = textArray != null ? textArray[index - 1]:text.charAt(index - 1); if (Character.isJavaIdentifierPart(c) && c != '$') { - if (index < 2 || !isNotEscapedBackslash(text, textArray, startOffset, index-2)) { //escape sequence + if (searcher.isHandleEscapeSequences() && (index < 2 || !isNotEscapedBackslash(text, textArray, startOffset, index-2))) { //escape sequence continue; } } - else if (index > 0 && isNotEscapedBackslash(text, textArray, startOffset, index-1)) { + else if (index > 0 && searcher.isHandleEscapeSequences() && isNotEscapedBackslash(text, textArray, startOffset, index-1)) { continue; } } diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java index 9e91f312ddb8..d751f17573d1 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java @@ -126,14 +126,14 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { public AsyncFuture processElementsWithWordAsync(@NotNull final TextOccurenceProcessor processor, @NotNull SearchScope searchScope, @NotNull final String text, - short searchContext, + final short searchContext, final boolean caseSensitively) { if (text.isEmpty()) { return AsyncFutureFactory.wrapException(new IllegalArgumentException("Cannot search for elements with empty text")); } final ProgressIndicator progress = ProgressIndicatorProvider.getGlobalProgressIndicator(); if (searchScope instanceof GlobalSearchScope) { - StringSearcher searcher = new StringSearcher(text, caseSensitively, true); + StringSearcher searcher = new StringSearcher(text, caseSensitively, true, searchContext == UsageSearchContext.IN_STRINGS); return processElementsWithTextInGlobalScopeAsync(processor, (GlobalSearchScope)searchScope, @@ -154,6 +154,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { text, caseSensitively, ignoreInjectedPsi, + searchContext == UsageSearchContext.IN_STRINGS, progress); } }); @@ -165,11 +166,12 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { final String word, final boolean caseSensitive, final boolean ignoreInjectedPsi, + final boolean handleEscapeSequences, final ProgressIndicator progress) { return ApplicationManager.getApplication().runReadAction(new Computable() { @Override public Boolean compute() { - StringSearcher searcher = new StringSearcher(word, caseSensitive, true); + StringSearcher searcher = new StringSearcher(word, caseSensitive, true, handleEscapeSequences); return LowLevelSearchUtil.processElementsContainingWordInElement(processor, scopeElement, searcher, !ignoreInjectedPsi, progress); } @@ -389,7 +391,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { } }); - final StringSearcher searcher = new StringSearcher(qName, true, true); + final StringSearcher searcher = new StringSearcher(qName, true, true, false); if (progress != null) { progress.pushState(); @@ -615,7 +617,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper { final Map searchers = new HashMap(); final Set allWords = new TreeSet(); for (RequestWithProcessor singleRequest : candidateFiles.values()) { - searchers.put(singleRequest, new StringSearcher(singleRequest.request.word, singleRequest.request.caseSensitive, true)); + searchers.put(singleRequest, new StringSearcher(singleRequest.request.word, singleRequest.request.caseSensitive, true, false)); allWords.add(singleRequest.request.word); } diff --git a/platform/platform-tests/testSrc/com/intellij/psi/impl/search/LowLevelSearchUtilTest.java b/platform/platform-tests/testSrc/com/intellij/psi/impl/search/LowLevelSearchUtilTest.java index 49a22d5c69e1..01517b7b96c8 100644 --- a/platform/platform-tests/testSrc/com/intellij/psi/impl/search/LowLevelSearchUtilTest.java +++ b/platform/platform-tests/testSrc/com/intellij/psi/impl/search/LowLevelSearchUtilTest.java @@ -43,7 +43,7 @@ public class LowLevelSearchUtilTest extends TestCase { } private static int doTest(String pattern, String text) { - StringSearcher searcher = new StringSearcher(pattern, true, true); + StringSearcher searcher = new StringSearcher(pattern, true, true, true); return LowLevelSearchUtil.searchWord(text, 0, text.length(), searcher, null); } } diff --git a/platform/util/src/com/intellij/util/text/StringSearcher.java b/platform/util/src/com/intellij/util/text/StringSearcher.java index 69ae27789464..e3a0ab9761c8 100644 --- a/platform/util/src/com/intellij/util/text/StringSearcher.java +++ b/platform/util/src/com/intellij/util/text/StringSearcher.java @@ -32,12 +32,18 @@ public class StringSearcher { private final boolean myCaseSensitive; private final boolean myForwardDirection; private final boolean myJavaIdentifier; + private final boolean myHandleEscapeSequences; public int getPatternLength() { return myPatternLength; } public StringSearcher(@NotNull String pattern, boolean caseSensitive, boolean forwardDirection) { + this(pattern, caseSensitive, forwardDirection, false); + } + + public StringSearcher(@NotNull String pattern, boolean caseSensitive, boolean forwardDirection, boolean handleEscapeSequences) { + myHandleEscapeSequences = handleEscapeSequences; LOG.assertTrue(!pattern.isEmpty()); myPattern = pattern; myCaseSensitive = caseSensitive; @@ -66,6 +72,10 @@ public class StringSearcher { return myForwardDirection; } + public boolean isHandleEscapeSequences() { + return myHandleEscapeSequences; + } + public int scan(@NotNull CharSequence text) { return scan(text,0,text.length()); } From 226466b8b2895d1c58b37c977a41a83066f32c35 Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Thu, 31 Jan 2013 18:01:31 +0400 Subject: [PATCH 3/4] IDEA-97665 Provide an option to specify fall back fonts Minor improvements --- .../application/options/colors/ColorAndFontOptions.java | 5 +++++ .../com/intellij/openapi/editor/colors/FontPreferences.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 7008ef294702..c45acb38add3 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -1094,6 +1094,11 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract public boolean isNew() { return myIsNew; } + + @Override + public String toString() { + return "temporary scheme for " + myName; + } } @Override diff --git a/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java b/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java index ced2bf6867c4..73d1b8f4b991 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/colors/FontPreferences.java @@ -201,6 +201,6 @@ public class FontPreferences { if (plainFont.getFamily().equals("Dialog") && !"Dialog".equals(fontName)) { return fallbackScheme == null ? DEFAULT_FONT_NAME : fallbackScheme.getEditorFontName(); } - return fontName; + return null; } } From 0a9d31381978ef1b2698fd3fae7fb3f1012ccc44 Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Thu, 31 Jan 2013 17:56:24 +0400 Subject: [PATCH 4/4] RUBY-12947: we have to explicitly specify ruby default external encoding for cucumber run #RUBY-12947 fixed --- .../sm/runner/ui/SMTestRunnerResultsForm.java | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java index 9d99c2b90916..69b41e932110 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java @@ -35,6 +35,7 @@ import com.intellij.openapi.progress.util.ColorProgressBar; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.ui.JBColor; import com.intellij.util.text.DateFormatUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -58,7 +59,7 @@ public class SMTestRunnerResultsForm extends TestResultsPanel implements TestFrameworkRunningModel, TestResultsViewer, SMTRunnerEventsListener { @NonNls private static final String DEFAULT_SM_RUNNER_SPLITTER_PROPERTY = "SMTestRunner.Splitter.Proportion"; - public static final Color DARK_YELLOW = Color.YELLOW.darker(); + public static final Color DARK_YELLOW = JBColor.YELLOW.darker(); private SMTRunnerTestTreeView myTreeView; @@ -491,7 +492,7 @@ public class SMTestRunnerResultsForm extends TestResultsPanel if (testingFinished) { if (myTestsTotal == 0) { myStatusLine.setStatusColor(myTestsRootNode.wasLaunched() || !myTestsRootNode.isTestsReporterAttached() - ? Color.LIGHT_GRAY + ? JBColor.LIGHT_GRAY : ColorProgressBar.RED); } // else color will be according failed/passed tests @@ -606,36 +607,4 @@ public class SMTestRunnerResultsForm extends TestResultsPanel // check that we are in consistent mode return isCustomMessage != (myCurrentCustomProgressCategory == null); } - - - private static class MyFocusTraversalPolicy extends FocusTraversalPolicy { - final List myComponents; - - private MyFocusTraversalPolicy(final List components) { - myComponents = components; - } - - public Component getComponentAfter(final Container container, final Component component) { - return myComponents.get((myComponents.indexOf(component) + 1) % myComponents.size()); - } - - public Component getComponentBefore(final Container container, final Component component) { - final int prevIndex = myComponents.indexOf(component) - 1; - final int normalizedIndex = prevIndex < 0 ? myComponents.size() - 1 : prevIndex; - - return myComponents.get(normalizedIndex); - } - - public Component getFirstComponent(final Container container) { - return myComponents.get(0); - } - - public Component getLastComponent(final Container container) { - return myComponents.get(myComponents.size() - 1); - } - - public Component getDefaultComponent(final Container container) { - return getFirstComponent(container); - } - } }