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
;
27 import java
.awt
.event
.ActionEvent
;
28 import java
.awt
.event
.ActionListener
;
30 public class CodeCompletionPanel
{
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());
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
);
110 private static void hideOption(JComponent component
, OptionId id
) {
111 component
.setVisible(OptionsApplicabilityFilter
.isApplicable(id
));
117 public void reset() {
118 CodeInsightSettings codeInsightSettings
= CodeInsightSettings
.getInstance();
121 switch(codeInsightSettings
.COMPLETION_CASE_SENSITIVE
){
122 case CodeInsightSettings
.ALL
:
123 value
= CASE_SENSITIVE_ALL
;
126 case CodeInsightSettings
.NONE
:
127 value
= CASE_SENSITIVE_NONE
;
131 value
= CASE_SENSITIVE_FIRST_LETTER
;
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);
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
;
235 value
= Integer
.parseInt(s
);
240 catch (NumberFormatException e
) {
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
;
254 return CodeInsightSettings
.FIRST_LETTER
;