diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.form b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.form index 286e671bbde3..3b0391ecd073 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.form +++ b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.form @@ -1,467 +1,478 @@ - -
+ + diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.java b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.java index 28155d114ff8..78203d203f13 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsPanel.java @@ -1,487 +1,529 @@ -/* - * Copyright 2000-2012 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.application.options.editor; - -import com.intellij.application.options.OptionId; -import com.intellij.application.options.OptionsApplicabilityFilter; -import com.intellij.codeInsight.CodeInsightSettings; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.impl.IdentifierHighlighterPass; -import com.intellij.codeInsight.documentation.QuickDocOnMouseOverManager; -import com.intellij.ide.ui.UISettings; -import com.intellij.openapi.application.ApplicationBundle; -import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; -import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.options.SearchableConfigurable; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.text.StringUtil; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; - -public class EditorOptionsPanel { - private JPanel myBehaviourPanel; - private JCheckBox myCbHighlightBraces; - private static final String STRIP_CHANGED = ApplicationBundle.message("combobox.strip.modified.lines"); - - private static final String STRIP_ALL = ApplicationBundle.message("combobox.strip.all"); - private static final String STRIP_NONE = ApplicationBundle.message("combobox.strip.none"); - private JComboBox myStripTrailingSpacesCombo; - - private JCheckBox myCbVirtualSpace; - private JCheckBox myCbCaretInsideTabs; - - private JTextField myRecentFilesLimitField; - private JTextField myCommandsHistoryLimitField; - - private JCheckBox myCbHighlightScope; - - private JTextField myClipboardContentLimitTextField; - private JCheckBox myCbSmoothScrolling; - private JCheckBox myCbVirtualPageAtBottom; - private JCheckBox myCbEnableDnD; - private JCheckBox myCbEnableWheelFontChange; - private JCheckBox myCbHonorCamelHumpsWhenSelectingByClicking; - - private JPanel myHighlightSettingsPanel; - private JRadioButton myRbPreferScrolling; - private JRadioButton myRbPreferMovingCaret; - private JCheckBox myCbRenameLocalVariablesInplace; - private JCheckBox myCbHighlightIdentifierUnderCaret; - private JCheckBox myCbEnsureBlankLineBeforeCheckBox; - private JCheckBox myShowReformatCodeDialogCheckBox; - private JCheckBox myShowOptimizeImportsDialogCheckBox; - private JCheckBox myCbUseSoftWrapsAtEditor; - private JCheckBox myCbUseSoftWrapsAtConsole; - private JCheckBox myCbUseCustomSoftWrapIndent; - private JTextField myCustomSoftWrapIndent; - private JCheckBox myCbShowAllSoftWraps; - private JCheckBox myPreselectCheckBox; - private JCheckBox myCbShowQuickDocOnCheckBox; - - private final ErrorHighlightingPanel myErrorHighlightingPanel = new ErrorHighlightingPanel(); - private final MyConfigurable myConfigurable; - - - public EditorOptionsPanel(){ - if (SystemInfo.isMac) { - myCbEnableWheelFontChange.setText(ApplicationBundle.message("checkbox.enable.ctrl.mousewheel.changes.font.size.macos")); - } - - - myStripTrailingSpacesCombo.addItem(STRIP_CHANGED); - myStripTrailingSpacesCombo.addItem(STRIP_ALL); - myStripTrailingSpacesCombo.addItem(STRIP_NONE); - - - myHighlightSettingsPanel.setLayout(new BorderLayout()); - myHighlightSettingsPanel.add(myErrorHighlightingPanel.getPanel(), BorderLayout.CENTER); - - - myCbRenameLocalVariablesInplace.setVisible(OptionsApplicabilityFilter.isApplicable(OptionId.RENAME_IN_PLACE)); - - myConfigurable = new MyConfigurable(); - initSoftWrapsSettingsProcessing(); - } - - - public void reset() { - EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); - CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); - UISettings uiSettings=UISettings.getInstance(); - - // Display - - - myCbSmoothScrolling.setSelected(editorSettings.isSmoothScrolling()); - - // Brace highlighting - - myCbHighlightBraces.setSelected(codeInsightSettings.HIGHLIGHT_BRACES); - myCbHighlightScope.setSelected(codeInsightSettings.HIGHLIGHT_SCOPE); - myCbHighlightIdentifierUnderCaret.setSelected(codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET); - - // Virtual space - - myCbUseSoftWrapsAtEditor.setSelected(editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.MAIN_EDITOR)); - myCbUseSoftWrapsAtConsole.setSelected(editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.CONSOLE)); - myCbUseCustomSoftWrapIndent.setSelected(editorSettings.isUseCustomSoftWrapIndent()); - myCustomSoftWrapIndent.setText(Integer.toString(editorSettings.getCustomSoftWrapIndent())); - myCbShowAllSoftWraps.setSelected(editorSettings.isAllSoftWrapsShown()); - updateSoftWrapSettingsRepresentation(); - - myCbVirtualSpace.setSelected(editorSettings.isVirtualSpace()); - myCbCaretInsideTabs.setSelected(editorSettings.isCaretInsideTabs()); - myCbVirtualPageAtBottom.setSelected(editorSettings.isAdditionalPageAtBottom()); - - // Limits - myClipboardContentLimitTextField.setText(Integer.toString(uiSettings.MAX_CLIPBOARD_CONTENTS)); - - // Strip trailing spaces on save - - String stripTrailingSpaces = editorSettings.getStripTrailingSpaces(); - if(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE.equals(stripTrailingSpaces)) { - myStripTrailingSpacesCombo.setSelectedItem(STRIP_NONE); - } - else if (EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED.equals(stripTrailingSpaces)) { - myStripTrailingSpacesCombo.setSelectedItem(STRIP_CHANGED); - } - else if (EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE.equals(stripTrailingSpaces)) { - myStripTrailingSpacesCombo.setSelectedItem(STRIP_ALL); - } - - myCbEnsureBlankLineBeforeCheckBox.setSelected(editorSettings.isEnsureNewLineAtEOF()); - myCbShowQuickDocOnCheckBox.setSelected(editorSettings.isShowQuickDocOnMouseOverElement()); - - // Advanced mouse - myCbEnableDnD.setSelected(editorSettings.isDndEnabled()); - myCbEnableWheelFontChange.setSelected(editorSettings.isWheelFontChangeEnabled()); - myCbHonorCamelHumpsWhenSelectingByClicking.setSelected(editorSettings.isMouseClickSelectionHonorsCamelWords()); - - myRbPreferMovingCaret.setSelected(editorSettings.isRefrainFromScrolling()); - myRbPreferScrolling.setSelected(!editorSettings.isRefrainFromScrolling()); - - - myRecentFilesLimitField.setText(Integer.toString(uiSettings.RECENT_FILES_LIMIT)); - myCommandsHistoryLimitField.setText(Integer.toString(uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT)); - - myCbRenameLocalVariablesInplace.setSelected(editorSettings.isVariableInplaceRenameEnabled()); - myPreselectCheckBox.setSelected(editorSettings.isPreselectRename()); - - myShowReformatCodeDialogCheckBox.setSelected(editorSettings.getOptions().SHOW_REFORMAT_DIALOG); - myShowOptimizeImportsDialogCheckBox.setSelected(editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG); - - myErrorHighlightingPanel.reset(); - } - - public void apply() throws ConfigurationException { - EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); - CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); - UISettings uiSettings=UISettings.getInstance(); - - // Display - - editorSettings.setSmoothScrolling(myCbSmoothScrolling.isSelected()); - - - // Brace Highlighting - - codeInsightSettings.HIGHLIGHT_BRACES = myCbHighlightBraces.isSelected(); - codeInsightSettings.HIGHLIGHT_SCOPE = myCbHighlightScope.isSelected(); - codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET = myCbHighlightIdentifierUnderCaret.isSelected(); - clearAllIdentifierHighlighters(); - - // Virtual space - - editorSettings.setUseSoftWraps(myCbUseSoftWrapsAtEditor.isSelected(), SoftWrapAppliancePlaces.MAIN_EDITOR); - editorSettings.setUseSoftWraps(myCbUseSoftWrapsAtConsole.isSelected(), SoftWrapAppliancePlaces.CONSOLE); - editorSettings.setUseCustomSoftWrapIndent(myCbUseCustomSoftWrapIndent.isSelected()); - editorSettings.setCustomSoftWrapIndent(getCustomSoftWrapIndent()); - editorSettings.setAllSoftwrapsShown(myCbShowAllSoftWraps.isSelected()); - editorSettings.setVirtualSpace(myCbVirtualSpace.isSelected()); - editorSettings.setCaretInsideTabs(myCbCaretInsideTabs.isSelected()); - editorSettings.setAdditionalPageAtBottom(myCbVirtualPageAtBottom.isSelected()); - - // Limits - - - - boolean uiSettingsChanged = false; - int maxClipboardContents = getMaxClipboardContents(); - if (uiSettings.MAX_CLIPBOARD_CONTENTS != maxClipboardContents) { - uiSettings.MAX_CLIPBOARD_CONTENTS = maxClipboardContents; - uiSettingsChanged = true; - } - - if(uiSettingsChanged){ - uiSettings.fireUISettingsChanged(); - } - - // Strip trailing spaces on save - - if(STRIP_NONE.equals(myStripTrailingSpacesCombo.getSelectedItem())) { - editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE); - } - else if(STRIP_CHANGED.equals(myStripTrailingSpacesCombo.getSelectedItem())){ - editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED); - } - else { - editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE); - } - - editorSettings.setEnsureNewLineAtEOF(myCbEnsureBlankLineBeforeCheckBox.isSelected()); - - if (myCbShowQuickDocOnCheckBox.isSelected() ^ editorSettings.isShowQuickDocOnMouseOverElement()) { - boolean enabled = myCbShowQuickDocOnCheckBox.isSelected(); - editorSettings.setShowQuickDocOnMouseOverElement(enabled); - ServiceManager.getService(QuickDocOnMouseOverManager.class).setEnabled(enabled); - } - - editorSettings.setDndEnabled(myCbEnableDnD.isSelected()); - - editorSettings.setWheelFontChangeEnabled(myCbEnableWheelFontChange.isSelected()); - editorSettings.setMouseClickSelectionHonorsCamelWords(myCbHonorCamelHumpsWhenSelectingByClicking.isSelected()); - editorSettings.setRefrainFromScrolling(myRbPreferMovingCaret.isSelected()); - - editorSettings.setVariableInplaceRenameEnabled(myCbRenameLocalVariablesInplace.isSelected()); - editorSettings.setPreselectRename(myPreselectCheckBox.isSelected()); - - editorSettings.getOptions().SHOW_REFORMAT_DIALOG = myShowReformatCodeDialogCheckBox.isSelected(); - editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG = myShowOptimizeImportsDialogCheckBox.isSelected(); - - reinitAllEditors(); - - String temp=myRecentFilesLimitField.getText(); - if(temp.trim().length() > 0){ - try { - int newRecentFilesLimit= Integer.parseInt(temp); - if(newRecentFilesLimit>0&&uiSettings.RECENT_FILES_LIMIT!=newRecentFilesLimit){ - uiSettings.RECENT_FILES_LIMIT=newRecentFilesLimit; - uiSettingsChanged = true; - } - }catch (NumberFormatException ignored){} - } - if(uiSettingsChanged){ - uiSettings.fireUISettingsChanged(); - } - uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT = StringUtil.parseInt(myCommandsHistoryLimitField.getText(), uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT); - - myErrorHighlightingPanel.apply(); - restartDaemons(); - } - - public static void restartDaemons() { - Project[] projects = ProjectManager.getInstance().getOpenProjects(); - for (Project project : projects) { - DaemonCodeAnalyzer.getInstance(project).settingsChanged(); - } - } - - private static void clearAllIdentifierHighlighters() { - for (Project project : ProjectManager.getInstance().getOpenProjects()) { - for (FileEditor fileEditor : FileEditorManager.getInstance(project).getAllEditors()) { - if (fileEditor instanceof TextEditor) { - Document document = ((TextEditor)fileEditor).getEditor().getDocument(); - IdentifierHighlighterPass.clearMyHighlights(document, project); - } - } - } - } - - public static void reinitAllEditors() { - Editor[] editors = EditorFactory.getInstance().getAllEditors(); - for (Editor editor : editors) { - ((EditorEx)editor).reinitSettings(); - } - } - - public void disposeUIResources() { - myErrorHighlightingPanel.disposeUIResources(); - } - - private int getMaxClipboardContents(){ - int maxClipboardContents = -1; - try { - maxClipboardContents = Integer.parseInt(myClipboardContentLimitTextField.getText()); - } catch (NumberFormatException ignored) {} - if (maxClipboardContents <= 0) { - maxClipboardContents = 1; - } - return maxClipboardContents; - } - - public boolean isModified() { - EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); - CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); - UISettings uiSettings=UISettings.getInstance(); - - // Display - boolean isModified = isModified(myCbSmoothScrolling, editorSettings.isSmoothScrolling()); - - // Brace highlighting - isModified |= isModified(myCbHighlightBraces, codeInsightSettings.HIGHLIGHT_BRACES); - isModified |= isModified(myCbHighlightScope, codeInsightSettings.HIGHLIGHT_SCOPE); - isModified |= isModified(myCbHighlightIdentifierUnderCaret, codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET); - - // Virtual space - isModified |= isModified(myCbUseSoftWrapsAtEditor, editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.MAIN_EDITOR)); - isModified |= isModified(myCbUseSoftWrapsAtConsole, editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.CONSOLE)); - isModified |= isModified(myCbUseCustomSoftWrapIndent, editorSettings.isUseCustomSoftWrapIndent()); - isModified |= editorSettings.getCustomSoftWrapIndent() != getCustomSoftWrapIndent(); - isModified |= isModified(myCbShowAllSoftWraps, editorSettings.isAllSoftWrapsShown()); - isModified |= isModified(myCbVirtualSpace, editorSettings.isVirtualSpace()); - isModified |= isModified(myCbCaretInsideTabs, editorSettings.isCaretInsideTabs()); - isModified |= isModified(myCbVirtualPageAtBottom, editorSettings.isAdditionalPageAtBottom()); - - // Limits - - - isModified |= getMaxClipboardContents() != uiSettings.MAX_CLIPBOARD_CONTENTS; - - // Paste - - // Strip trailing spaces, ensure EOL on EOF on save - isModified |= !getStripTrailingSpacesValue().equals(editorSettings.getStripTrailingSpaces()); - isModified |= isModified(myCbEnsureBlankLineBeforeCheckBox, editorSettings.isEnsureNewLineAtEOF()); - isModified |= isModified(myCbShowQuickDocOnCheckBox, editorSettings.isShowQuickDocOnMouseOverElement()); - - // advanced mouse - isModified |= isModified(myCbEnableDnD, editorSettings.isDndEnabled()); - isModified |= isModified(myCbEnableWheelFontChange, editorSettings.isWheelFontChangeEnabled()); - isModified |= isModified(myCbHonorCamelHumpsWhenSelectingByClicking, editorSettings.isMouseClickSelectionHonorsCamelWords()); - - isModified |= myRbPreferMovingCaret.isSelected() != editorSettings.isRefrainFromScrolling(); - - - isModified |= isModified(myRecentFilesLimitField, UISettings.getInstance().RECENT_FILES_LIMIT); - isModified |= isModified(myCommandsHistoryLimitField, UISettings.getInstance().CONSOLE_COMMAND_HISTORY_LIMIT); - isModified |= isModified(myCbRenameLocalVariablesInplace, editorSettings.isVariableInplaceRenameEnabled()); - isModified |= isModified(myPreselectCheckBox, editorSettings.isPreselectRename()); - - isModified |= isModified(myShowReformatCodeDialogCheckBox, editorSettings.getOptions().SHOW_REFORMAT_DIALOG); - isModified |= isModified(myShowOptimizeImportsDialogCheckBox, editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG); - - isModified |= myErrorHighlightingPanel.isModified(); - return isModified; - } - - private static boolean isModified(JToggleButton checkBox, boolean value) { - return checkBox.isSelected() != value; - } - - private static boolean isModified(JTextField textField, int value) { - try { - int fieldValue = Integer.parseInt(textField.getText().trim()); - return fieldValue != value; - } - catch(NumberFormatException e) { - return false; - } - } - - private String getStripTrailingSpacesValue() { - Object selectedItem = myStripTrailingSpacesCombo.getSelectedItem(); - if(STRIP_NONE.equals(selectedItem)) { - return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE; - } - else if(STRIP_CHANGED.equals(selectedItem)){ - return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED; - } - else { - return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE; - } - } - - private int getCustomSoftWrapIndent() { - String indentAsString = myCustomSoftWrapIndent.getText(); - int defaultIndent = 0; - if (indentAsString == null) { - return defaultIndent; - } - try { - int indent = Integer.parseInt(indentAsString.trim()); - return indent >= 0 ? indent : defaultIndent; - } catch (IllegalArgumentException e) { - // Ignore - } - return defaultIndent; - } - - private void initSoftWrapsSettingsProcessing() { - ItemListener listener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - updateSoftWrapSettingsRepresentation(); - } - }; - myCbUseSoftWrapsAtEditor.addItemListener(listener); - myCbUseSoftWrapsAtConsole.addItemListener(listener); - myCbUseCustomSoftWrapIndent.addItemListener(listener); - } - - private void updateSoftWrapSettingsRepresentation() { - myCbUseCustomSoftWrapIndent.setEnabled(myCbUseSoftWrapsAtEditor.isSelected() || myCbUseSoftWrapsAtConsole.isSelected()); - myCustomSoftWrapIndent.setEnabled(myCbUseCustomSoftWrapIndent.isEnabled() && myCbUseCustomSoftWrapIndent.isSelected()); - } - - public JComponent getComponent() { - return myBehaviourPanel; - } - - public class MyConfigurable implements SearchableConfigurable { - @Override - @NotNull - public String getId() { - return "Editor.Behavior"; - } - - @Override - public Runnable enableSearch(final String option) { - return null; - } - - @Override - public String getDisplayName() { - return ApplicationBundle.message("tab.editor.settings.behavior"); - } - - @Override - public String getHelpTopic() { - return null; - } - - @Override - public JComponent createComponent() { - return myBehaviourPanel; - } - - @Override - public boolean isModified() { - return EditorOptionsPanel.this.isModified(); - } - - @Override - public void apply() throws ConfigurationException { - EditorOptionsPanel.this.apply(); - } - - @Override - public void reset() { - EditorOptionsPanel.this.reset(); - } - - @Override - public void disposeUIResources() { - EditorOptionsPanel.this.disposeUIResources(); - } - } - -} +/* + * Copyright 2000-2012 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.application.options.editor; + +import com.intellij.application.options.OptionId; +import com.intellij.application.options.OptionsApplicabilityFilter; +import com.intellij.codeInsight.CodeInsightSettings; +import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; +import com.intellij.codeInsight.daemon.impl.IdentifierHighlighterPass; +import com.intellij.codeInsight.documentation.QuickDocOnMouseOverManager; +import com.intellij.ide.ui.UISettings; +import com.intellij.openapi.application.ApplicationBundle; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.EditorFactory; +import com.intellij.openapi.editor.ex.EditorEx; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; +import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; +import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.TextEditor; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SearchableConfigurable; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +public class EditorOptionsPanel { + private JPanel myBehaviourPanel; + private JCheckBox myCbHighlightBraces; + private static final String STRIP_CHANGED = ApplicationBundle.message("combobox.strip.modified.lines"); + + private static final String STRIP_ALL = ApplicationBundle.message("combobox.strip.all"); + private static final String STRIP_NONE = ApplicationBundle.message("combobox.strip.none"); + private JComboBox myStripTrailingSpacesCombo; + + private JCheckBox myCbVirtualSpace; + private JCheckBox myCbCaretInsideTabs; + + private JTextField myRecentFilesLimitField; + private JTextField myCommandsHistoryLimitField; + + private JCheckBox myCbHighlightScope; + + private JTextField myClipboardContentLimitTextField; + private JCheckBox myCbSmoothScrolling; + private JCheckBox myCbVirtualPageAtBottom; + private JCheckBox myCbEnableDnD; + private JCheckBox myCbEnableWheelFontChange; + private JCheckBox myCbHonorCamelHumpsWhenSelectingByClicking; + + private JPanel myHighlightSettingsPanel; + private JRadioButton myRbPreferScrolling; + private JRadioButton myRbPreferMovingCaret; + private JCheckBox myCbRenameLocalVariablesInplace; + private JCheckBox myCbHighlightIdentifierUnderCaret; + private JCheckBox myCbEnsureBlankLineBeforeCheckBox; + private JCheckBox myShowReformatCodeDialogCheckBox; + private JCheckBox myShowOptimizeImportsDialogCheckBox; + private JCheckBox myCbUseSoftWrapsAtEditor; + private JCheckBox myCbUseSoftWrapsAtConsole; + private JCheckBox myCbUseCustomSoftWrapIndent; + private JTextField myCustomSoftWrapIndent; + private JCheckBox myCbShowAllSoftWraps; + private JCheckBox myPreselectCheckBox; + private JCheckBox myCbShowQuickDocOnCheckBox; + private JTextField myQuickDocDelayTextField; + + private final ErrorHighlightingPanel myErrorHighlightingPanel = new ErrorHighlightingPanel(); + private final MyConfigurable myConfigurable; + + + public EditorOptionsPanel() { + if (SystemInfo.isMac) { + myCbEnableWheelFontChange.setText(ApplicationBundle.message("checkbox.enable.ctrl.mousewheel.changes.font.size.macos")); + } + + + myStripTrailingSpacesCombo.addItem(STRIP_CHANGED); + myStripTrailingSpacesCombo.addItem(STRIP_ALL); + myStripTrailingSpacesCombo.addItem(STRIP_NONE); + + + myHighlightSettingsPanel.setLayout(new BorderLayout()); + myHighlightSettingsPanel.add(myErrorHighlightingPanel.getPanel(), BorderLayout.CENTER); + + + myCbRenameLocalVariablesInplace.setVisible(OptionsApplicabilityFilter.isApplicable(OptionId.RENAME_IN_PLACE)); + + myConfigurable = new MyConfigurable(); + initQuickDocProcessing(); + initSoftWrapsSettingsProcessing(); + } + + + public void reset() { + EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); + CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); + UISettings uiSettings=UISettings.getInstance(); + + // Display + + + myCbSmoothScrolling.setSelected(editorSettings.isSmoothScrolling()); + + // Brace highlighting + + myCbHighlightBraces.setSelected(codeInsightSettings.HIGHLIGHT_BRACES); + myCbHighlightScope.setSelected(codeInsightSettings.HIGHLIGHT_SCOPE); + myCbHighlightIdentifierUnderCaret.setSelected(codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET); + + // Virtual space + + myCbUseSoftWrapsAtEditor.setSelected(editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.MAIN_EDITOR)); + myCbUseSoftWrapsAtConsole.setSelected(editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.CONSOLE)); + myCbUseCustomSoftWrapIndent.setSelected(editorSettings.isUseCustomSoftWrapIndent()); + myCustomSoftWrapIndent.setText(Integer.toString(editorSettings.getCustomSoftWrapIndent())); + myCbShowAllSoftWraps.setSelected(editorSettings.isAllSoftWrapsShown()); + updateSoftWrapSettingsRepresentation(); + + myCbVirtualSpace.setSelected(editorSettings.isVirtualSpace()); + myCbCaretInsideTabs.setSelected(editorSettings.isCaretInsideTabs()); + myCbVirtualPageAtBottom.setSelected(editorSettings.isAdditionalPageAtBottom()); + + // Limits + myClipboardContentLimitTextField.setText(Integer.toString(uiSettings.MAX_CLIPBOARD_CONTENTS)); + + // Strip trailing spaces on save + + String stripTrailingSpaces = editorSettings.getStripTrailingSpaces(); + if(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE.equals(stripTrailingSpaces)) { + myStripTrailingSpacesCombo.setSelectedItem(STRIP_NONE); + } + else if (EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED.equals(stripTrailingSpaces)) { + myStripTrailingSpacesCombo.setSelectedItem(STRIP_CHANGED); + } + else if (EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE.equals(stripTrailingSpaces)) { + myStripTrailingSpacesCombo.setSelectedItem(STRIP_ALL); + } + + myCbEnsureBlankLineBeforeCheckBox.setSelected(editorSettings.isEnsureNewLineAtEOF()); + myCbShowQuickDocOnCheckBox.setSelected(editorSettings.isShowQuickDocOnMouseOverElement()); + myQuickDocDelayTextField.setText(Long.toString(editorSettings.getQuickDocOnMouseOverElementDelayMillis())); + myQuickDocDelayTextField.setEnabled(editorSettings.isShowQuickDocOnMouseOverElement()); + + // Advanced mouse + myCbEnableDnD.setSelected(editorSettings.isDndEnabled()); + myCbEnableWheelFontChange.setSelected(editorSettings.isWheelFontChangeEnabled()); + myCbHonorCamelHumpsWhenSelectingByClicking.setSelected(editorSettings.isMouseClickSelectionHonorsCamelWords()); + + myRbPreferMovingCaret.setSelected(editorSettings.isRefrainFromScrolling()); + myRbPreferScrolling.setSelected(!editorSettings.isRefrainFromScrolling()); + + + myRecentFilesLimitField.setText(Integer.toString(uiSettings.RECENT_FILES_LIMIT)); + myCommandsHistoryLimitField.setText(Integer.toString(uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT)); + + myCbRenameLocalVariablesInplace.setSelected(editorSettings.isVariableInplaceRenameEnabled()); + myPreselectCheckBox.setSelected(editorSettings.isPreselectRename()); + + myShowReformatCodeDialogCheckBox.setSelected(editorSettings.getOptions().SHOW_REFORMAT_DIALOG); + myShowOptimizeImportsDialogCheckBox.setSelected(editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG); + + myErrorHighlightingPanel.reset(); + } + + public void apply() throws ConfigurationException { + EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); + CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); + UISettings uiSettings=UISettings.getInstance(); + + // Display + + editorSettings.setSmoothScrolling(myCbSmoothScrolling.isSelected()); + + + // Brace Highlighting + + codeInsightSettings.HIGHLIGHT_BRACES = myCbHighlightBraces.isSelected(); + codeInsightSettings.HIGHLIGHT_SCOPE = myCbHighlightScope.isSelected(); + codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET = myCbHighlightIdentifierUnderCaret.isSelected(); + clearAllIdentifierHighlighters(); + + // Virtual space + + editorSettings.setUseSoftWraps(myCbUseSoftWrapsAtEditor.isSelected(), SoftWrapAppliancePlaces.MAIN_EDITOR); + editorSettings.setUseSoftWraps(myCbUseSoftWrapsAtConsole.isSelected(), SoftWrapAppliancePlaces.CONSOLE); + editorSettings.setUseCustomSoftWrapIndent(myCbUseCustomSoftWrapIndent.isSelected()); + editorSettings.setCustomSoftWrapIndent(getCustomSoftWrapIndent()); + editorSettings.setAllSoftwrapsShown(myCbShowAllSoftWraps.isSelected()); + editorSettings.setVirtualSpace(myCbVirtualSpace.isSelected()); + editorSettings.setCaretInsideTabs(myCbCaretInsideTabs.isSelected()); + editorSettings.setAdditionalPageAtBottom(myCbVirtualPageAtBottom.isSelected()); + + // Limits + + + + boolean uiSettingsChanged = false; + int maxClipboardContents = getMaxClipboardContents(); + if (uiSettings.MAX_CLIPBOARD_CONTENTS != maxClipboardContents) { + uiSettings.MAX_CLIPBOARD_CONTENTS = maxClipboardContents; + uiSettingsChanged = true; + } + + if(uiSettingsChanged){ + uiSettings.fireUISettingsChanged(); + } + + // Strip trailing spaces on save + + if(STRIP_NONE.equals(myStripTrailingSpacesCombo.getSelectedItem())) { + editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE); + } + else if(STRIP_CHANGED.equals(myStripTrailingSpacesCombo.getSelectedItem())){ + editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED); + } + else { + editorSettings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE); + } + + editorSettings.setEnsureNewLineAtEOF(myCbEnsureBlankLineBeforeCheckBox.isSelected()); + + if (myCbShowQuickDocOnCheckBox.isSelected() ^ editorSettings.isShowQuickDocOnMouseOverElement()) { + boolean enabled = myCbShowQuickDocOnCheckBox.isSelected(); + editorSettings.setShowQuickDocOnMouseOverElement(enabled); + ServiceManager.getService(QuickDocOnMouseOverManager.class).setEnabled(enabled); + } + + Long quickDocDelay = getQuickDocDelayFromGui(); + if (quickDocDelay != null) { + editorSettings.setQuickDocOnMouseOverElementDelayMillis(quickDocDelay); + } + + editorSettings.setDndEnabled(myCbEnableDnD.isSelected()); + + editorSettings.setWheelFontChangeEnabled(myCbEnableWheelFontChange.isSelected()); + editorSettings.setMouseClickSelectionHonorsCamelWords(myCbHonorCamelHumpsWhenSelectingByClicking.isSelected()); + editorSettings.setRefrainFromScrolling(myRbPreferMovingCaret.isSelected()); + + editorSettings.setVariableInplaceRenameEnabled(myCbRenameLocalVariablesInplace.isSelected()); + editorSettings.setPreselectRename(myPreselectCheckBox.isSelected()); + + editorSettings.getOptions().SHOW_REFORMAT_DIALOG = myShowReformatCodeDialogCheckBox.isSelected(); + editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG = myShowOptimizeImportsDialogCheckBox.isSelected(); + + reinitAllEditors(); + + String temp=myRecentFilesLimitField.getText(); + if(temp.trim().length() > 0){ + try { + int newRecentFilesLimit= Integer.parseInt(temp); + if(newRecentFilesLimit>0&&uiSettings.RECENT_FILES_LIMIT!=newRecentFilesLimit){ + uiSettings.RECENT_FILES_LIMIT=newRecentFilesLimit; + uiSettingsChanged = true; + } + }catch (NumberFormatException ignored){} + } + if(uiSettingsChanged){ + uiSettings.fireUISettingsChanged(); + } + uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT = StringUtil.parseInt(myCommandsHistoryLimitField.getText(), uiSettings.CONSOLE_COMMAND_HISTORY_LIMIT); + + myErrorHighlightingPanel.apply(); + restartDaemons(); + } + + @Nullable + private Long getQuickDocDelayFromGui() { + String quickDocDelayAsText = myQuickDocDelayTextField.getText(); + if (StringUtil.isEmptyOrSpaces(quickDocDelayAsText)) { + return null; + } + + try { + long delay = Long.parseLong(quickDocDelayAsText); + return delay > 0 ? delay : null; + } + catch (NumberFormatException e) { + // Ignore incorrect value. + return null; + } + } + + public static void restartDaemons() { + Project[] projects = ProjectManager.getInstance().getOpenProjects(); + for (Project project : projects) { + DaemonCodeAnalyzer.getInstance(project).settingsChanged(); + } + } + + private static void clearAllIdentifierHighlighters() { + for (Project project : ProjectManager.getInstance().getOpenProjects()) { + for (FileEditor fileEditor : FileEditorManager.getInstance(project).getAllEditors()) { + if (fileEditor instanceof TextEditor) { + Document document = ((TextEditor)fileEditor).getEditor().getDocument(); + IdentifierHighlighterPass.clearMyHighlights(document, project); + } + } + } + } + + public static void reinitAllEditors() { + Editor[] editors = EditorFactory.getInstance().getAllEditors(); + for (Editor editor : editors) { + ((EditorEx)editor).reinitSettings(); + } + } + + public void disposeUIResources() { + myErrorHighlightingPanel.disposeUIResources(); + } + + private int getMaxClipboardContents(){ + int maxClipboardContents = -1; + try { + maxClipboardContents = Integer.parseInt(myClipboardContentLimitTextField.getText()); + } catch (NumberFormatException ignored) {} + if (maxClipboardContents <= 0) { + maxClipboardContents = 1; + } + return maxClipboardContents; + } + + public boolean isModified() { + EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance(); + CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); + UISettings uiSettings=UISettings.getInstance(); + + // Display + boolean isModified = isModified(myCbSmoothScrolling, editorSettings.isSmoothScrolling()); + + // Brace highlighting + isModified |= isModified(myCbHighlightBraces, codeInsightSettings.HIGHLIGHT_BRACES); + isModified |= isModified(myCbHighlightScope, codeInsightSettings.HIGHLIGHT_SCOPE); + isModified |= isModified(myCbHighlightIdentifierUnderCaret, codeInsightSettings.HIGHLIGHT_IDENTIFIER_UNDER_CARET); + + // Virtual space + isModified |= isModified(myCbUseSoftWrapsAtEditor, editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.MAIN_EDITOR)); + isModified |= isModified(myCbUseSoftWrapsAtConsole, editorSettings.isUseSoftWraps(SoftWrapAppliancePlaces.CONSOLE)); + isModified |= isModified(myCbUseCustomSoftWrapIndent, editorSettings.isUseCustomSoftWrapIndent()); + isModified |= editorSettings.getCustomSoftWrapIndent() != getCustomSoftWrapIndent(); + isModified |= isModified(myCbShowAllSoftWraps, editorSettings.isAllSoftWrapsShown()); + isModified |= isModified(myCbVirtualSpace, editorSettings.isVirtualSpace()); + isModified |= isModified(myCbCaretInsideTabs, editorSettings.isCaretInsideTabs()); + isModified |= isModified(myCbVirtualPageAtBottom, editorSettings.isAdditionalPageAtBottom()); + + // Limits + + + isModified |= getMaxClipboardContents() != uiSettings.MAX_CLIPBOARD_CONTENTS; + + // Paste + + // Strip trailing spaces, ensure EOL on EOF on save + isModified |= !getStripTrailingSpacesValue().equals(editorSettings.getStripTrailingSpaces()); + isModified |= isModified(myCbEnsureBlankLineBeforeCheckBox, editorSettings.isEnsureNewLineAtEOF()); + isModified |= isModified(myCbShowQuickDocOnCheckBox, editorSettings.isShowQuickDocOnMouseOverElement()); + Long quickDocDelay = getQuickDocDelayFromGui(); + if (quickDocDelay != null && quickDocDelay.equals(Long.valueOf(editorSettings.getQuickDocOnMouseOverElementDelayMillis()))) { + return true; + } + + // advanced mouse + isModified |= isModified(myCbEnableDnD, editorSettings.isDndEnabled()); + isModified |= isModified(myCbEnableWheelFontChange, editorSettings.isWheelFontChangeEnabled()); + isModified |= isModified(myCbHonorCamelHumpsWhenSelectingByClicking, editorSettings.isMouseClickSelectionHonorsCamelWords()); + + isModified |= myRbPreferMovingCaret.isSelected() != editorSettings.isRefrainFromScrolling(); + + + isModified |= isModified(myRecentFilesLimitField, UISettings.getInstance().RECENT_FILES_LIMIT); + isModified |= isModified(myCommandsHistoryLimitField, UISettings.getInstance().CONSOLE_COMMAND_HISTORY_LIMIT); + isModified |= isModified(myCbRenameLocalVariablesInplace, editorSettings.isVariableInplaceRenameEnabled()); + isModified |= isModified(myPreselectCheckBox, editorSettings.isPreselectRename()); + + isModified |= isModified(myShowReformatCodeDialogCheckBox, editorSettings.getOptions().SHOW_REFORMAT_DIALOG); + isModified |= isModified(myShowOptimizeImportsDialogCheckBox, editorSettings.getOptions().SHOW_OPIMIZE_IMPORTS_DIALOG); + + isModified |= myErrorHighlightingPanel.isModified(); + return isModified; + } + + + + private static boolean isModified(JToggleButton checkBox, boolean value) { + return checkBox.isSelected() != value; + } + + private static boolean isModified(JTextField textField, int value) { + try { + int fieldValue = Integer.parseInt(textField.getText().trim()); + return fieldValue != value; + } + catch(NumberFormatException e) { + return false; + } + } + + private String getStripTrailingSpacesValue() { + Object selectedItem = myStripTrailingSpacesCombo.getSelectedItem(); + if(STRIP_NONE.equals(selectedItem)) { + return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_NONE; + } + else if(STRIP_CHANGED.equals(selectedItem)){ + return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED; + } + else { + return EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE; + } + } + + private int getCustomSoftWrapIndent() { + String indentAsString = myCustomSoftWrapIndent.getText(); + int defaultIndent = 0; + if (indentAsString == null) { + return defaultIndent; + } + try { + int indent = Integer.parseInt(indentAsString.trim()); + return indent >= 0 ? indent : defaultIndent; + } catch (IllegalArgumentException e) { + // Ignore + } + return defaultIndent; + } + + private void initQuickDocProcessing() { + myCbShowQuickDocOnCheckBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + myQuickDocDelayTextField.setEnabled(myCbShowQuickDocOnCheckBox.isSelected()); + } + }); + } + + private void initSoftWrapsSettingsProcessing() { + ItemListener listener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + updateSoftWrapSettingsRepresentation(); + } + }; + myCbUseSoftWrapsAtEditor.addItemListener(listener); + myCbUseSoftWrapsAtConsole.addItemListener(listener); + myCbUseCustomSoftWrapIndent.addItemListener(listener); + } + + private void updateSoftWrapSettingsRepresentation() { + myCbUseCustomSoftWrapIndent.setEnabled(myCbUseSoftWrapsAtEditor.isSelected() || myCbUseSoftWrapsAtConsole.isSelected()); + myCustomSoftWrapIndent.setEnabled(myCbUseCustomSoftWrapIndent.isEnabled() && myCbUseCustomSoftWrapIndent.isSelected()); + } + + public JComponent getComponent() { + return myBehaviourPanel; + } + + public class MyConfigurable implements SearchableConfigurable { + @Override + @NotNull + public String getId() { + return "Editor.Behavior"; + } + + @Override + public Runnable enableSearch(final String option) { + return null; + } + + @Override + public String getDisplayName() { + return ApplicationBundle.message("tab.editor.settings.behavior"); + } + + @Override + public String getHelpTopic() { + return null; + } + + @Override + public JComponent createComponent() { + return myBehaviourPanel; + } + + @Override + public boolean isModified() { + return EditorOptionsPanel.this.isModified(); + } + + @Override + public void apply() throws ConfigurationException { + EditorOptionsPanel.this.apply(); + } + + @Override + public void reset() { + EditorOptionsPanel.this.reset(); + } + + @Override + public void disposeUIResources() { + EditorOptionsPanel.this.disposeUIResources(); + } + } + +} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/QuickDocOnMouseOverManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/QuickDocOnMouseOverManager.java index 90bdcb7c93e9..532236407e7c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/QuickDocOnMouseOverManager.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/QuickDocOnMouseOverManager.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.Application; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.psi.PsiDocumentManager; @@ -45,24 +46,6 @@ import java.util.Map; */ public class QuickDocOnMouseOverManager { - private static final long QUICK_DOC_DELAY_MILLIS; - static { - long delay = 500; - String property = System.getProperty("editor.auto.quick.doc.delay.ms"); - if (property != null) { - try { - long parsed = Long.parseLong(property); - if (parsed > 0) { - delay = parsed; - } - } - catch (Exception e) { - // Ignore. - } - } - QUICK_DOC_DELAY_MILLIS = delay; - } - @NotNull private final EditorMouseMotionListener myMouseListener = new MyEditorMouseListener(); @NotNull private final VisibleAreaListener myVisibleAreaListener = new MyVisibleAreaListener(); @NotNull private final CaretListener myCaretListener = new MyCaretListener(); @@ -179,7 +162,7 @@ public class QuickDocOnMouseOverManager { myDelayedQuickDocInfo = new DelayedQuickDocInfo(documentationManager, editor, targetElementUnderMouse, elementUnderMouse); myAlarm.cancelAllRequests(); - myAlarm.addRequest(myRequest, QUICK_DOC_DELAY_MILLIS); + myAlarm.addRequest(myRequest, EditorSettingsExternalizable.getInstance().getQuickDocOnMouseOverElementDelayMillis()); } private void closeAutoQuickDocComponentIfNecessary() { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java index 6e29b8eecc9a..476863b6adaf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java @@ -1,518 +1,534 @@ -/* - * Copyright 2000-2012 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.editor.ex; - -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.PathManager; -import com.intellij.openapi.components.ExportableApplicationComponent; -import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; -import com.intellij.openapi.options.OptionsBundle; -import com.intellij.openapi.util.DefaultJDOMExternalizer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.NamedJDOMExternalizable; -import com.intellij.openapi.util.WriteExternalException; -import com.intellij.openapi.vfs.CharsetToolkit; -import com.intellij.openapi.vfs.encoding.EncodingManager; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.io.File; -import java.lang.reflect.Field; -import java.nio.charset.Charset; -import java.util.EnumSet; -import java.util.Set; - -public class EditorSettingsExternalizable implements NamedJDOMExternalizable, ExportableApplicationComponent, Cloneable { - //Q: make it interface? - public static class OptionSet implements Cloneable { - public String LINE_SEPARATOR; - public String USE_SOFT_WRAPS; - public boolean USE_CUSTOM_SOFT_WRAP_INDENT = false; - public int CUSTOM_SOFT_WRAP_INDENT = 0; - public boolean IS_VIRTUAL_SPACE = true; - public boolean IS_CARET_INSIDE_TABS; - @NonNls public String STRIP_TRAILING_SPACES = "Changed"; - public boolean IS_ENSURE_NEWLINE_AT_EOF = false; - public boolean SHOW_QUICK_DOC_ON_MOUSE_OVER_ELEMENT = false; - public boolean IS_CARET_BLINKING = true; - public int CARET_BLINKING_PERIOD = 500; - public boolean IS_RIGHT_MARGIN_SHOWN = true; - public boolean ARE_LINE_NUMBERS_SHOWN = false; - public boolean IS_FOLDING_OUTLINE_SHOWN = true; - - public boolean SMART_HOME = true; - - public boolean IS_BLOCK_CURSOR = false; - public boolean IS_WHITESPACES_SHOWN = false; - public boolean IS_ALL_SOFTWRAPS_SHOWN = false; - public boolean IS_INDENT_GUIDES_SHOWN = true; - public boolean IS_ANIMATED_SCROLLING = true; - public boolean IS_CAMEL_WORDS = false; - public boolean ADDITIONAL_PAGE_AT_BOTTOM = false; - - public boolean IS_DND_ENABLED = true; - public boolean IS_WHEEL_FONTCHANGE_ENABLED = false; - public boolean IS_MOUSE_CLICK_SELECTION_HONORS_CAMEL_WORDS = true; - @Deprecated - public boolean IS_NATIVE2ASCII_FOR_PROPERTIES_FILES; - @Deprecated - public String DEFAULT_PROPERTIES_FILES_CHARSET_NAME; - - public boolean RENAME_VARIABLES_INPLACE = true; - public boolean PRESELECT_RENAME = true; - public boolean REFRAIN_FROM_SCROLLING = false; - - public boolean SHOW_REFORMAT_DIALOG = true; - public boolean SHOW_OPIMIZE_IMPORTS_DIALOG = true; - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - return null; - } - } - } - - private static final String COMPOSITE_PROPERTY_SEPARATOR = ":"; - - private final Set