ShowSettingsUtil.showSettingsDialog allow additional configurable setup (ref CPP-8391 Add utility actions on CMake tool window)

This commit is contained in:
Anton Makeev
2016-12-12 15:20:39 +01:00
parent bc658f2b80
commit a70d9d8e5f
2 changed files with 25 additions and 6 deletions
@@ -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 <T extends Configurable> void showSettingsDialog(@Nullable Project project,
@NotNull Class<T> configurableClass,
@Nullable Consumer<T> additionalConfiguration);
public abstract boolean editConfigurable(Project project, Configurable configurable);
public abstract boolean editConfigurable(@Nullable Project project, Configurable configurable, @Nullable Runnable advancedInitialization);
@@ -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 <T extends Configurable> void showSettingsDialog(@Nullable Project project,
@NotNull Class<T> configurableClass,
@Nullable Consumer<T> 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();
}