/* * Copyright 2000-2009 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; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.ui.OptionGroup; import org.jetbrains.annotations.NotNull; import javax.swing.*; public class IndentOptionsEditor extends OptionGroup { protected JTextField myIndentField; protected JCheckBox myCbUseTab; protected JTextField myTabSizeField; protected JLabel myTabSizeLabel; protected JLabel myIndentLabel; @Override public JPanel createPanel() { addComponents(); final JPanel result = super.createPanel(); return result; } protected void addComponents() { addTabOptions(); myTabSizeField = createIndentTextField(); myTabSizeLabel = new JLabel(ApplicationBundle.message("editbox.indent.tab.size")); add(myTabSizeLabel, myTabSizeField); myIndentField = createIndentTextField(); myIndentLabel = new JLabel(ApplicationBundle.message("editbox.indent.indent")); add(myIndentLabel, myIndentField); } protected JTextField createIndentTextField() { JTextField field = new JTextField(4); field.setMinimumSize(field.getPreferredSize()); return field; } protected void addTabOptions() { myCbUseTab = new JCheckBox(ApplicationBundle.message("checkbox.indent.use.tab.character")); add(myCbUseTab); } protected static boolean isFieldModified(JCheckBox checkBox, boolean value) { return checkBox.isSelected() != value; } protected static boolean isFieldModified(JTextField textField, int value) { try { int fieldValue = Integer.parseInt(textField.getText().trim()); return fieldValue != value; } catch (NumberFormatException e) { return false; } } protected int getFieldValue(JTextField field, int minValue, int defValue) { try { return Math.max(Integer.parseInt(field.getText()), minValue); } catch (NumberFormatException e) { return defValue; } } public boolean isModified(final CodeStyleSettings settings, CommonCodeStyleSettings.IndentOptions options) { boolean isModified; isModified = isFieldModified(myTabSizeField, options.TAB_SIZE); isModified |= isFieldModified(myCbUseTab, options.USE_TAB_CHARACTER); isModified |= isFieldModified(myIndentField, options.INDENT_SIZE); return isModified; } protected int getUIIndent() { return getFieldValue(myIndentField, 0, 4); } protected int getUITabSize() { return getFieldValue(myTabSizeField, 1, 4); } public void apply(final CodeStyleSettings settings, CommonCodeStyleSettings.IndentOptions options) { options.INDENT_SIZE = getUIIndent(); options.TAB_SIZE = getUITabSize(); options.USE_TAB_CHARACTER = myCbUseTab.isSelected(); } public void reset(@NotNull CodeStyleSettings settings, @NotNull CommonCodeStyleSettings.IndentOptions options) { myTabSizeField.setText(String.valueOf(options.TAB_SIZE)); myCbUseTab.setSelected(options.USE_TAB_CHARACTER); myIndentField.setText(String.valueOf(options.INDENT_SIZE)); } public void setEnabled(boolean enabled) { myIndentField.setEnabled(enabled); myIndentLabel.setEnabled(enabled); myTabSizeField.setEnabled(enabled); myTabSizeLabel.setEnabled(enabled); myCbUseTab.setEnabled(enabled); } }