package de.plushnikov.intellij.plugin.settings; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import de.plushnikov.intellij.plugin.Version; import de.plushnikov.intellij.plugin.provider.LombokProcessorProvider; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ProjectSettingsPage implements SearchableConfigurable, Configurable.NoScroll { private JPanel myGeneralPanel; private JPanel myLombokPanel; private JPanel myThirdPartyPanel; private JCheckBox myEnableLombokInProject; private JCheckBox myEnableValSupport; private JCheckBox myEnableBuilderSupport; private JCheckBox myEnableLogSupport; private JCheckBox myEnableConstructorSupport; private JCheckBox myEnableDelegateSupport; private JCheckBox myEnableParcelableSupport; private JPanel mySettingsPanel; private JCheckBox myEnableRuntimePatches; private JCheckBox myEnableLombokVersionWarning; private JCheckBox myMissingLombokWarning; private JPanel mySupportPanel; private PropertiesComponent myPropertiesComponent; private LombokProcessorProvider myLombokProcessorProvider; public ProjectSettingsPage(PropertiesComponent propertiesComponent, LombokProcessorProvider lombokProcessorProvider) { myPropertiesComponent = propertiesComponent; myLombokProcessorProvider = lombokProcessorProvider; } @Nls @Override public String getDisplayName() { return Version.PLUGIN_NAME; } @Nullable public Icon getIcon() { return null; } @Override public String getHelpTopic() { return null; } @Override public JComponent createComponent() { initFromSettings(); // Add Listener to deactivate all checkboxes if plugin is deactivated myEnableLombokInProject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { JCheckBox checkBox = (JCheckBox) actionEvent.getSource(); boolean selected = checkBox.getModel().isSelected(); myLombokPanel.setEnabled(selected); myThirdPartyPanel.setEnabled(selected); myEnableValSupport.setEnabled(selected); myEnableBuilderSupport.setEnabled(selected); myEnableLogSupport.setEnabled(selected); myEnableConstructorSupport.setEnabled(selected); myEnableDelegateSupport.setEnabled(selected); myEnableParcelableSupport.setEnabled(selected); } }); myEnableConstructorSupport.setVisible(false); return myGeneralPanel; } private void initFromSettings() { myEnableLombokInProject.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.LOMBOK_ENABLED_IN_PROJECT)); myEnableValSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_VAL_ENABLED)); myEnableBuilderSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_BUILDER_ENABLED)); myEnableDelegateSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_DELEGATE_ENABLED)); myEnableLogSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_LOG_ENABLED)); myEnableConstructorSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_CONSTRUCTOR_ENABLED)); myEnableParcelableSupport.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_THIRD_PARTY_ENABLED, false)); myEnableRuntimePatches.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_RUNTIME_PATCH_ENABLED, false)); myEnableLombokVersionWarning.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_LOMBOK_VERSION_CHECK_ENABLED, false)); myMissingLombokWarning.setSelected(ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_MISSING_LOMBOK_CHECK_ENABLED, false)); } @Override public boolean isModified() { return myEnableLombokInProject.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.LOMBOK_ENABLED_IN_PROJECT) || myEnableValSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_VAL_ENABLED) || myEnableBuilderSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_BUILDER_ENABLED) || myEnableDelegateSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_DELEGATE_ENABLED) || myEnableLogSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_LOG_ENABLED) || myEnableConstructorSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_CONSTRUCTOR_ENABLED) || myEnableParcelableSupport.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_THIRD_PARTY_ENABLED, false) || myEnableRuntimePatches.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_RUNTIME_PATCH_ENABLED, false) || myEnableLombokVersionWarning.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_LOMBOK_VERSION_CHECK_ENABLED, false) || myMissingLombokWarning.isSelected() != ProjectSettings.isEnabled(myPropertiesComponent, ProjectSettings.IS_MISSING_LOMBOK_CHECK_ENABLED, false); } @Override public void apply() throws ConfigurationException { ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.LOMBOK_ENABLED_IN_PROJECT, myEnableLombokInProject.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_VAL_ENABLED, myEnableValSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_BUILDER_ENABLED, myEnableBuilderSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_DELEGATE_ENABLED, myEnableDelegateSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_LOG_ENABLED, myEnableLogSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_CONSTRUCTOR_ENABLED, myEnableConstructorSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_THIRD_PARTY_ENABLED, myEnableParcelableSupport.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_RUNTIME_PATCH_ENABLED, myEnableRuntimePatches.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_LOMBOK_VERSION_CHECK_ENABLED, myEnableLombokVersionWarning.isSelected()); ProjectSettings.setEnabled(myPropertiesComponent, ProjectSettings.IS_MISSING_LOMBOK_CHECK_ENABLED, myMissingLombokWarning.isSelected()); LombokSettings.getInstance().setEnableRuntimePatch(myEnableRuntimePatches.isSelected()); myLombokProcessorProvider.initProcessors(); } @Override public void reset() { initFromSettings(); } @Override public void disposeUIResources() { } @NotNull @Override public String getId() { return getDisplayName(); } @Override public Runnable enableSearch(String option) { return null; } }