package com.dd; import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * * Created by skyrylyuk on 10/15/15. */ public class SettingConfigurable implements Configurable { public static final String PREFIX_PATTERN = "folding_plugin_prefix_pattern"; public static final String PREFIX_CUSTOM_USE = "folding_plugin_prefix_custom_use"; public static final String PREFIX_HIDE = "folding_plugin_prefix_hide"; public static final String DEFAULT_PATTERN = "[^_]{1,}(?=_)"; public static final String DEFAULT_PATTERN_DOUBLE = "[^_]{1,}_[^_]{1,}(?=_)"; private JPanel mPanel; private JCheckBox useCustomPatternCheckBox; private JTextField customPattern; private JCheckBox hideFoldingPrefix; private boolean isModified = false; @Nls @Override public String getDisplayName() { return "Android Folding"; } @Nullable @Override public String getHelpTopic() { return "null:"; } @Nullable @Override public JComponent createComponent() { useCustomPatternCheckBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { boolean selected = getCheckBoxStatus(actionEvent); customPattern.setEnabled(selected); isModified = true; } }); customPattern.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { isModified = true; } @Override public void removeUpdate(DocumentEvent e) { isModified = true; } @Override public void changedUpdate(DocumentEvent e) { isModified = true; } }); hideFoldingPrefix.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { isModified = true; } }); reset(); return mPanel; } private boolean getCheckBoxStatus(ActionEvent actionEvent) { AbstractButton abstractButton = (AbstractButton) actionEvent.getSource(); return abstractButton.getModel().isSelected(); } @Override public boolean isModified() { return isModified; } @Override public void apply() throws ConfigurationException { PropertiesComponent.getInstance().setValue(PREFIX_CUSTOM_USE, Boolean.valueOf(useCustomPatternCheckBox.isSelected()).toString()); PropertiesComponent.getInstance().setValue(PREFIX_PATTERN, customPattern.getText()); PropertiesComponent.getInstance().setValue(PREFIX_HIDE, Boolean.valueOf(hideFoldingPrefix.isSelected()).toString()); if (isModified) { Project currentProject = Utils.getCurrentProject(); if (currentProject != null) { ProjectView.getInstance(currentProject).refresh(); } } isModified = false; } @Override public void reset() { final boolean customPrefix = PropertiesComponent.getInstance().getBoolean(PREFIX_CUSTOM_USE, false); useCustomPatternCheckBox.setSelected(customPrefix); customPattern.setEnabled(customPrefix); customPattern.setText(PropertiesComponent.getInstance().getValue(PREFIX_PATTERN, DEFAULT_PATTERN_DOUBLE)); hideFoldingPrefix.getModel().setSelected(PropertiesComponent.getInstance().getBoolean(PREFIX_HIDE, false)); } @Override public void disposeUIResources() { } }