1 package com
.intellij
.application
.options
.editor
;
3 import com
.intellij
.codeInsight
.daemon
.DaemonCodeAnalyzerSettings
;
4 import com
.intellij
.ide
.ui
.UISettings
;
5 import com
.intellij
.ide
.ui
.LafManager
;
6 import com
.intellij
.openapi
.application
.ApplicationBundle
;
7 import com
.intellij
.openapi
.editor
.ex
.EditorSettingsExternalizable
;
8 import com
.intellij
.openapi
.extensions
.ExtensionPointName
;
9 import com
.intellij
.openapi
.extensions
.Extensions
;
10 import com
.intellij
.openapi
.options
.CompositeConfigurable
;
11 import com
.intellij
.openapi
.options
.ConfigurationException
;
12 import com
.intellij
.openapi
.options
.UnnamedConfigurable
;
13 import org
.jetbrains
.annotations
.Nls
;
17 import java
.awt
.event
.ActionEvent
;
18 import java
.awt
.event
.ActionListener
;
19 import java
.util
.Arrays
;
20 import java
.util
.List
;
25 public class EditorAppearanceConfigurable
extends CompositeConfigurable
<UnnamedConfigurable
> implements EditorOptionsProvider
{
26 public static final ExtensionPointName
<UnnamedConfigurable
> EP_NAME
= ExtensionPointName
.create("com.intellij.editorAppearanceConfigurable");
27 private JPanel myRootPanel
;
28 private JCheckBox myCbBlinkCaret
;
29 private JCheckBox myCbBlockCursor
;
30 private JCheckBox myCbRightMargin
;
31 private JCheckBox myCbShowLineNumbers
;
32 private JCheckBox myCbShowWhitespaces
;
33 private JTextField myBlinkIntervalField
;
34 private JPanel myAddonPanel
;
35 private JCheckBox myCbShowMethodSeparators
;
36 private JCheckBox myAntialiasingInEditorCheckBox
;
37 private JCheckBox myCbShowIconsInGutter
;
39 public EditorAppearanceConfigurable() {
40 myCbBlinkCaret
.addActionListener(
41 new ActionListener() {
42 public void actionPerformed(ActionEvent event
) {
43 myBlinkIntervalField
.setEnabled(myCbBlinkCaret
.isSelected());
53 EditorSettingsExternalizable editorSettings
= EditorSettingsExternalizable
.getInstance();
55 myCbShowMethodSeparators
.setSelected(DaemonCodeAnalyzerSettings
.getInstance().SHOW_METHOD_SEPARATORS
);
56 myCbBlinkCaret
.setSelected(editorSettings
.isBlinkCaret());
57 myBlinkIntervalField
.setText(Integer
.toString(editorSettings
.getBlinkPeriod()));
58 myBlinkIntervalField
.setEnabled(editorSettings
.isBlinkCaret());
59 myCbRightMargin
.setSelected(editorSettings
.isRightMarginShown());
60 myCbShowLineNumbers
.setSelected(editorSettings
.isLineNumbersShown());
61 myCbBlockCursor
.setSelected(editorSettings
.isBlockCursor());
62 myCbShowWhitespaces
.setSelected(editorSettings
.isWhitespacesShown());
63 myAntialiasingInEditorCheckBox
.setSelected(UISettings
.getInstance().ANTIALIASING_IN_EDITOR
);
64 myCbShowIconsInGutter
.setSelected(DaemonCodeAnalyzerSettings
.getInstance().SHOW_SMALL_ICONS_IN_GUTTER
);
70 public void apply() throws ConfigurationException
{
71 EditorSettingsExternalizable editorSettings
= EditorSettingsExternalizable
.getInstance();
72 editorSettings
.setBlinkCaret(myCbBlinkCaret
.isSelected());
74 editorSettings
.setBlinkPeriod(Integer
.parseInt(myBlinkIntervalField
.getText()));
76 catch (NumberFormatException e
) {
79 editorSettings
.setBlockCursor(myCbBlockCursor
.isSelected());
80 editorSettings
.setRightMarginShown(myCbRightMargin
.isSelected());
81 editorSettings
.setLineNumbersShown(myCbShowLineNumbers
.isSelected());
82 editorSettings
.setWhitespacesShown(myCbShowWhitespaces
.isSelected());
84 EditorOptionsPanel
.reinitAllEditors();
86 DaemonCodeAnalyzerSettings
.getInstance().SHOW_METHOD_SEPARATORS
= myCbShowMethodSeparators
.isSelected();
87 DaemonCodeAnalyzerSettings
.getInstance().SHOW_SMALL_ICONS_IN_GUTTER
= myCbShowIconsInGutter
.isSelected();
89 UISettings uiSettings
= UISettings
.getInstance();
90 if (uiSettings
.ANTIALIASING_IN_EDITOR
!= myAntialiasingInEditorCheckBox
.isSelected()) {
91 uiSettings
.ANTIALIASING_IN_EDITOR
= myAntialiasingInEditorCheckBox
.isSelected();
92 LafManager
.getInstance().repaintUI();
93 uiSettings
.fireUISettingsChanged();
100 public boolean isModified() {
101 if (super.isModified()) return true;
102 EditorSettingsExternalizable editorSettings
= EditorSettingsExternalizable
.getInstance();
103 boolean isModified
= isModified(myCbBlinkCaret
, editorSettings
.isBlinkCaret());
104 isModified
|= isModified(myBlinkIntervalField
, editorSettings
.getBlinkPeriod());
106 isModified
|= isModified(myCbBlockCursor
, editorSettings
.isBlockCursor());
108 isModified
|= isModified(myCbRightMargin
, editorSettings
.isRightMarginShown());
110 isModified
|= isModified(myCbShowLineNumbers
, editorSettings
.isLineNumbersShown());
111 isModified
|= isModified(myCbShowWhitespaces
, editorSettings
.isWhitespacesShown());
112 isModified
|= isModified(myCbShowMethodSeparators
, DaemonCodeAnalyzerSettings
.getInstance().SHOW_METHOD_SEPARATORS
);
113 isModified
|= isModified(myCbShowIconsInGutter
, DaemonCodeAnalyzerSettings
.getInstance().SHOW_SMALL_ICONS_IN_GUTTER
);
114 isModified
|= myAntialiasingInEditorCheckBox
.isSelected() != UISettings
.getInstance().ANTIALIASING_IN_EDITOR
;
119 private static boolean isModified(JToggleButton checkBox
, boolean value
) {
120 return checkBox
.isSelected() != value
;
123 private static boolean isModified(JTextField textField
, int value
) {
125 int fieldValue
= Integer
.parseInt(textField
.getText().trim());
126 return fieldValue
!= value
;
128 catch(NumberFormatException e
) {
134 public String
getDisplayName() {
135 return ApplicationBundle
.message("tab.editor.settings.appearance");
138 public Icon
getIcon() {
142 public String
getHelpTopic() {
143 return "reference.settingsdialog.IDE.editor.appearance";
146 public JComponent
createComponent() {
147 for (UnnamedConfigurable provider
: getConfigurables()) {
148 myAddonPanel
.add(provider
.createComponent(), new GridBagConstraints(0, GridBagConstraints
.RELATIVE
, 1, 1, 0, 0, GridBagConstraints
.NORTHWEST
,
149 GridBagConstraints
.NONE
, new Insets(0,0,0,0), 0,0));
154 protected List
<UnnamedConfigurable
> createConfigurables() {
155 return Arrays
.asList(Extensions
.getExtensions(EP_NAME
));
158 public String
getId() {
159 return "editor.preferences.appearance";
162 public Runnable
enableSearch(final String option
) {