diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java index 4afd28d9f893..196d36ea5a6b 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java @@ -15,18 +15,33 @@ */ package com.intellij.ide.actions; +import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; +import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings; +import com.intellij.ide.ui.LafManager; +import com.intellij.ide.ui.UISettings; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.editor.EditorFactory; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; +import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.RegistryValue; import org.jetbrains.annotations.NotNull; +import javax.swing.*; + public class ToggleDistractionFreeModeAction extends AnAction implements DumbAware { private static final String key = "editor.distraction.free.mode"; + @Override public void update(@NotNull AnActionEvent e) { + if (e.getProject() == null) { + e.getPresentation().setEnabled(false); + return; + } RegistryValue value = Registry.get(key); boolean selected = value.asBoolean(); e.getPresentation().setText((selected ? "Exit" : "Enter") + " Distraction Free Mode"); @@ -34,8 +49,58 @@ public class ToggleDistractionFreeModeAction extends AnAction implements DumbAwa @Override public void actionPerformed(@NotNull AnActionEvent e) { + Project project = e.getProject(); RegistryValue value = Registry.get(key); - value.setValue(!value.asBoolean()); + boolean v = !value.asBoolean(); + value.setValue(v); + + if (project == null) return; + + PropertiesComponent p = PropertiesComponent.getInstance(project); + UISettings ui = UISettings.getInstance(); + EditorSettingsExternalizable.OptionSet eo = EditorSettingsExternalizable.getInstance().getOptions(); + DaemonCodeAnalyzerSettings ds = DaemonCodeAnalyzerSettings.getInstance(); + + String before = "BEFORE.DISTRACTION.MODE."; + if (v) { + p.setValue(before + "SHOW_STATUS_BAR", String.valueOf(ui.SHOW_STATUS_BAR)); ui.SHOW_STATUS_BAR = false; + p.setValue(before + "SHOW_MAIN_TOOLBAR", String.valueOf(ui.SHOW_MAIN_TOOLBAR)); ui.SHOW_MAIN_TOOLBAR = false; + p.setValue(before + "SHOW_NAVIGATION_BAR", String.valueOf(ui.SHOW_NAVIGATION_BAR)); ui.SHOW_NAVIGATION_BAR = false; + p.setValue(before + "HIDE_TOOL_STRIPES", String.valueOf(ui.HIDE_TOOL_STRIPES)); ui.HIDE_TOOL_STRIPES = true; + p.setValue(before + "EDITOR_TAB_PLACEMENT", String.valueOf(ui.EDITOR_TAB_PLACEMENT)); ui.EDITOR_TAB_PLACEMENT = UISettings.TABS_NONE; + + p.setValue(before + "IS_FOLDING_OUTLINE_SHOWN", String.valueOf(eo.IS_FOLDING_OUTLINE_SHOWN)); eo.IS_FOLDING_OUTLINE_SHOWN = false; + p.setValue(before + "IS_WHITESPACES_SHOWN", String.valueOf(eo.IS_WHITESPACES_SHOWN)); eo.IS_WHITESPACES_SHOWN = false; + p.setValue(before + "ARE_LINE_NUMBERS_SHOWN", String.valueOf(eo.ARE_LINE_NUMBERS_SHOWN)); eo.ARE_LINE_NUMBERS_SHOWN = false; + //p.setValue(before + "IS_RIGHT_MARGIN_SHOWN", String.valueOf(eo.IS_RIGHT_MARGIN_SHOWN)); eo.IS_RIGHT_MARGIN_SHOWN = false; + p.setValue(before + "IS_INDENT_GUIDES_SHOWN", String.valueOf(eo.IS_INDENT_GUIDES_SHOWN)); eo.IS_INDENT_GUIDES_SHOWN = false; + + p.setValue(before + "SHOW_METHOD_SEPARATORS", String.valueOf(ds.SHOW_METHOD_SEPARATORS)); ds.SHOW_METHOD_SEPARATORS = false; + + TogglePresentationModeAction.storeToolWindows(project); + } + else { + ui.SHOW_STATUS_BAR = p.getBoolean(before + "SHOW_STATUS_BAR", true); + ui.SHOW_MAIN_TOOLBAR = p.getBoolean(before + "SHOW_MAIN_TOOLBAR", true); + ui.SHOW_NAVIGATION_BAR = p.getBoolean(before + "SHOW_NAVIGATION_BAR", true); + ui.HIDE_TOOL_STRIPES = p.getBoolean(before + "HIDE_TOOL_STRIPES", true); + ui.EDITOR_TAB_PLACEMENT = p.getOrInitInt(before + "EDITOR_TAB_PLACEMENT", SwingConstants.TOP); + + eo.IS_FOLDING_OUTLINE_SHOWN = p.getBoolean(before + "IS_FOLDING_OUTLINE_SHOWN", true); + eo.IS_WHITESPACES_SHOWN = p.getBoolean(before + "IS_WHITESPACES_SHOWN", false); + eo.ARE_LINE_NUMBERS_SHOWN = p.getBoolean(before + "ARE_LINE_NUMBERS_SHOWN", false); + //eo.IS_RIGHT_MARGIN_SHOWN = p.getBoolean(before + "IS_RIGHT_MARGIN_SHOWN", true); + eo.IS_INDENT_GUIDES_SHOWN = p.getBoolean(before + "IS_INDENT_GUIDES_SHOWN", false); + + ds.SHOW_METHOD_SEPARATORS = p.getBoolean(before + "SHOW_METHOD_SEPARATORS", false); + + TogglePresentationModeAction.restoreToolWindows(project, true, false); + } + + UISettings.getInstance().fireUISettingsChanged(); + LafManager.getInstance().updateUI(); + EditorUtil.reinitSettings(); + DaemonCodeAnalyzer.getInstance(project).settingsChanged(); EditorFactory.getInstance().refreshAllEditors(); } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/TogglePresentationModeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/TogglePresentationModeAction.java index 78b84652563c..16dae889b101 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/TogglePresentationModeAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/TogglePresentationModeAction.java @@ -180,7 +180,7 @@ public class TogglePresentationModeAction extends AnAction implements DumbAware return hasVisible; } - private static boolean storeToolWindows(@Nullable Project project) { + static boolean storeToolWindows(@Nullable Project project) { if (project == null) return false; ToolWindowManagerEx manager = ToolWindowManagerEx.getInstanceEx(project); @@ -195,7 +195,7 @@ public class TogglePresentationModeAction extends AnAction implements DumbAware return hasVisible; } - private static void restoreToolWindows(Project project, boolean needsRestore, boolean inPresentation) { + static void restoreToolWindows(Project project, boolean needsRestore, boolean inPresentation) { if (project == null || !needsRestore) return; ToolWindowManagerEx manager = ToolWindowManagerEx.getInstanceEx(project); DesktopLayout restoreLayout = manager.getLayoutToRestoreLater();