update copyrights
[fedora-idea.git] / platform / lang-impl / src / com / intellij / application / options / CodeCompletionPanel.java
blob67ec8c4796ae810a57ba977b05948befedf12454
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.application.options;
19 import com.intellij.codeInsight.CodeInsightSettings;
20 import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
21 import com.intellij.ide.DataManager;
22 import com.intellij.openapi.actionSystem.PlatformDataKeys;
23 import com.intellij.openapi.application.ApplicationBundle;
24 import com.intellij.openapi.project.Project;
26 import javax.swing.*;
27 import java.awt.event.ActionEvent;
28 import java.awt.event.ActionListener;
30 public class CodeCompletionPanel {
31 JPanel myPanel;
32 private JCheckBox myCbAutocompletion;
33 private JTextField myAutocompletionDelayField;
34 private JCheckBox myCbXmlAutocompletion;
35 private JTextField myXmlAutocompletionDelayField;
36 private JCheckBox myCbJavadocAutocompletion;
37 private JTextField myFldJavadocAutocompletionDelayField;
38 private JCheckBox myCbAutopopupJavaDoc;
39 private JTextField myAutopopupJavaDocField;
40 private JCheckBox myCbAutocompleteCommonPrefix;
41 private JCheckBox myCbShowStaticAfterInstance;
43 private JCheckBox myCbOnCodeCompletion;
44 private JCheckBox myCbOnSmartTypeCompletion;
45 private JCheckBox myCbOnClassNameCompletion;
47 private JCheckBox myCbParameterInfoPopup;
48 private JTextField myParameterInfoDelayField;
49 private JCheckBox myCbShowFullParameterSignatures;
51 private JComboBox myCaseSensitiveCombo;
52 private static final String CASE_SENSITIVE_ALL = ApplicationBundle.message("combobox.autocomplete.casesensitive.all");
53 private static final String CASE_SENSITIVE_NONE = ApplicationBundle.message("combobox.autocomplete.casesensitive.none");
54 private static final String CASE_SENSITIVE_FIRST_LETTER = ApplicationBundle.message("combobox.autocomplete.casesensitive.first.letter");
55 ButtonGroup buttonGroup = new ButtonGroup();
57 public CodeCompletionPanel(){
58 myCaseSensitiveCombo.setModel(new DefaultComboBoxModel(new String[]{CASE_SENSITIVE_ALL, CASE_SENSITIVE_NONE, CASE_SENSITIVE_FIRST_LETTER}));
61 myCbAutocompletion.addActionListener(
62 new ActionListener() {
63 public void actionPerformed(ActionEvent event) {
64 myAutocompletionDelayField.setEnabled(myCbAutocompletion.isSelected());
69 myCbXmlAutocompletion.addActionListener(
70 new ActionListener() {
71 public void actionPerformed(ActionEvent event) {
72 myXmlAutocompletionDelayField.setEnabled(myCbXmlAutocompletion.isSelected());
77 myCbJavadocAutocompletion.addActionListener(new ActionListener() {
78 public void actionPerformed(ActionEvent e) {
79 myFldJavadocAutocompletionDelayField.setEnabled(myCbJavadocAutocompletion.isSelected());
81 });
83 myCbAutopopupJavaDoc.addActionListener(
84 new ActionListener() {
85 public void actionPerformed(ActionEvent event) {
86 myAutopopupJavaDocField.setEnabled(myCbAutopopupJavaDoc.isSelected());
91 myCbParameterInfoPopup.addActionListener(
92 new ActionListener() {
93 public void actionPerformed(ActionEvent event) {
94 myParameterInfoDelayField.setEnabled(myCbParameterInfoPopup.isSelected());
99 hideOption(myCbShowStaticAfterInstance, OptionId.COMPLETION_SHOW_STATIC_AFTER_IMPORT);
100 hideOption(myCbXmlAutocompletion, OptionId.COMPLETION_AUTO_POPUP_XML);
101 hideOption(myXmlAutocompletionDelayField, OptionId.COMPLETION_AUTO_POPUP_XML);
102 hideOption(myCbJavadocAutocompletion, OptionId.COMPLETION_AUTO_POPUP_DOC_COMMENT);
103 hideOption(myFldJavadocAutocompletionDelayField, OptionId.COMPLETION_AUTO_POPUP_DOC_COMMENT);
104 hideOption(myCbOnSmartTypeCompletion, OptionId.COMPLETION_SMART_TYPE);
105 hideOption(myCbOnClassNameCompletion, OptionId.COMPLETION_CLASS_NAME);
107 reset();
110 private static void hideOption(JComponent component, OptionId id) {
111 component.setVisible(OptionsApplicabilityFilter.isApplicable(id));
117 public void reset() {
118 CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance();
120 String value = "";
121 switch(codeInsightSettings.COMPLETION_CASE_SENSITIVE){
122 case CodeInsightSettings.ALL:
123 value = CASE_SENSITIVE_ALL;
124 break;
126 case CodeInsightSettings.NONE:
127 value = CASE_SENSITIVE_NONE;
128 break;
130 default:
131 value = CASE_SENSITIVE_FIRST_LETTER;
132 break;
134 myCaseSensitiveCombo.setSelectedItem(value);
136 myCbOnCodeCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION);
137 myCbOnSmartTypeCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION);
138 myCbOnClassNameCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_CLASS_NAME_COMPLETION);
139 myCbAutocompleteCommonPrefix.setSelected(codeInsightSettings.AUTOCOMPLETE_COMMON_PREFIX);
140 myCbShowStaticAfterInstance.setSelected(codeInsightSettings.SHOW_STATIC_AFTER_INSTANCE);
142 myCbAutocompletion.setSelected(codeInsightSettings.AUTO_POPUP_MEMBER_LOOKUP);
143 myAutocompletionDelayField.setEnabled(codeInsightSettings.AUTO_POPUP_MEMBER_LOOKUP);
144 myAutocompletionDelayField.setText(String.valueOf(codeInsightSettings.MEMBER_LOOKUP_DELAY));
146 myCbXmlAutocompletion.setSelected(codeInsightSettings.AUTO_POPUP_XML_LOOKUP);
147 myXmlAutocompletionDelayField.setEnabled(codeInsightSettings.AUTO_POPUP_XML_LOOKUP);
148 myXmlAutocompletionDelayField.setText(String.valueOf(codeInsightSettings.XML_LOOKUP_DELAY));
150 myCbJavadocAutocompletion.setSelected(codeInsightSettings.AUTO_POPUP_JAVADOC_LOOKUP);
151 myFldJavadocAutocompletionDelayField.setEnabled(codeInsightSettings.AUTO_POPUP_JAVADOC_LOOKUP);
152 myFldJavadocAutocompletionDelayField.setText(String.valueOf(codeInsightSettings.JAVADOC_LOOKUP_DELAY));
154 myCbAutopopupJavaDoc.setSelected(codeInsightSettings.AUTO_POPUP_JAVADOC_INFO);
155 myAutopopupJavaDocField.setEnabled(codeInsightSettings.AUTO_POPUP_JAVADOC_INFO);
156 myAutopopupJavaDocField.setText(String.valueOf(codeInsightSettings.JAVADOC_INFO_DELAY));
158 myCbParameterInfoPopup.setSelected(codeInsightSettings.AUTO_POPUP_PARAMETER_INFO);
159 myParameterInfoDelayField.setEnabled(codeInsightSettings.AUTO_POPUP_PARAMETER_INFO);
160 myParameterInfoDelayField.setText(String.valueOf(codeInsightSettings.PARAMETER_INFO_DELAY));
161 myCbShowFullParameterSignatures.setSelected(codeInsightSettings.SHOW_FULL_SIGNATURES_IN_PARAMETER_INFO);
163 myCbAutocompletion.setSelected(codeInsightSettings.AUTO_POPUP_MEMBER_LOOKUP);
166 public void apply() {
168 CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance();
170 codeInsightSettings.COMPLETION_CASE_SENSITIVE = getCaseSensitiveValue();
172 codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION = myCbOnCodeCompletion.isSelected();
173 codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION = myCbOnSmartTypeCompletion.isSelected();
174 codeInsightSettings.AUTOCOMPLETE_ON_CLASS_NAME_COMPLETION = myCbOnClassNameCompletion.isSelected();
175 codeInsightSettings.AUTOCOMPLETE_COMMON_PREFIX = myCbAutocompleteCommonPrefix.isSelected();
176 codeInsightSettings.SHOW_STATIC_AFTER_INSTANCE = myCbShowStaticAfterInstance.isSelected();
177 codeInsightSettings.SHOW_FULL_SIGNATURES_IN_PARAMETER_INFO = myCbShowFullParameterSignatures.isSelected();
179 codeInsightSettings.AUTO_POPUP_PARAMETER_INFO = myCbParameterInfoPopup.isSelected();
180 codeInsightSettings.AUTO_POPUP_MEMBER_LOOKUP = myCbAutocompletion.isSelected();
181 codeInsightSettings.AUTO_POPUP_XML_LOOKUP = myCbXmlAutocompletion.isSelected();
182 codeInsightSettings.AUTO_POPUP_JAVADOC_LOOKUP = myCbJavadocAutocompletion.isSelected();
183 codeInsightSettings.AUTO_POPUP_JAVADOC_INFO = myCbAutopopupJavaDoc.isSelected();
185 codeInsightSettings.MEMBER_LOOKUP_DELAY = getIntegerValue(myAutocompletionDelayField.getText(), 0);
186 codeInsightSettings.XML_LOOKUP_DELAY = getIntegerValue(myXmlAutocompletionDelayField.getText(), 0);
187 codeInsightSettings.JAVADOC_LOOKUP_DELAY = getIntegerValue(myFldJavadocAutocompletionDelayField.getText(), 0);
188 codeInsightSettings.PARAMETER_INFO_DELAY = getIntegerValue(myParameterInfoDelayField.getText(), 0);
189 codeInsightSettings.JAVADOC_INFO_DELAY = getIntegerValue(myAutopopupJavaDocField.getText(), 0);
191 final Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(myPanel));
192 if (project != null){
193 DaemonCodeAnalyzer.getInstance(project).settingsChanged();
197 public boolean isModified() {
198 CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance();
199 boolean isModified = false;
201 isModified |= (getCaseSensitiveValue() != codeInsightSettings.COMPLETION_CASE_SENSITIVE);
203 isModified |= isModified(myCbOnCodeCompletion, codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION);
204 isModified |= isModified(myCbOnSmartTypeCompletion, codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION);
205 isModified |= isModified(myCbOnClassNameCompletion, codeInsightSettings.AUTOCOMPLETE_ON_CLASS_NAME_COMPLETION);
206 isModified |= isModified(myCbAutocompleteCommonPrefix, codeInsightSettings.AUTOCOMPLETE_COMMON_PREFIX);
207 isModified |= isModified(myCbShowStaticAfterInstance, codeInsightSettings.SHOW_STATIC_AFTER_INSTANCE);
208 isModified |= isModified(myCbShowFullParameterSignatures, codeInsightSettings.SHOW_FULL_SIGNATURES_IN_PARAMETER_INFO);
209 isModified |= isModified(myCbParameterInfoPopup, codeInsightSettings.AUTO_POPUP_PARAMETER_INFO);
210 isModified |= isModified(myCbAutocompletion, codeInsightSettings.AUTO_POPUP_MEMBER_LOOKUP);
211 isModified |= isModified(myCbXmlAutocompletion, codeInsightSettings.AUTO_POPUP_XML_LOOKUP);
212 isModified |= isModified(myCbJavadocAutocompletion, codeInsightSettings.AUTO_POPUP_JAVADOC_LOOKUP);
214 isModified |= isModified(myCbAutopopupJavaDoc, codeInsightSettings.AUTO_POPUP_JAVADOC_INFO);
215 isModified |= isModified(myAutocompletionDelayField, codeInsightSettings.MEMBER_LOOKUP_DELAY, 0);
216 isModified |= isModified(myXmlAutocompletionDelayField, codeInsightSettings.XML_LOOKUP_DELAY, 0);
217 isModified |= isModified(myFldJavadocAutocompletionDelayField, codeInsightSettings.JAVADOC_LOOKUP_DELAY, 0);
218 isModified |= isModified(myParameterInfoDelayField, codeInsightSettings.PARAMETER_INFO_DELAY, 0);
219 isModified |= isModified(myAutopopupJavaDocField, codeInsightSettings.JAVADOC_INFO_DELAY, 0);
221 return isModified;
224 private static boolean isModified(JCheckBox checkBox, boolean value) {
225 return checkBox.isSelected() != value;
228 private static boolean isModified(JTextField textField, int value, int defaultValue) {
229 return getIntegerValue(textField.getText(), defaultValue) != value;
232 private static int getIntegerValue(String s, int defaultValue) {
233 int value = defaultValue;
234 try {
235 value = Integer.parseInt(s);
236 if(value < 0) {
237 return defaultValue;
240 catch (NumberFormatException e) {
242 return value;
245 private int getCaseSensitiveValue() {
246 Object value = myCaseSensitiveCombo.getSelectedItem();
247 if (CASE_SENSITIVE_ALL.equals(value)){
248 return CodeInsightSettings.ALL;
250 else if (CASE_SENSITIVE_NONE.equals(value)){
251 return CodeInsightSettings.NONE;
253 else {
254 return CodeInsightSettings.FIRST_LETTER;