| /* |
| * Copyright 2000-2009 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.intellij.ide.todo.configurable; |
| |
| import com.intellij.application.options.colors.ColorAndFontDescription; |
| import com.intellij.application.options.colors.ColorAndFontDescriptionPanel; |
| import com.intellij.application.options.colors.TextAttributesDescription; |
| import com.intellij.icons.AllIcons; |
| import com.intellij.ide.IdeBundle; |
| import com.intellij.openapi.editor.colors.EditorColorsManager; |
| import com.intellij.openapi.editor.colors.EditorColorsScheme; |
| import com.intellij.openapi.editor.markup.TextAttributes; |
| import com.intellij.openapi.ui.DialogWrapper; |
| import com.intellij.psi.search.TodoAttributes; |
| import com.intellij.psi.search.TodoAttributesUtil; |
| import com.intellij.psi.search.TodoPattern; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| |
| /** |
| * @author Vladimir Kondratyev |
| */ |
| class PatternDialog extends DialogWrapper{ |
| private final TodoPattern myPattern; |
| |
| private final JComboBox myIconComboBox; |
| private final JCheckBox myCaseSensitiveCheckBox; |
| private final JTextField myPatternStringField; |
| private final ColorAndFontDescriptionPanel myColorAndFontDescriptionPanel; |
| private final ColorAndFontDescription myColorAndFontDescription; |
| private final JCheckBox myUsedDefaultColorsCeckBox; |
| |
| public PatternDialog(Component parent, TodoPattern pattern){ |
| super(parent, true); |
| |
| final TodoAttributes attrs = pattern.getAttributes(); |
| myPattern=pattern; |
| myIconComboBox=new JComboBox( |
| new Icon[]{AllIcons.General.TodoDefault, AllIcons.General.TodoQuestion, AllIcons.General.TodoImportant} |
| ); |
| myIconComboBox.setSelectedItem(attrs.getIcon()); |
| myIconComboBox.setRenderer(new TodoTypeListCellRenderer()); |
| myCaseSensitiveCheckBox=new JCheckBox(IdeBundle.message("checkbox.case.sensitive"),pattern.isCaseSensitive()); |
| myPatternStringField=new JTextField(pattern.getPatternString()); |
| |
| |
| // use default colors check box |
| myUsedDefaultColorsCeckBox = new JCheckBox(IdeBundle.message("checkbox.todo.use.default.colors")); |
| myUsedDefaultColorsCeckBox.setSelected(!attrs.shouldUseCustomTodoColor()); |
| |
| myColorAndFontDescriptionPanel = new ColorAndFontDescriptionPanel(); |
| |
| TextAttributes attributes = myPattern.getAttributes().getCustomizedTextAttributes(); |
| |
| myColorAndFontDescription = new TextAttributesDescription(null, null, attributes, null, EditorColorsManager.getInstance().getGlobalScheme(), |
| null, null) { |
| @Override |
| public void apply(EditorColorsScheme scheme) { |
| |
| } |
| |
| @Override |
| public boolean isErrorStripeEnabled() { |
| return true; |
| } |
| }; |
| |
| myColorAndFontDescriptionPanel.reset(myColorAndFontDescription); |
| |
| updateCustomColorsPanel(); |
| myUsedDefaultColorsCeckBox.addActionListener(new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| updateCustomColorsPanel(); |
| } |
| }); |
| |
| init(); |
| } |
| |
| private void updateCustomColorsPanel() { |
| final boolean useCustomColors = useCustomTodoColor(); |
| |
| if (useCustomColors) { |
| // restore controls |
| myColorAndFontDescriptionPanel.reset(myColorAndFontDescription); |
| } else { |
| // disable controls |
| myColorAndFontDescriptionPanel.resetDefault(); |
| } |
| } |
| |
| @Override |
| public JComponent getPreferredFocusedComponent(){ |
| return myPatternStringField; |
| } |
| |
| @Override |
| protected void doOKAction(){ |
| myPattern.setPatternString(myPatternStringField.getText().trim()); |
| myPattern.setCaseSensitive(myCaseSensitiveCheckBox.isSelected()); |
| |
| final TodoAttributes attrs = myPattern.getAttributes(); |
| attrs.setIcon((Icon)myIconComboBox.getSelectedItem()); |
| attrs.setUseCustomTodoColor(useCustomTodoColor(), TodoAttributesUtil.getDefaultColorSchemeTextAttributes()); |
| |
| if (useCustomTodoColor()) { |
| myColorAndFontDescriptionPanel.apply(myColorAndFontDescription, null); |
| } |
| super.doOKAction(); |
| } |
| |
| |
| private boolean useCustomTodoColor() { |
| return !myUsedDefaultColorsCeckBox.isSelected(); |
| } |
| |
| @Override |
| protected JComponent createCenterPanel(){ |
| JPanel panel=new JPanel(new GridBagLayout()); |
| |
| GridBagConstraints gb = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHWEST,GridBagConstraints.HORIZONTAL,new Insets(0,0,5,10),0,0); |
| |
| JLabel patternLabel=new JLabel(IdeBundle.message("label.todo.pattern")); |
| panel.add(patternLabel, gb); |
| Dimension oldPreferredSize=myPatternStringField.getPreferredSize(); |
| myPatternStringField.setPreferredSize(new Dimension(300,oldPreferredSize.height)); |
| gb.gridx = 1; |
| gb.gridwidth = GridBagConstraints.REMAINDER; |
| gb.weightx = 1; |
| panel.add(myPatternStringField,gb); |
| |
| JLabel iconLabel=new JLabel(IdeBundle.message("label.todo.icon")); |
| gb.gridy++; |
| gb.gridx = 0; |
| gb.gridwidth = 1; |
| gb.weightx = 0; |
| panel.add(iconLabel, gb); |
| |
| gb.gridx = 1; |
| gb.fill = GridBagConstraints.NONE; |
| gb.gridwidth = GridBagConstraints.REMAINDER; |
| gb.weightx = 0; |
| panel.add(myIconComboBox, gb); |
| |
| gb.gridy++; |
| gb.gridx = 0; |
| gb.fill = GridBagConstraints.HORIZONTAL; |
| gb.gridwidth = GridBagConstraints.REMAINDER; |
| gb.weightx = 1; |
| panel.add(myCaseSensitiveCheckBox, gb); |
| |
| gb.gridy++; |
| gb.gridx = 0; |
| gb.fill = GridBagConstraints.HORIZONTAL; |
| gb.gridwidth = GridBagConstraints.REMAINDER; |
| gb.weightx = 1; |
| panel.add(myUsedDefaultColorsCeckBox, gb); |
| |
| gb.gridy++; |
| gb.gridx = 0; |
| gb.gridwidth = GridBagConstraints.REMAINDER; |
| gb.weightx = 1; |
| panel.add(myColorAndFontDescriptionPanel, gb); |
| return panel; |
| } |
| } |