diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.form b/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.form index d77c05b832fc..30b6bc44cf13 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.form +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.form @@ -1,6 +1,6 @@
- + @@ -37,17 +37,9 @@ - + - - - - - - - - @@ -86,6 +78,14 @@ + + + + + + + + diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.java index 4da458d678f6..0bb2bd561ec6 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/RightMarginForm.java @@ -16,18 +16,19 @@ package com.intellij.application.options.codeStyle; import com.intellij.lang.Language; +import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.DumbAwareAction; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.ui.components.fields.CommaSeparatedIntegersField; import com.intellij.ui.components.fields.IntegerField; +import com.intellij.ui.components.labels.ActionLink; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; /** * Can be used for languages which do not use standard "Wrapping and Braces" panel. @@ -46,28 +47,16 @@ import javax.swing.event.ChangeListener; */ public class RightMarginForm { private IntegerField myRightMarginField; - private JCheckBox myDefaultGeneralCheckBox; private JPanel myTopPanel; private JComboBox myWrapOnTypingCombo; private CommaSeparatedIntegersField myVisualGuidesField; + @SuppressWarnings("unused") private ActionLink myResetLink; private final Language myLanguage; - private final int myDefaultRightMargin; + private CodeStyleSettings mySettings; public RightMarginForm(@NotNull Language language, @NotNull CodeStyleSettings settings) { myLanguage = language; - myDefaultRightMargin = settings.getDefaultRightMargin(); - myDefaultGeneralCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (myDefaultGeneralCheckBox.isSelected()) { - myRightMarginField.setText(Integer.toString(myDefaultRightMargin)); - myRightMarginField.setEnabled(false); - } - else { - myRightMarginField.setEnabled(true); - } - } - }); + mySettings = settings; //noinspection unchecked myWrapOnTypingCombo.setModel(new DefaultComboBoxModel( @@ -76,24 +65,30 @@ public class RightMarginForm { } void createUIComponents() { - myRightMarginField = new IntegerField(ApplicationBundle.message("editbox.right.margin.columns"), 0, CodeStyleSettings.MAX_RIGHT_MARGIN); + //noinspection ConstantConditions + myRightMarginField = new IntegerField(ApplicationBundle.message("editbox.right.margin.columns"), 0, CodeStyleSettings.MAX_RIGHT_MARGIN) { + @NotNull + @Override + protected String getEmptyValueText() { + return getDefaultRightMarginText(); + } + }; + myRightMarginField.setCanBeEmpty(true); + myRightMarginField.setDefaultValue(-1); myVisualGuidesField = new CommaSeparatedIntegersField(ApplicationBundle.message("settings.code.style.visual.guides"), 0, CodeStyleSettings.MAX_RIGHT_MARGIN, "Optional"); + myResetLink = new ActionLink("Reset", new ResetRightMarginAction()); + } + + private class ResetRightMarginAction extends DumbAwareAction { + @Override + public void actionPerformed(AnActionEvent e) { + myRightMarginField.resetToDefault(); + } } public void reset(@NotNull CodeStyleSettings settings) { CommonCodeStyleSettings langSettings = settings.getCommonSettings(myLanguage); - if (langSettings != settings && langSettings.RIGHT_MARGIN >= 0) { - myDefaultGeneralCheckBox.setSelected(false); - myRightMarginField.setText(Integer.toString(langSettings.RIGHT_MARGIN)); - } - else { - myDefaultGeneralCheckBox.setSelected(true); - myRightMarginField.setText(Integer.toString(settings.getDefaultRightMargin())); - if (langSettings == settings) { - myDefaultGeneralCheckBox.setEnabled(false); - myRightMarginField.setEnabled(false); - } - } + myRightMarginField.setValue(langSettings.RIGHT_MARGIN); for (int i = 0; i < CodeStyleSettingsCustomizable.WRAP_ON_TYPING_VALUES.length; i ++) { if (langSettings.WRAP_ON_TYPING == CodeStyleSettingsCustomizable.WRAP_ON_TYPING_VALUES[i]) { myWrapOnTypingCombo.setSelectedIndex(i); @@ -108,12 +103,7 @@ public class RightMarginForm { myVisualGuidesField.validateContent(); CommonCodeStyleSettings langSettings = settings.getCommonSettings(myLanguage); if (langSettings != settings) { - if (myDefaultGeneralCheckBox.isSelected()) { - langSettings.RIGHT_MARGIN = -1; - } - else { - langSettings.RIGHT_MARGIN = getFieldRightMargin(settings.getDefaultRightMargin()); - } + langSettings.RIGHT_MARGIN = myRightMarginField.getValue(); } langSettings.WRAP_ON_TYPING = getSelectedWrapOnTypingValue(); settings.setSoftMargins(myLanguage, myVisualGuidesField.getValue()); @@ -121,27 +111,11 @@ public class RightMarginForm { public boolean isModified(@NotNull CodeStyleSettings settings) { CommonCodeStyleSettings langSettings = settings.getCommonSettings(myLanguage); - boolean rightMarginModified = - myDefaultGeneralCheckBox.isSelected() ? - langSettings.RIGHT_MARGIN >= 0 : - langSettings.RIGHT_MARGIN != getFieldRightMargin(settings.getDefaultRightMargin()); - return rightMarginModified || + return langSettings.RIGHT_MARGIN != myRightMarginField.getValue() || langSettings.WRAP_ON_TYPING != getSelectedWrapOnTypingValue() || !settings.getSoftMargins(myLanguage).equals(myVisualGuidesField.getValue()); } - private int getFieldRightMargin(int fallBackValue) { - String strValue = myRightMarginField.getText(); - if (!strValue.trim().isEmpty()) { - try { - return Integer.parseInt(strValue); - } - catch (NumberFormatException e) { - myRightMarginField.setText(Integer.toString(fallBackValue)); - } - } - return fallBackValue; - } private int getSelectedWrapOnTypingValue() { int i = myWrapOnTypingCombo.getSelectedIndex(); @@ -154,4 +128,8 @@ public class RightMarginForm { public JPanel getTopPanel() { return myTopPanel; } + + private String getDefaultRightMarginText() { + return "Default: " + mySettings.getDefaultRightMargin(); + } } diff --git a/platform/platform-api/src/com/intellij/ui/components/fields/IntegerField.java b/platform/platform-api/src/com/intellij/ui/components/fields/IntegerField.java index fcbdeb5459be..f5e8015ff9b8 100644 --- a/platform/platform-api/src/com/intellij/ui/components/fields/IntegerField.java +++ b/platform/platform-api/src/com/intellij/ui/components/fields/IntegerField.java @@ -33,9 +33,15 @@ public class IntegerField extends JBTextField { } public IntegerField(@Nullable String valueName, int minValue, int maxValue) { - myValueEditor = new IntegerValueEditor(this, valueName, minValue); + myValueEditor = new IntegerValueEditor(this, valueName, minValue) { + @Override + protected void onEmptyValue() { + updateEmptyValueText(); + } + }; myValueEditor.setMinValue(minValue); myValueEditor.setMaxValue(maxValue); + updateEmptyValueText(); } public int getMinValue() { @@ -93,4 +99,17 @@ public class IntegerField extends JBTextField { public Integer getDefaultValue() { return myValueEditor.getDefaultValue(); } + + public void resetToDefault() { + myValueEditor.setValue(myValueEditor.getDefaultValue()); + } + + public void updateEmptyValueText() { + getEmptyText().setText(getEmptyValueText()); + } + + @NotNull + protected String getEmptyValueText() { + return ""; + } } diff --git a/platform/platform-api/src/com/intellij/ui/components/fields/valueEditors/TextFieldValueEditor.java b/platform/platform-api/src/com/intellij/ui/components/fields/valueEditors/TextFieldValueEditor.java index 780ff36449a2..9cd58aee5480 100644 --- a/platform/platform-api/src/com/intellij/ui/components/fields/valueEditors/TextFieldValueEditor.java +++ b/platform/platform-api/src/com/intellij/ui/components/fields/valueEditors/TextFieldValueEditor.java @@ -46,6 +46,9 @@ public abstract class TextFieldValueEditor extends AbstractValueEditor { @SuppressWarnings("unused") protected String validateTextOnChange(String text, DocumentEvent e) { try { + if (StringUtil.isEmptyOrSpaces(text)) { + onEmptyValue(); + } parseValue(text); return null; } @@ -74,4 +77,6 @@ public abstract class TextFieldValueEditor extends AbstractValueEditor { myField.setText(text); } + protected void onEmptyValue() {} + }