summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java')
-rw-r--r--platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java142
1 files changed, 142 insertions, 0 deletions
diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java
index 099830e15902..f978d5f6dcdb 100644
--- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTableWithPreviewPanel.java
@@ -340,6 +340,16 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
addOption(fieldName, title, null, options, values);
}
+ protected void addOption(@NotNull String fieldName,
+ @NotNull String title,
+ @Nullable String groupName,
+ int minValue,
+ int maxValue,
+ int defaultValue,
+ String defaultValueText) {
+ myOptions.add(new IntOption(null, fieldName, title, groupName, null, null, minValue, maxValue, defaultValue, defaultValueText));
+ }
+
protected void addOption(@NotNull String fieldName, @NotNull String title, @Nullable String groupName) {
myOptions.add(new BooleanOption(null, fieldName, title, groupName, null, null));
}
@@ -469,6 +479,78 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
}
}
+ private class IntOption extends Option {
+
+ private final int myMinValue;
+ private final int myMaxValue;
+ private final int myDefaultValue;
+ @Nullable private String myDefaultValueText;
+
+ public IntOption(Class<? extends CustomCodeStyleSettings> clazz,
+ @NotNull String fieldName,
+ @NotNull String title,
+ @Nullable String groupName,
+ @Nullable OptionAnchor anchor,
+ @Nullable String anchorFiledName,
+ int minValue,
+ int maxValue,
+ int defaultValue,
+ @Nullable String defaultValueText) {
+ super(clazz, fieldName, title, groupName, anchor, anchorFiledName);
+ myMinValue = minValue;
+ myMaxValue = maxValue;
+ myDefaultValue = defaultValue;
+ myDefaultValueText = defaultValueText;
+ }
+
+ @Override
+ public Object getValue(CodeStyleSettings settings) {
+ try {
+ int value = field.getInt(getSettings(settings));
+ return value == myDefaultValue && myDefaultValueText != null ? myDefaultValueText : value;
+ }
+ catch (IllegalAccessException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public void setValue(Object value, CodeStyleSettings settings) {
+ //noinspection EmptyCatchBlock
+ try {
+ if (myDefaultValueText != null && !myDefaultValueText.equals(value)) {
+ field.setInt(getSettings(settings), ((Integer)value).intValue());
+ }
+ else {
+ field.setInt(getSettings(settings), -1);
+ }
+ }
+ catch (IllegalAccessException e) {
+ }
+ }
+
+ public int getMinValue() {
+ return myMinValue;
+ }
+
+ public int getMaxValue() {
+ return myMaxValue;
+ }
+
+ public int getDefaultValue() {
+ return myDefaultValue;
+ }
+
+ public boolean isDefaultText(Object value) {
+ return myDefaultValueText != null && myDefaultValueText.equals(value);
+ }
+
+ @Nullable
+ public String getDefaultValueText() {
+ return myDefaultValueText;
+ }
+ }
+
@SuppressWarnings({"HardCodedStringLiteral"})
public final ColumnInfo TITLE = new ColumnInfo("TITLE") {
@Override
@@ -604,6 +686,7 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
private final JLabel myComboBox = new JLabel();
private final JCheckBox myCheckBox = new JCheckBox();
private final JPanel myEmptyLabel = new JPanel();
+ private final JLabel myIntLabel = new JLabel();
@Override
public Component getTableCellRendererComponent(JTable table,
@@ -636,6 +719,10 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
myComboBox.setEnabled(isEnabled);
return myComboBox;
}
+ else if (value instanceof Integer) {
+ myIntLabel.setText(value.toString());
+ return myIntLabel;
+ }
myCheckBox.putClientProperty("JComponent.sizeVariant", "small");
myComboBox.putClientProperty("JComponent.sizeVariant", "small");
@@ -645,12 +732,55 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
}
}
+ private static class MyIntOptionEditor extends JTextField {
+ private int myMinValue;
+ private int myMaxValue;
+ private int myDefaultValue;
+ private String myDefaultValueText;
+
+ private MyIntOptionEditor() {
+ super();
+ }
+
+ public Object getPresentableValue() {
+ int value = validateAndGetIntOption();
+ return value == myDefaultValue && myDefaultValueText != null ? myDefaultValueText : value;
+ }
+
+ private int validateAndGetIntOption() {
+ try {
+ int value = Integer.parseInt(getText());
+ return value >= myMinValue && value <= myMaxValue ? value : myDefaultValue;
+ }
+ catch (NumberFormatException nfe) {
+ return myDefaultValue;
+ }
+ }
+
+ public void setMinValue(int minValue) {
+ myMinValue = minValue;
+ }
+
+ public void setMaxValue(int maxValue) {
+ myMaxValue = maxValue;
+ }
+
+ public void setDefaultValue(int defaultValue) {
+ myDefaultValue = defaultValue;
+ }
+
+ public void setDefaultValueText(String defaultValueText) {
+ myDefaultValueText = defaultValueText;
+ }
+ }
+
/**
* @author Konstantin Bulenkov
*/
private class MyValueEditor extends AbstractTableCellEditor {
private final JCheckBox myBooleanEditor = new JCheckBox();
private JBComboBoxTableCellEditorComponent myOptionsEditor = new JBComboBoxTableCellEditorComponent();
+ private MyIntOptionEditor myIntOptionsEditor = new MyIntOptionEditor();
private Component myCurrentEditor = null;
private MyTreeNode myCurrentNode = null;
@@ -684,6 +814,9 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
else if (myCurrentEditor == myBooleanEditor) {
return myBooleanEditor.isSelected() ? Boolean.TRUE : Boolean.FALSE;
}
+ else if (myCurrentEditor == myIntOptionsEditor) {
+ return myIntOptionsEditor.getPresentableValue();
+ }
return null;
}
@@ -702,6 +835,15 @@ public abstract class OptionTableWithPreviewPanel extends MultilanguageCodeStyle
myBooleanEditor.setSelected(node.getValue() == Boolean.TRUE);
myBooleanEditor.setEnabled(node.isEnabled());
}
+ else if (node.getKey() instanceof IntOption) {
+ IntOption intOption = (IntOption)node.getKey();
+ myCurrentEditor = myIntOptionsEditor;
+ myIntOptionsEditor.setText(intOption.isDefaultText(node.getValue()) ? "" : node.getValue().toString());
+ myIntOptionsEditor.setMinValue(intOption.getMinValue());
+ myIntOptionsEditor.setMaxValue(intOption.getMaxValue());
+ myIntOptionsEditor.setDefaultValue(intOption.getDefaultValue());
+ myIntOptionsEditor.setDefaultValueText(intOption.getDefaultValueText());
+ }
else {
myCurrentEditor = myOptionsEditor;
myOptionsEditor.setCell(table, row, column);