IDEA-144172 Move breadcrumbs settings to some platform class

This commit is contained in:
Alexander Zolotov
2015-08-26 01:47:38 +03:00
parent 31d59cee3f
commit b387bba44b
10 changed files with 67 additions and 61 deletions
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.application.options.editor.EditorAppearanceConfigurable">
<grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="14" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="0">
<grid id="27dc6" binding="myRootPanel" layout-manager="GridLayoutManager" row-count="15" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="0">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="451"/>
@@ -10,7 +10,7 @@
<children>
<vspacer id="f3f11">
<constraints>
<grid row="13" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
<grid row="14" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
<component id="2eb36" class="javax.swing.JCheckBox" binding="myCbBlockCursor">
@@ -86,7 +86,7 @@
</component>
<grid id="7b00c" binding="myAddonPanel" layout-manager="GridBagLayout">
<constraints>
<grid row="12" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="2" indent="0" use-parent-layout="false"/>
<grid row="13" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
@@ -146,6 +146,14 @@
<text resource-bundle="messages/IdeBundle" key="checkbox.show.editor.preview.popup"/>
</properties>
</component>
<component id="6c585" class="javax.swing.JCheckBox" binding="myShowBreadcrumbsCheckBox">
<constraints>
<grid row="12" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text resource-bundle="messages/ApplicationBundle" key="checkbox.show.breadcrumbs"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 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.
@@ -24,7 +24,9 @@ import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.options.*;
import com.intellij.openapi.options.CompositeConfigurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.options.ex.ConfigurableWrapper;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -36,7 +38,7 @@ import java.awt.event.ActionListener;
import java.util.List;
/**
* To provide additional options in Editor | Appearance section register implementation of {@link com.intellij.openapi.options.UnnamedConfigurable} in the plugin.xml:
* To provide additional options in Editor | Appearance section register implementation of {@link UnnamedConfigurable} in the plugin.xml:
* <p/>
* &lt;extensions defaultExtensionNs="com.intellij"&gt;<br>
* &nbsp;&nbsp;&lt;editorAppearanceConfigurable instance="class-name"/&gt;<br>
@@ -64,6 +66,7 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
private JCheckBox myShowCodeLensInEditorCheckBox;
private JCheckBox myCbShowIconsInGutter;
private JCheckBox myShowVerticalIndentGuidesCheckBox;
private JCheckBox myShowBreadcrumbsCheckBox;
//private JCheckBox myUseLCDRendering;
public EditorAppearanceConfigurable() {
@@ -115,6 +118,7 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
myInnerWhitespacesCheckBox.setSelected(editorSettings.isInnerWhitespacesShown());
myTrailingWhitespacesCheckBox.setSelected(editorSettings.isTrailingWhitespacesShown());
myShowVerticalIndentGuidesCheckBox.setSelected(editorSettings.isIndentGuidesShown());
myShowBreadcrumbsCheckBox.setSelected(editorSettings.isBreadcrumbsShown());
//myAntialiasingInEditorCheckBox.setSelected(UISettings.getInstance().ANTIALIASING_IN_EDITOR);
//myUseLCDRendering.setSelected(UISettings.getInstance().USE_LCD_RENDERING_IN_EDITOR);
myShowCodeLensInEditorCheckBox.setSelected(UISettings.getInstance().SHOW_EDITOR_TOOLTIP);
@@ -151,6 +155,7 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
UISettings uiSettings = UISettings.getInstance();
boolean uiSettingsModified = false;
boolean lafSettingsModified = false;
//if (uiSettings.ANTIALIASING_IN_EDITOR != myAntialiasingInEditorCheckBox.isSelected()) {
// uiSettings.ANTIALIASING_IN_EDITOR = myAntialiasingInEditorCheckBox.isSelected();
// uiSettingsModified = true;
@@ -164,12 +169,20 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
if (uiSettings.SHOW_EDITOR_TOOLTIP != myShowCodeLensInEditorCheckBox.isSelected()) {
uiSettings.SHOW_EDITOR_TOOLTIP = myShowCodeLensInEditorCheckBox.isSelected();
uiSettingsModified = true;
lafSettingsModified = true;
}
if (uiSettingsModified) {
LafManager.getInstance().repaintUI();
uiSettings.fireUISettingsChanged();
if(editorSettings.isBreadcrumbsShown() != myShowBreadcrumbsCheckBox.isSelected()) {
editorSettings.setBreadcrumbsShown(myShowBreadcrumbsCheckBox.isSelected());
uiSettingsModified = true;
}
if (lafSettingsModified) {
LafManager.getInstance().repaintUI();
}
if (uiSettingsModified) {
uiSettings.fireUISettingsChanged();
}
EditorOptionsPanel.restartDaemons();
super.apply();
@@ -197,6 +210,7 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
//isModified |= myAntialiasingInEditorCheckBox.isSelected() != UISettings.getInstance().ANTIALIASING_IN_EDITOR;
//isModified |= myUseLCDRendering.isSelected() != UISettings.getInstance().USE_LCD_RENDERING_IN_EDITOR;
isModified |= myShowCodeLensInEditorCheckBox.isSelected() != UISettings.getInstance().SHOW_EDITOR_TOOLTIP;
isModified |= myShowBreadcrumbsCheckBox.isSelected() != editorSettings.isBreadcrumbsShown();
return isModified;
}
@@ -52,6 +52,7 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
public boolean IS_RIGHT_MARGIN_SHOWN = true;
public boolean ARE_LINE_NUMBERS_SHOWN = false;
public boolean IS_FOLDING_OUTLINE_SHOWN = true;
public boolean ARE_BREADCRUMBS_SHOWN = true;
public boolean SMART_HOME = true;
@@ -218,6 +219,14 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
myOptions.IS_FOLDING_OUTLINE_SHOWN = val;
}
public boolean isBreadcrumbsShown() {
return myOptions.ARE_BREADCRUMBS_SHOWN;
}
public void setBreadcrumbsShown(boolean breadcrumbsShown) {
myOptions.ARE_BREADCRUMBS_SHOWN = breadcrumbsShown;
}
public boolean isBlockCursor() {
return myOptions.IS_BLOCK_CURSOR;
}
@@ -357,6 +357,7 @@ checkbox.show.trailing.whitespaces=Trailing
checkbox.show.method.separators=Show method separators
checkbox.show.small.icons.in.gutter=Show icons preview in gutter for small icons (Java)
checkbox.show.line.numbers=Show line numbers
checkbox.show.breadcrumbs=Show breadcrumbs
checkbox.right.margin=Show right margin (configured in Code Style options)
checkbox.use.block.caret=Use block caret
checkbox.caret.blinking.ms=Caret blinking (ms):
@@ -138,7 +138,6 @@ add.custom.html.boolean.attribute=Add {0} to custom html boolean attributes
add.optional.html.attribute=Add {0} to not required html attributes
fix.html.family=Fix Html
xml.editor.options.breadcrumbs.title=Show breadcrumbs
xml.editor.options.misc.title=XML/HTML
invalid.url.title=Invalid URL
@@ -17,7 +17,6 @@ package com.intellij.application.options.editor;
import com.intellij.openapi.options.BeanConfigurable;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.xml.XmlBundle;
/**
* @author yole
@@ -25,7 +24,6 @@ import com.intellij.xml.XmlBundle;
public class WebEditorAppearanceConfigurable extends BeanConfigurable<WebEditorOptions> implements UnnamedConfigurable {
public WebEditorAppearanceConfigurable() {
super(WebEditorOptions.getInstance());
checkBox("breadcrumbsEnabled", XmlBundle.message("xml.editor.options.breadcrumbs.title"));
checkBox("showCssColorPreviewInGutter", "Show CSS color preview icon in gutter");
checkBox("showCssInlineColorPreview", "Show CSS color preview as background");
}
@@ -74,7 +74,7 @@ public class XmlTagTreeHighlightingPass extends TextEditorHighlightingPass {
myFile = file;
myEditor = editor;
final FileViewProvider viewProvider = file.getManager().findViewProvider(file.getVirtualFile());
myInfoProvider = BreadcrumbsXmlWrapper.findInfoProvider(viewProvider, WebEditorOptions.getInstance());
myInfoProvider = BreadcrumbsXmlWrapper.findInfoProvider(viewProvider);
}
@Override
@@ -15,7 +15,8 @@
*/
package com.intellij.xml.breadcrumbs;
import com.intellij.application.options.editor.WebEditorOptions;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.editor.Editor;
@@ -54,17 +55,17 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent {
public void initComponent() {
MessageBusConnection connection = myProject.getMessageBus().connect(myProject);
connection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new MyFileEditorManagerListener());
connection.subscribe(WebEditorOptions.WEB_EDITOR_OPTIONS, new MyWebEditorOptionsListener());
connection.subscribe(FileTypeManager.TOPIC, new MyFileTypeListener());
MyVirtualFileListener listener = new MyVirtualFileListener();
VirtualFileManager.getInstance().addVirtualFileListener(listener, myProject);
UISettings.getInstance().addUISettingsListener(new MyUISettingsListener(), myProject);
}
private static class MyFileEditorManagerListener extends FileEditorManagerAdapter {
@Override
public void fileOpened(@NotNull final FileEditorManager source, @NotNull final VirtualFile file) {
reinitBreadcrumbsComponent(source, file, WebEditorOptions.getInstance());
reinitBreadcrumbsComponent(source, file);
}
}
@@ -75,37 +76,35 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent {
FileEditorManager fileEditorManager = FileEditorManager.getInstance(myProject);
VirtualFile file = event.getFile();
if (fileEditorManager.isFileOpen(file)) {
reinitBreadcrumbsComponent(fileEditorManager, file, WebEditorOptions.getInstance());
reinitBreadcrumbsComponent(fileEditorManager, file);
}
}
}
}
private class MyWebEditorOptionsListener implements WebEditorOptions.WebEditorOptionsListener {
@Override
public void breadcrumbsOptionsChanged(@NotNull WebEditorOptions options) {
reinitBreadcrumbsInAllEditors(options);
}
}
private class MyFileTypeListener extends FileTypeListener.Adapter {
@Override
public void fileTypesChanged(@NotNull FileTypeEvent event) {
reinitBreadcrumbsInAllEditors(WebEditorOptions.getInstance());
reinitBreadcrumbsInAllEditors();
}
}
private void reinitBreadcrumbsInAllEditors(@NotNull WebEditorOptions options) {
private class MyUISettingsListener implements UISettingsListener {
@Override
public void uiSettingsChanged(UISettings source) {
reinitBreadcrumbsInAllEditors();
}
}
private void reinitBreadcrumbsInAllEditors() {
FileEditorManager fileEditorManager = FileEditorManager.getInstance(myProject);
for (VirtualFile virtualFile : fileEditorManager.getOpenFiles()) {
reinitBreadcrumbsComponent(fileEditorManager, virtualFile, options);
reinitBreadcrumbsComponent(fileEditorManager, virtualFile);
}
}
private static void reinitBreadcrumbsComponent(@NotNull final FileEditorManager fileEditorManager,
@NotNull VirtualFile file,
@NotNull WebEditorOptions webEditorOptions) {
if (webEditorOptions.isBreadcrumbsEnabled() && isSuitable(fileEditorManager.getProject(), file, webEditorOptions)) {
private static void reinitBreadcrumbsComponent(@NotNull final FileEditorManager fileEditorManager, @NotNull VirtualFile file) {
if (isSuitable(fileEditorManager.getProject(), file)) {
FileEditor[] fileEditors = fileEditorManager.getAllEditors(file);
for (final FileEditor fileEditor : fileEditors) {
if (fileEditor instanceof TextEditor) {
@@ -113,7 +112,7 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent {
if (BreadcrumbsXmlWrapper.getBreadcrumbsComponent(editor) != null) {
continue;
}
final BreadcrumbsXmlWrapper wrapper = new BreadcrumbsXmlWrapper(editor, webEditorOptions);
final BreadcrumbsXmlWrapper wrapper = new BreadcrumbsXmlWrapper(editor);
final JComponent c = wrapper.getComponent();
fileEditorManager.addTopComponent(fileEditor, c);
@@ -144,13 +143,13 @@ public class BreadcrumbsLoaderComponent extends AbstractProjectComponent {
}
}
private static boolean isSuitable(@NotNull Project project, @NotNull VirtualFile file, @NotNull WebEditorOptions webEditorOptions) {
private static boolean isSuitable(@NotNull Project project, @NotNull VirtualFile file) {
if (file instanceof HttpVirtualFile) {
return false;
}
final FileViewProvider provider = PsiManager.getInstance(project).findViewProvider(file);
return provider != null && BreadcrumbsXmlWrapper.findInfoProvider(provider, webEditorOptions) != null;
return provider != null && BreadcrumbsXmlWrapper.findInfoProvider(provider) != null;
}
private static void disposeWrapper(@NotNull FileEditorManager fileEditorManager,
@@ -15,7 +15,6 @@
*/
package com.intellij.xml.breadcrumbs;
import com.intellij.application.options.editor.WebEditorOptions;
import com.intellij.codeInsight.daemon.impl.tagTreeHighlighting.XmlTagTreeHighlightingUtil;
import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.ide.ui.UISettings;
@@ -33,6 +32,7 @@ import com.intellij.openapi.editor.event.CaretAdapter;
import com.intellij.openapi.editor.event.CaretEvent;
import com.intellij.openapi.editor.event.CaretListener;
import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.editor.markup.TextAttributes;
@@ -80,7 +80,7 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener<Breadcrumb
public static final Key<BreadcrumbsXmlWrapper> BREADCRUMBS_COMPONENT_KEY = new Key<BreadcrumbsXmlWrapper>("BREADCRUMBS_KEY");
public BreadcrumbsXmlWrapper(@NotNull final Editor editor, @NotNull WebEditorOptions webEditorOptions) {
public BreadcrumbsXmlWrapper(@NotNull final Editor editor) {
myEditor = editor;
myEditor.putUserData(BREADCRUMBS_COMPONENT_KEY, this);
@@ -112,7 +112,7 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener<Breadcrumb
}, this);
myInfoProvider = findInfoProvider(findViewProvider(myFile, myProject), webEditorOptions);
myInfoProvider = findInfoProvider(findViewProvider(myFile, myProject));
final CaretListener caretListener = new CaretAdapter() {
@Override
@@ -359,9 +359,9 @@ public class BreadcrumbsXmlWrapper implements BreadcrumbsItemListener<Breadcrumb
}
@Nullable
public static BreadcrumbsInfoProvider findInfoProvider(@Nullable FileViewProvider viewProvider, @NotNull WebEditorOptions webEditorOptions) {
public static BreadcrumbsInfoProvider findInfoProvider(@Nullable FileViewProvider viewProvider) {
BreadcrumbsInfoProvider provider = null;
if (webEditorOptions.isBreadcrumbsEnabled() && viewProvider != null) {
if (EditorSettingsExternalizable.getInstance().isBreadcrumbsShown() && viewProvider != null) {
final Language baseLang = viewProvider.getBaseLanguage();
provider = getInfoProvider(baseLang);
if (provider == null) {
@@ -17,9 +17,7 @@ package com.intellij.application.options.editor;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.*;
import com.intellij.util.messages.Topic;
import com.intellij.util.xmlb.XmlSerializerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@State(
@@ -27,10 +25,6 @@ import org.jetbrains.annotations.Nullable;
storages = @Storage(file = StoragePathMacros.APP_CONFIG + "/editor.xml")
)
public class WebEditorOptions implements PersistentStateComponent<WebEditorOptions> {
public static final Topic<WebEditorOptionsListener> WEB_EDITOR_OPTIONS =
new Topic<WebEditorOptionsListener>("web editor options changed", WebEditorOptionsListener.class);
private boolean myBreadcrumbsEnabled = true;
private boolean myShowCssColorPreviewInGutter = true;
private boolean mySelectWholeCssIdentifierOnDoubleClick = true;
private boolean myShowCssInlineColorPreview = false;
@@ -54,18 +48,6 @@ public class WebEditorOptions implements PersistentStateComponent<WebEditorOptio
return ServiceManager.getService(WebEditorOptions.class);
}
public boolean isBreadcrumbsEnabled() {
return myBreadcrumbsEnabled;
}
public void setBreadcrumbsEnabled(boolean b) {
boolean oldValue = myBreadcrumbsEnabled;
myBreadcrumbsEnabled = b;
if (oldValue != b) {
ApplicationManager.getApplication().getMessageBus().syncPublisher(WEB_EDITOR_OPTIONS).breadcrumbsOptionsChanged(this);
}
}
public boolean isShowCssInlineColorPreview() {
return myShowCssInlineColorPreview;
}
@@ -188,8 +170,4 @@ public class WebEditorOptions implements PersistentStateComponent<WebEditorOptio
public void setSyncTagEditing(boolean syncTagEditing) {
mySyncTagEditing = syncTagEditing;
}
public interface WebEditorOptionsListener {
void breadcrumbsOptionsChanged(@NotNull WebEditorOptions options);
}
}