diff --git a/platform/platform-api/src/com/intellij/openapi/options/ShowSettingsUtil.java b/platform/platform-api/src/com/intellij/openapi/options/ShowSettingsUtil.java index 34eaf920d78d..85e25e98a16f 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/ShowSettingsUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/options/ShowSettingsUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 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 com.intellij.openapi.options; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.SystemInfo; +import com.intellij.util.Consumer; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,6 +38,10 @@ public abstract class ShowSettingsUtil { public abstract void showSettingsDialog(@NotNull final Project project, final Configurable toSelect); + public abstract void showSettingsDialog(@Nullable Project project, + @NotNull Class configurableClass, + @Nullable Consumer additionalConfiguration); + public abstract boolean editConfigurable(Project project, Configurable configurable); public abstract boolean editConfigurable(@Nullable Project project, Configurable configurable, @Nullable Runnable advancedInitialization); diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java index e20a82f91c24..ac7073e975d5 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java @@ -17,18 +17,17 @@ package com.intellij.ide.actions; import com.intellij.ide.ui.search.SearchUtil; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableGroup; -import com.intellij.openapi.options.ShowSettingsUtil; -import com.intellij.openapi.options.TabbedConfigurable; +import com.intellij.openapi.options.*; import com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil; import com.intellij.openapi.options.ex.ConfigurableVisitor; +import com.intellij.openapi.options.ex.ConfigurableWrapper; import com.intellij.openapi.options.newEditor.SettingsDialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.navigation.Place; +import com.intellij.util.Consumer; import com.intellij.util.ui.update.Activatable; import com.intellij.util.ui.update.UiNotifyConnector; import org.jetbrains.annotations.NotNull; @@ -98,14 +97,29 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { @Override public void showSettingsDialog(@Nullable final Project project, final Class configurableClass) { + //noinspection unchecked + showSettingsDialog(project, configurableClass, null); + } + + public void showSettingsDialog(@Nullable Project project, + @NotNull Class configurableClass, + @Nullable Consumer additionalConfiguration) { assert Configurable.class.isAssignableFrom(configurableClass) : "Not a configurable: " + configurableClass.getName(); ConfigurableGroup[] groups = getConfigurableGroups(project, true); Configurable config = new ConfigurableVisitor.ByType(configurableClass).find(groups); - + assert config != null : "Cannot find configurable: " + configurableClass.getName(); + if (additionalConfiguration != null) { + UnnamedConfigurable toConfigure = config instanceof ConfigurableWrapper ? ((ConfigurableWrapper)config).getConfigurable() + : config; + assert configurableClass.isInstance(toConfigure) : "Wrong configurable found: " + toConfigure.getClass().getName(); + //noinspection unchecked + additionalConfiguration.consume((T)toConfigure); + } + getDialog(project, groups, config).show(); }