com.intellij.ide.todo.configurable.PatternDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.intellij.ide.todo.configurable.PatternDialog.java

Source

/*
 * 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;
    }
}