mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EditorOptions mapped to XML
This commit is contained in:
@@ -17,27 +17,16 @@
|
||||
package com.intellij.application.options.editor;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.openapi.options.*;
|
||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
public class EditorOptions implements SearchableConfigurable.Parent {
|
||||
public class EditorOptions implements SearchableConfigurable {
|
||||
@NonNls public static final String ID = "preferences.editor";
|
||||
private EditorOptionsPanel myEditorOptionsPanel;
|
||||
private Configurable[] myChildren;
|
||||
|
||||
@Override
|
||||
public Configurable[] getConfigurables() {
|
||||
if (myChildren == null) {
|
||||
final List<EditorOptionsProvider> configurables = ConfigurableWrapper.createConfigurables(EditorOptionsProviderEP.EP_NAME);
|
||||
myChildren = configurables.toArray(new EditorOptionsProvider[configurables.size()]);
|
||||
}
|
||||
return myChildren;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
@@ -60,16 +49,6 @@ public class EditorOptions implements SearchableConfigurable.Parent {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasOwnContent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent createComponent() {
|
||||
myEditorOptionsPanel = new EditorOptionsPanel();
|
||||
@@ -98,6 +77,5 @@ public class EditorOptions implements SearchableConfigurable.Parent {
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
myEditorOptionsPanel = null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ public class ConfigurableEP<T extends UnnamedConfigurable> extends AbstractExten
|
||||
|
||||
public String getDisplayName() {
|
||||
if (displayName != null) return displayName;
|
||||
LOG.assertTrue(bundle != null, "Bundle missed for " + this);
|
||||
final ResourceBundle resourceBundle = AbstractBundle.getResourceBundle(bundle, myPluginDescriptor.getPluginClassLoader());
|
||||
return displayName = CommonBundle.message(resourceBundle, key);
|
||||
}
|
||||
@@ -61,6 +62,12 @@ public class ConfigurableEP<T extends UnnamedConfigurable> extends AbstractExten
|
||||
@AbstractCollection(surroundWithTag = false)
|
||||
public ConfigurableEP[] children;
|
||||
|
||||
/**
|
||||
* Extension point of ConfigurableEP type to calculate children
|
||||
*/
|
||||
@Attribute("childrenEPName")
|
||||
public String childrenEPName;
|
||||
|
||||
public ConfigurableEP[] getChildren() {
|
||||
for (ConfigurableEP child : children) {
|
||||
child.myPicoContainer = myPicoContainer;
|
||||
|
||||
+46
-15
@@ -18,6 +18,7 @@ package com.intellij.openapi.options.ex;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.options.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.NullableFunction;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@@ -31,13 +32,24 @@ import java.util.List;
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 9/17/12
|
||||
*/
|
||||
public class ConfigurableWrapper implements SearchableConfigurable, Configurable.Composite {
|
||||
public class ConfigurableWrapper implements SearchableConfigurable {
|
||||
|
||||
private static final ConfigurableWrapper[] EMPTY_ARRAY = new ConfigurableWrapper[0];
|
||||
private static final NullableFunction<ConfigurableEP<Configurable>,Configurable> CONFIGURABLE_FUNCTION = new NullableFunction<ConfigurableEP<Configurable>, Configurable>() {
|
||||
@Override
|
||||
public Configurable fun(ConfigurableEP<Configurable> ep) {
|
||||
return wrapConfigurable(ep);
|
||||
}
|
||||
};
|
||||
|
||||
@Nullable
|
||||
public static <T extends UnnamedConfigurable> T wrapConfigurable(ConfigurableEP<T> ep) {
|
||||
return ep.displayName != null || ep.key != null ? (T)new ConfigurableWrapper(ep) : ep.createConfigurable();
|
||||
if (ep.displayName != null || ep.key != null) {
|
||||
return (T)(ep.children != null || ep.childrenEPName != null ? new CompositeWrapper(ep) : new ConfigurableWrapper(ep));
|
||||
}
|
||||
else {
|
||||
return ep.createConfigurable();
|
||||
}
|
||||
}
|
||||
|
||||
public static <T extends UnnamedConfigurable> List<T> createConfigurables(ExtensionPointName<? extends ConfigurableEP<T>> name) {
|
||||
@@ -60,17 +72,9 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable
|
||||
}
|
||||
|
||||
private final ConfigurableEP myEp;
|
||||
private final ConfigurableWrapper[] myKids;
|
||||
|
||||
public ConfigurableWrapper(ConfigurableEP ep) {
|
||||
myEp = ep;
|
||||
myKids = ep.children == null ? EMPTY_ARRAY : ContainerUtil.mapNotNull(ep.getChildren(),
|
||||
new NullableFunction<ConfigurableEP, ConfigurableWrapper>() {
|
||||
@Override
|
||||
public ConfigurableWrapper fun(ConfigurableEP ep) {
|
||||
return ep.isAvailable() ? new ConfigurableWrapper(ep) : null;
|
||||
}
|
||||
}, new ConfigurableWrapper[0]);
|
||||
}
|
||||
|
||||
private UnnamedConfigurable myConfigurable;
|
||||
@@ -124,11 +128,6 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable
|
||||
getConfigurable().disposeUIResources();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Configurable[] getConfigurables() {
|
||||
return myKids;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getId() {
|
||||
@@ -141,4 +140,36 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable
|
||||
final UnnamedConfigurable configurable = getConfigurable();
|
||||
return configurable instanceof SearchableConfigurable ? ((SearchableConfigurable)configurable).enableSearch(option) : null;
|
||||
}
|
||||
|
||||
private static class CompositeWrapper extends ConfigurableWrapper implements Configurable.Composite {
|
||||
|
||||
private final Configurable[] myKids;
|
||||
|
||||
public CompositeWrapper(ConfigurableEP ep) {
|
||||
super(ep);
|
||||
Configurable[] kids;
|
||||
if (ep.children == null) {
|
||||
kids = EMPTY_ARRAY;
|
||||
}
|
||||
else {
|
||||
kids = ContainerUtil.mapNotNull(ep.getChildren(),
|
||||
new NullableFunction<ConfigurableEP, ConfigurableWrapper>() {
|
||||
@Override
|
||||
public ConfigurableWrapper fun(ConfigurableEP ep) {
|
||||
return ep.isAvailable() ? new ConfigurableWrapper(ep) : null;
|
||||
}
|
||||
}, EMPTY_ARRAY);
|
||||
}
|
||||
if (ep.childrenEPName != null) {
|
||||
kids = ArrayUtil.mergeArrays(kids, ContainerUtil.mapNotNull(((ConfigurableEP<Configurable>[])Extensions.getExtensions(ep.childrenEPName)),
|
||||
CONFIGURABLE_FUNCTION, new Configurable[0]));
|
||||
}
|
||||
myKids = kids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Configurable[] getConfigurables() {
|
||||
return myKids;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,15 +341,11 @@
|
||||
serviceImplementation="com.intellij.codeInspection.ex.ProjectInspectionProfilesVisibleTreeState"/>
|
||||
|
||||
<!-- Editor -->
|
||||
<applicationConfigurable instance="com.intellij.application.options.editor.EditorOptions" id="editor" order="after appearance"/>
|
||||
<applicationConfigurable instance="com.intellij.application.options.editor.EditorOptions" id="editor" key="title.editor"
|
||||
bundle="messages.ApplicationBundle" order="after appearance" childrenEPName="com.intellij.editorOptionsProvider"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.semantic.SemService" serviceImplementation="com.intellij.semantic.SemServiceImpl"/>
|
||||
|
||||
<!--
|
||||
-->
|
||||
<!-- Code Completion -->
|
||||
|
||||
|
||||
<!-- Global Code Style -->
|
||||
<projectConfigurable instance="com.intellij.application.options.CodeStyleSchemesConfigurable" order="after colors"/>
|
||||
|
||||
@@ -568,18 +564,20 @@
|
||||
<codeInsight.linkHandler prefix="#navigation/" handlerClass="com.intellij.codeInsight.hint.NavigationLinkHandler"/>
|
||||
|
||||
<codeFoldingOptionsProvider instance="com.intellij.application.options.editor.BaseCodeFoldingOptionsProvider" order="first"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorSmartKeysConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorAppearanceConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorSmartKeysConfigurable" id="editor.preferences.smartKeys"
|
||||
displayName="Smart Keys"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorAppearanceConfigurable" id="editor.preferences.appearance"
|
||||
key="tab.editor.settings.appearance" bundle="messages.ApplicationBundle"/>
|
||||
<editorCustomization implementation="com.intellij.ui.SoftWrapsEditorCustomization"/>
|
||||
<editorCustomization implementation="com.intellij.ui.HorizontalScrollBarEditorCustomization"/>
|
||||
<editorCustomization implementation="com.intellij.ui.AdditionalPageAtBottomEditorCustomization"/>
|
||||
<editorCustomization implementation="com.intellij.ui.OneLineEditorCustomization"/>
|
||||
<!-- Colors & Fonts-->
|
||||
<editorOptionsProvider instance="com.intellij.application.options.colors.ColorAndFontOptions"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorTabsConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.CodeFoldingConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.CodeCompletionOptions"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.AutoImportOptionsConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.colors.ColorAndFontOptions" id="reference.settingsdialog.IDE.editor.colors"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorTabsConfigurable" id="editor.preferences.tabs" displayName="Editor Tabs"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.CodeFoldingConfigurable" id="editor.preferences.folding" key="group.code.folding" bundle="messages.ApplicationBundle"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.CodeCompletionOptions" id="editor.preferences.completion" key="title.code.completion" bundle="messages.ApplicationBundle"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.AutoImportOptionsConfigurable" id="editor.preferences.import" key="auto.import" bundle="messages.ApplicationBundle"/>
|
||||
|
||||
<editorTabColorProvider implementation="com.intellij.ui.tabs.EditorTabColorProviderImpl"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user