| /* |
| * Copyright 2000-2013 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.jetbrains.python.console; |
| |
| import com.google.common.collect.Lists; |
| import com.intellij.openapi.extensions.Extensions; |
| import com.intellij.openapi.options.Configurable; |
| import com.intellij.openapi.options.ConfigurationException; |
| import com.intellij.openapi.options.SearchableConfigurable; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.ui.components.JBCheckBox; |
| import org.jetbrains.annotations.Nls; |
| import org.jetbrains.annotations.NotNull; |
| |
| import javax.swing.*; |
| import java.util.List; |
| |
| /** |
| * @author traff |
| */ |
| public class PyConsoleOptionsConfigurable extends SearchableConfigurable.Parent.Abstract implements Configurable.NoScroll{ |
| public static final String CONSOLE_SETTINGS_HELP_REFERENCE = "reference.project.settings.console"; |
| public static final String CONSOLE_SETTINGS_HELP_REFERENCE_PYTHON = "reference.project.settings.console.python"; |
| |
| |
| private PyConsoleOptionsPanel myPanel; |
| |
| private final PyConsoleOptions myOptionsProvider; |
| private Project myProject; |
| |
| public PyConsoleOptionsConfigurable(PyConsoleOptions optionsProvider, Project project) { |
| myOptionsProvider = optionsProvider; |
| myProject = project; |
| } |
| |
| @NotNull |
| @Override |
| public String getId() { |
| return "pyconsole"; |
| } |
| |
| @Override |
| public Runnable enableSearch(String option) { |
| return null; |
| } |
| |
| @Override |
| protected Configurable[] buildConfigurables() { |
| List<Configurable> result = Lists.newArrayList(); |
| |
| PyConsoleSpecificOptionsPanel pythonConsoleOptionsPanel = new PyConsoleSpecificOptionsPanel(myProject); |
| result.add(createConsoleChildConfigurable("Python Console", pythonConsoleOptionsPanel, |
| myOptionsProvider.getPythonConsoleSettings(), CONSOLE_SETTINGS_HELP_REFERENCE_PYTHON)); |
| |
| for (PyConsoleOptionsProvider provider : Extensions.getExtensions(PyConsoleOptionsProvider.EP_NAME)) { |
| if (provider.isApplicableTo(myProject)) { |
| result.add(createConsoleChildConfigurable(provider.getName(), |
| new PyConsoleSpecificOptionsPanel(myProject), |
| provider.getSettings(myProject), |
| provider.getHelpTopic())); |
| } |
| } |
| |
| return result.toArray(new Configurable[result.size()]); |
| } |
| |
| private static Configurable createConsoleChildConfigurable(final String name, |
| final PyConsoleSpecificOptionsPanel panel, |
| final PyConsoleOptions.PyConsoleSettings settings, final String helpReference) { |
| return new SearchableConfigurable() { |
| |
| @NotNull |
| @Override |
| public String getId() { |
| return "PyConsoleConfigurable." + name; |
| } |
| |
| @Override |
| public Runnable enableSearch(String option) { |
| return null; //To change body of implemented methods use File | Settings | File Templates. |
| } |
| |
| @Nls |
| @Override |
| public String getDisplayName() { |
| return name; |
| } |
| |
| @Override |
| public String getHelpTopic() { |
| return helpReference; |
| } |
| |
| @Override |
| public JComponent createComponent() { |
| return panel.createPanel(settings); |
| } |
| |
| @Override |
| public boolean isModified() { |
| return panel.isModified(); |
| } |
| |
| @Override |
| public void apply() throws ConfigurationException { |
| panel.apply(); |
| } |
| |
| @Override |
| public void reset() { |
| panel.reset(); |
| } |
| |
| @Override |
| public void disposeUIResources() { |
| } |
| }; |
| } |
| |
| @Nls |
| @Override |
| public String getDisplayName() { |
| return "Console"; |
| } |
| |
| @Override |
| public String getHelpTopic() { |
| return CONSOLE_SETTINGS_HELP_REFERENCE; |
| } |
| |
| @Override |
| public JComponent createComponent() { |
| myPanel = new PyConsoleOptionsPanel(); |
| |
| return myPanel.createPanel(myOptionsProvider); |
| } |
| |
| @Override |
| public boolean isModified() { |
| return myPanel.isModified(); |
| } |
| |
| @Override |
| public void apply() throws ConfigurationException { |
| myPanel.apply(); |
| } |
| |
| |
| @Override |
| public void reset() { |
| myPanel.reset(); |
| } |
| |
| @Override |
| public void disposeUIResources() { |
| myPanel = null; |
| } |
| |
| private static class PyConsoleOptionsPanel { |
| private JPanel myWholePanel; |
| private JBCheckBox myShowDebugConsoleByDefault; |
| private JBCheckBox myShowSeparatorLine; |
| private JBCheckBox myIpythonEnabledCheckbox; |
| private PyConsoleOptions myOptionsProvider; |
| |
| public JPanel createPanel(PyConsoleOptions optionsProvider) { |
| myOptionsProvider = optionsProvider; |
| |
| return myWholePanel; |
| } |
| |
| public void apply() { |
| myOptionsProvider.setShowDebugConsoleByDefault(myShowDebugConsoleByDefault.isSelected()); |
| myOptionsProvider.setShowSeparatorLine(myShowSeparatorLine.isSelected()); |
| myOptionsProvider.setIpythonEnabled(myIpythonEnabledCheckbox.isSelected()); |
| } |
| |
| public void reset() { |
| myShowDebugConsoleByDefault.setSelected(myOptionsProvider.isShowDebugConsoleByDefault()); |
| myShowSeparatorLine.setSelected(myOptionsProvider.isShowSeparatorLine()); |
| myIpythonEnabledCheckbox.setSelected(myOptionsProvider.isIpythonEnabled()); |
| } |
| |
| public boolean isModified() { |
| return myShowDebugConsoleByDefault.isSelected() != myOptionsProvider.isShowDebugConsoleByDefault() || |
| myShowSeparatorLine.isSelected() != myOptionsProvider.isShowSeparatorLine() || |
| myIpythonEnabledCheckbox.isSelected() != myOptionsProvider.isIpythonEnabled(); |
| |
| } |
| } |
| } |