settings for icon gutters
[fedora-idea.git] / lang-impl / src / com / intellij / application / options / editor / EditorAppearanceConfigurable.java
blobcda62c34af46c6af5dc50d8c0d4c8d0e86e65ed5
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;
15 import javax.swing.*;
16 import java.awt.*;
17 import java.awt.event.ActionEvent;
18 import java.awt.event.ActionListener;
19 import java.util.Arrays;
20 import java.util.List;
22 /**
23 * @author yole
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());
51 @Override
52 public void reset() {
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);
66 super.reset();
69 @Override
70 public void apply() throws ConfigurationException {
71 EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance();
72 editorSettings.setBlinkCaret(myCbBlinkCaret.isSelected());
73 try {
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();
96 super.apply();
99 @Override
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;
116 return isModified;
119 private static boolean isModified(JToggleButton checkBox, boolean value) {
120 return checkBox.isSelected() != value;
123 private static boolean isModified(JTextField textField, int value) {
124 try {
125 int fieldValue = Integer.parseInt(textField.getText().trim());
126 return fieldValue != value;
128 catch(NumberFormatException e) {
129 return false;
133 @Nls
134 public String getDisplayName() {
135 return ApplicationBundle.message("tab.editor.settings.appearance");
138 public Icon getIcon() {
139 return null;
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));
151 return myRootPanel;
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) {
163 return null;