IDEA-132491 Enter/Exit to/from distraction free mode should respect my preferences

also use application component for storing values
This commit is contained in:
Sergey Ignatov
2014-12-22 19:03:40 +03:00
parent 2f5921cee9
commit 487a5bfc2a
@@ -20,12 +20,11 @@ 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.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.registry.RegistryValue;
@@ -33,7 +32,9 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class ToggleDistractionFreeModeAction extends AnAction implements DumbAware {
import static java.lang.String.valueOf;
public class ToggleDistractionFreeModeAction extends DumbAwareAction {
private static final String key = "editor.distraction.free.mode";
@Override
@@ -51,49 +52,24 @@ public class ToggleDistractionFreeModeAction extends AnAction implements DumbAwa
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getProject();
RegistryValue value = Registry.get(key);
boolean v = !value.asBoolean();
value.setValue(v);
boolean enter = !value.asBoolean();
value.setValue(enter);
if (project == null) return;
PropertiesComponent p = PropertiesComponent.getInstance(project);
PropertiesComponent p = PropertiesComponent.getInstance();
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;
String after = "AFTER.DISTRACTION.MODE.";
if (enter) {
applyAndSave(p, ui, eo, ds, before, after, 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);
applyAndSave(p, ui, eo, ds, after, before, true);
TogglePresentationModeAction.restoreToolWindows(project, true, false);
}
@@ -103,4 +79,27 @@ public class ToggleDistractionFreeModeAction extends AnAction implements DumbAwa
DaemonCodeAnalyzer.getInstance(project).settingsChanged();
EditorFactory.getInstance().refreshAllEditors();
}
public static void applyAndSave(@NotNull PropertiesComponent p,
@NotNull UISettings ui,
@NotNull EditorSettingsExternalizable.OptionSet eo,
@NotNull DaemonCodeAnalyzerSettings ds,
String before, String after, boolean value) {
// @formatter:off
p.setValue(before + "SHOW_STATUS_BAR", valueOf(ui.SHOW_STATUS_BAR)); ui.SHOW_STATUS_BAR = p.getBoolean(after + "SHOW_STATUS_BAR", value);
p.setValue(before + "SHOW_MAIN_TOOLBAR", valueOf(ui.SHOW_MAIN_TOOLBAR)); ui.SHOW_MAIN_TOOLBAR = p.getBoolean(after + "SHOW_MAIN_TOOLBAR", value);
p.setValue(before + "SHOW_NAVIGATION_BAR", valueOf(ui.SHOW_NAVIGATION_BAR)); ui.SHOW_NAVIGATION_BAR = p.getBoolean(after + "SHOW_NAVIGATION_BAR", value);
p.setValue(before + "IS_FOLDING_OUTLINE_SHOWN", valueOf(eo.IS_FOLDING_OUTLINE_SHOWN)); eo.IS_FOLDING_OUTLINE_SHOWN = p.getBoolean(after + "IS_FOLDING_OUTLINE_SHOWN", value);
p.setValue(before + "IS_WHITESPACES_SHOWN", valueOf(eo.IS_WHITESPACES_SHOWN)); eo.IS_WHITESPACES_SHOWN = p.getBoolean(after + "IS_WHITESPACES_SHOWN", value);
p.setValue(before + "ARE_LINE_NUMBERS_SHOWN", valueOf(eo.ARE_LINE_NUMBERS_SHOWN)); eo.ARE_LINE_NUMBERS_SHOWN = p.getBoolean(after + "ARE_LINE_NUMBERS_SHOWN", value);
p.setValue(before + "IS_RIGHT_MARGIN_SHOWN", valueOf(eo.IS_RIGHT_MARGIN_SHOWN)); eo.IS_RIGHT_MARGIN_SHOWN = p.getBoolean(after + "IS_RIGHT_MARGIN_SHOWN", value);
p.setValue(before + "IS_INDENT_GUIDES_SHOWN", valueOf(eo.IS_INDENT_GUIDES_SHOWN)); eo.IS_INDENT_GUIDES_SHOWN = p.getBoolean(after + "IS_INDENT_GUIDES_SHOWN", value);
p.setValue(before + "SHOW_METHOD_SEPARATORS", valueOf(ds.SHOW_METHOD_SEPARATORS)); ds.SHOW_METHOD_SEPARATORS = p.getBoolean(after + "SHOW_METHOD_SEPARATORS", value);
p.setValue(before + "HIDE_TOOL_STRIPES", valueOf(ui.HIDE_TOOL_STRIPES)); ui.HIDE_TOOL_STRIPES = p.getBoolean(after + "HIDE_TOOL_STRIPES", !value);
p.setValue(before + "EDITOR_TAB_PLACEMENT", valueOf(ui.EDITOR_TAB_PLACEMENT)); ui.EDITOR_TAB_PLACEMENT = p.getOrInitInt(after + "EDITOR_TAB_PLACEMENT", value ? SwingConstants.TOP : UISettings.TABS_NONE);
// @formatter:on
}
}