mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-26 05:48:37 +07:00
Add data provider to search settings and to select them in editor.
This commit is contained in:
+4
-6
@@ -20,8 +20,7 @@ import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.util.scopeChooser.EditScopesDialog;
|
||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -75,11 +74,10 @@ class ScopeColorsPageFactory implements ColorAndFontPanelFactory {
|
||||
button.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(@NotNull ActionEvent e) {
|
||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext());
|
||||
if (optionsEditor != null) {
|
||||
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext());
|
||||
if (settings != null) {
|
||||
try {
|
||||
Configurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
||||
if (configurable == null || optionsEditor.clearSearchAndSelect(configurable).isRejected()) {
|
||||
if (settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES)).isRejected()) {
|
||||
EditScopesDialog.showDialog(project, null);
|
||||
}
|
||||
} catch (IllegalStateException ex) {
|
||||
|
||||
@@ -37,8 +37,7 @@ import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.InputValidator;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -230,14 +229,13 @@ public class SeverityEditorDialog extends DialogWrapper {
|
||||
doOKAction();
|
||||
myOptionsList.clearSelection();
|
||||
final DataContext dataContext = DataManager.getInstance().getDataContext(myPanel);
|
||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(dataContext);
|
||||
if (optionsEditor != null) {
|
||||
final ColorAndFontOptions colorAndFontOptions =
|
||||
(ColorAndFontOptions)((ConfigurableWrapper)optionsEditor.findConfigurableById(ColorAndFontOptions.ID)).getConfigurable();
|
||||
Settings settings = Settings.KEY.getData(dataContext);
|
||||
if (settings != null) {
|
||||
ColorAndFontOptions colorAndFontOptions = settings.find(ColorAndFontOptions.class);
|
||||
assert colorAndFontOptions != null;
|
||||
final SearchableConfigurable javaPage = colorAndFontOptions.findSubConfigurable(InspectionColorSettingsPage.class);
|
||||
LOG.assertTrue(javaPage != null);
|
||||
optionsEditor.clearSearchAndSelect(javaPage).doWhenDone(new Runnable() {
|
||||
settings.select(javaPage).doWhenDone(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final Runnable runnable = javaPage.enableSearch(toConfigure);
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright 2000-2014 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.openapi.options.ex;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataKey;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurableGroup;
|
||||
import com.intellij.openapi.options.UnnamedConfigurable;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.IdentityHashMap;
|
||||
|
||||
/**
|
||||
* @author Sergey.Malenkov
|
||||
*/
|
||||
public abstract class Settings {
|
||||
public static final DataKey<Settings> KEY = DataKey.create("settings.editor");
|
||||
|
||||
private final ConfigurableGroup[] myGroups;
|
||||
private final IdentityHashMap<UnnamedConfigurable, ConfigurableWrapper>
|
||||
myMap = new IdentityHashMap<UnnamedConfigurable, ConfigurableWrapper>();
|
||||
|
||||
protected Settings(@NotNull ConfigurableGroup... groups) {
|
||||
myGroups = groups;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public final <T extends Configurable> T find(@NotNull Class<T> type) {
|
||||
Configurable configurable = new ConfigurableVisitor.ByType(type).find(myGroups);
|
||||
if (type.isInstance(configurable)) {
|
||||
return type.cast(configurable);
|
||||
}
|
||||
return unwrap(configurable, type);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public final Configurable find(@NotNull String id) {
|
||||
Configurable configurable = new ConfigurableVisitor.ByID(id).find(myGroups);
|
||||
return choose(configurable, unwrap(configurable, Configurable.class));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public final ActionCallback select(Configurable configurable) {
|
||||
return configurable != null
|
||||
? selectImpl(choose(configurable, myMap.get(configurable)))
|
||||
: new ActionCallback.Rejected();
|
||||
}
|
||||
|
||||
protected abstract ActionCallback selectImpl(Configurable configurable);
|
||||
|
||||
private <T extends Configurable> T unwrap(Configurable configurable, Class<T> type) {
|
||||
if (configurable instanceof ConfigurableWrapper) {
|
||||
ConfigurableWrapper wrapper = (ConfigurableWrapper)configurable;
|
||||
UnnamedConfigurable unnamed = wrapper.getConfigurable();
|
||||
if (type.isInstance(unnamed)) {
|
||||
myMap.put(unnamed, wrapper);
|
||||
return type.cast(unnamed);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Configurable choose(Configurable configurable, Configurable variant) {
|
||||
return variant != null ? variant : configurable;
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.options.*;
|
||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
||||
import com.intellij.openapi.options.ex.GlassPanel;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.*;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
@@ -143,9 +144,18 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat
|
||||
}
|
||||
};
|
||||
|
||||
final Settings mySettings;
|
||||
|
||||
public OptionsEditor(Project project, ConfigurableGroup[] groups, Configurable preselectedConfigurable) {
|
||||
myProperties = PropertiesComponent.getInstance(project);
|
||||
|
||||
mySettings = new Settings(groups) {
|
||||
@Override
|
||||
protected ActionCallback selectImpl(Configurable configurable) {
|
||||
return OptionsEditor.this.select(configurable, "");
|
||||
}
|
||||
};
|
||||
|
||||
mySearch = new MySearchField() {
|
||||
@Override
|
||||
protected void onTextKeyEvent(final KeyEvent e) {
|
||||
@@ -844,6 +854,9 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat
|
||||
|
||||
@Override
|
||||
public Object getData(@NonNls final String dataId) {
|
||||
if (Settings.KEY.is(dataId)) {
|
||||
return mySettings;
|
||||
}
|
||||
if (KEY.is(dataId)) {
|
||||
return this;
|
||||
}
|
||||
|
||||
+4
@@ -25,6 +25,7 @@ import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurableGroup;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
@@ -278,6 +279,9 @@ public class OptionsEditorDialog extends DialogWrapper implements DataProvider{
|
||||
}
|
||||
|
||||
public Object getData(@NonNls String dataId) {
|
||||
if (Settings.KEY.is(dataId)) {
|
||||
return myEditor.mySettings;
|
||||
}
|
||||
if (OptionsEditor.KEY.is(dataId)) {
|
||||
return myEditor;
|
||||
}
|
||||
|
||||
+4
-8
@@ -19,8 +19,7 @@ import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -95,12 +94,9 @@ class VcsUpdateInfoScopeFilterConfigurable implements Configurable, NamedScopesH
|
||||
panel.add(new LinkLabel("Manage Scopes", null, new LinkListener() {
|
||||
@Override
|
||||
public void linkSelected(LinkLabel aSource, Object aLinkData) {
|
||||
OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext(panel));
|
||||
if (optionsEditor != null) {
|
||||
SearchableConfigurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
||||
if (configurable != null) {
|
||||
optionsEditor.select(configurable);
|
||||
}
|
||||
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext(panel));
|
||||
if (settings != null) {
|
||||
settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES));
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -19,8 +19,7 @@ import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.util.scopeChooser.PackageSetChooserCombo;
|
||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.LabeledComponent;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -108,12 +107,9 @@ public class ProjectSettingsPanel {
|
||||
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||
DataContext context = DataManager.getInstance().getDataContextFromFocus().getResult();
|
||||
if (context != null) {
|
||||
OptionsEditor optionsEditor = OptionsEditor.KEY.getData(context);
|
||||
if (optionsEditor != null) {
|
||||
Configurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
||||
if (configurable != null) {
|
||||
optionsEditor.clearSearchAndSelect(configurable);
|
||||
}
|
||||
Settings settings = Settings.KEY.getData(context);
|
||||
if (settings != null) {
|
||||
settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-8
@@ -16,8 +16,7 @@
|
||||
package com.jetbrains.python.configuration;
|
||||
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.ui.ClickListener;
|
||||
import com.intellij.ui.components.JBLabel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -40,12 +39,9 @@ public class PyConfigureInterpretersLinkPanel extends JPanel {
|
||||
@Override
|
||||
public boolean onClick(@NotNull MouseEvent e, int clickCount) {
|
||||
if (clickCount == 1) {
|
||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext(parentPanel));
|
||||
if (optionsEditor != null) {
|
||||
SearchableConfigurable configurable = optionsEditor.findConfigurableById(PyActiveSdkModuleConfigurable.class.getName());
|
||||
if (configurable != null) {
|
||||
optionsEditor.clearSearchAndSelect(configurable);
|
||||
}
|
||||
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext(parentPanel));
|
||||
if (settings != null) {
|
||||
settings.select(settings.find(PyActiveSdkModuleConfigurable.class.getName()));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ package com.intellij.spellchecker.settings;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
@@ -67,11 +67,11 @@ public class SpellCheckerSettingsPane implements Disposable {
|
||||
link.addHyperlinkListener(new HyperlinkListener() {
|
||||
public void hyperlinkUpdate(final HyperlinkEvent e) {
|
||||
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext());
|
||||
if (optionsEditor != null) {
|
||||
final ErrorsConfigurable errorsConfigurable = optionsEditor.findConfigurable(ErrorsConfigurable.class);
|
||||
Settings allSettings = Settings.KEY.getData(DataManager.getInstance().getDataContext());
|
||||
if (allSettings != null) {
|
||||
final ErrorsConfigurable errorsConfigurable = allSettings.find(ErrorsConfigurable.class);
|
||||
if (errorsConfigurable != null) {
|
||||
optionsEditor.clearSearchAndSelect(errorsConfigurable).doWhenDone(new Runnable() {
|
||||
allSettings.select(errorsConfigurable).doWhenDone(new Runnable() {
|
||||
public void run() {
|
||||
errorsConfigurable.selectInspectionTool(SpellCheckingInspection.SPELL_CHECKING_INSPECTION_TOOL_NAME);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user