com.intellij.ide.fileTemplates.ui.SelectTemplateDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.intellij.ide.fileTemplates.ui.SelectTemplateDialog.java

Source

/*
 * Copyright 2000-2012 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.fileTemplates.ui;

import com.intellij.ide.IdeBundle;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.psi.PsiDirectory;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*
 * @author: MYakovlev
 * Date: Aug 22, 2002
 * Time: 1:31:43 PM
 */
public class SelectTemplateDialog extends DialogWrapper {
    private JComboBox myCbxTemplates;
    private FileTemplate mySelectedTemplate;
    private final Project myProject;
    private final PsiDirectory myDirectory;

    public SelectTemplateDialog(Project project, PsiDirectory directory) {
        super(project, true);
        myDirectory = directory;
        myProject = project;
        setTitle(IdeBundle.message("title.select.template"));
        init();
    }

    @Override
    protected JComponent createCenterPanel() {
        loadCombo();

        JButton editTemplatesButton = new FixedSizeButton(myCbxTemplates);

        JPanel centerPanel = new JPanel(new GridBagLayout());
        JLabel selectTemplateLabel = new JLabel(IdeBundle.message("label.name"));

        centerPanel.add(selectTemplateLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
                GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
        centerPanel.add(myCbxTemplates, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
                GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 50, 0));
        centerPanel.add(editTemplatesButton, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
                GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));

        editTemplatesButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                onEditTemplates();
            }
        });

        return centerPanel;
    }

    private void loadCombo() {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        FileTemplate[] allTemplates = FileTemplateManager.getInstance().getAllTemplates();
        PsiDirectory[] dirs = { myDirectory };
        for (FileTemplate template : allTemplates) {
            if (FileTemplateUtil.canCreateFromTemplate(dirs, template)) {
                model.addElement(template);
            }
        }
        if (myCbxTemplates == null) {
            myCbxTemplates = new JComboBox(model);
            myCbxTemplates.setRenderer(new ListCellRendererWrapper<FileTemplate>() {
                @Override
                public void customize(JList list, FileTemplate fileTemplate, int index, boolean selected,
                        boolean hasFocus) {
                    if (fileTemplate != null) {
                        setIcon(FileTemplateUtil.getIcon(fileTemplate));
                        setText(fileTemplate.getName());
                    }
                }
            });
        } else {
            Object selected = myCbxTemplates.getSelectedItem();
            myCbxTemplates.setModel(model);
            if (selected != null) {
                myCbxTemplates.setSelectedItem(selected);
            }
        }
    }

    public FileTemplate getSelectedTemplate() {
        return mySelectedTemplate;
    }

    @Override
    protected void doOKAction() {
        mySelectedTemplate = (FileTemplate) myCbxTemplates.getSelectedItem();
        super.doOKAction();
    }

    @Override
    public void doCancelAction() {
        mySelectedTemplate = null;
        super.doCancelAction();
    }

    @Override
    public JComponent getPreferredFocusedComponent() {
        return myCbxTemplates;
    }

    private void onEditTemplates() {
        new ConfigureTemplatesDialog(myProject).show();
        loadCombo();
    }

}