mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 06:51:17 +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.EditScopesDialog;
|
||||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||||
import com.intellij.openapi.options.Configurable;
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.project.ProjectManager;
|
import com.intellij.openapi.project.ProjectManager;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -75,11 +74,10 @@ class ScopeColorsPageFactory implements ColorAndFontPanelFactory {
|
|||||||
button.addActionListener(new ActionListener() {
|
button.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(@NotNull ActionEvent e) {
|
public void actionPerformed(@NotNull ActionEvent e) {
|
||||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext());
|
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext());
|
||||||
if (optionsEditor != null) {
|
if (settings != null) {
|
||||||
try {
|
try {
|
||||||
Configurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
if (settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES)).isRejected()) {
|
||||||
if (configurable == null || optionsEditor.clearSearchAndSelect(configurable).isRejected()) {
|
|
||||||
EditScopesDialog.showDialog(project, null);
|
EditScopesDialog.showDialog(project, null);
|
||||||
}
|
}
|
||||||
} catch (IllegalStateException ex) {
|
} 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.Configurable;
|
||||||
import com.intellij.openapi.options.SearchableConfigurable;
|
import com.intellij.openapi.options.SearchableConfigurable;
|
||||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
|
||||||
import com.intellij.openapi.ui.DialogWrapper;
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
import com.intellij.openapi.ui.InputValidator;
|
import com.intellij.openapi.ui.InputValidator;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
@@ -230,14 +229,13 @@ public class SeverityEditorDialog extends DialogWrapper {
|
|||||||
doOKAction();
|
doOKAction();
|
||||||
myOptionsList.clearSelection();
|
myOptionsList.clearSelection();
|
||||||
final DataContext dataContext = DataManager.getInstance().getDataContext(myPanel);
|
final DataContext dataContext = DataManager.getInstance().getDataContext(myPanel);
|
||||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(dataContext);
|
Settings settings = Settings.KEY.getData(dataContext);
|
||||||
if (optionsEditor != null) {
|
if (settings != null) {
|
||||||
final ColorAndFontOptions colorAndFontOptions =
|
ColorAndFontOptions colorAndFontOptions = settings.find(ColorAndFontOptions.class);
|
||||||
(ColorAndFontOptions)((ConfigurableWrapper)optionsEditor.findConfigurableById(ColorAndFontOptions.ID)).getConfigurable();
|
|
||||||
assert colorAndFontOptions != null;
|
assert colorAndFontOptions != null;
|
||||||
final SearchableConfigurable javaPage = colorAndFontOptions.findSubConfigurable(InspectionColorSettingsPage.class);
|
final SearchableConfigurable javaPage = colorAndFontOptions.findSubConfigurable(InspectionColorSettingsPage.class);
|
||||||
LOG.assertTrue(javaPage != null);
|
LOG.assertTrue(javaPage != null);
|
||||||
optionsEditor.clearSearchAndSelect(javaPage).doWhenDone(new Runnable() {
|
settings.select(javaPage).doWhenDone(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final Runnable runnable = javaPage.enableSearch(toConfigure);
|
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.*;
|
||||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
||||||
import com.intellij.openapi.options.ex.GlassPanel;
|
import com.intellij.openapi.options.ex.GlassPanel;
|
||||||
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.ui.*;
|
import com.intellij.openapi.ui.*;
|
||||||
import com.intellij.openapi.util.ActionCallback;
|
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) {
|
public OptionsEditor(Project project, ConfigurableGroup[] groups, Configurable preselectedConfigurable) {
|
||||||
myProperties = PropertiesComponent.getInstance(project);
|
myProperties = PropertiesComponent.getInstance(project);
|
||||||
|
|
||||||
|
mySettings = new Settings(groups) {
|
||||||
|
@Override
|
||||||
|
protected ActionCallback selectImpl(Configurable configurable) {
|
||||||
|
return OptionsEditor.this.select(configurable, "");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
mySearch = new MySearchField() {
|
mySearch = new MySearchField() {
|
||||||
@Override
|
@Override
|
||||||
protected void onTextKeyEvent(final KeyEvent e) {
|
protected void onTextKeyEvent(final KeyEvent e) {
|
||||||
@@ -844,6 +854,9 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getData(@NonNls final String dataId) {
|
public Object getData(@NonNls final String dataId) {
|
||||||
|
if (Settings.KEY.is(dataId)) {
|
||||||
|
return mySettings;
|
||||||
|
}
|
||||||
if (KEY.is(dataId)) {
|
if (KEY.is(dataId)) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -25,6 +25,7 @@ import com.intellij.openapi.options.Configurable;
|
|||||||
import com.intellij.openapi.options.ConfigurableGroup;
|
import com.intellij.openapi.options.ConfigurableGroup;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
import com.intellij.openapi.options.ConfigurationException;
|
||||||
import com.intellij.openapi.options.SearchableConfigurable;
|
import com.intellij.openapi.options.SearchableConfigurable;
|
||||||
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.ui.DialogWrapper;
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
import com.intellij.openapi.util.ActionCallback;
|
import com.intellij.openapi.util.ActionCallback;
|
||||||
@@ -278,6 +279,9 @@ public class OptionsEditorDialog extends DialogWrapper implements DataProvider{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Object getData(@NonNls String dataId) {
|
public Object getData(@NonNls String dataId) {
|
||||||
|
if (Settings.KEY.is(dataId)) {
|
||||||
|
return myEditor.mySettings;
|
||||||
|
}
|
||||||
if (OptionsEditor.KEY.is(dataId)) {
|
if (OptionsEditor.KEY.is(dataId)) {
|
||||||
return myEditor;
|
return myEditor;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-8
@@ -19,8 +19,7 @@ import com.intellij.ide.DataManager;
|
|||||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||||
import com.intellij.openapi.options.Configurable;
|
import com.intellij.openapi.options.Configurable;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
import com.intellij.openapi.options.ConfigurationException;
|
||||||
import com.intellij.openapi.options.SearchableConfigurable;
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.ui.ComboBox;
|
import com.intellij.openapi.ui.ComboBox;
|
||||||
import com.intellij.openapi.util.Comparing;
|
import com.intellij.openapi.util.Comparing;
|
||||||
@@ -95,12 +94,9 @@ class VcsUpdateInfoScopeFilterConfigurable implements Configurable, NamedScopesH
|
|||||||
panel.add(new LinkLabel("Manage Scopes", null, new LinkListener() {
|
panel.add(new LinkLabel("Manage Scopes", null, new LinkListener() {
|
||||||
@Override
|
@Override
|
||||||
public void linkSelected(LinkLabel aSource, Object aLinkData) {
|
public void linkSelected(LinkLabel aSource, Object aLinkData) {
|
||||||
OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext(panel));
|
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext(panel));
|
||||||
if (optionsEditor != null) {
|
if (settings != null) {
|
||||||
SearchableConfigurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES));
|
||||||
if (configurable != null) {
|
|
||||||
optionsEditor.select(configurable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ import com.intellij.ide.DataManager;
|
|||||||
import com.intellij.ide.util.scopeChooser.PackageSetChooserCombo;
|
import com.intellij.ide.util.scopeChooser.PackageSetChooserCombo;
|
||||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||||
import com.intellij.openapi.actionSystem.DataContext;
|
import com.intellij.openapi.actionSystem.DataContext;
|
||||||
import com.intellij.openapi.options.Configurable;
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.ui.LabeledComponent;
|
import com.intellij.openapi.ui.LabeledComponent;
|
||||||
import com.intellij.openapi.util.Comparing;
|
import com.intellij.openapi.util.Comparing;
|
||||||
@@ -108,12 +107,9 @@ public class ProjectSettingsPanel {
|
|||||||
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||||
DataContext context = DataManager.getInstance().getDataContextFromFocus().getResult();
|
DataContext context = DataManager.getInstance().getDataContextFromFocus().getResult();
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
OptionsEditor optionsEditor = OptionsEditor.KEY.getData(context);
|
Settings settings = Settings.KEY.getData(context);
|
||||||
if (optionsEditor != null) {
|
if (settings != null) {
|
||||||
Configurable configurable = optionsEditor.findConfigurableById(ScopeChooserConfigurable.PROJECT_SCOPES);
|
settings.select(settings.find(ScopeChooserConfigurable.PROJECT_SCOPES));
|
||||||
if (configurable != null) {
|
|
||||||
optionsEditor.clearSearchAndSelect(configurable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-8
@@ -16,8 +16,7 @@
|
|||||||
package com.jetbrains.python.configuration;
|
package com.jetbrains.python.configuration;
|
||||||
|
|
||||||
import com.intellij.ide.DataManager;
|
import com.intellij.ide.DataManager;
|
||||||
import com.intellij.openapi.options.SearchableConfigurable;
|
import com.intellij.openapi.options.ex.Settings;
|
||||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
|
||||||
import com.intellij.ui.ClickListener;
|
import com.intellij.ui.ClickListener;
|
||||||
import com.intellij.ui.components.JBLabel;
|
import com.intellij.ui.components.JBLabel;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -40,12 +39,9 @@ public class PyConfigureInterpretersLinkPanel extends JPanel {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onClick(@NotNull MouseEvent e, int clickCount) {
|
public boolean onClick(@NotNull MouseEvent e, int clickCount) {
|
||||||
if (clickCount == 1) {
|
if (clickCount == 1) {
|
||||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext(parentPanel));
|
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext(parentPanel));
|
||||||
if (optionsEditor != null) {
|
if (settings != null) {
|
||||||
SearchableConfigurable configurable = optionsEditor.findConfigurableById(PyActiveSdkModuleConfigurable.class.getName());
|
settings.select(settings.find(PyActiveSdkModuleConfigurable.class.getName()));
|
||||||
if (configurable != null) {
|
|
||||||
optionsEditor.clearSearchAndSelect(configurable);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package com.intellij.spellchecker.settings;
|
|||||||
import com.intellij.ide.DataManager;
|
import com.intellij.ide.DataManager;
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import com.intellij.openapi.options.ConfigurationException;
|
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.project.Project;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
@@ -67,11 +67,11 @@ public class SpellCheckerSettingsPane implements Disposable {
|
|||||||
link.addHyperlinkListener(new HyperlinkListener() {
|
link.addHyperlinkListener(new HyperlinkListener() {
|
||||||
public void hyperlinkUpdate(final HyperlinkEvent e) {
|
public void hyperlinkUpdate(final HyperlinkEvent e) {
|
||||||
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||||
final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext());
|
Settings allSettings = Settings.KEY.getData(DataManager.getInstance().getDataContext());
|
||||||
if (optionsEditor != null) {
|
if (allSettings != null) {
|
||||||
final ErrorsConfigurable errorsConfigurable = optionsEditor.findConfigurable(ErrorsConfigurable.class);
|
final ErrorsConfigurable errorsConfigurable = allSettings.find(ErrorsConfigurable.class);
|
||||||
if (errorsConfigurable != null) {
|
if (errorsConfigurable != null) {
|
||||||
optionsEditor.clearSearchAndSelect(errorsConfigurable).doWhenDone(new Runnable() {
|
allSettings.select(errorsConfigurable).doWhenDone(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
errorsConfigurable.selectInspectionTool(SpellCheckingInspection.SPELL_CHECKING_INSPECTION_TOOL_NAME);
|
errorsConfigurable.selectInspectionTool(SpellCheckingInspection.SPELL_CHECKING_INSPECTION_TOOL_NAME);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user