From a15ff5bec2515cad69c856d681658ecf6ab28eb7 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Feb 2017 22:26:07 +0100 Subject: [PATCH] ability to see all registry keys in search everywhere and edit them --- .../IntentionsOptionsTopHitProvider.java | 5 +- .../LiveTemplatesOptionsTopHitProvider.java | 5 +- .../ide/actions/GotoActionAction.java | 14 ++- .../ide/actions/SearchEverywhereAction.java | 7 +- .../tabs/FileColorsOptionsTopHitProvider.java | 5 +- .../ui/AppearanceOptionsTopHitProvider.java | 9 +- .../ui/ConfigurableOptionsTopHitProvider.java | 5 +- .../ide/ui/EditorOptionsTopHitProvider.java | 11 ++- .../ide/ui/InspectionsTopHitProvider.java | 8 +- .../ide/ui/OptionsTopHitProvider.java | 8 +- .../ide/ui/PluginOptionsTopHitProvider.java | 8 +- .../ide/ui/RegistryOptionsTopHitProvider.java | 14 +-- .../ide/ui/RegistryTextOptionDescriptor.java | 94 +++++++++++++++++++ .../ide/ui/SystemOptionsTopHitProvider.java | 7 +- .../VcsOptionsTopHitProvider.java | 5 +- .../config/CvsOptionsTopHitProvider.java | 5 +- .../config/GitOptionsTopHitProvider.java | 5 +- .../zmlx/hg4idea/HgOptionsTopHitProvider.java | 5 +- .../idea/svn/SvnOptionsTopHitProvider.java | 5 +- 19 files changed, 170 insertions(+), 55 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ide/ui/RegistryTextOptionDescriptor.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionsOptionsTopHitProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionsOptionsTopHitProvider.java index 159681816c45..a6179ef4672f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionsOptionsTopHitProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionsOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,6 +17,7 @@ package com.intellij.codeInsight.intention.impl.config; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,7 +37,7 @@ public class IntentionsOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { IntentionManagerSettings settings = IntentionManagerSettings.getInstance(); if (settings == null) { return Collections.emptyList(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplatesOptionsTopHitProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplatesOptionsTopHitProvider.java index a496e85bbe4f..1b4c8daf85b7 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplatesOptionsTopHitProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplatesOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,6 +17,7 @@ package com.intellij.codeInsight.template.impl; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,7 +37,7 @@ public final class LiveTemplatesOptionsTopHitProvider extends OptionsTopHitProvi @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { TemplateSettings settings = TemplateSettings.getInstance(); if (settings == null) { return Collections.emptyList(); diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java index 64ac3c105700..515f47fc5173 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -291,9 +291,15 @@ public class GotoActionAction extends GotoActionBase implements DumbAware { Component component, @Nullable AnActionEvent e) { if (element instanceof OptionDescription) { - final String configurableId = ((OptionDescription)element).getConfigurableId(); - TransactionGuard.getInstance().submitTransactionLater(project != null ? project : ApplicationManager.getApplication(), () -> - ShowSettingsUtilImpl.showSettingsDialog(project, configurableId, enteredText)); + OptionDescription optionDescription = (OptionDescription)element; + final String configurableId = optionDescription.getConfigurableId(); + Disposable disposable = project != null ? project : ApplicationManager.getApplication(); + TransactionGuard guard = TransactionGuard.getInstance(); + if (optionDescription.hasExternalEditor()) { + guard.submitTransactionLater(disposable, () -> optionDescription.invokeInternalEditor()); + } else { + guard.submitTransactionLater(disposable, () -> ShowSettingsUtilImpl.showSettingsDialog(project, configurableId, enteredText)); + } } else { ApplicationManager.getApplication().invokeLater(() -> IdeFocusManager.getInstance(project).doWhenFocusSettlesDown( diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index ba2cef4eae0a..d871a01664d2 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -1225,9 +1225,10 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA } append(text, attrs); final String id = ((OptionDescription)value).getConfigurableId(); - final String name1 = myConfigurables.get(id); - if (name1 != null) { - setLocationString(name1); + String location = myConfigurables.get(id); + if (location == null) location = ((OptionDescription)value).getValue(); + if (location != null) { + setLocationString(location); } } else if (value instanceof OptionsTopHitProvider) { diff --git a/platform/lang-impl/src/com/intellij/ui/tabs/FileColorsOptionsTopHitProvider.java b/platform/lang-impl/src/com/intellij/ui/tabs/FileColorsOptionsTopHitProvider.java index 3a2942a95861..ed8362ca30fe 100644 --- a/platform/lang-impl/src/com/intellij/ui/tabs/FileColorsOptionsTopHitProvider.java +++ b/platform/lang-impl/src/com/intellij/ui/tabs/FileColorsOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -20,6 +20,7 @@ import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicMethodBasedOptionDescription; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.ui.FileColorManager; import org.jetbrains.annotations.NotNull; @@ -40,7 +41,7 @@ public final class FileColorsOptionsTopHitProvider extends OptionsTopHitProvider @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project != null) { FileColorManager manager = FileColorManager.getInstance(project); if (manager != null) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java index e3091d9318aa..54610abf0cb7 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java @@ -16,6 +16,7 @@ package com.intellij.ide.ui; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.notification.impl.NotificationsConfigurationImpl; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -31,7 +32,7 @@ import java.util.Collection; public class AppearanceOptionsTopHitProvider extends OptionsTopHitProvider { public static final String ID = "appearance"; - private static final Collection ourOptions = ContainerUtil.immutableList( + private static final Collection ourOptions = ContainerUtil.immutableList( appearance2("UI: " + messageIde("checkboox.cyclic.scrolling.in.lists"), "cycleScrolling"), appearance("UI: " + messageIde("checkbox.show.icons.in.quick.navigation"), "SHOW_ICONS_IN_QUICK_NAVIGATION"), appearance("UI: " + messageIde("checkbox.position.cursor.on.default.button"), "MOVE_MOUSE_ON_DEFAULT_BUTTON"), @@ -54,7 +55,7 @@ public class AppearanceOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return ourOptions; } @@ -105,7 +106,7 @@ public class AppearanceOptionsTopHitProvider extends OptionsTopHitProvider { } public static class Ex extends OptionsTopHitProvider implements CoveredByToggleActions { - private static final Collection ourOptions = ContainerUtil.immutableList( + private static final Collection ourOptions = ContainerUtil.immutableList( appearance("Window: " + "Hide Tool Window Bars", "HIDE_TOOL_STRIPES"), appearance("View: Show Main Toolbar", "SHOW_MAIN_TOOLBAR"), appearance("View: Show Status Bar", "SHOW_STATUS_BAR"), @@ -114,7 +115,7 @@ public class AppearanceOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return ourOptions; } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/ConfigurableOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/ConfigurableOptionsTopHitProvider.java index 87f882b366a6..69bea435f671 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/ConfigurableOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/ConfigurableOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,6 +16,7 @@ package com.intellij.ide.ui; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; @@ -120,7 +121,7 @@ public abstract class ConfigurableOptionsTopHitProvider extends OptionsTopHitPro @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { try { Configurable configurable = getConfigurable(project); Component component = configurable.createComponent(); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/EditorOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/EditorOptionsTopHitProvider.java index b208b2104c81..5158b22964f1 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/EditorOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/EditorOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,6 +16,7 @@ package com.intellij.ide.ui; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -29,7 +30,7 @@ import java.util.Collection; public class EditorOptionsTopHitProvider extends OptionsTopHitProvider { private static final String ID = "editor"; - private static final Collection ourOptions = ContainerUtil.immutableList( + private static final Collection ourOptions = ContainerUtil.immutableList( editorUI("Appearance: " + messageIde("checkbox.use.antialiased.font.in.editor"), "ANTIALIASING_IN_EDITOR"), editorUI("Appearance: " + messageIde("checkbox.use.lcd.rendered.font.in.editor"), "USE_LCD_RENDERING_IN_EDITOR"), editorApp("Appearance: Caret blinking", "IS_CARET_BLINKING"), @@ -49,7 +50,7 @@ public class EditorOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return ourOptions; } @@ -83,14 +84,14 @@ public class EditorOptionsTopHitProvider extends OptionsTopHitProvider { } public static class Ex extends OptionsTopHitProvider implements CoveredByToggleActions { - private static final Collection ourOptions = ContainerUtil.immutableList( + private static final Collection ourOptions = ContainerUtil.immutableList( editorApp("Appearance: " + messageApp("checkbox.show.line.numbers"), "ARE_LINE_NUMBERS_SHOWN"), editorApp("Appearance: " + messageApp("checkbox.show.gutter.icons"), "ARE_GUTTER_ICONS_SHOWN") ); @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return ourOptions; } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/InspectionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/InspectionsTopHitProvider.java index fee12451aa33..330f91885bc7 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/InspectionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/InspectionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -16,7 +16,7 @@ package com.intellij.ide.ui; import com.intellij.codeInspection.ex.Tools; -import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.util.containers.ContainerUtil; @@ -37,9 +37,9 @@ public class InspectionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project == null) return ContainerUtil.emptyList(); - List result = ContainerUtil.newArrayList(); + List result = ContainerUtil.newArrayList(); List tools = InspectionProjectProfileManager.getInstance(project).getCurrentProfile().getAllEnabledInspectionTools(project); for (Tools tool : tools) { result.add(new ToolOptionDescription(tool, project)); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java index 33aa56b86198..f11687ab6d92 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/OptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,7 +17,7 @@ package com.intellij.ide.ui; import com.intellij.ide.IdeBundle; import com.intellij.ide.SearchTopHitProvider; -import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.keymap.KeyMapBundle; import com.intellij.openapi.project.Project; @@ -37,7 +37,7 @@ import java.util.List; */ public abstract class OptionsTopHitProvider implements SearchTopHitProvider { @NotNull - public abstract Collection getOptions(@Nullable Project project); + public abstract Collection getOptions(@Nullable Project project); @Override public final void consumeTopHits(@NonNls String pattern, Consumer collector, Project project) { @@ -57,7 +57,7 @@ public abstract class OptionsTopHitProvider implements SearchTopHitProvider { pattern = pattern.substring(id.length()).trim().toLowerCase(); } final MinusculeMatcher matcher = NameUtil.buildMatcher("*" + pattern, NameUtil.MatchingCaseSensitivity.NONE); - for (BooleanOptionDescription option : getOptions(project)) { + for (OptionDescription option : getOptions(project)) { if (matcher.matches(option.getOption())) { collector.consume(option); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/PluginOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/PluginOptionsTopHitProvider.java index e7688111e1c8..6fb67c21c845 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/PluginOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/PluginOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,7 +17,7 @@ package com.intellij.ide.ui; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManagerCore; -import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; @@ -32,8 +32,8 @@ import java.util.Collection; public class PluginOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { - ArrayList options = new ArrayList<>(); + public Collection getOptions(@Nullable Project project) { + ArrayList options = new ArrayList<>(); ApplicationInfoEx applicationInfo = ApplicationInfoEx.getInstanceEx(); for (IdeaPluginDescriptor pluginDescriptor : PluginManagerCore.getPlugins()) { if (applicationInfo.isEssentialPlugin(pluginDescriptor.getPluginId().getIdString())) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/RegistryOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/RegistryOptionsTopHitProvider.java index 548ca7d5df7a..731dfcf9f58e 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/RegistryOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/RegistryOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -15,7 +15,7 @@ */ package com.intellij.ide.ui; -import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.registry.Registry; @@ -33,7 +33,7 @@ import java.util.List; public class RegistryOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return Holder.ourValues; } @@ -48,10 +48,10 @@ public class RegistryOptionsTopHitProvider extends OptionsTopHitProvider { } private static class Holder { - private static final List ourValues = initValues(); + private static final List ourValues = initValues(); - private static List initValues() { - final List result = new ArrayList<>(); + private static List initValues() { + final List result = new ArrayList<>(); for (RegistryValue value : Registry.getAll()) { if (value.isBoolean()) { final String key = value.getKey(); @@ -61,6 +61,8 @@ public class RegistryOptionsTopHitProvider extends OptionsTopHitProvider { } else { result.add(optionDescriptor); } + } else { + result.add(new RegistryTextOptionDescriptor(value)); } } return result; diff --git a/platform/platform-impl/src/com/intellij/ide/ui/RegistryTextOptionDescriptor.java b/platform/platform-impl/src/com/intellij/ide/ui/RegistryTextOptionDescriptor.java new file mode 100644 index 000000000000..bcc9870ed732 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ide/ui/RegistryTextOptionDescriptor.java @@ -0,0 +1,94 @@ +/* + * Copyright 2000-2017 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.ide.ui; + +import com.intellij.ide.ui.search.OptionDescription; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.InputValidatorEx; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.registry.RegistryValue; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.wm.impl.IdeFrameImpl; +import com.intellij.ui.Changeable; +import com.intellij.ui.ColorChooser; +import com.intellij.ui.ColorUtil; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; + +/** + * @author Konstantin Bulenkov + */ +public class RegistryTextOptionDescriptor extends OptionDescription implements Changeable { + private RegistryValue myValue; + + public RegistryTextOptionDescriptor(RegistryValue value) { + super(value.getKey()); + myValue = value; + } + + @Override + public boolean hasChanged() { + return myValue.isChangedFromDefault(); + } + + @Override + public String getOption() { + return myValue.getKey(); + } + + @Override + public String getValue() { + return myValue.asString(); + } + + @Override + public boolean hasExternalEditor() { + return true; + } + + @Override + public void invokeInternalEditor() { + if (myValue.getKey().contains("color") && ColorUtil.fromHex(myValue.asString(), null) != null) { + Color color = ColorChooser.chooseColor(IdeFrameImpl.getActiveFrame(), "Change Color For '" + myValue.getKey() + "'", ColorUtil.fromHex(myValue.asString())); + if (color != null) { + myValue.setValue(ColorUtil.toHex(color)); + } + } else { + String s = Messages.showInputDialog((Project)null, "Enter new value for '" + myValue.getKey() + "'", "Change Registry Value", null, + myValue.asString(), new InputValidatorEx() { + @Nullable + @Override + public String getErrorText(String inputString) { + return canClose(inputString) ? null : "Should not be empty"; + } + + @Override + public boolean checkInput(String inputString) { + return canClose(inputString); + } + + @Override + public boolean canClose(String inputString) { + return !StringUtil.isEmpty(inputString); + } + }); + if (s != null) { + myValue.setValue(s); + } + } + } +} diff --git a/platform/platform-impl/src/com/intellij/ide/ui/SystemOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/SystemOptionsTopHitProvider.java index 42f7bf9b9082..2a1430b57597 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/SystemOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/SystemOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,6 +17,7 @@ package com.intellij.ide.ui; import com.intellij.ide.GeneralSettings; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,7 +30,7 @@ import java.util.Collections; * @author Sergey.Malenkov */ public final class SystemOptionsTopHitProvider extends OptionsTopHitProvider { - private static final Collection ourOptions = Collections.unmodifiableCollection(Arrays.asList( + private static final Collection ourOptions = Collections.unmodifiableCollection(Arrays.asList( option(messageIde("checkbox.show.tips.on.startup"), "showTipsOnStartup", "setShowTipsOnStartup"), option(messageIde("checkbox.reopen.last.project.on.startup"), "isReopenLastProject", "setReopenLastProject"), option(messageIde("checkbox.support.screen.readers"), "isSupportScreenReaders", "setSupportScreenReaders"), @@ -44,7 +45,7 @@ public final class SystemOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { return ourOptions; } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsOptionsTopHitProvider.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsOptionsTopHitProvider.java index 4d84b8a31a92..a5e6dff9c335 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsOptionsTopHitProvider.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -19,6 +19,7 @@ import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicFieldBasedOptionDescription; import com.intellij.ide.ui.PublicMethodBasedOptionDescription; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; @@ -46,7 +47,7 @@ public final class VcsOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project == null || ProjectLevelVcsManager.getInstance(project).getAllVcss().length == 0) { return Collections.emptyList(); } diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/config/CvsOptionsTopHitProvider.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/config/CvsOptionsTopHitProvider.java index 8e615f3d7f0c..2a7d30f9b0a8 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/config/CvsOptionsTopHitProvider.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/config/CvsOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -19,6 +19,7 @@ import com.intellij.CvsBundle; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicFieldBasedOptionDescription; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.impl.VcsDescriptor; @@ -40,7 +41,7 @@ public final class CvsOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project != null) { for (VcsDescriptor descriptor : ProjectLevelVcsManager.getInstance(project).getAllVcss()) { if ("CVS".equals(descriptor.getDisplayName())) { diff --git a/plugins/git4idea/src/git4idea/config/GitOptionsTopHitProvider.java b/plugins/git4idea/src/git4idea/config/GitOptionsTopHitProvider.java index d3c954a90841..d792b317eb1b 100644 --- a/plugins/git4idea/src/git4idea/config/GitOptionsTopHitProvider.java +++ b/plugins/git4idea/src/git4idea/config/GitOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -19,6 +19,7 @@ import com.intellij.dvcs.branch.DvcsSyncSettings; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicMethodBasedOptionDescription; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.impl.VcsDescriptor; @@ -41,7 +42,7 @@ public final class GitOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project != null) { for (VcsDescriptor descriptor : ProjectLevelVcsManager.getInstance(project).getAllVcss()) { if ("Git".equals(descriptor.getDisplayName())) { diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/HgOptionsTopHitProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/HgOptionsTopHitProvider.java index 8a40da4e11bc..974238e470e2 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/HgOptionsTopHitProvider.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/HgOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -18,6 +18,7 @@ package org.zmlx.hg4idea; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicMethodBasedOptionDescription; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; @@ -40,7 +41,7 @@ public final class HgOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project != null) { for (VcsDescriptor descriptor : ProjectLevelVcsManager.getInstance(project).getAllVcss()) { if ("Mercurial".equals(descriptor.getDisplayName())) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnOptionsTopHitProvider.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnOptionsTopHitProvider.java index cfd2c87fe8af..fb0a2d1a7b1e 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnOptionsTopHitProvider.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnOptionsTopHitProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -18,6 +18,7 @@ package org.jetbrains.idea.svn; import com.intellij.ide.ui.OptionsTopHitProvider; import com.intellij.ide.ui.PublicMethodBasedOptionDescription; import com.intellij.ide.ui.search.BooleanOptionDescription; +import com.intellij.ide.ui.search.OptionDescription; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.impl.VcsDescriptor; @@ -39,7 +40,7 @@ public final class SvnOptionsTopHitProvider extends OptionsTopHitProvider { @NotNull @Override - public Collection getOptions(@Nullable Project project) { + public Collection getOptions(@Nullable Project project) { if (project != null) { for (VcsDescriptor descriptor : ProjectLevelVcsManager.getInstance(project).getAllVcss()) { if ("Subversion".equals(descriptor.getDisplayName())) {